@blokkli/editor 1.0.0

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/dist/module.cjs +5 -0
  4. package/dist/module.d.mts +129 -0
  5. package/dist/module.d.ts +129 -0
  6. package/dist/module.json +12 -0
  7. package/dist/module.mjs +5430 -0
  8. package/dist/runtime/adapter/drupal/graphql/base.graphql +906 -0
  9. package/dist/runtime/adapter/drupal/graphql/comments.graphql +56 -0
  10. package/dist/runtime/adapter/drupal/graphql/fragments.graphql +25 -0
  11. package/dist/runtime/adapter/drupal/graphql/library.graphql +66 -0
  12. package/dist/runtime/adapter/drupal/graphql/search.graphql +19 -0
  13. package/dist/runtime/adapter/drupal/graphql/transform.graphql +27 -0
  14. package/dist/runtime/adapter/drupal/graphqlMiddleware.d.ts +2 -0
  15. package/dist/runtime/adapter/drupal/graphqlMiddleware.js +643 -0
  16. package/dist/runtime/adapter/index.d.ts +352 -0
  17. package/dist/runtime/adapter/index.js +3 -0
  18. package/dist/runtime/blokkliPlugins/AddAction/index.vue +87 -0
  19. package/dist/runtime/blokkliPlugins/ContextMenu/Menu/index.vue +95 -0
  20. package/dist/runtime/blokkliPlugins/ContextMenu/index.vue +49 -0
  21. package/dist/runtime/blokkliPlugins/DebugOverlay/index.vue +34 -0
  22. package/dist/runtime/blokkliPlugins/DroppableEdit/index.vue +73 -0
  23. package/dist/runtime/blokkliPlugins/ItemAction/index.vue +132 -0
  24. package/dist/runtime/blokkliPlugins/ItemDropdown/index.vue +42 -0
  25. package/dist/runtime/blokkliPlugins/MenuButton/index.vue +74 -0
  26. package/dist/runtime/blokkliPlugins/Sidebar/Detached/index.vue +334 -0
  27. package/dist/runtime/blokkliPlugins/Sidebar/index.vue +286 -0
  28. package/dist/runtime/blokkliPlugins/ToolbarButton/index.vue +104 -0
  29. package/dist/runtime/blokkliPlugins/TourItem/index.vue +45 -0
  30. package/dist/runtime/blokkliPlugins/ViewOption/index.vue +106 -0
  31. package/dist/runtime/blokkliPlugins/index.d.ts +12 -0
  32. package/dist/runtime/blokkliPlugins/index.js +24 -0
  33. package/dist/runtime/components/Blocks/Fragment/icon.svg +1 -0
  34. package/dist/runtime/components/Blocks/Fragment/index.vue +24 -0
  35. package/dist/runtime/components/Blocks/FromLibrary/index.vue +58 -0
  36. package/dist/runtime/components/BlokkliEditable.vue +73 -0
  37. package/dist/runtime/components/BlokkliField.vue +157 -0
  38. package/dist/runtime/components/BlokkliItem.vue +79 -0
  39. package/dist/runtime/components/BlokkliProvider.vue +160 -0
  40. package/dist/runtime/components/Edit/Actions/index.vue +263 -0
  41. package/dist/runtime/components/Edit/AddListItem/index.vue +116 -0
  42. package/dist/runtime/components/Edit/AnimationCanvas/index.vue +122 -0
  43. package/dist/runtime/components/Edit/AppMenu/index.vue +60 -0
  44. package/dist/runtime/components/Edit/BlokkliErrorBoundary.vue +64 -0
  45. package/dist/runtime/components/Edit/Dialog/index.vue +163 -0
  46. package/dist/runtime/components/Edit/DragInteractions/index.vue +439 -0
  47. package/dist/runtime/components/Edit/DraggableList.vue +110 -0
  48. package/dist/runtime/components/Edit/EditIndicator.vue +82 -0
  49. package/dist/runtime/components/Edit/EditProvider.vue +213 -0
  50. package/dist/runtime/components/Edit/Features/AddList/docs.md +4 -0
  51. package/dist/runtime/components/Edit/Features/AddList/index.vue +205 -0
  52. package/dist/runtime/components/Edit/Features/Artboard/Manager/Artboard.d.ts +204 -0
  53. package/dist/runtime/components/Edit/Features/Artboard/Manager/Artboard.js +748 -0
  54. package/dist/runtime/components/Edit/Features/Artboard/Manager/Scrollbar/index.vue +176 -0
  55. package/dist/runtime/components/Edit/Features/Artboard/Manager/index.vue +317 -0
  56. package/dist/runtime/components/Edit/Features/Artboard/index.vue +45 -0
  57. package/dist/runtime/components/Edit/Features/Assistant/Overlay/ResultMarkup/index.vue +17 -0
  58. package/dist/runtime/components/Edit/Features/Assistant/Overlay/index.vue +147 -0
  59. package/dist/runtime/components/Edit/Features/Assistant/docs.md +7 -0
  60. package/dist/runtime/components/Edit/Features/Assistant/index.vue +68 -0
  61. package/dist/runtime/components/Edit/Features/BlockAddList/docs.md +15 -0
  62. package/dist/runtime/components/Edit/Features/BlockAddList/index.vue +440 -0
  63. package/dist/runtime/components/Edit/Features/Clipboard/List/Item/File.vue +68 -0
  64. package/dist/runtime/components/Edit/Features/Clipboard/List/Item/Video.vue +56 -0
  65. package/dist/runtime/components/Edit/Features/Clipboard/List/index.vue +69 -0
  66. package/dist/runtime/components/Edit/Features/Clipboard/docs.md +16 -0
  67. package/dist/runtime/components/Edit/Features/Clipboard/index.vue +485 -0
  68. package/dist/runtime/components/Edit/Features/CommandPalette/Palette/Group/index.vue +61 -0
  69. package/dist/runtime/components/Edit/Features/CommandPalette/Palette/index.vue +280 -0
  70. package/dist/runtime/components/Edit/Features/CommandPalette/index.vue +51 -0
  71. package/dist/runtime/components/Edit/Features/Comments/AddForm/index.vue +32 -0
  72. package/dist/runtime/components/Edit/Features/Comments/Comment/index.vue +53 -0
  73. package/dist/runtime/components/Edit/Features/Comments/Overlay/Item/index.vue +100 -0
  74. package/dist/runtime/components/Edit/Features/Comments/Overlay/index.vue +133 -0
  75. package/dist/runtime/components/Edit/Features/Comments/docs.md +13 -0
  76. package/dist/runtime/components/Edit/Features/Comments/index.vue +110 -0
  77. package/dist/runtime/components/Edit/Features/Conversions/index.vue +98 -0
  78. package/dist/runtime/components/Edit/Features/Debug/Rects/index.vue +55 -0
  79. package/dist/runtime/components/Edit/Features/Debug/Viewport/index.vue +93 -0
  80. package/dist/runtime/components/Edit/Features/Debug/docs.md +3 -0
  81. package/dist/runtime/components/Edit/Features/Debug/index.vue +178 -0
  82. package/dist/runtime/components/Edit/Features/Delete/index.vue +43 -0
  83. package/dist/runtime/components/Edit/Features/DraggingOverlay/DragItems/index.vue +420 -0
  84. package/dist/runtime/components/Edit/Features/DraggingOverlay/DropTargets/fragment.glsl +58 -0
  85. package/dist/runtime/components/Edit/Features/DraggingOverlay/DropTargets/index.vue +808 -0
  86. package/dist/runtime/components/Edit/Features/DraggingOverlay/DropTargets/vertex.glsl +57 -0
  87. package/dist/runtime/components/Edit/Features/DraggingOverlay/index.vue +410 -0
  88. package/dist/runtime/components/Edit/Features/Duplicate/index.vue +109 -0
  89. package/dist/runtime/components/Edit/Features/Edit/index.vue +63 -0
  90. package/dist/runtime/components/Edit/Features/EditForm/Frame/index.vue +73 -0
  91. package/dist/runtime/components/Edit/Features/EditForm/index.vue +217 -0
  92. package/dist/runtime/components/Edit/Features/EditableField/Overlay/Contenteditable/index.vue +42 -0
  93. package/dist/runtime/components/Edit/Features/EditableField/Overlay/Frame/index.vue +68 -0
  94. package/dist/runtime/components/Edit/Features/EditableField/Overlay/Plaintext/index.vue +81 -0
  95. package/dist/runtime/components/Edit/Features/EditableField/Overlay/index.vue +357 -0
  96. package/dist/runtime/components/Edit/Features/EditableField/index.vue +192 -0
  97. package/dist/runtime/components/Edit/Features/EditableMask/index.vue +64 -0
  98. package/dist/runtime/components/Edit/Features/EntityTitle/index.vue +108 -0
  99. package/dist/runtime/components/Edit/Features/Exit/index.vue +38 -0
  100. package/dist/runtime/components/Edit/Features/FieldAreas/Overlay/index.vue +33 -0
  101. package/dist/runtime/components/Edit/Features/FieldAreas/index.vue +43 -0
  102. package/dist/runtime/components/Edit/Features/Fragments/Dialog/Item/index.vue +68 -0
  103. package/dist/runtime/components/Edit/Features/Fragments/Dialog/index.vue +137 -0
  104. package/dist/runtime/components/Edit/Features/Fragments/docs.md +101 -0
  105. package/dist/runtime/components/Edit/Features/Fragments/index.vue +86 -0
  106. package/dist/runtime/components/Edit/Features/Grid/index.vue +40 -0
  107. package/dist/runtime/components/Edit/Features/Help/Shortcuts/index.vue +71 -0
  108. package/dist/runtime/components/Edit/Features/Help/index.vue +53 -0
  109. package/dist/runtime/components/Edit/Features/History/index.vue +263 -0
  110. package/dist/runtime/components/Edit/Features/ImportExisting/Dialog/index.vue +140 -0
  111. package/dist/runtime/components/Edit/Features/ImportExisting/index.vue +92 -0
  112. package/dist/runtime/components/Edit/Features/Library/EditReusable/index.vue +0 -0
  113. package/dist/runtime/components/Edit/Features/Library/LibraryDialog/Item/index.vue +73 -0
  114. package/dist/runtime/components/Edit/Features/Library/LibraryDialog/index.vue +184 -0
  115. package/dist/runtime/components/Edit/Features/Library/ReusableDialog/index.vue +88 -0
  116. package/dist/runtime/components/Edit/Features/Library/docs.md +127 -0
  117. package/dist/runtime/components/Edit/Features/Library/index.vue +184 -0
  118. package/dist/runtime/components/Edit/Features/MediaLibrary/Library/index.vue +184 -0
  119. package/dist/runtime/components/Edit/Features/MediaLibrary/index.vue +182 -0
  120. package/dist/runtime/components/Edit/Features/MediaLibrary/types.d.ts +57 -0
  121. package/dist/runtime/components/Edit/Features/MediaLibrary/types.js +0 -0
  122. package/dist/runtime/components/Edit/Features/MultiSelect/Overlay/fragment.glsl +90 -0
  123. package/dist/runtime/components/Edit/Features/MultiSelect/Overlay/index.vue +289 -0
  124. package/dist/runtime/components/Edit/Features/MultiSelect/Overlay/vertex.glsl +182 -0
  125. package/dist/runtime/components/Edit/Features/MultiSelect/index.vue +76 -0
  126. package/dist/runtime/components/Edit/Features/Options/Form/Checkbox/index.vue +52 -0
  127. package/dist/runtime/components/Edit/Features/Options/Form/Checkboxes/index.vue +129 -0
  128. package/dist/runtime/components/Edit/Features/Options/Form/Color/index.vue +38 -0
  129. package/dist/runtime/components/Edit/Features/Options/Form/Group.vue +25 -0
  130. package/dist/runtime/components/Edit/Features/Options/Form/Item.vue +155 -0
  131. package/dist/runtime/components/Edit/Features/Options/Form/Number/index.vue +74 -0
  132. package/dist/runtime/components/Edit/Features/Options/Form/Radios/index.vue +135 -0
  133. package/dist/runtime/components/Edit/Features/Options/Form/Range/index.vue +47 -0
  134. package/dist/runtime/components/Edit/Features/Options/Form/Text/index.vue +38 -0
  135. package/dist/runtime/components/Edit/Features/Options/Form/index.vue +342 -0
  136. package/dist/runtime/components/Edit/Features/Options/index.vue +88 -0
  137. package/dist/runtime/components/Edit/Features/Ownership/index.vue +57 -0
  138. package/dist/runtime/components/Edit/Features/Preview/index.vue +45 -0
  139. package/dist/runtime/components/Edit/Features/PreviewGrant/QrCode/index.vue +30 -0
  140. package/dist/runtime/components/Edit/Features/PreviewGrant/index.vue +73 -0
  141. package/dist/runtime/components/Edit/Features/Publish/index.vue +50 -0
  142. package/dist/runtime/components/Edit/Features/ResponsivePreview/Frame/index.vue +81 -0
  143. package/dist/runtime/components/Edit/Features/ResponsivePreview/index.vue +217 -0
  144. package/dist/runtime/components/Edit/Features/Revert/index.vue +68 -0
  145. package/dist/runtime/components/Edit/Features/Search/Overlay/Results/Content/index.vue +165 -0
  146. package/dist/runtime/components/Edit/Features/Search/Overlay/Results/Page/index.vue +211 -0
  147. package/dist/runtime/components/Edit/Features/Search/Overlay/index.vue +214 -0
  148. package/dist/runtime/components/Edit/Features/Search/index.vue +79 -0
  149. package/dist/runtime/components/Edit/Features/Selection/Overlay/fragment.glsl +99 -0
  150. package/dist/runtime/components/Edit/Features/Selection/Overlay/index.vue +144 -0
  151. package/dist/runtime/components/Edit/Features/Selection/Overlay/vertex.glsl +85 -0
  152. package/dist/runtime/components/Edit/Features/Selection/OverlayFallback/index.vue +50 -0
  153. package/dist/runtime/components/Edit/Features/Selection/index.vue +295 -0
  154. package/dist/runtime/components/Edit/Features/Settings/Dialog/FeatureSetting/index.vue +141 -0
  155. package/dist/runtime/components/Edit/Features/Settings/Dialog/index.vue +138 -0
  156. package/dist/runtime/components/Edit/Features/Settings/index.vue +92 -0
  157. package/dist/runtime/components/Edit/Features/Structure/List/Field/index.vue +181 -0
  158. package/dist/runtime/components/Edit/Features/Structure/List/Item/index.vue +149 -0
  159. package/dist/runtime/components/Edit/Features/Structure/List/index.vue +55 -0
  160. package/dist/runtime/components/Edit/Features/Structure/index.vue +83 -0
  161. package/dist/runtime/components/Edit/Features/Theme/Color/index.vue +81 -0
  162. package/dist/runtime/components/Edit/Features/Theme/GeneratedCode/index.vue +24 -0
  163. package/dist/runtime/components/Edit/Features/Theme/index.vue +122 -0
  164. package/dist/runtime/components/Edit/Features/TouchActionBar/Bar/index.vue +26 -0
  165. package/dist/runtime/components/Edit/Features/TouchActionBar/index.vue +42 -0
  166. package/dist/runtime/components/Edit/Features/Tour/Overlay/index.vue +270 -0
  167. package/dist/runtime/components/Edit/Features/Tour/Popup/index.vue +36 -0
  168. package/dist/runtime/components/Edit/Features/Tour/docs.md +0 -0
  169. package/dist/runtime/components/Edit/Features/Tour/index.vue +46 -0
  170. package/dist/runtime/components/Edit/Features/Transform/docs.md +67 -0
  171. package/dist/runtime/components/Edit/Features/Transform/index.vue +177 -0
  172. package/dist/runtime/components/Edit/Features/Translations/Banner/index.vue +50 -0
  173. package/dist/runtime/components/Edit/Features/Translations/index.vue +193 -0
  174. package/dist/runtime/components/Edit/Features/Validations/Overlay/Item.vue +50 -0
  175. package/dist/runtime/components/Edit/Features/Validations/Overlay/index.vue +51 -0
  176. package/dist/runtime/components/Edit/Features/Validations/SidebarItem/index.vue +50 -0
  177. package/dist/runtime/components/Edit/Features/Validations/index.vue +70 -0
  178. package/dist/runtime/components/Edit/Features/index.vue +67 -0
  179. package/dist/runtime/components/Edit/FormOverlay/Header/index.vue +39 -0
  180. package/dist/runtime/components/Edit/FormOverlay/index.vue +52 -0
  181. package/dist/runtime/components/Edit/Highlight/index.vue +94 -0
  182. package/dist/runtime/components/Edit/Icon/index.vue +21 -0
  183. package/dist/runtime/components/Edit/ItemIcon/index.vue +27 -0
  184. package/dist/runtime/components/Edit/Loading/index.vue +19 -0
  185. package/dist/runtime/components/Edit/Messages/Item/index.vue +107 -0
  186. package/dist/runtime/components/Edit/Messages/index.vue +37 -0
  187. package/dist/runtime/components/Edit/PreviewProvider.vue +223 -0
  188. package/dist/runtime/components/Edit/RelativeTime/index.vue +37 -0
  189. package/dist/runtime/components/Edit/Resizable/index.vue +90 -0
  190. package/dist/runtime/components/Edit/ScaleToFit/index.vue +57 -0
  191. package/dist/runtime/components/Edit/ShortcutIndicator/index.vue +90 -0
  192. package/dist/runtime/components/Edit/Sortli/index.vue +92 -0
  193. package/dist/runtime/components/Edit/SystemRequirements/index.vue +91 -0
  194. package/dist/runtime/components/Edit/Toolbar/index.vue +106 -0
  195. package/dist/runtime/components/Edit/ViewportBlockingRect/index.vue +75 -0
  196. package/dist/runtime/components/Edit/index.d.ts +14 -0
  197. package/dist/runtime/components/Edit/index.js +28 -0
  198. package/dist/runtime/composables/defineBlokkli.d.ts +6 -0
  199. package/dist/runtime/composables/defineBlokkli.js +108 -0
  200. package/dist/runtime/composables/defineBlokkliFeature.d.ts +28 -0
  201. package/dist/runtime/composables/defineBlokkliFeature.js +62 -0
  202. package/dist/runtime/composables/defineBlokkliFragment.d.ts +3 -0
  203. package/dist/runtime/composables/defineBlokkliFragment.js +54 -0
  204. package/dist/runtime/composables/useBlokkli.d.ts +8 -0
  205. package/dist/runtime/composables/useBlokkli.js +5 -0
  206. package/dist/runtime/constants/index.d.ts +4 -0
  207. package/dist/runtime/constants/index.js +2 -0
  208. package/dist/runtime/css/output.css +1 -0
  209. package/dist/runtime/helpers/Artboard/index.d.ts +16 -0
  210. package/dist/runtime/helpers/Artboard/index.js +20 -0
  211. package/dist/runtime/helpers/DragStyle/index.d.ts +12 -0
  212. package/dist/runtime/helpers/DragStyle/index.js +86 -0
  213. package/dist/runtime/helpers/animationProvider.d.ts +25 -0
  214. package/dist/runtime/helpers/animationProvider.js +116 -0
  215. package/dist/runtime/helpers/broadcastProvider.d.ts +7 -0
  216. package/dist/runtime/helpers/broadcastProvider.js +26 -0
  217. package/dist/runtime/helpers/commandsProvider.d.ts +9 -0
  218. package/dist/runtime/helpers/commandsProvider.js +16 -0
  219. package/dist/runtime/helpers/composables/defineCommands.d.ts +2 -0
  220. package/dist/runtime/helpers/composables/defineCommands.js +10 -0
  221. package/dist/runtime/helpers/composables/defineDropAreas.d.ts +2 -0
  222. package/dist/runtime/helpers/composables/defineDropAreas.js +10 -0
  223. package/dist/runtime/helpers/composables/defineShortcut.d.ts +2 -0
  224. package/dist/runtime/helpers/composables/defineShortcut.js +19 -0
  225. package/dist/runtime/helpers/composables/defineTourItem.d.ts +2 -0
  226. package/dist/runtime/helpers/composables/defineTourItem.js +10 -0
  227. package/dist/runtime/helpers/composables/onBlokkliEvent.d.ts +2 -0
  228. package/dist/runtime/helpers/composables/onBlokkliEvent.js +10 -0
  229. package/dist/runtime/helpers/composables/useAnimationFrame.d.ts +1 -0
  230. package/dist/runtime/helpers/composables/useAnimationFrame.js +14 -0
  231. package/dist/runtime/helpers/composables/useDebugLogger.d.ts +2 -0
  232. package/dist/runtime/helpers/composables/useDebugLogger.js +5 -0
  233. package/dist/runtime/helpers/composables/useDelayedIntersectionObserver.d.ts +5 -0
  234. package/dist/runtime/helpers/composables/useDelayedIntersectionObserver.js +26 -0
  235. package/dist/runtime/helpers/debugProvider.d.ts +23 -0
  236. package/dist/runtime/helpers/debugProvider.js +65 -0
  237. package/dist/runtime/helpers/dom/index.d.ts +5 -0
  238. package/dist/runtime/helpers/dom/index.js +37 -0
  239. package/dist/runtime/helpers/domProvider.d.ts +46 -0
  240. package/dist/runtime/helpers/domProvider.js +446 -0
  241. package/dist/runtime/helpers/dropAreaProvider.d.ts +9 -0
  242. package/dist/runtime/helpers/dropAreaProvider.js +22 -0
  243. package/dist/runtime/helpers/easing.d.ts +3 -0
  244. package/dist/runtime/helpers/easing.js +16 -0
  245. package/dist/runtime/helpers/eventBus.d.ts +3 -0
  246. package/dist/runtime/helpers/eventBus.js +5 -0
  247. package/dist/runtime/helpers/featuresProvider.d.ts +23 -0
  248. package/dist/runtime/helpers/featuresProvider.js +16 -0
  249. package/dist/runtime/helpers/frameEventBus.d.ts +9 -0
  250. package/dist/runtime/helpers/frameEventBus.js +2 -0
  251. package/dist/runtime/helpers/index.d.ts +87 -0
  252. package/dist/runtime/helpers/index.js +467 -0
  253. package/dist/runtime/helpers/keyboardProvider.d.ts +17 -0
  254. package/dist/runtime/helpers/keyboardProvider.js +79 -0
  255. package/dist/runtime/helpers/options.d.ts +2 -0
  256. package/dist/runtime/helpers/options.js +21 -0
  257. package/dist/runtime/helpers/runtimeHelpers/index.d.ts +10 -0
  258. package/dist/runtime/helpers/runtimeHelpers/index.js +35 -0
  259. package/dist/runtime/helpers/selectionProvider.d.ts +62 -0
  260. package/dist/runtime/helpers/selectionProvider.js +149 -0
  261. package/dist/runtime/helpers/stateProvider.d.ts +35 -0
  262. package/dist/runtime/helpers/stateProvider.js +226 -0
  263. package/dist/runtime/helpers/storageProvider.d.ts +15 -0
  264. package/dist/runtime/helpers/storageProvider.js +61 -0
  265. package/dist/runtime/helpers/symbols.d.ts +16 -0
  266. package/dist/runtime/helpers/symbols.js +18 -0
  267. package/dist/runtime/helpers/textProvider.d.ts +4 -0
  268. package/dist/runtime/helpers/textProvider.js +20 -0
  269. package/dist/runtime/helpers/themeProvider.d.ts +27 -0
  270. package/dist/runtime/helpers/themeProvider.js +124 -0
  271. package/dist/runtime/helpers/tourProvider.d.ts +11 -0
  272. package/dist/runtime/helpers/tourProvider.js +19 -0
  273. package/dist/runtime/helpers/transform.d.ts +2 -0
  274. package/dist/runtime/helpers/transform.js +17 -0
  275. package/dist/runtime/helpers/typesProvider.d.ts +36 -0
  276. package/dist/runtime/helpers/typesProvider.js +138 -0
  277. package/dist/runtime/helpers/uiProvider.d.ts +36 -0
  278. package/dist/runtime/helpers/uiProvider.js +278 -0
  279. package/dist/runtime/helpers/webgl/index.d.ts +32 -0
  280. package/dist/runtime/helpers/webgl/index.js +132 -0
  281. package/dist/runtime/icons/alert.svg +6 -0
  282. package/dist/runtime/icons/area.svg +5 -0
  283. package/dist/runtime/icons/arrow-down.svg +1 -0
  284. package/dist/runtime/icons/arrow-left.svg +1 -0
  285. package/dist/runtime/icons/arrow-right.svg +1 -0
  286. package/dist/runtime/icons/arrow-up.svg +1 -0
  287. package/dist/runtime/icons/artboard-disabled.svg +9 -0
  288. package/dist/runtime/icons/artboard-enabled.svg +29 -0
  289. package/dist/runtime/icons/artboard.svg +1 -0
  290. package/dist/runtime/icons/bug.svg +1 -0
  291. package/dist/runtime/icons/button-pointer.svg +1 -0
  292. package/dist/runtime/icons/caret.svg +12 -0
  293. package/dist/runtime/icons/cellphone.svg +1 -0
  294. package/dist/runtime/icons/chat-question.svg +1 -0
  295. package/dist/runtime/icons/check.svg +1 -0
  296. package/dist/runtime/icons/checkbox.svg +5 -0
  297. package/dist/runtime/icons/checks.svg +1 -0
  298. package/dist/runtime/icons/chevron-left.svg +1 -0
  299. package/dist/runtime/icons/chevron-right.svg +1 -0
  300. package/dist/runtime/icons/clipboard.svg +5 -0
  301. package/dist/runtime/icons/close.svg +5 -0
  302. package/dist/runtime/icons/cog.svg +5 -0
  303. package/dist/runtime/icons/command.svg +1 -0
  304. package/dist/runtime/icons/comment.svg +5 -0
  305. package/dist/runtime/icons/comment_add.svg +5 -0
  306. package/dist/runtime/icons/convert.svg +1 -0
  307. package/dist/runtime/icons/cursor-move.svg +1 -0
  308. package/dist/runtime/icons/dead.svg +1 -0
  309. package/dist/runtime/icons/delete.svg +8 -0
  310. package/dist/runtime/icons/detach.svg +7 -0
  311. package/dist/runtime/icons/drag.svg +1 -0
  312. package/dist/runtime/icons/duplicate.svg +12 -0
  313. package/dist/runtime/icons/edit.svg +8 -0
  314. package/dist/runtime/icons/exit.svg +6 -0
  315. package/dist/runtime/icons/expand.svg +1 -0
  316. package/dist/runtime/icons/file.svg +1 -0
  317. package/dist/runtime/icons/form.svg +1 -0
  318. package/dist/runtime/icons/fragment.svg +1 -0
  319. package/dist/runtime/icons/grid.svg +13 -0
  320. package/dist/runtime/icons/group.svg +5 -0
  321. package/dist/runtime/icons/help.svg +1 -0
  322. package/dist/runtime/icons/history.svg +1 -0
  323. package/dist/runtime/icons/image.svg +1 -0
  324. package/dist/runtime/icons/import.svg +5 -0
  325. package/dist/runtime/icons/laptop.svg +1 -0
  326. package/dist/runtime/icons/list-view-grid.svg +1 -0
  327. package/dist/runtime/icons/list-view-horizontal.svg +1 -0
  328. package/dist/runtime/icons/loader.svg +1 -0
  329. package/dist/runtime/icons/logo.svg +5 -0
  330. package/dist/runtime/icons/magnifier.svg +5 -0
  331. package/dist/runtime/icons/menu.svg +1 -0
  332. package/dist/runtime/icons/minus.svg +1 -0
  333. package/dist/runtime/icons/monitor.svg +1 -0
  334. package/dist/runtime/icons/multi-select.svg +1 -0
  335. package/dist/runtime/icons/multimedia.svg +1 -0
  336. package/dist/runtime/icons/opacity.svg +5 -0
  337. package/dist/runtime/icons/open_in_new.svg +3 -0
  338. package/dist/runtime/icons/palette.svg +1 -0
  339. package/dist/runtime/icons/plus-box.svg +1 -0
  340. package/dist/runtime/icons/plus.svg +1 -0
  341. package/dist/runtime/icons/preview.svg +5 -0
  342. package/dist/runtime/icons/publish.svg +12 -0
  343. package/dist/runtime/icons/puzzle.svg +1 -0
  344. package/dist/runtime/icons/qrcode.svg +5 -0
  345. package/dist/runtime/icons/question.svg +5 -0
  346. package/dist/runtime/icons/redo.svg +12 -0
  347. package/dist/runtime/icons/resize.svg +1 -0
  348. package/dist/runtime/icons/reusable.svg +5 -0
  349. package/dist/runtime/icons/revert.svg +5 -0
  350. package/dist/runtime/icons/robot.svg +1 -0
  351. package/dist/runtime/icons/rotate-phone.svg +1 -0
  352. package/dist/runtime/icons/sad.svg +1 -0
  353. package/dist/runtime/icons/save.svg +1 -0
  354. package/dist/runtime/icons/script.svg +1 -0
  355. package/dist/runtime/icons/scrolltotop.svg +6 -0
  356. package/dist/runtime/icons/search.svg +1 -0
  357. package/dist/runtime/icons/selection.svg +5 -0
  358. package/dist/runtime/icons/spinner.svg +15 -0
  359. package/dist/runtime/icons/star.svg +1 -0
  360. package/dist/runtime/icons/swap-horizontal.svg +1 -0
  361. package/dist/runtime/icons/tablet.svg +1 -0
  362. package/dist/runtime/icons/textbox.svg +1 -0
  363. package/dist/runtime/icons/texturebox.svg +5 -0
  364. package/dist/runtime/icons/tiktok.svg +1 -0
  365. package/dist/runtime/icons/title.svg +1 -0
  366. package/dist/runtime/icons/tools.svg +1 -0
  367. package/dist/runtime/icons/translate.svg +5 -0
  368. package/dist/runtime/icons/tree.svg +5 -0
  369. package/dist/runtime/icons/tutor.svg +1 -0
  370. package/dist/runtime/icons/ui-list-horizontal.svg +19 -0
  371. package/dist/runtime/icons/ui-list-sidebar.svg +21 -0
  372. package/dist/runtime/icons/ui-list-vertical.svg +9 -0
  373. package/dist/runtime/icons/undo.svg +12 -0
  374. package/dist/runtime/icons/unstar.svg +1 -0
  375. package/dist/runtime/icons/upload.svg +1 -0
  376. package/dist/runtime/icons/user.svg +1 -0
  377. package/dist/runtime/icons/video-outline.svg +1 -0
  378. package/dist/runtime/icons/vimeo.svg +3 -0
  379. package/dist/runtime/icons/window-maximize.svg +1 -0
  380. package/dist/runtime/icons/window-minimize.svg +1 -0
  381. package/dist/runtime/icons/youtube.svg +3 -0
  382. package/dist/runtime/plugins/blokkliEditable.d.ts +2 -0
  383. package/dist/runtime/plugins/blokkliEditable.js +31 -0
  384. package/dist/runtime/public/Inter.var.woff2 +0 -0
  385. package/dist/runtime/types/blokkOptions.d.ts +83 -0
  386. package/dist/runtime/types/blokkOptions.js +0 -0
  387. package/dist/runtime/types/generatedModuleTypes.d.ts +41 -0
  388. package/dist/runtime/types/generatedModuleTypes.js +0 -0
  389. package/dist/runtime/types/index.d.ts +1052 -0
  390. package/dist/runtime/types/index.js +1 -0
  391. package/dist/runtime/types/theme.d.ts +33 -0
  392. package/dist/runtime/types/theme.js +0 -0
  393. package/dist/types.d.mts +1 -0
  394. package/dist/types.d.ts +1 -0
  395. package/package.json +103 -0
@@ -0,0 +1,124 @@
1
+ import { theme, themes } from "#blokkli/config";
2
+ import { ref, onMounted, onBeforeUnmount } from "#imports";
3
+ import { rgbaToString } from "./index.js";
4
+ import { DragStyle } from "./DragStyle/index.js";
5
+ import onBlokkliEvent from "./composables/onBlokkliEvent.js";
6
+ export default function() {
7
+ const originalBrowserThemeColor = ref("");
8
+ const THEME_COLOR = "black";
9
+ const accent = ref(theme.accent);
10
+ const mono = ref(theme.mono);
11
+ const teal = ref(theme.teal);
12
+ const yellow = ref(theme.yellow);
13
+ const red = ref(theme.red);
14
+ const lime = ref(theme.lime);
15
+ const themeMap = {
16
+ accent,
17
+ mono,
18
+ teal,
19
+ yellow,
20
+ red,
21
+ lime
22
+ };
23
+ function getColor(color, key) {
24
+ return themeMap[color].value[key];
25
+ }
26
+ function getColorString(color, key, alpha = 1) {
27
+ const rgb = getColor(color, key);
28
+ return rgbaToString(rgb, alpha);
29
+ }
30
+ const customTheme = ref(theme);
31
+ const setColor = (group, shade, value) => {
32
+ if (group === "accent") {
33
+ accent.value[shade] = value;
34
+ } else if (group === "mono") {
35
+ mono.value[shade] = value;
36
+ } else if (group === "teal") {
37
+ teal.value[shade] = value;
38
+ } else if (group === "red") {
39
+ red.value[shade] = value;
40
+ } else if (group === "yellow") {
41
+ yellow.value[shade] = value;
42
+ } else if (group === "lime") {
43
+ lime.value[shade] = value;
44
+ }
45
+ const root = document.querySelector(":root");
46
+ if (root instanceof HTMLElement) {
47
+ root.style.setProperty(
48
+ `--bk-theme-${group}-${shade}`,
49
+ `${value[0]} ${value[1]} ${value[2]}`
50
+ );
51
+ }
52
+ };
53
+ const setColorsFromTheme = (v) => {
54
+ Object.entries(v).forEach(([group, colors]) => {
55
+ Object.entries(colors).forEach(([shade, value]) => {
56
+ setColor(group, shade, value);
57
+ });
58
+ });
59
+ };
60
+ const applyTheme = (name) => {
61
+ customTheme.value = JSON.parse(
62
+ JSON.stringify({
63
+ accent: accent.value,
64
+ mono: mono.value,
65
+ teal: teal.value,
66
+ yellow: yellow.value,
67
+ red: red.value,
68
+ lime: lime.value
69
+ })
70
+ );
71
+ if (name === "custom") {
72
+ return setColorsFromTheme(customTheme.value);
73
+ }
74
+ const themeToApply = themes[name];
75
+ if (themeToApply) {
76
+ setColorsFromTheme(themeToApply);
77
+ }
78
+ };
79
+ onMounted(() => {
80
+ const el = document.head.querySelectorAll('[name="theme-color"]');
81
+ if (el instanceof HTMLMetaElement) {
82
+ originalBrowserThemeColor.value = el.content;
83
+ el.content = THEME_COLOR;
84
+ } else {
85
+ const meta = document.createElement("meta");
86
+ meta.name = "theme-color";
87
+ meta.content = THEME_COLOR;
88
+ document.getElementsByTagName("head")[0].appendChild(meta);
89
+ }
90
+ });
91
+ onBeforeUnmount(() => {
92
+ const el = document.head.querySelectorAll('[name="theme-color"]');
93
+ if (el instanceof HTMLMetaElement) {
94
+ if (originalBrowserThemeColor.value) {
95
+ el.content = originalBrowserThemeColor.value;
96
+ } else {
97
+ el.remove();
98
+ }
99
+ }
100
+ });
101
+ const dragStyle = new DragStyle();
102
+ function invalidateCachedStyle(el) {
103
+ dragStyle.invalidateStyle(el);
104
+ }
105
+ onBlokkliEvent("state:reloaded", function() {
106
+ dragStyle.reset();
107
+ });
108
+ return {
109
+ accent,
110
+ mono,
111
+ teal,
112
+ yellow,
113
+ red,
114
+ lime,
115
+ getDraggableStyle: function(el) {
116
+ return dragStyle.getStyle(el, theme.accent[700]);
117
+ },
118
+ invalidateCachedStyle,
119
+ setColor,
120
+ applyTheme,
121
+ getColor,
122
+ getColorString
123
+ };
124
+ }
@@ -0,0 +1,11 @@
1
+ import type { TourItem } from '#blokkli/types';
2
+ import { type Ref } from '#imports';
3
+ type TourProviderFunction = () => TourItem[] | TourItem | undefined;
4
+ export type TourProvider = {
5
+ add: (fn: TourProviderFunction) => void;
6
+ remove: (fn: TourProviderFunction) => void;
7
+ getTourItems: () => TourItem[];
8
+ isTouring: Ref<boolean>;
9
+ };
10
+ export default function (): TourProvider;
11
+ export {};
@@ -0,0 +1,19 @@
1
+ import { falsy } from "./index.js";
2
+ import { ref } from "#imports";
3
+ export default function() {
4
+ let functions = [];
5
+ const isTouring = ref(false);
6
+ const add = (fn) => {
7
+ functions.push(fn);
8
+ };
9
+ const remove = (fn) => {
10
+ functions = functions.filter((v) => v !== fn);
11
+ };
12
+ const getTourItems = () => functions.flatMap((fn) => fn()).filter(falsy);
13
+ return {
14
+ add,
15
+ remove,
16
+ getTourItems,
17
+ isTouring
18
+ };
19
+ }
@@ -0,0 +1,2 @@
1
+ import type { TransformPlugin } from '../types.js';
2
+ export declare function filterTransforms(plugins: TransformPlugin[], selectedItems: any[], selectedBundles: string[], allowedBundles: string[]): TransformPlugin[];
@@ -0,0 +1,17 @@
1
+ export function filterTransforms(plugins, selectedItems, selectedBundles, allowedBundles) {
2
+ return plugins.filter((plugin) => {
3
+ if (selectedItems.length < plugin.min) {
4
+ return false;
5
+ }
6
+ if (plugin.max !== -1 && selectedItems.length > plugin.max) {
7
+ return false;
8
+ }
9
+ const allAllowedInList = plugin.targetBundles.every(
10
+ (bundle) => allowedBundles.includes(bundle)
11
+ );
12
+ if (!allAllowedInList) {
13
+ return false;
14
+ }
15
+ return selectedBundles.every((bundle) => plugin.bundles.includes(bundle));
16
+ });
17
+ }
@@ -0,0 +1,36 @@
1
+ import type { ComputedRef } from 'vue';
2
+ import type { FieldConfig, BlockBundleDefinition, EditableFieldConfig, BlockDefinitionInput, BlockDefinitionOptionsInput, DroppableFieldConfig, DraggableExistingBlock, EntityContext } from '../types.js';
3
+ import type { AdapterContext, BlokkliAdapter } from '../adapter.js';
4
+ import type { SelectionProvider } from './selectionProvider.js';
5
+ export type BlokkliBlockType = BlockBundleDefinition & {
6
+ definition: BlockDefinitionInput<BlockDefinitionOptionsInput, any[]> | undefined;
7
+ };
8
+ interface MappableConfig {
9
+ entityType: string;
10
+ entityBundle: string;
11
+ name: string;
12
+ }
13
+ declare class ConfigMap<T extends MappableConfig> {
14
+ private configs;
15
+ private mapEntityType;
16
+ private mapEntityTypeBundle;
17
+ private mapEntityTypeBundleName;
18
+ constructor(items: T[]);
19
+ forEntityType(entityType: string): T[];
20
+ forEntityTypeAndBundle(entityType: string, entityBundle: string): T[];
21
+ forName(entityType: string, entityBundle: string, name: string): T | undefined;
22
+ all(): T[];
23
+ }
24
+ export type BlockDefinitionProvider = {
25
+ itemBundlesWithNested: string[];
26
+ allowedTypesInList: ComputedRef<string[]>;
27
+ generallyAvailableBundles: BlockBundleDefinition[];
28
+ getBlockBundleDefinition: (bundle: string) => BlockBundleDefinition | undefined;
29
+ getFieldConfig: (entityType: string, entityBundle: string, fieldName: string) => FieldConfig | undefined;
30
+ fieldConfig: ConfigMap<FieldConfig>;
31
+ editableFieldConfig: ConfigMap<EditableFieldConfig>;
32
+ droppableFieldConfig: ConfigMap<DroppableFieldConfig>;
33
+ getDroppableFieldConfig: (fieldName: string, host: DraggableExistingBlock | EntityContext) => DroppableFieldConfig;
34
+ };
35
+ export default function (adapter: BlokkliAdapter<any>, selection: SelectionProvider, context: ComputedRef<AdapterContext>): Promise<BlockDefinitionProvider>;
36
+ export {};
@@ -0,0 +1,138 @@
1
+ import { eventBus } from "#blokkli/helpers/eventBus";
2
+ import { useRuntimeConfig, computed, watch } from "#imports";
3
+ import { onlyUnique } from "./index.js";
4
+ class ConfigMap {
5
+ configs = [];
6
+ mapEntityType = {};
7
+ mapEntityTypeBundle = {};
8
+ mapEntityTypeBundleName = {};
9
+ constructor(items) {
10
+ for (let i = 0; i < items.length; i++) {
11
+ const item = items[i];
12
+ this.configs.push(item);
13
+ if (!this.mapEntityType[item.entityType]) {
14
+ this.mapEntityType[item.entityType] = [];
15
+ }
16
+ this.mapEntityType[item.entityType].push(item);
17
+ if (!this.mapEntityTypeBundle[item.entityType]) {
18
+ this.mapEntityTypeBundle[item.entityType] = {};
19
+ }
20
+ if (!this.mapEntityTypeBundle[item.entityType][item.entityBundle]) {
21
+ this.mapEntityTypeBundle[item.entityType][item.entityBundle] = [];
22
+ }
23
+ this.mapEntityTypeBundle[item.entityType][item.entityBundle].push(item);
24
+ if (!this.mapEntityTypeBundleName[item.entityType]) {
25
+ this.mapEntityTypeBundleName[item.entityType] = {};
26
+ }
27
+ if (!this.mapEntityTypeBundleName[item.entityType][item.entityBundle]) {
28
+ this.mapEntityTypeBundleName[item.entityType][item.entityBundle] = {};
29
+ }
30
+ this.mapEntityTypeBundleName[item.entityType][item.entityBundle][item.name] = item;
31
+ }
32
+ }
33
+ forEntityType(entityType) {
34
+ return this.mapEntityType[entityType] || [];
35
+ }
36
+ forEntityTypeAndBundle(entityType, entityBundle) {
37
+ return this.mapEntityTypeBundle[entityType]?.[entityBundle] || [];
38
+ }
39
+ forName(entityType, entityBundle, name) {
40
+ return this.mapEntityTypeBundleName[entityType]?.[entityBundle]?.[name];
41
+ }
42
+ all() {
43
+ return this.configs;
44
+ }
45
+ }
46
+ export default async function(adapter, selection, context) {
47
+ const bundleDefinitions = await adapter.getAllBundles();
48
+ const itemEntityType = useRuntimeConfig().public.blokkli.itemEntityType;
49
+ const fieldConfig = new ConfigMap(await adapter.getFieldConfig());
50
+ const editableFieldConfigData = adapter.getEditableFieldConfig ? await adapter.getEditableFieldConfig() : [];
51
+ const editableFieldConfig = new ConfigMap(editableFieldConfigData);
52
+ const droppableFieldConfigData = adapter.getDroppableFieldConfig ? await adapter.getDroppableFieldConfig() : [];
53
+ const droppableFieldConfig = new ConfigMap(droppableFieldConfigData);
54
+ const allowedTypesInList = computed(() => {
55
+ if (!selection.blocks.value.length) {
56
+ return [];
57
+ }
58
+ let hostType = "";
59
+ let hostBundle = "";
60
+ let fieldName = "";
61
+ for (let i = 0; i < selection.blocks.value.length; i++) {
62
+ const block = selection.blocks.value[i];
63
+ if (i !== 0 && (hostType !== block.hostType || hostBundle !== block.hostBundle || fieldName !== block.hostFieldName)) {
64
+ return [];
65
+ }
66
+ hostType = block.hostType;
67
+ hostBundle = block.hostBundle;
68
+ fieldName = block.hostFieldName;
69
+ }
70
+ return fieldConfig.forName(hostType, hostBundle, fieldName)?.allowedBundles || [];
71
+ });
72
+ watch(selection.blocks, () => {
73
+ if (selection.blocks.value.length !== 1) {
74
+ return;
75
+ }
76
+ const item = selection.blocks.value[0];
77
+ const hasNested = itemBundlesWithNested.includes(item.itemBundle);
78
+ if (hasNested) {
79
+ const nestedFields = fieldConfig.forEntityTypeAndBundle(itemEntityType, item.itemBundle).map((v) => v.name) || [];
80
+ if (nestedFields.length === 1) {
81
+ eventBus.emit("setActiveFieldKey", `${item.uuid}:${nestedFields[0]}`);
82
+ return;
83
+ }
84
+ }
85
+ eventBus.emit("setActiveFieldKey", `${item.hostUuid}:${item.hostFieldName}`);
86
+ });
87
+ const itemBundlesWithNested = fieldConfig.forEntityType(itemEntityType).map((v) => v.entityBundle) || [];
88
+ const typeMap = bundleDefinitions.reduce((acc, type) => {
89
+ acc[type.id] = type;
90
+ return acc;
91
+ }, {});
92
+ function getBlockBundleDefinition(bundle) {
93
+ return typeMap[bundle];
94
+ }
95
+ function getFieldConfig(entityType, entityBundle, fieldName) {
96
+ return fieldConfig.forName(entityType, entityBundle, fieldName);
97
+ }
98
+ function getDroppableFieldConfig(fieldName, host) {
99
+ const entityType = "entityType" in host ? host.entityType : host.type;
100
+ const entityBundle = "itemBundle" in host ? host.itemBundle : host.bundle;
101
+ const config = droppableFieldConfig.forName(
102
+ entityType,
103
+ entityBundle,
104
+ fieldName
105
+ );
106
+ if (!config) {
107
+ throw new Error(
108
+ `Missing droppable field config for field name "${fieldName}" on entity type "${entityType}" of bundle "${entityBundle}"`
109
+ );
110
+ }
111
+ return config;
112
+ }
113
+ const bundlesAllowedOnPage = fieldConfig.forEntityTypeAndBundle(
114
+ context.value.entityType,
115
+ context.value.entityBundle
116
+ ).flatMap((v) => v.allowedBundles).filter(Boolean);
117
+ const bundlesAllowedOnBlocks = bundlesAllowedOnPage.flatMap(
118
+ (bundle) => fieldConfig.forEntityTypeAndBundle(itemEntityType, bundle)
119
+ ).flatMap((v) => v.allowedBundles) || [];
120
+ const allAllowedBundles = [
121
+ ...bundlesAllowedOnPage,
122
+ ...bundlesAllowedOnBlocks
123
+ ].filter(onlyUnique);
124
+ const generallyAvailableBundles = bundleDefinitions.filter(
125
+ (v) => allAllowedBundles.includes(v.id)
126
+ );
127
+ return {
128
+ itemBundlesWithNested,
129
+ allowedTypesInList,
130
+ getBlockBundleDefinition,
131
+ getDroppableFieldConfig,
132
+ generallyAvailableBundles,
133
+ getFieldConfig,
134
+ editableFieldConfig,
135
+ droppableFieldConfig,
136
+ fieldConfig
137
+ };
138
+ }
@@ -0,0 +1,36 @@
1
+ import { type Ref, type ComputedRef } from 'vue';
2
+ import type { StorageProvider } from './storageProvider.js';
3
+ import type { AddListOrientation, Coord, Rectangle, Size } from '#blokkli/types';
4
+ import type { Viewport } from '#blokkli/constants';
5
+ export type UiProvider = {
6
+ rootElement: () => HTMLElement;
7
+ artboardElement: () => HTMLElement;
8
+ providerElement: () => HTMLElement;
9
+ menu: {
10
+ isOpen: Readonly<Ref<boolean>>;
11
+ close: () => void;
12
+ open: () => void;
13
+ };
14
+ isMobile: ComputedRef<boolean>;
15
+ isDesktop: ComputedRef<boolean>;
16
+ isArtboard: () => boolean;
17
+ isAnimating: Ref<boolean>;
18
+ useAnimations: ComputedRef<boolean>;
19
+ lowPerformanceMode: ComputedRef<boolean>;
20
+ toolbarHeight: ComputedRef<number>;
21
+ visibleViewport: ComputedRef<Rectangle>;
22
+ visibleViewportPadded: ComputedRef<Rectangle>;
23
+ addListOrientation: ComputedRef<AddListOrientation>;
24
+ setViewportBlockingRectangle: (key: string, rect?: Rectangle) => void;
25
+ viewportBlockingRects: ComputedRef<Rectangle[]>;
26
+ appViewport: ComputedRef<Viewport>;
27
+ openContextMenu: Ref<string>;
28
+ viewport: ComputedRef<Size>;
29
+ artboardSize: ComputedRef<Size>;
30
+ artboardScale: Ref<number>;
31
+ artboardOffset: Ref<Coord>;
32
+ selectionTopLeft: Ref<Coord>;
33
+ getAbsoluteElementRect: (v: HTMLElement | Rectangle, scale?: number, offset?: Coord) => Rectangle;
34
+ getViewportRelativeRect: (rect: Rectangle, scale?: number, offset?: Coord) => Rectangle;
35
+ };
36
+ export default function (storage: StorageProvider): UiProvider;
@@ -0,0 +1,278 @@
1
+ import {
2
+ onMounted,
3
+ onBeforeUnmount,
4
+ ref,
5
+ computed,
6
+ watch
7
+ } from "vue";
8
+ import { eventBus } from "./eventBus.js";
9
+ import { falsy } from "./index.js";
10
+ const ARTBOARD_CLASS = "bk-is-artboard";
11
+ export default function(storage) {
12
+ let cachedRootElement = null;
13
+ let cachedArtboardElement = null;
14
+ let cachedProviderElement = null;
15
+ const menuIsOpen = ref(false);
16
+ const isAnimating = ref(false);
17
+ const openContextMenu = ref("");
18
+ const selectionTopLeft = ref({ x: 0, y: 0 });
19
+ const useAnimationsSetting = storage.use("useAnimations", true);
20
+ const useAnimations = computed(() => useAnimationsSetting.value);
21
+ const baseSettings = storage.use("feature:settings:settings", {});
22
+ const lowPerformanceMode = computed(
23
+ () => baseSettings.value.lowPerformanceMode
24
+ );
25
+ const viewportBlockingRectsMap = ref(
26
+ {}
27
+ );
28
+ const artboardSize = ref({
29
+ width: 1,
30
+ height: 1
31
+ });
32
+ const artboardOffset = ref({
33
+ x: 0,
34
+ y: 0
35
+ });
36
+ const artboardScale = ref(1);
37
+ const resizeObserver = new ResizeObserver((entries) => {
38
+ const entry = entries[0];
39
+ if (!entry) {
40
+ return;
41
+ }
42
+ const size = entry.contentBoxSize[0];
43
+ if (!size) {
44
+ return;
45
+ }
46
+ artboardSize.value.width = size.inlineSize;
47
+ artboardSize.value.height = size.blockSize;
48
+ });
49
+ const setViewportBlockingRectangle = (key, rect) => {
50
+ if (!rect) {
51
+ viewportBlockingRectsMap.value[key] = void 0;
52
+ return;
53
+ }
54
+ viewportBlockingRectsMap.value[key] = rect;
55
+ };
56
+ const artboardElement = () => {
57
+ if (cachedArtboardElement) {
58
+ return cachedArtboardElement;
59
+ }
60
+ const el = document.querySelector(".bk-main-canvas");
61
+ if (!el || !(el instanceof HTMLElement)) {
62
+ throw new Error("Failed to locate artboard element.");
63
+ }
64
+ cachedArtboardElement = el;
65
+ return el;
66
+ };
67
+ const rootElement = () => {
68
+ if (cachedRootElement) {
69
+ return cachedRootElement;
70
+ }
71
+ const el = document.querySelector("#nuxt-root");
72
+ if (!el || !(el instanceof HTMLElement)) {
73
+ throw new Error("Failed to locate root Nuxt element.");
74
+ }
75
+ cachedRootElement = el;
76
+ return el;
77
+ };
78
+ const providerElement = () => {
79
+ if (cachedProviderElement) {
80
+ return cachedProviderElement;
81
+ }
82
+ const el = document.querySelector('[data-blokkli-provider-active="true"]');
83
+ if (!el || !(el instanceof HTMLElement)) {
84
+ throw new Error("Failed to locate provider element.");
85
+ }
86
+ cachedProviderElement = el;
87
+ return el;
88
+ };
89
+ const appViewport = computed(() => {
90
+ if (viewportWidth.value < 1024) {
91
+ return "mobile";
92
+ }
93
+ return "desktop";
94
+ });
95
+ const viewportWidth = ref(window.innerWidth);
96
+ const viewportHeight = ref(window.innerHeight);
97
+ const isMobile = computed(() => appViewport.value === "mobile");
98
+ const isDesktop = computed(() => appViewport.value === "desktop");
99
+ let resizeTimeout = null;
100
+ const onResize = () => {
101
+ clearTimeout(resizeTimeout);
102
+ resizeTimeout = setTimeout(() => {
103
+ viewportWidth.value = window.innerWidth;
104
+ viewportHeight.value = window.innerHeight;
105
+ eventBus.emit("ui:resized");
106
+ }, 400);
107
+ };
108
+ const isArtboard = () => {
109
+ return document.documentElement.classList.contains(ARTBOARD_CLASS);
110
+ };
111
+ watch(isAnimating, (is) => {
112
+ if (is) {
113
+ document.documentElement.classList.add("bk-is-animating");
114
+ } else {
115
+ document.documentElement.classList.remove("bk-is-animating");
116
+ }
117
+ });
118
+ const toolbarHeight = computed(() => {
119
+ if (isMobile.value) {
120
+ return 80;
121
+ }
122
+ return 50;
123
+ });
124
+ const activeSidebarLeft = storage.use("sidebar:active:left", "");
125
+ const activeSidebarRight = storage.use("sidebar:active:right", "");
126
+ const settingsStorage = storage.use("feature:add-list:settings", {
127
+ orientation: "vertical"
128
+ });
129
+ const addListOrientation = computed(
130
+ () => isMobile.value ? "horizontal" : settingsStorage.value.orientation
131
+ );
132
+ const visibleViewportX = computed(() => {
133
+ let x = 0;
134
+ if (!isMobile.value) {
135
+ if (addListOrientation.value === "vertical") {
136
+ x += 70;
137
+ }
138
+ if (activeSidebarLeft.value) {
139
+ x += 400;
140
+ }
141
+ }
142
+ return x;
143
+ });
144
+ const visibleViewportY = computed(() => {
145
+ return toolbarHeight.value;
146
+ });
147
+ const visibleViewportWidth = computed(() => {
148
+ if (isMobile.value) {
149
+ return viewportWidth.value;
150
+ }
151
+ let width = viewportWidth.value - visibleViewportX.value - 50;
152
+ if (activeSidebarRight.value) {
153
+ width -= 351;
154
+ }
155
+ return width;
156
+ });
157
+ const visibleViewportHeight = computed(() => {
158
+ let height = viewportHeight.value - visibleViewportY.value;
159
+ if (addListOrientation.value === "horizontal") {
160
+ if (isMobile.value) {
161
+ height -= 50;
162
+ } else {
163
+ height -= 70;
164
+ }
165
+ }
166
+ return height;
167
+ });
168
+ const viewportPadding = computed(() => 10);
169
+ const blockingPaddingX = computed(() => 15);
170
+ const blockingPaddingY = computed(() => 50);
171
+ const viewportBlockingRects = computed(() => {
172
+ return Object.values(viewportBlockingRectsMap.value).map((rect) => {
173
+ if (!rect) {
174
+ return;
175
+ }
176
+ return {
177
+ x: rect.x - blockingPaddingX.value,
178
+ y: rect.y - blockingPaddingY.value,
179
+ width: rect.width + blockingPaddingX.value * 2,
180
+ height: rect.height + blockingPaddingY.value * 2
181
+ };
182
+ }).filter(falsy);
183
+ });
184
+ const visibleViewport = computed(() => {
185
+ return {
186
+ x: visibleViewportX.value,
187
+ y: visibleViewportY.value,
188
+ width: visibleViewportWidth.value,
189
+ height: visibleViewportHeight.value
190
+ };
191
+ });
192
+ const visibleViewportPadded = computed(() => {
193
+ return {
194
+ x: visibleViewportX.value + viewportPadding.value,
195
+ y: visibleViewportY.value + viewportPadding.value,
196
+ width: visibleViewportWidth.value - 2 * viewportPadding.value,
197
+ height: visibleViewportHeight.value - 2 * viewportPadding.value
198
+ };
199
+ });
200
+ onMounted(() => {
201
+ document.documentElement.classList.add("bk-html-root");
202
+ document.body.classList.add("bk-body");
203
+ document.documentElement.classList.add(ARTBOARD_CLASS);
204
+ viewportWidth.value = window.innerWidth;
205
+ viewportHeight.value = window.innerHeight;
206
+ window.addEventListener("resize", onResize);
207
+ const artboard = artboardElement();
208
+ resizeObserver.observe(artboard);
209
+ });
210
+ onBeforeUnmount(() => {
211
+ window.removeEventListener("resize", onResize);
212
+ document.documentElement.classList.remove("bk-html-root");
213
+ document.body.classList.remove("bk-body");
214
+ document.documentElement.classList.remove(ARTBOARD_CLASS);
215
+ clearTimeout(resizeTimeout);
216
+ const artboard = artboardElement();
217
+ resizeObserver.unobserve(artboard);
218
+ resizeObserver.disconnect();
219
+ });
220
+ const viewport = computed(() => {
221
+ return {
222
+ width: viewportWidth.value,
223
+ height: viewportHeight.value
224
+ };
225
+ });
226
+ function getAbsoluteElementRect(v, providedScale, providedOffset) {
227
+ const rect = "x" in v && "y" in v && "width" in v && "height" in v ? v : v.getBoundingClientRect();
228
+ const scale = providedScale || artboardScale.value;
229
+ const offset = providedOffset || artboardOffset.value;
230
+ return {
231
+ x: rect.x / scale - offset.x / scale,
232
+ y: rect.y / scale - offset.y / scale,
233
+ width: rect.width / scale,
234
+ height: rect.height / scale
235
+ };
236
+ }
237
+ function getViewportRelativeRect(rect) {
238
+ const scale = artboardScale.value;
239
+ const offset = artboardOffset.value;
240
+ return {
241
+ x: rect.x * scale + offset.x,
242
+ y: rect.y * scale + offset.y,
243
+ width: rect.width * scale,
244
+ height: rect.height * scale
245
+ };
246
+ }
247
+ return {
248
+ menu: {
249
+ isOpen: menuIsOpen,
250
+ close: () => menuIsOpen.value = false,
251
+ open: () => menuIsOpen.value = true
252
+ },
253
+ artboardElement,
254
+ rootElement,
255
+ providerElement,
256
+ isMobile,
257
+ isDesktop,
258
+ isArtboard,
259
+ isAnimating,
260
+ useAnimations,
261
+ visibleViewport,
262
+ visibleViewportPadded,
263
+ toolbarHeight,
264
+ addListOrientation,
265
+ setViewportBlockingRectangle,
266
+ viewportBlockingRects,
267
+ appViewport,
268
+ openContextMenu,
269
+ viewport,
270
+ artboardSize: computed(() => artboardSize.value),
271
+ artboardScale,
272
+ artboardOffset,
273
+ selectionTopLeft,
274
+ lowPerformanceMode,
275
+ getAbsoluteElementRect,
276
+ getViewportRelativeRect
277
+ };
278
+ }