@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,138 @@
1
+ <template>
2
+ <DialogModal
3
+ :title="$t('settingsDialogTitle', 'Change settings')"
4
+ :width="700"
5
+ hide-buttons
6
+ icon="cog"
7
+ @cancel="$emit('cancel')"
8
+ >
9
+ <div class="bk bk-settings">
10
+ <div v-for="group in groups" :key="group.key" class="bk-form-section">
11
+ <h3 class="bk-settings-group-title">
12
+ <span>{{ group.label }}</span>
13
+ </h3>
14
+ <FeatureSetting
15
+ v-for="setting in group.settings"
16
+ :key="group.key + setting.settingsKey"
17
+ :feature-id="setting.featureId"
18
+ :settings-key="setting.settingsKey"
19
+ :setting="setting.setting"
20
+ />
21
+ </div>
22
+ </div>
23
+ </DialogModal>
24
+ </template>
25
+
26
+ <script lang="ts" setup>
27
+ import { useBlokkli, computed } from '#imports'
28
+ import { DialogModal } from '#blokkli/components'
29
+ import FeatureSetting from './FeatureSetting/index.vue'
30
+ import type { ValidFeatureKey } from '#blokkli-runtime/features'
31
+ import type { FeatureDefinitionSetting } from '#blokkli/types'
32
+ import { SETTINGS_GROUP, type SettingsGroup } from '#blokkli/constants'
33
+ import type { BlokkliIcon } from '#blokkli/icons'
34
+ import { settingsOverride } from '#blokkli/config'
35
+
36
+ const { $t, features, ui } = useBlokkli()
37
+
38
+ type FeatureSetting = {
39
+ featureId: ValidFeatureKey
40
+ settingsKey: string
41
+ setting: FeatureDefinitionSetting
42
+ }
43
+
44
+ type GroupedSettings = {
45
+ id: SettingsGroup
46
+ key: string
47
+ label: string
48
+ icon: BlokkliIcon
49
+ settings: FeatureSetting[]
50
+ }
51
+
52
+ const getGroupLabel = (key: SettingsGroup): string => {
53
+ if (key === 'behavior') {
54
+ return $t('settingsBehaviour', 'Behaviour')
55
+ } else if (key === 'appearance') {
56
+ return $t('settingsAppearance', 'Appearance')
57
+ } else if (key === 'advanced') {
58
+ return $t('settingsAdvanced', 'Advanced')
59
+ }
60
+ return key
61
+ }
62
+
63
+ const getGroupIcon = (key: SettingsGroup): BlokkliIcon => {
64
+ if (key === 'behavior') {
65
+ return 'tools'
66
+ } else if (key === 'appearance') {
67
+ return 'palette'
68
+ } else if (key === 'advanced') {
69
+ return 'bug'
70
+ }
71
+ return 'question'
72
+ }
73
+
74
+ const shouldRenderSetting = (
75
+ key: keyof typeof settingsOverride,
76
+ setting: FeatureDefinitionSetting,
77
+ ): boolean => {
78
+ // Setting is disabled in module config.
79
+ if (settingsOverride[key]?.disable) {
80
+ return false
81
+ }
82
+ if (setting.viewports?.length) {
83
+ return setting.viewports.includes(ui.appViewport.value)
84
+ }
85
+ return true
86
+ }
87
+
88
+ const settingTypeOrder = ['checkbox', 'slider', 'method']
89
+
90
+ const groups = computed<GroupedSettings[]>(() => {
91
+ return Object.values(
92
+ features.features.value.reduce<Record<string, GroupedSettings>>(
93
+ (acc, feature) => {
94
+ Object.entries(feature.settings || {}).forEach(
95
+ ([settingsKey, setting]) => {
96
+ const key: any = `feature:${feature.id}:${settingsKey}`
97
+ if (shouldRenderSetting(key, setting)) {
98
+ const group = setting.group || 'advanced'
99
+ if (!acc[group]) {
100
+ acc[group] = {
101
+ id: group as any,
102
+ key: group,
103
+ label: getGroupLabel(group),
104
+ icon: getGroupIcon(group),
105
+ settings: [],
106
+ }
107
+ }
108
+
109
+ acc[group].settings.push({
110
+ featureId: feature.id,
111
+ settingsKey,
112
+ setting,
113
+ })
114
+ }
115
+ },
116
+ )
117
+ return acc
118
+ },
119
+ {},
120
+ ),
121
+ )
122
+ .map((group) => {
123
+ group.settings
124
+ .sort((a, b) => b.settingsKey.localeCompare(a.settingsKey))
125
+ .sort(
126
+ (a, b) =>
127
+ settingTypeOrder.indexOf(a.setting.type) -
128
+ settingTypeOrder.indexOf(b.setting.type),
129
+ )
130
+ return group
131
+ })
132
+ .sort((a, b) => SETTINGS_GROUP.indexOf(a.id) - SETTINGS_GROUP.indexOf(b.id))
133
+ })
134
+
135
+ defineEmits<{
136
+ (e: 'cancel'): void
137
+ }>()
138
+ </script>
@@ -0,0 +1,92 @@
1
+ <template>
2
+ <PluginMenuButton
3
+ id="settings"
4
+ :title="$t('settingsMenuTitle', 'Settings')"
5
+ :description="
6
+ $t('settingsMenuDescription', 'Personal settings for the editor')
7
+ "
8
+ secondary
9
+ icon="cog"
10
+ @click="onClick"
11
+ />
12
+ <Teleport to="body">
13
+ <transition appear name="bk-slide-up">
14
+ <SettingsDialog v-if="showSettings" @cancel="showSettings = false" />
15
+ </transition>
16
+ </Teleport>
17
+ </template>
18
+
19
+ <script lang="ts" setup>
20
+ import {
21
+ ref,
22
+ useBlokkli,
23
+ defineBlokkliFeature,
24
+ watch,
25
+ onMounted,
26
+ onBeforeUnmount,
27
+ } from '#imports'
28
+ import { PluginMenuButton } from '#blokkli/plugins'
29
+ import SettingsDialog from './Dialog/index.vue'
30
+
31
+ const { $t, storage } = useBlokkli()
32
+
33
+ const LOW_PERFORMANCE_CLASS = 'bk-low-performance-mode'
34
+
35
+ const { settings } = defineBlokkliFeature({
36
+ id: 'settings',
37
+ label: 'Settings',
38
+ icon: 'cog',
39
+ description: 'Provides a menu button to display a settings dialog.',
40
+
41
+ settings: {
42
+ useAnimations: {
43
+ type: 'checkbox',
44
+ default: true,
45
+ label: 'Use animations',
46
+ group: 'advanced',
47
+ },
48
+ lowPerformanceMode: {
49
+ type: 'checkbox',
50
+ default: false,
51
+ label: 'Enable low performance mode',
52
+ group: 'advanced',
53
+ },
54
+ resetAllSettings: {
55
+ type: 'method',
56
+ label: 'Reset all settings',
57
+ method: () => {
58
+ storage.clearAll()
59
+ },
60
+ group: 'advanced',
61
+ },
62
+ },
63
+ })
64
+
65
+ const showSettings = ref(false)
66
+
67
+ const onClick = () => (showSettings.value = true)
68
+
69
+ function setRootClass() {
70
+ if (settings.value.lowPerformanceMode) {
71
+ document.documentElement.classList.add(LOW_PERFORMANCE_CLASS)
72
+ } else {
73
+ document.documentElement.classList.remove(LOW_PERFORMANCE_CLASS)
74
+ }
75
+ }
76
+
77
+ watch(settings, setRootClass)
78
+
79
+ onMounted(() => {
80
+ setRootClass()
81
+ })
82
+
83
+ onBeforeUnmount(() => {
84
+ document.documentElement.classList.remove(LOW_PERFORMANCE_CLASS)
85
+ })
86
+ </script>
87
+
88
+ <script lang="ts">
89
+ export default {
90
+ name: 'Settings',
91
+ }
92
+ </script>
@@ -0,0 +1,181 @@
1
+ <template>
2
+ <div ref="el" class="bk-structure-field" :data-structure-field-key="key">
3
+ <button
4
+ v-if="totalFieldsOfType > 1"
5
+ class="bk-structure-field-label"
6
+ @click.prevent.stop.capture="onClickFieldLabel"
7
+ >
8
+ {{ config?.label || name }}
9
+ </button>
10
+ <div class="bk-structure-field-items">
11
+ <div
12
+ v-for="(item, index) in list"
13
+ :key="item.uuid"
14
+ class="bk-structure-field-item"
15
+ >
16
+ <div
17
+ v-if="
18
+ index === 0 && showTargets && !selection.uuidsMap.value[item.uuid]
19
+ "
20
+ :style="targetStyle"
21
+ class="bk-structure-field-target bk-is-before"
22
+ @pointerup.stop.capture="onMouseUp()"
23
+ />
24
+ <Item
25
+ :uuid="item.uuid"
26
+ :bundle="item.bundle"
27
+ :level="level"
28
+ :visible-field-keys="visibleFieldKeys"
29
+ :is-selected-from-parent="isSelectedFromParent"
30
+ :is-visible="isVisible"
31
+ />
32
+ <div
33
+ v-if="
34
+ showTargets &&
35
+ (!selection.isDraggingExisting.value ||
36
+ !selection.uuidsMap.value[item.uuid]) &&
37
+ (!list[index + 1] ||
38
+ !selection.isDraggingExisting.value ||
39
+ !selection.uuidsMap.value[list[index + 1].uuid])
40
+ "
41
+ :style="targetStyle"
42
+ class="bk-structure-field-target bk-is-after"
43
+ @pointerup.stop.capture="onMouseUp(item.uuid)"
44
+ />
45
+ </div>
46
+ <div
47
+ v-if="!list.length && showTargets"
48
+ class="bk-structure-field-target bk-is-after"
49
+ :style="targetStyle"
50
+ @pointerup.stop.capture="onMouseUp()"
51
+ />
52
+ </div>
53
+ </div>
54
+ </template>
55
+
56
+ <script lang="ts" setup>
57
+ import {
58
+ ref,
59
+ useBlokkli,
60
+ computed,
61
+ inject,
62
+ onMounted,
63
+ onBeforeUnmount,
64
+ nextTick,
65
+ } from '#imports'
66
+ import Item from './../Item/index.vue'
67
+
68
+ const props = withDefaults(
69
+ defineProps<{
70
+ name: string
71
+ entityUuid: string
72
+ entityType: string
73
+ entityBundle: string
74
+ allowedBundles: string[]
75
+ cardinality: number
76
+ level?: number
77
+ visibleFieldKeys: Record<string, boolean>
78
+ isSelectedFromParent?: boolean
79
+ }>(),
80
+ {
81
+ level: 0,
82
+ },
83
+ )
84
+
85
+ const targetStyle = computed(() => {
86
+ return {
87
+ zIndex: 50 + props.level,
88
+ }
89
+ })
90
+
91
+ const { types, state, selection, dom, eventBus } = useBlokkli()
92
+
93
+ const mutatedField = computed(() =>
94
+ state.getMutatedField(props.entityUuid, props.name),
95
+ )
96
+
97
+ const list = computed(() => mutatedField.value?.list || [])
98
+ const key = computed(() => props.entityUuid + ':' + props.name)
99
+
100
+ function onMouseUp(preceedingUuid?: string) {
101
+ const field = dom.findField(props.entityUuid, props.name)
102
+
103
+ if (!field) {
104
+ return
105
+ }
106
+
107
+ eventBus.emit('dragging:drop', {
108
+ field,
109
+ preceedingUuid,
110
+ items: selection.dragItems.value,
111
+ host: {
112
+ type: field.hostEntityType,
113
+ uuid: field.hostEntityUuid,
114
+ fieldName: field.name,
115
+ },
116
+ })
117
+
118
+ const uuid = selection.uuids.value[0]
119
+ if (uuid) {
120
+ nextTick(() => {
121
+ eventBus.emit('scrollIntoView', { uuid, center: true })
122
+ })
123
+ }
124
+ }
125
+
126
+ function onClickFieldLabel() {
127
+ eventBus.emit(
128
+ 'select',
129
+ list.value.map((v) => v.uuid),
130
+ )
131
+ }
132
+
133
+ const el = ref<HTMLDivElement | null>(null)
134
+
135
+ const observer = inject<IntersectionObserver>('bk_structure_observer')
136
+
137
+ const isVisible = computed(() => !!props.visibleFieldKeys[key.value])
138
+
139
+ const bundlesAllowed = computed(() =>
140
+ selection.dragItemsBundles.value.every((bundle) =>
141
+ props.allowedBundles.includes(bundle),
142
+ ),
143
+ )
144
+
145
+ const showTargets = computed(
146
+ () =>
147
+ selection.isDragging.value &&
148
+ isVisible.value &&
149
+ !props.isSelectedFromParent &&
150
+ (props.cardinality === -1 || list.value.length < props.cardinality) &&
151
+ bundlesAllowed.value,
152
+ )
153
+
154
+ const config = computed(() =>
155
+ types.getFieldConfig(props.entityType, props.entityBundle, props.name),
156
+ )
157
+
158
+ const totalFieldsOfType = computed(
159
+ () =>
160
+ types.fieldConfig.forEntityTypeAndBundle(
161
+ props.entityType,
162
+ props.entityBundle,
163
+ ).length,
164
+ )
165
+
166
+ onMounted(() => {
167
+ if (el.value && observer) {
168
+ observer.observe(el.value)
169
+ }
170
+ })
171
+
172
+ onBeforeUnmount(() => {
173
+ if (el.value && observer) {
174
+ observer.unobserve(el.value)
175
+ }
176
+ })
177
+
178
+ defineOptions({
179
+ name: 'StructureListField',
180
+ })
181
+ </script>
@@ -0,0 +1,149 @@
1
+ <template>
2
+ <div
3
+ class="bk-structure-item"
4
+ :class="{ 'bk-is-selected': isSelected }"
5
+ :bk-structure-uuid="uuid"
6
+ @pointerdown.stop.prevent="onMouseDown"
7
+ >
8
+ <button class="bk-structure-item-label">
9
+ <ItemIcon :bundle="bundle" :class="{ 'bk-is-selected': isSelected }" />
10
+ {{ type?.label || bundle }}
11
+ </button>
12
+ <List
13
+ :entity-uuid="uuid"
14
+ :entity-type="runtimeConfig.itemEntityType"
15
+ :entity-bundle="bundle"
16
+ :level="level + 1"
17
+ :visible-field-keys="visibleFieldKeys"
18
+ :is-selected-from-parent="isSelectedFromParent || isSelected"
19
+ />
20
+ </div>
21
+ </template>
22
+
23
+ <script setup lang="ts">
24
+ import { useBlokkli, computed, onBeforeUnmount } from '#imports'
25
+ import List from './../../List/index.vue'
26
+ import { ItemIcon } from '#blokkli/components'
27
+ import type { DraggableExistingStructureBlock } from '#blokkli/types'
28
+ import { falsy } from '#blokkli/helpers'
29
+
30
+ const props = withDefaults(
31
+ defineProps<{
32
+ uuid: string
33
+ bundle: string
34
+ level?: number
35
+ visibleFieldKeys: Record<string, boolean>
36
+ isVisible: boolean
37
+ isSelectedFromParent?: boolean
38
+ }>(),
39
+ {
40
+ level: 0,
41
+ },
42
+ )
43
+
44
+ function getRootEl(): HTMLElement {
45
+ const rootEl = document.querySelector('#bk-structure')
46
+
47
+ if (!(rootEl instanceof HTMLElement)) {
48
+ throw new TypeError('Failed to locate root structure element.')
49
+ }
50
+
51
+ return rootEl
52
+ }
53
+
54
+ const { runtimeConfig, types, selection, eventBus, state } = useBlokkli()
55
+
56
+ const canMove = computed(() => state.editMode.value === 'editing')
57
+
58
+ const isSelected = computed(() => selection.uuids.value.includes(props.uuid))
59
+
60
+ const type = computed(() => types.getBlockBundleDefinition(props.bundle))
61
+
62
+ let isDragging = false
63
+ let startX = 0
64
+ let startY = 0
65
+
66
+ function onMouseUp(e: MouseEvent) {
67
+ getRootEl().removeEventListener('pointermove', onMouseMove)
68
+ getRootEl().removeEventListener('pointerup', onMouseUp)
69
+ if (isDragging) {
70
+ isDragging = false
71
+ return
72
+ }
73
+ if (e.ctrlKey || e.metaKey) {
74
+ eventBus.emit('select:toggle', props.uuid)
75
+ } else {
76
+ eventBus.emit('select', props.uuid)
77
+ eventBus.emit('scrollIntoView', {
78
+ uuid: props.uuid,
79
+ immediate: true,
80
+ center: true,
81
+ })
82
+ }
83
+ }
84
+
85
+ function buildDraggableItems(): DraggableExistingStructureBlock[] {
86
+ return selection.blocks.value
87
+ .map<DraggableExistingStructureBlock | null>((block) => {
88
+ const el = document.querySelector(`[bk-structure-uuid="${block.uuid}"]`)
89
+ if (!(el instanceof HTMLElement)) {
90
+ return null
91
+ }
92
+ return {
93
+ itemType: 'existing_structure',
94
+ uuid: block.uuid,
95
+ itemBundle: block.itemBundle,
96
+ element: function () {
97
+ return el
98
+ },
99
+ }
100
+ })
101
+ .filter(falsy)
102
+ }
103
+
104
+ function onMouseMove(e: MouseEvent) {
105
+ if (!canMove.value) {
106
+ return
107
+ }
108
+ const diff = Math.abs(startX - e.clientX) + Math.abs(startY - e.clientY)
109
+
110
+ if (diff > 10) {
111
+ getRootEl().removeEventListener('pointermove', onMouseMove)
112
+ getRootEl().removeEventListener('pointerup', onMouseUp)
113
+ isDragging = true
114
+ startX = 0
115
+ startY = 0
116
+
117
+ // The user has started dragging a block that is not yet selected.
118
+ if (!selection.uuids.value.includes(props.uuid)) {
119
+ eventBus.emit('select', props.uuid)
120
+ }
121
+
122
+ eventBus.emit('dragging:start', {
123
+ items: buildDraggableItems(),
124
+ coords: {
125
+ x: e.clientX,
126
+ y: e.clientY,
127
+ },
128
+ mode: 'mouse',
129
+ })
130
+ }
131
+ }
132
+
133
+ function onMouseDown(e: MouseEvent) {
134
+ startX = e.clientX
135
+ startY = e.clientY
136
+
137
+ getRootEl().addEventListener('pointermove', onMouseMove)
138
+ getRootEl().addEventListener('pointerup', onMouseUp)
139
+ }
140
+
141
+ onBeforeUnmount(() => {
142
+ getRootEl().removeEventListener('pointermove', onMouseMove)
143
+ getRootEl().removeEventListener('pointerup', onMouseUp)
144
+ })
145
+
146
+ defineOptions({
147
+ name: 'StructureListItem',
148
+ })
149
+ </script>
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <ul v-if="fields.length" class="bk-structure-list" :data-level="level">
3
+ <li
4
+ v-for="field in fields"
5
+ :key="field.entityType + field.entityBundle + field.name + entityUuid"
6
+ :data-bundle="entityBundle"
7
+ :data-name="field.name"
8
+ >
9
+ <Field
10
+ :name="field.name"
11
+ :cardinality="field.cardinality"
12
+ :allowed-bundles="field.allowedBundles"
13
+ :entity-uuid="entityUuid"
14
+ :entity-type="entityType"
15
+ :entity-bundle="entityBundle"
16
+ :show-label="fields.length > 1"
17
+ :level="level"
18
+ :visible-field-keys="visibleFieldKeys"
19
+ :is-selected-from-parent="isSelectedFromParent"
20
+ />
21
+ </li>
22
+ </ul>
23
+ </template>
24
+
25
+ <script lang="ts" setup>
26
+ import { computed, useBlokkli } from '#imports'
27
+ import Field from './Field/index.vue'
28
+
29
+ const props = withDefaults(
30
+ defineProps<{
31
+ entityUuid: string
32
+ entityType: string
33
+ entityBundle: string
34
+ visibleFieldKeys: Record<string, boolean>
35
+ level?: number
36
+ isSelectedFromParent?: boolean
37
+ }>(),
38
+ {
39
+ level: 0,
40
+ },
41
+ )
42
+
43
+ const { types } = useBlokkli()
44
+
45
+ const fields = computed(() => {
46
+ return types.fieldConfig.forEntityTypeAndBundle(
47
+ props.entityType,
48
+ props.entityBundle,
49
+ )
50
+ })
51
+
52
+ defineOptions({
53
+ name: 'StructureList',
54
+ })
55
+ </script>
@@ -0,0 +1,83 @@
1
+ <template>
2
+ <PluginSidebar
3
+ id="structure"
4
+ :title="$t('structureToolbarLabel', 'Structure')"
5
+ :tour-text="
6
+ $t(
7
+ 'structureTourText',
8
+ 'Shows a structured list of all blocks on the current page. Click on any block to quickly jump to it.',
9
+ )
10
+ "
11
+ icon="tree"
12
+ weight="-90"
13
+ >
14
+ <div
15
+ v-if="isLoaded"
16
+ id="bk-structure"
17
+ class="bk bk-structure bk-control"
18
+ @wheel.stop
19
+ >
20
+ <List
21
+ :entity-bundle="context.entityBundle"
22
+ :entity-type="context.entityType"
23
+ :entity-uuid="context.entityUuid"
24
+ :visible-field-keys="visibleFieldKeys"
25
+ />
26
+ </div>
27
+ </PluginSidebar>
28
+ </template>
29
+
30
+ <script lang="ts" setup>
31
+ import {
32
+ ref,
33
+ useBlokkli,
34
+ defineBlokkliFeature,
35
+ provide,
36
+ onBeforeUnmount,
37
+ onMounted,
38
+ reactive,
39
+ } from '#imports'
40
+ import { PluginSidebar } from '#blokkli/plugins'
41
+ import List from './List/index.vue'
42
+
43
+ defineBlokkliFeature({
44
+ id: 'structure',
45
+ icon: 'tree',
46
+ label: 'Structure',
47
+ description:
48
+ 'Provides a sidebar button to render a structured list of all blocks on the current page.',
49
+ })
50
+
51
+ const { $t, context } = useBlokkli()
52
+
53
+ const isLoaded = ref(false)
54
+
55
+ const visibleFieldKeys = reactive<Record<string, boolean>>({})
56
+
57
+ const observer = new IntersectionObserver(function (entries) {
58
+ for (const entry of entries) {
59
+ if (entry.target instanceof HTMLElement) {
60
+ const key = entry.target.dataset.structureFieldKey
61
+ if (key) {
62
+ visibleFieldKeys[key] = entry.isIntersecting
63
+ }
64
+ }
65
+ }
66
+ })
67
+
68
+ provide('bk_structure_observer', observer)
69
+
70
+ onMounted(() => {
71
+ isLoaded.value = true
72
+ })
73
+
74
+ onBeforeUnmount(() => {
75
+ observer.disconnect()
76
+ })
77
+ </script>
78
+
79
+ <script lang="ts">
80
+ export default {
81
+ name: 'Structure',
82
+ }
83
+ </script>