@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,289 @@
1
+ <template>
2
+ <Teleport to="body">
3
+ <div />
4
+ </Teleport>
5
+ </template>
6
+
7
+ <script lang="ts" setup>
8
+ import { useBlokkli, onBeforeUnmount } from '#imports'
9
+ import { intersects, toShaderColor } from '#blokkli/helpers'
10
+ import onBlokkliEvent from '#blokkli/helpers/composables/onBlokkliEvent'
11
+ import vs from './vertex.glsl?raw'
12
+ import fs from './fragment.glsl?raw'
13
+ import {
14
+ type BufferInfo,
15
+ setBuffersAndAttributes,
16
+ drawBufferInfo,
17
+ setUniforms,
18
+ } from 'twgl.js'
19
+ import type { Coord, Rectangle } from '#blokkli/types'
20
+ import { RectangleBufferCollector } from '#blokkli/helpers/webgl'
21
+ import useDebugLogger from '#blokkli/helpers/composables/useDebugLogger'
22
+
23
+ const { eventBus, dom, theme, animation, ui } = useBlokkli()
24
+ const logger = useDebugLogger()
25
+
26
+ const props = defineProps<{
27
+ startX: number
28
+ startY: number
29
+ isPressingControl: boolean
30
+ gl: WebGLRenderingContext
31
+ }>()
32
+
33
+ defineEmits<{
34
+ (e: 'select', uuids: string[]): void
35
+ }>()
36
+
37
+ type MultiSelectRectangle = Rectangle & {
38
+ id: string
39
+ index: number
40
+ isNested: boolean
41
+ radius: [number, number, number, number]
42
+ }
43
+
44
+ class MultiSelectRectangleBufferCollector extends RectangleBufferCollector<MultiSelectRectangle> {
45
+ getBufferInfo(
46
+ offset: Coord,
47
+ scale: number,
48
+ ): { info: BufferInfo | null; hasChanged: boolean } {
49
+ const visibleBlocks = dom.getVisibleBlocks()
50
+
51
+ const lengthBefore = this.positions.length
52
+
53
+ for (let i = 0; i < visibleBlocks.length; i++) {
54
+ const uuid = visibleBlocks[i]
55
+ if (this.added.has(uuid)) {
56
+ continue
57
+ }
58
+ const block = dom.findBlock(uuid)
59
+ if (!block) {
60
+ continue
61
+ }
62
+ const el = dom.getDragElement(block)
63
+ if (!el) {
64
+ continue
65
+ }
66
+ const rect = el.getBoundingClientRect()
67
+ const style = theme.getDraggableStyle(el)
68
+ this.addRectangle(
69
+ {
70
+ id: uuid,
71
+ x: rect.x / scale - offset.x / scale,
72
+ y: rect.y / scale - offset.y / scale,
73
+ width: rect.width / scale,
74
+ height: rect.height / scale,
75
+ isNested: block.isNested,
76
+ radius: style.radius,
77
+ },
78
+ block.isNested ? 6 : 5,
79
+ )
80
+ }
81
+
82
+ const hasChanged = lengthBefore !== this.positions.length
83
+
84
+ // Only update the buffer info if it has changed.
85
+ if (hasChanged) {
86
+ this.bufferInfo = this.createBufferInfo()
87
+ }
88
+
89
+ return { info: this.bufferInfo, hasChanged }
90
+ }
91
+
92
+ getSelectedUuids(box: Rectangle): { nested: string[]; notNested: string[] } {
93
+ const nested: string[] = []
94
+ const notNested: string[] = []
95
+ const rects = Object.values(this.rects)
96
+
97
+ for (let i = 0; i < rects.length; i++) {
98
+ const rect = rects[i]
99
+ if (intersects(box, rect)) {
100
+ if (rect.isNested) {
101
+ nested.push(rect.id)
102
+ } else {
103
+ notNested.push(rect.id)
104
+ }
105
+ }
106
+ }
107
+
108
+ return { nested, notNested }
109
+ }
110
+
111
+ isSelectingNested(box: Rectangle): boolean {
112
+ const rects = Object.values(this.rects)
113
+ for (let i = 0; i < rects.length; i++) {
114
+ const rect = rects[i]
115
+ if (intersects(box, rect) && rect.isNested) {
116
+ return true
117
+ }
118
+ }
119
+ return false
120
+ }
121
+ }
122
+
123
+ const collector = new MultiSelectRectangleBufferCollector(props.gl)
124
+ const thick = 100
125
+ collector.addRectangle(
126
+ {
127
+ width: 1000,
128
+ height: thick,
129
+ x: 100,
130
+ y: 100,
131
+ id: 'select-rect-top',
132
+ isNested: false,
133
+ radius: [0, 0, 0, 0],
134
+ },
135
+ 0,
136
+ )
137
+ collector.addRectangle(
138
+ {
139
+ width: thick,
140
+ height: 1000,
141
+ x: 1000 + thick,
142
+ y: thick,
143
+ id: 'select-rect-right',
144
+ isNested: false,
145
+ radius: [0, 0, 0, 0],
146
+ },
147
+ 0,
148
+ )
149
+ collector.addRectangle(
150
+ {
151
+ width: 1000,
152
+ height: thick,
153
+ x: 100 + thick,
154
+ y: 1000 + thick,
155
+ id: 'select-rect-bottom',
156
+ isNested: false,
157
+ radius: [0, 0, 0, 0],
158
+ },
159
+ 0,
160
+ )
161
+ collector.addRectangle(
162
+ {
163
+ width: thick,
164
+ height: 1000,
165
+ x: 100,
166
+ y: 100 + thick,
167
+ id: 'select-rect-left',
168
+ isNested: false,
169
+ radius: [0, 0, 0, 0],
170
+ },
171
+ 0,
172
+ )
173
+
174
+ const artboardOffsetStart = { ...ui.artboardOffset.value }
175
+ const artboardScaleStart = ui.artboardScale.value
176
+
177
+ const programInfo = animation.registerProgram(
178
+ 'multi_select_overlay',
179
+ props.gl,
180
+ [vs, fs],
181
+ )
182
+ const uniforms = {
183
+ u_color_field_active: toShaderColor(theme.accent.value[700]),
184
+ u_color_field_default: toShaderColor(theme.mono.value[400]),
185
+ u_color_area_active: toShaderColor(theme.teal.value.normal),
186
+ u_color_area_default: toShaderColor(theme.teal.value.normal),
187
+ }
188
+
189
+ let mouseX = 0
190
+ let mouseY = 0
191
+
192
+ function getSelectRect(
193
+ offset: Coord,
194
+ scale: number,
195
+ ): { shader: Rectangle; check: Rectangle } {
196
+ const startX =
197
+ (props.startX / artboardScaleStart +
198
+ (offset.x / scale - artboardOffsetStart.x / artboardScaleStart)) *
199
+ scale
200
+
201
+ const startY =
202
+ (props.startY / artboardScaleStart +
203
+ (offset.y / scale - artboardOffsetStart.y / artboardScaleStart)) *
204
+ scale
205
+
206
+ const ax = startX > mouseX ? mouseX : startX
207
+ const ay = startY > mouseY ? mouseY : startY
208
+ const bx = startX > mouseX ? startX : mouseX
209
+ const by = startY > mouseY ? startY : mouseY
210
+ const shader = {
211
+ x: ax,
212
+ y: ay,
213
+ width: bx - ax,
214
+ height: by - ay,
215
+ }
216
+ const check = {
217
+ x: shader.x / scale - offset.x / scale,
218
+ y: shader.y / scale - offset.y / scale,
219
+ width: shader.width / scale,
220
+ height: shader.height / scale,
221
+ }
222
+
223
+ return { shader, check }
224
+ }
225
+
226
+ const now = Date.now()
227
+
228
+ onBlokkliEvent('canvas:draw', (e) => {
229
+ mouseX = e.mouseX
230
+ mouseY = e.mouseY
231
+
232
+ const { shader, check } = getSelectRect(e.artboardOffset, e.artboardScale)
233
+
234
+ const { nested } = collector.getSelectedUuids(check)
235
+ const shouldSelectAll = props.isPressingControl || !nested.length
236
+
237
+ props.gl.useProgram(programInfo.program)
238
+
239
+ const time = (Date.now() - now) / 1000
240
+
241
+ setUniforms(programInfo, uniforms)
242
+ setUniforms(programInfo, {
243
+ u_select_all: shouldSelectAll ? 1 : 0,
244
+ u_select_rect: [shader.x, shader.y, shader.width, shader.height],
245
+ u_time: time,
246
+ })
247
+
248
+ animation.setSharedUniforms(props.gl, programInfo)
249
+ const { info, hasChanged } = collector.getBufferInfo(
250
+ e.artboardOffset,
251
+ e.artboardScale,
252
+ )
253
+
254
+ // Nothing to draw.
255
+ if (!info) {
256
+ return
257
+ }
258
+
259
+ // Only update buffer and attributes when they have changed.
260
+ if (hasChanged) {
261
+ setBuffersAndAttributes(props.gl, programInfo, info)
262
+ }
263
+
264
+ drawBufferInfo(props.gl, info, props.gl.TRIANGLES)
265
+ })
266
+
267
+ function getUuidsToSelect(): string[] {
268
+ const { check } = getSelectRect(
269
+ ui.artboardOffset.value,
270
+ ui.artboardScale.value,
271
+ )
272
+
273
+ const { nested, notNested } = collector.getSelectedUuids(check)
274
+ if (props.isPressingControl) {
275
+ return [...nested, ...notNested]
276
+ } else if (!nested.length) {
277
+ return notNested
278
+ }
279
+ return nested
280
+ }
281
+
282
+ onBeforeUnmount(() => {
283
+ props.gl.clear(props.gl.COLOR_BUFFER_BIT)
284
+
285
+ eventBus.emit('select:end', getUuidsToSelect())
286
+
287
+ logger.log('MultiSelectOverlay unmounted')
288
+ })
289
+ </script>
@@ -0,0 +1,182 @@
1
+ #version 300 es
2
+
3
+ precision mediump float;
4
+
5
+ in vec3 a_position;
6
+ in vec4 a_quad;
7
+ in float a_rect_id;
8
+ in float a_rect_type;
9
+ in float a_vertex_index;
10
+
11
+ uniform float u_time;
12
+ uniform float u_dpi;
13
+ uniform float u_scale;
14
+ uniform float u_offset_x;
15
+ uniform float u_offset_y;
16
+ uniform float u_select_all;
17
+ uniform vec2 u_resolution;
18
+ uniform vec3 u_color_field_default;
19
+ uniform vec3 u_color_field_active;
20
+ uniform vec3 u_color_area_default;
21
+ uniform vec3 u_color_area_active;
22
+ uniform vec4 u_select_rect;
23
+
24
+ out vec4 v_quad;
25
+ out float v_intersecting;
26
+ out float v_is_select_rect;
27
+ out vec3 v_color_default;
28
+ out vec3 v_color_active;
29
+ out float v_rect_id;
30
+
31
+ bool isIntersecting(vec4 a, vec4 b) {
32
+ return a.x < b.x + b.z &&
33
+ a.x + a.z > b.x &&
34
+ a.y < b.y + b.w &&
35
+ a.y + a.w > b.y;
36
+ }
37
+
38
+ /**
39
+ * Maps the vertices of 4 quads (total of 16 vertices) so that they together form a border of thickness t.
40
+ */
41
+ vec2 getVertexPos(vec4 targetRect, float edge, float corner) {
42
+ // @TODO: Could maybe be made less verbose?
43
+ // How much to thicken around targetRect (in viewport pixels.)
44
+ // This will be the
45
+ float t = max(1.0 / u_dpi, 0.75);
46
+
47
+ float x = targetRect.x;
48
+ float y = targetRect.y;
49
+ float w = targetRect.z;
50
+ float h = targetRect.w;
51
+ vec2 pos = vec2(0.0, 0.0);
52
+
53
+ bool edge_top = edge < 0.5;
54
+ bool edge_right = edge < 1.5;
55
+ bool edge_bottom = edge < 2.5;
56
+ bool edge_left = edge < 3.5;
57
+
58
+ bool corner_top_left = corner < 0.5;
59
+ bool corner_top_right = corner < 1.5;
60
+ bool corner_bottom_right = corner < 2.5;
61
+ bool corner_bottom_left = corner < 3.5;
62
+
63
+ // Top edge of rectangle.
64
+ if (edge_top) {
65
+ // Top-left.
66
+ if (corner_top_left) {
67
+ pos.x = x - t;
68
+ pos.y = y - t;
69
+ // Top-right.
70
+ } else if (corner_top_right) {
71
+ pos.x = x + w + t;
72
+ pos.y = y - t;
73
+ // Bottom-right.
74
+ } else if (corner_bottom_right) {
75
+ pos.x = x + w + t;
76
+ pos.y = y + t;
77
+ // Bottom-left.
78
+ } else if (corner_bottom_left) {
79
+ pos.x = x - t;
80
+ pos.y = y + t;
81
+ }
82
+ // Right edge of rectangle.
83
+ } else if (edge_right) {
84
+ if (corner_top_left) {
85
+ pos.x = x + w - t;
86
+ pos.y = y - t;
87
+ } else if (corner_top_right) {
88
+ pos.x = x + w + t;
89
+ pos.y = y - t;
90
+ } else if (corner_bottom_right) {
91
+ pos.x = x + w + t;
92
+ pos.y = y + t + h;
93
+ } else if (corner_bottom_left) {
94
+ pos.x = x + w - t;
95
+ pos.y = y + t + h;
96
+ }
97
+ // Bottom edge of rectangle.
98
+ } else if (edge_bottom) {
99
+ if (corner_top_left) {
100
+ pos.x = x - t;
101
+ pos.y = y + h - t;
102
+ } else if (corner_top_right) {
103
+ pos.x = x + w + t;
104
+ pos.y = y + h - t;
105
+ } else if (corner_bottom_right) {
106
+ pos.x = x + w + t;
107
+ pos.y = y + h + t;
108
+ } else if (corner_bottom_left) {
109
+ pos.x = x - t;
110
+ pos.y = y + t + h;
111
+ }
112
+ // Left edge of rectangle.
113
+ } else if (edge_left) {
114
+ if (corner_top_left) {
115
+ pos.x = x - t;
116
+ pos.y = y - t;
117
+ } else if (corner_top_right) {
118
+ pos.x = x + t;
119
+ pos.y = y - t;
120
+ } else if (corner_bottom_right) {
121
+ pos.x = x + t;
122
+ pos.y = y + h + t;
123
+ } else if (corner_bottom_left) {
124
+ pos.x = x - t;
125
+ pos.y = y + t + h;
126
+ }
127
+ }
128
+
129
+ return pos;
130
+ }
131
+
132
+ void main() {
133
+ // Selection rectangle.
134
+ if (a_rect_type < 0.5) {
135
+ vec2 pos = getVertexPos(u_select_rect, a_rect_id, a_position.z);
136
+ vec2 normalizedPosition = pos / u_resolution;
137
+ vec2 screenSpacePosition = normalizedPosition * 2.0 - vec2(1.0, 1.0);
138
+ screenSpacePosition.y = -screenSpacePosition.y;
139
+
140
+ gl_Position = vec4(screenSpacePosition, 0.0, 1.0);
141
+ v_is_select_rect = 1.0;
142
+ return;
143
+ }
144
+
145
+ vec2 offsetPosition = a_position.xy * u_scale;
146
+ offsetPosition.x += u_offset_x;
147
+ offsetPosition.y += u_offset_y;
148
+
149
+ vec2 normalizedPosition = offsetPosition / u_resolution;
150
+
151
+ // Transform to screen space (-1 to 1)
152
+ vec2 screenSpacePosition = normalizedPosition * 2.0 - vec2(1.0, 1.0);
153
+ screenSpacePosition.y = -screenSpacePosition.y;
154
+
155
+ // Output final position in clip space
156
+ gl_Position = vec4(screenSpacePosition, 0.0, 1.0);
157
+
158
+ vec4 transformed_quad = vec4(
159
+ (a_quad.x * u_scale + u_offset_x) * u_dpi,
160
+ (u_resolution.y - a_quad.y * u_scale - a_quad.w * u_scale - u_offset_y) *
161
+ u_dpi,
162
+ a_quad.z * u_scale * u_dpi,
163
+ a_quad.w * u_scale * u_dpi
164
+ );
165
+ v_quad = transformed_quad;
166
+
167
+ bool is_nested = a_rect_type > 5.5;
168
+ bool select_all = u_select_all > 0.5;
169
+
170
+ // Used to check intersection.
171
+ vec4 box = vec4(a_quad) * u_scale;
172
+ box.x += u_offset_x;
173
+ box.y += u_offset_y;
174
+
175
+ v_intersecting =
176
+ isIntersecting(box, u_select_rect) && (is_nested || select_all)
177
+ ? 1.0
178
+ : 0.0;
179
+
180
+ v_color_default = u_color_field_default;
181
+ v_color_active = u_color_field_active;
182
+ }
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <Overlay
3
+ v-if="shouldRender && gl"
4
+ :start-x="downX"
5
+ :start-y="downY"
6
+ :is-pressing-control="keyboard.isPressingControl.value"
7
+ :gl="gl"
8
+ @select="onSelect"
9
+ />
10
+ </template>
11
+
12
+ <script lang="ts" setup>
13
+ import onBlokkliEvent from '#blokkli/helpers/composables/onBlokkliEvent'
14
+ import { ref, useBlokkli, defineBlokkliFeature, computed } from '#imports'
15
+ import Overlay from './Overlay/index.vue'
16
+
17
+ defineBlokkliFeature({
18
+ id: 'multi-select',
19
+ label: 'Multiselect',
20
+ icon: 'multi-select',
21
+ description:
22
+ 'Implements support for selecting multiple blocks using a select rectangle.',
23
+ viewports: ['desktop'],
24
+ })
25
+
26
+ const { keyboard, eventBus, selection, state, animation } = useBlokkli()
27
+
28
+ const gl = animation.gl()
29
+
30
+ const enabled = computed(
31
+ () =>
32
+ !selection.editableActive.value && state.editMode.value === 'editing' && gl,
33
+ )
34
+
35
+ const shouldRender = ref(false)
36
+ const downX = ref(0)
37
+ const downY = ref(0)
38
+
39
+ const onSelect = (uuids: string[]) => {
40
+ shouldRender.value = false
41
+ eventBus.emit('select:end', uuids)
42
+ }
43
+
44
+ let startTimeout: any = null
45
+
46
+ onBlokkliEvent('mouse:down', (e) => {
47
+ if (!enabled.value || e.type !== 'mouse') {
48
+ return
49
+ }
50
+ if (keyboard.isPressingSpace.value || keyboard.isPressingControl.value) {
51
+ return
52
+ }
53
+ clearTimeout(startTimeout)
54
+ downX.value = e.x
55
+ downY.value = e.y
56
+
57
+ startTimeout = setTimeout(() => {
58
+ eventBus.emit('select:start', {
59
+ uuids: [],
60
+ mode: 'mouse',
61
+ })
62
+ shouldRender.value = true
63
+ }, 70)
64
+ })
65
+
66
+ onBlokkliEvent('mouse:up', () => {
67
+ shouldRender.value = false
68
+ clearTimeout(startTimeout)
69
+ })
70
+ </script>
71
+
72
+ <script lang="ts">
73
+ export default {
74
+ name: 'MultiSelect',
75
+ }
76
+ </script>
@@ -0,0 +1,52 @@
1
+ <template>
2
+ <label class="bk-blokkli-item-options-checkbox">
3
+ <input v-model="checked" type="checkbox" class="peer" />
4
+ <div />
5
+ <span>{{ label }}</span>
6
+ </label>
7
+ </template>
8
+
9
+ <script lang="ts" setup>
10
+ import defineCommands from '#blokkli/helpers/composables/defineCommands'
11
+ import { computed, useBlokkli } from '#imports'
12
+
13
+ const { $t, state } = useBlokkli()
14
+
15
+ const props = defineProps<{
16
+ label: string
17
+ property: string
18
+ modelValue: string
19
+ }>()
20
+
21
+ const emit = defineEmits(['update:modelValue'])
22
+
23
+ const checked = computed({
24
+ get() {
25
+ return props.modelValue === '1'
26
+ },
27
+ set(v: any) {
28
+ emit('update:modelValue', v ? '1' : '')
29
+ },
30
+ })
31
+
32
+ defineCommands(() => {
33
+ if (state.editMode.value !== 'editing') {
34
+ return
35
+ }
36
+ return {
37
+ id: 'options:' + props.property + ':toggle',
38
+ label: $t('optionsCommand.setOption', 'Set option "@option" to "@value"')
39
+ .replace('@option', props.label)
40
+ .replace('@value', checked.value ? 'false' : 'true'),
41
+ group: 'selection',
42
+ icon: 'form',
43
+ callback: () => (checked.value = !checked.value),
44
+ }
45
+ })
46
+ </script>
47
+
48
+ <script lang="ts">
49
+ export default {
50
+ name: 'OptionsFormCheckbox',
51
+ }
52
+ </script>