@blokkli/editor 2.0.0-alpha.13 → 2.0.0-alpha.14
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.
- package/dist/module.d.mts +1 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +4003 -1162
- package/dist/modules/drupal/graphql/base/fragment.ParagraphsBlokkliConfigInput.graphql +31 -0
- package/dist/modules/drupal/graphql/base/fragment.blokkliProps.graphql +1 -0
- package/dist/modules/drupal/graphql/base/fragment.paragraphsBlokkliEditState.graphql +1 -0
- package/dist/modules/drupal/graphql/base/query.pbEntityConfig.graphql +5 -0
- package/dist/modules/drupal/graphql/features/transform.graphql +9 -1
- package/dist/modules/drupal/graphql/features/transform_host.graphql +38 -0
- package/dist/modules/drupal/graphql/mutations/update_host_options.graphql +15 -0
- package/dist/modules/drupal/index.d.mts +1 -1
- package/dist/modules/drupal/index.mjs +20 -7
- package/dist/modules/drupal/runtime/adapter/index.js +109 -4
- package/dist/runtime/adapter/index.d.ts +54 -1
- package/dist/runtime/blokkliPlugins/AddAction/index.vue +27 -3
- package/dist/runtime/blokkliPlugins/BlockIndicator/index.vue +65 -0
- package/dist/runtime/blokkliPlugins/BlockIndicator/index.vue.d.ts +26 -0
- package/dist/runtime/blokkliPlugins/ContextMenu/Menu/index.vue +3 -0
- package/dist/runtime/blokkliPlugins/ContextMenu/index.vue +3 -2
- package/dist/runtime/blokkliPlugins/DroppableEdit/index.vue +3 -3
- package/dist/runtime/blokkliPlugins/ItemDropdown/index.vue +49 -11
- package/dist/runtime/blokkliPlugins/ItemDropdown/index.vue.d.ts +29 -15
- package/dist/runtime/blokkliPlugins/Sidebar/Detached/index.vue +6 -7
- package/dist/runtime/blokkliPlugins/Sidebar/index.vue +2 -9
- package/dist/runtime/blokkliPlugins/Sidebar/index.vue.d.ts +1 -1
- package/dist/runtime/blokkliPlugins/ViewOption/index.vue +6 -3
- package/dist/runtime/blokkliPlugins/index.d.ts +8 -7
- package/dist/runtime/blokkliPlugins/index.js +15 -13
- package/dist/runtime/components/Blocks/Fragment/icon.svg +1 -1
- package/dist/runtime/components/BlokkliProvider.vue +1 -0
- package/dist/runtime/components/BlokkliProvider.vue.d.ts +1 -0
- package/dist/runtime/components/Edit/Actions/index.vue +39 -67
- package/dist/runtime/components/Edit/AddListItem/index.vue +2 -5
- package/dist/runtime/components/Edit/AddListItem/index.vue.d.ts +1 -1
- package/dist/runtime/components/Edit/AddListItemIcon/index.vue +19 -0
- package/dist/runtime/components/Edit/AddListItemIcon/index.vue.d.ts +15 -0
- package/dist/runtime/components/Edit/AppMenu/index.vue +5 -5
- package/dist/runtime/components/Edit/Dialog/index.vue +5 -1
- package/dist/runtime/components/Edit/Dialog/index.vue.d.ts +1 -1
- package/dist/runtime/components/Edit/DiffViewer/State.vue +276 -0
- package/dist/runtime/components/Edit/DiffViewer/State.vue.d.ts +16 -0
- package/dist/runtime/components/Edit/DragInteractions/index.vue +35 -6
- package/dist/runtime/components/Edit/EditProvider.vue +46 -35
- package/dist/runtime/components/Edit/Features/AddList/index.vue +15 -25
- package/dist/runtime/components/Edit/Features/Analyze/Overlay/fragment.glsl +58 -0
- package/dist/runtime/components/Edit/Features/Analyze/Overlay/index.vue +168 -0
- package/dist/runtime/components/Edit/Features/Analyze/Overlay/index.vue.d.ts +9 -0
- package/dist/runtime/components/Edit/Features/Analyze/Overlay/vertex.glsl +72 -0
- package/dist/runtime/components/Edit/Features/Analyze/Renderer.vue +159 -0
- package/dist/runtime/components/Edit/Features/Analyze/Renderer.vue.d.ts +7 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/Results.vue +100 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/Results.vue.d.ts +6 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/ResultsItem.vue +56 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/ResultsItem.vue.d.ts +3 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/ResultsItemNodes.vue +87 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/ResultsItemNodes.vue.d.ts +7 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/ResultsItemNodesTarget.vue +101 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/ResultsItemNodesTarget.vue.d.ts +8 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/Status.vue +18 -0
- package/dist/runtime/components/Edit/Features/Analyze/Results/Status.vue.d.ts +8 -0
- package/dist/runtime/components/Edit/Features/Analyze/Summary/Chart.vue +92 -0
- package/dist/runtime/components/Edit/Features/Analyze/Summary/Chart.vue.d.ts +17 -0
- package/dist/runtime/components/Edit/Features/Analyze/Summary/index.vue +77 -0
- package/dist/runtime/components/Edit/Features/Analyze/Summary/index.vue.d.ts +6 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/axe.d.ts +12 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/axe.js +75 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/defineAnalyzer.d.ts +4 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/defineAnalyzer.js +5 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/helpers/Context.d.ts +32 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/helpers/Context.js +45 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/helpers/collectTextElements.d.ts +5 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/helpers/collectTextElements.js +95 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/helpers/normalizeArray.d.ts +3 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/helpers/normalizeArray.js +13 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/index.d.ts +2 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/index.js +2 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/readability.d.ts +2 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/readability.js +165 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/types.d.ts +44 -0
- package/dist/runtime/components/Edit/Features/Analyze/analyzers/types.js +0 -0
- package/dist/runtime/components/Edit/Features/Analyze/helper.d.ts +5 -0
- package/dist/runtime/components/Edit/Features/Analyze/helper.js +28 -0
- package/dist/runtime/components/Edit/Features/Analyze/index.vue +44 -0
- package/dist/runtime/components/Edit/Features/Anchors/Renderer.vue +136 -0
- package/dist/runtime/components/Edit/Features/Anchors/index.vue +32 -0
- package/dist/runtime/components/Edit/Features/Anchors/index.vue.d.ts +2 -0
- package/dist/runtime/components/Edit/Features/Artboard/Overview/index.vue +25 -13
- package/dist/runtime/components/Edit/Features/Artboard/Renderer.vue +296 -0
- package/dist/runtime/components/Edit/Features/Artboard/Renderer.vue.d.ts +7 -0
- package/dist/runtime/components/Edit/Features/Artboard/index.vue +10 -245
- package/dist/runtime/components/Edit/Features/Assistant/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/BlockAddList/index.vue +4 -4
- package/dist/runtime/components/Edit/Features/Clipboard/index.vue +161 -28
- package/dist/runtime/components/Edit/Features/CommandPalette/Palette/Group/index.vue +16 -4
- package/dist/runtime/components/Edit/Features/CommandPalette/Palette/Group/index.vue.d.ts +0 -1
- package/dist/runtime/components/Edit/Features/CommandPalette/Palette/index.vue +4 -53
- package/dist/runtime/components/Edit/Features/CommandPalette/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/Conversions/index.vue +12 -14
- package/dist/runtime/components/Edit/Features/Debug/Viewport/index.vue +14 -0
- package/dist/runtime/components/Edit/Features/Debug/index.vue +27 -24
- package/dist/runtime/components/Edit/Features/Diff/DiffView/index.vue +13 -190
- package/dist/runtime/components/Edit/Features/Diff/index.vue +2 -2
- package/dist/runtime/components/Edit/Features/DraggingOverlay/DragItems/index.vue +4 -4
- package/dist/runtime/components/Edit/Features/DraggingOverlay/DropTargets/fragment.glsl +1 -1
- package/dist/runtime/components/Edit/Features/DraggingOverlay/DropTargets/index.vue +35 -71
- package/dist/runtime/components/Edit/Features/DraggingOverlay/DropTargets/vertex.glsl +1 -1
- package/dist/runtime/components/Edit/Features/DraggingOverlay/index.vue +62 -48
- package/dist/runtime/components/Edit/Features/EditForm/Frame/index.vue +3 -3
- package/dist/runtime/components/Edit/Features/EditForm/index.vue +3 -3
- package/dist/runtime/components/Edit/Features/EditableField/index.vue +6 -2
- package/dist/runtime/components/Edit/Features/EditableMask/index.vue +3 -20
- package/dist/runtime/components/Edit/Features/Fragments/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/History/index.vue +35 -12
- package/dist/runtime/components/Edit/Features/ImportExisting/Dialog/index.vue +6 -2
- package/dist/runtime/components/Edit/Features/ImportExisting/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/Library/index.vue +11 -9
- package/dist/runtime/components/Edit/Features/MediaLibrary/Library/index.vue +5 -8
- package/dist/runtime/components/Edit/Features/MultiSelect/Overlay/fragment.glsl +1 -1
- package/dist/runtime/components/Edit/Features/MultiSelect/Overlay/index.vue +9 -4
- package/dist/runtime/components/Edit/Features/MultiSelect/Overlay/vertex.glsl +1 -1
- package/dist/runtime/components/Edit/Features/MultiSelect/index.vue +8 -14
- package/dist/runtime/components/Edit/Features/Options/Form/Checkbox/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/Options/Form/Checkbox/index.vue.d.ts +2 -0
- package/dist/runtime/components/Edit/Features/Options/Form/Item.vue +9 -3
- package/dist/runtime/components/Edit/Features/Options/Form/Item.vue.d.ts +0 -1
- package/dist/runtime/components/Edit/Features/Options/Form/Radios/index.vue +37 -19
- package/dist/runtime/components/Edit/Features/Options/Form/Radios/index.vue.d.ts +8 -2
- package/dist/runtime/components/Edit/Features/Options/Form/index.vue +81 -37
- package/dist/runtime/components/Edit/Features/Options/Form/index.vue.d.ts +5 -5
- package/dist/runtime/components/Edit/Features/Options/index.vue +30 -6
- package/dist/runtime/components/Edit/Features/PreviewGrant/index.vue +3 -3
- package/dist/runtime/components/Edit/Features/Publish/Dialog/index.vue +1 -0
- package/dist/runtime/components/Edit/Features/Publish/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/Revert/index.vue +3 -3
- package/dist/runtime/components/Edit/Features/Search/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/Selection/AddButtons/AddButtonsField.vue +54 -0
- package/dist/runtime/components/Edit/Features/Selection/AddButtons/AddButtonsField.vue.d.ts +14 -0
- package/dist/runtime/components/Edit/Features/Selection/AddButtons/Overlay/index.vue +120 -0
- package/dist/runtime/components/Edit/Features/Selection/AddButtons/Overlay/index.vue.d.ts +15 -0
- package/dist/runtime/components/Edit/Features/Selection/AddButtons/index.vue +459 -0
- package/dist/runtime/components/Edit/Features/Selection/AddButtons/index.vue.d.ts +6 -0
- package/dist/runtime/components/Edit/Features/Selection/Overlay/fragment.glsl +14 -9
- package/dist/runtime/components/Edit/Features/Selection/Overlay/index.vue +32 -11
- package/dist/runtime/components/Edit/Features/Selection/Overlay/vertex.glsl +1 -1
- package/dist/runtime/components/Edit/Features/Selection/index.vue +76 -7
- package/dist/runtime/components/Edit/Features/Settings/Dialog/FeatureSetting/index.vue +12 -17
- package/dist/runtime/components/Edit/Features/Settings/index.vue +11 -25
- package/dist/runtime/components/Edit/Features/Theme/Color/index.vue +5 -1
- package/dist/runtime/components/Edit/Features/Theme/index.vue +2 -1
- package/dist/runtime/components/Edit/Features/TouchActionBar/index.vue +3 -2
- package/dist/runtime/components/Edit/Features/Transform/Dialog/index.vue +198 -0
- package/dist/runtime/components/Edit/Features/Transform/Dialog/index.vue.d.ts +13 -0
- package/dist/runtime/components/Edit/Features/Transform/index.vue +155 -44
- package/dist/runtime/components/Edit/Form/Radio/index.vue +33 -0
- package/dist/runtime/components/Edit/Form/Radio/index.vue.d.ts +20 -0
- package/dist/runtime/components/Edit/Form/RadioTabs/index.vue +37 -0
- package/dist/runtime/components/Edit/Form/RadioTabs/index.vue.d.ts +22 -0
- package/dist/runtime/components/Edit/Form/Select/index.vue +29 -0
- package/dist/runtime/components/Edit/Form/Select/index.vue.d.ts +20 -0
- package/dist/runtime/components/Edit/Form/Text/index.vue +33 -0
- package/dist/runtime/components/Edit/Form/Text/index.vue.d.ts +19 -0
- package/dist/runtime/components/Edit/Form/Textarea/index.vue +13 -6
- package/dist/runtime/components/Edit/Form/Textarea/index.vue.d.ts +4 -0
- package/dist/runtime/components/Edit/FormOverlay/index.vue +1 -1
- package/dist/runtime/components/Edit/Indicators/index.vue +123 -0
- package/dist/runtime/components/Edit/Indicators/index.vue.d.ts +2 -0
- package/dist/runtime/components/Edit/ItemIcon/index.vue +2 -1
- package/dist/runtime/components/Edit/Konami/Game/PixelGrid.vue +66 -0
- package/dist/runtime/components/Edit/Konami/Game/PixelGrid.vue.d.ts +7 -0
- package/dist/runtime/components/Edit/Konami/Game/blokkli.png +0 -0
- package/dist/runtime/components/Edit/Konami/Game/charmap.d.ts +2 -0
- package/dist/runtime/components/Edit/Konami/Game/charmap.js +168 -0
- package/dist/runtime/components/Edit/Konami/Game/index.vue +745 -0
- package/dist/runtime/components/Edit/Konami/Game/index.vue.d.ts +6 -0
- package/dist/runtime/components/Edit/Konami/Game/textRendering.d.ts +8 -0
- package/dist/runtime/components/Edit/Konami/Game/textRendering.js +138 -0
- package/dist/runtime/components/Edit/Konami/Game/useIconRendering.d.ts +9 -0
- package/dist/runtime/components/Edit/Konami/Game/useIconRendering.js +130 -0
- package/dist/runtime/components/Edit/Konami/index.vue +44 -0
- package/dist/runtime/components/Edit/Konami/index.vue.d.ts +2 -0
- package/dist/runtime/components/Edit/Loading/index.vue +6 -2
- package/dist/runtime/components/Edit/Loading/index.vue.d.ts +2 -0
- package/dist/runtime/components/Edit/Messages/index.vue +8 -3
- package/dist/runtime/components/Edit/PluginConfigForm/Checkbox/index.vue +17 -0
- package/dist/runtime/components/Edit/PluginConfigForm/Checkbox/index.vue.d.ts +11 -0
- package/dist/runtime/components/Edit/PluginConfigForm/Options/index.vue +37 -0
- package/dist/runtime/components/Edit/PluginConfigForm/Options/index.vue.d.ts +11 -0
- package/dist/runtime/components/Edit/PluginConfigForm/Text/index.vue +43 -0
- package/dist/runtime/components/Edit/PluginConfigForm/Text/index.vue.d.ts +11 -0
- package/dist/runtime/components/Edit/PluginConfigForm/index.vue +57 -0
- package/dist/runtime/components/Edit/PluginConfigForm/index.vue.d.ts +16 -0
- package/dist/runtime/components/Edit/PreviewProvider.vue +3 -4
- package/dist/runtime/components/Edit/RelativeTime/index.vue +3 -2
- package/dist/runtime/components/Edit/ShortcutIndicator/index.vue +8 -3
- package/dist/runtime/components/Edit/SystemRequirements/index.vue +3 -3
- package/dist/runtime/components/Edit/Toolbar/index.vue +3 -2
- package/dist/runtime/components/Edit/Transition/index.vue +41 -0
- package/dist/runtime/components/Edit/Transition/index.vue.d.ts +19 -0
- package/dist/runtime/components/Edit/index.d.ts +23 -15
- package/dist/runtime/components/Edit/index.js +44 -28
- package/dist/runtime/composables/defineBlokkli.js +7 -3
- package/dist/runtime/composables/defineBlokkliFeature.d.ts +4 -7
- package/dist/runtime/composables/defineBlokkliProvider.d.ts +11 -0
- package/dist/runtime/composables/defineBlokkliProvider.js +46 -0
- package/dist/runtime/composables/useBlokkliHelper.js +1 -1
- package/dist/runtime/constants/index.d.ts +3 -0
- package/dist/runtime/constants/index.js +3 -0
- package/dist/runtime/css/output.css +1 -1
- package/dist/runtime/helpers/addElementClasses.d.ts +2 -0
- package/dist/runtime/helpers/addElementClasses.js +24 -0
- package/dist/runtime/helpers/animationProvider.d.ts +4 -2
- package/dist/runtime/helpers/animationProvider.js +7 -2
- package/dist/runtime/helpers/bundles/index.d.ts +1 -0
- package/dist/runtime/helpers/bundles/index.js +4 -0
- package/dist/runtime/helpers/composables/useStickyToolbar.d.ts +20 -0
- package/dist/runtime/helpers/composables/useStickyToolbar.js +215 -0
- package/dist/runtime/helpers/definitionProvider.d.ts +2 -1
- package/dist/runtime/helpers/definitionProvider.js +17 -0
- package/dist/runtime/helpers/domProvider.d.ts +2 -1
- package/dist/runtime/helpers/domProvider.js +89 -43
- package/dist/runtime/helpers/dropTargets/index.d.ts +6 -0
- package/dist/runtime/helpers/dropTargets/index.js +49 -0
- package/dist/runtime/helpers/eventBus.d.ts +1 -1
- package/dist/runtime/helpers/eventBus.js +2 -2
- package/dist/runtime/helpers/index.d.ts +10 -1
- package/dist/runtime/helpers/index.js +57 -0
- package/dist/runtime/helpers/indicatorsProvider.d.ts +10 -0
- package/dist/runtime/helpers/indicatorsProvider.js +23 -0
- package/dist/runtime/helpers/keyboardProvider.d.ts +2 -0
- package/dist/runtime/helpers/keyboardProvider.js +17 -1
- package/dist/runtime/helpers/pluginProvider.d.ts +10 -0
- package/dist/runtime/helpers/pluginProvider.js +33 -0
- package/dist/runtime/helpers/renderCycle.d.ts +1 -0
- package/dist/runtime/helpers/renderCycle.js +10 -0
- package/dist/runtime/helpers/runtimeHelpers/index.js +14 -11
- package/dist/runtime/helpers/selectionProvider.d.ts +16 -0
- package/dist/runtime/helpers/selectionProvider.js +47 -35
- package/dist/runtime/helpers/stateProvider.d.ts +6 -2
- package/dist/runtime/helpers/stateProvider.js +58 -14
- package/dist/runtime/helpers/storageProvider.d.ts +4 -3
- package/dist/runtime/helpers/storageProvider.js +56 -3
- package/dist/runtime/helpers/symbols.d.ts +1 -0
- package/dist/runtime/helpers/symbols.js +1 -0
- package/dist/runtime/helpers/textProvider.js +6 -0
- package/dist/runtime/helpers/themeProvider.d.ts +2 -0
- package/dist/runtime/helpers/themeProvider.js +4 -1
- package/dist/runtime/helpers/transform.js +1 -3
- package/dist/runtime/helpers/uiProvider.d.ts +7 -2
- package/dist/runtime/helpers/uiProvider.js +49 -47
- package/dist/runtime/helpers/useTransitionedValue.d.ts +18 -0
- package/dist/runtime/helpers/useTransitionedValue.js +57 -0
- package/dist/runtime/icons/anchor.svg +1 -0
- package/dist/runtime/icons/arrow-left.svg +1 -1
- package/dist/runtime/icons/arrow-right.svg +1 -1
- package/dist/runtime/icons/arrow-top-right.svg +1 -0
- package/dist/runtime/icons/chart.svg +1 -0
- package/dist/runtime/icons/copy.svg +1 -0
- package/dist/runtime/icons/cursor-move.svg +1 -1
- package/dist/runtime/icons/diff.svg +1 -1
- package/dist/runtime/icons/eye.svg +1 -1
- package/dist/runtime/icons/info.svg +1 -1
- package/dist/runtime/icons/link.svg +1 -0
- package/dist/runtime/icons/speedometer.svg +1 -0
- package/dist/runtime/types/blokkOptions.d.ts +8 -0
- package/dist/runtime/types/index.d.ts +163 -5
- package/dist/runtime/types/theme.d.ts +2 -1
- package/dist/shared/{editor.gz_ac6uT.d.mts → editor.CKsrTpc1.d.mts} +1 -1
- package/package.json +20 -5
- package/dist/runtime/components/Edit/Features/FieldAreas/Overlay/index.vue +0 -22
- package/dist/runtime/components/Edit/Features/FieldAreas/index.vue +0 -41
- /package/dist/runtime/components/Edit/Features/{FieldAreas/Overlay → Analyze}/index.vue.d.ts +0 -0
- /package/dist/runtime/components/Edit/Features/{FieldAreas/index.vue.d.ts → Anchors/Renderer.vue.d.ts} +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { onBeforeUnmount, watch } from "#imports";
|
|
2
|
+
export function addElementClasses(element, classesArg, watchSource) {
|
|
3
|
+
const classes = Array.isArray(classesArg) ? classesArg : [classesArg];
|
|
4
|
+
if (watchSource) {
|
|
5
|
+
watch(
|
|
6
|
+
watchSource,
|
|
7
|
+
function(value) {
|
|
8
|
+
if (value) {
|
|
9
|
+
element.classList.add(...classes);
|
|
10
|
+
} else {
|
|
11
|
+
element.classList.remove(...classes);
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
immediate: true
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
} else {
|
|
19
|
+
element.classList.add(...classes);
|
|
20
|
+
}
|
|
21
|
+
onBeforeUnmount(() => {
|
|
22
|
+
element.classList.remove(...classes);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type ComputedRef } from '#imports';
|
|
1
|
+
import { type ComputedRef, type WritableComputedRef } from '#imports';
|
|
2
2
|
import type { UiProvider } from './uiProvider.js';
|
|
3
3
|
import { type ProgramInfo } from 'twgl.js';
|
|
4
|
+
import type { StorageProvider } from './storageProvider.js';
|
|
4
5
|
export type AnimationProvider = {
|
|
5
6
|
/**
|
|
6
7
|
* Request an animation loop. Should be called when UI state changes.
|
|
@@ -13,6 +14,7 @@ export type AnimationProvider = {
|
|
|
13
14
|
setSharedUniforms: (gl: WebGLRenderingContext, programInfo: ProgramInfo) => void;
|
|
14
15
|
dpi: ComputedRef<number>;
|
|
15
16
|
webglSupported: ComputedRef<boolean | null>;
|
|
17
|
+
webglEnabled: WritableComputedRef<boolean>;
|
|
16
18
|
getCanvasElement: () => HTMLCanvasElement;
|
|
17
19
|
/**
|
|
18
20
|
* Register a WebGL program.
|
|
@@ -22,4 +24,4 @@ export type AnimationProvider = {
|
|
|
22
24
|
registerProgram: (id: string, gl: WebGLRenderingContext, shaders: string[]) => ProgramInfo;
|
|
23
25
|
setMouseCoords: (x: number, y: number) => void;
|
|
24
26
|
};
|
|
25
|
-
export default function (ui: UiProvider): AnimationProvider;
|
|
27
|
+
export default function (ui: UiProvider, storage: StorageProvider): AnimationProvider;
|
|
@@ -8,7 +8,8 @@ import {
|
|
|
8
8
|
} from "#imports";
|
|
9
9
|
import { eventBus } from "#blokkli/helpers/eventBus";
|
|
10
10
|
import { createProgramInfo } from "twgl.js";
|
|
11
|
-
export default function(ui) {
|
|
11
|
+
export default function(ui, storage) {
|
|
12
|
+
const webglEnabled = storage.use("webglEnabled", true);
|
|
12
13
|
let mouseX = 0;
|
|
13
14
|
let mouseY = 0;
|
|
14
15
|
let iterator = 120;
|
|
@@ -99,6 +100,9 @@ export default function(ui) {
|
|
|
99
100
|
return {
|
|
100
101
|
requestDraw,
|
|
101
102
|
gl: function() {
|
|
103
|
+
if (!webglEnabled.value) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
102
106
|
if (webglSupported.value === false) {
|
|
103
107
|
return;
|
|
104
108
|
}
|
|
@@ -117,7 +121,8 @@ export default function(ui) {
|
|
|
117
121
|
dpi,
|
|
118
122
|
registerProgram,
|
|
119
123
|
setMouseCoords,
|
|
120
|
-
webglSupported: computed(() => webglSupported.value),
|
|
124
|
+
webglSupported: computed(() => webglSupported.value && webglEnabled.value),
|
|
125
|
+
webglEnabled,
|
|
121
126
|
getCanvasElement
|
|
122
127
|
};
|
|
123
128
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isInternalBundle(bundle: string): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ComputedRef, ShallowRef } from 'vue';
|
|
2
|
+
type PlacementVertical = 'top' | 'bottom' | 'auto';
|
|
3
|
+
type PlacementHorizontal = 'left' | 'center';
|
|
4
|
+
type UseStickyToolbarOptions = {
|
|
5
|
+
getPlacementY?: () => PlacementVertical;
|
|
6
|
+
getPlacementX?: () => PlacementHorizontal;
|
|
7
|
+
shouldUpdate?: () => boolean;
|
|
8
|
+
getWidth?: () => number;
|
|
9
|
+
getHeight?: () => number;
|
|
10
|
+
getMargin?: () => number;
|
|
11
|
+
getAnchorElement?: () => HTMLElement | null;
|
|
12
|
+
getCaretWidth?: () => number;
|
|
13
|
+
};
|
|
14
|
+
type UseStickyToolbar = {
|
|
15
|
+
shouldRender: ComputedRef<boolean>;
|
|
16
|
+
placementY: ComputedRef<'top' | 'bottom'>;
|
|
17
|
+
caretX: ComputedRef<number>;
|
|
18
|
+
};
|
|
19
|
+
export default function (el: Readonly<ShallowRef<HTMLElement | null>>, options?: UseStickyToolbarOptions): UseStickyToolbar;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import onBlokkliEvent from "./onBlokkliEvent.js";
|
|
2
|
+
import { computed, ref, useBlokkli } from "#imports";
|
|
3
|
+
import { falsy, findIdealRectPosition } from "../index.js";
|
|
4
|
+
const limitPlacedRect = (rect, padding) => {
|
|
5
|
+
return {
|
|
6
|
+
width: rect.width,
|
|
7
|
+
height: rect.height,
|
|
8
|
+
x: Math.min(
|
|
9
|
+
Math.max(rect.x, padding.x),
|
|
10
|
+
padding.x + padding.width - rect.width
|
|
11
|
+
),
|
|
12
|
+
y: Math.min(
|
|
13
|
+
Math.max(padding.y, rect.y),
|
|
14
|
+
padding.height + padding.y - rect.height
|
|
15
|
+
)
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export default function(el, options) {
|
|
19
|
+
const { ui, selection, dom } = useBlokkli();
|
|
20
|
+
const shouldRender = ref(false);
|
|
21
|
+
const actualPlacement = ref("bottom");
|
|
22
|
+
const caretXPosition = ref(0);
|
|
23
|
+
function getMargin() {
|
|
24
|
+
if (options && options.getMargin) {
|
|
25
|
+
return options.getMargin();
|
|
26
|
+
}
|
|
27
|
+
return 15;
|
|
28
|
+
}
|
|
29
|
+
function getCaretWidth() {
|
|
30
|
+
if (options && options.getCaretWidth) {
|
|
31
|
+
return options.getCaretWidth();
|
|
32
|
+
}
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
let anchorRect = null;
|
|
36
|
+
function getCoords(width, height, placementY, placementX, offset, scale) {
|
|
37
|
+
let minX = 0;
|
|
38
|
+
let maxX = 0;
|
|
39
|
+
let minY = 0;
|
|
40
|
+
let maxY = 0;
|
|
41
|
+
let hasRects = false;
|
|
42
|
+
if (options && options.getAnchorElement) {
|
|
43
|
+
const anchorElement = options.getAnchorElement();
|
|
44
|
+
if (anchorElement) {
|
|
45
|
+
anchorRect ||= ui.getAbsoluteElementRect(
|
|
46
|
+
anchorElement.getBoundingClientRect(),
|
|
47
|
+
scale,
|
|
48
|
+
offset
|
|
49
|
+
);
|
|
50
|
+
const rectX = (anchorRect.x + offset.x / scale) * scale;
|
|
51
|
+
const rectY = (anchorRect.y + offset.y / scale) * scale;
|
|
52
|
+
const rectRight = rectX + anchorRect.width * scale;
|
|
53
|
+
const rectBottom = rectY + anchorRect.height * scale;
|
|
54
|
+
minX = rectX;
|
|
55
|
+
maxX = rectRight;
|
|
56
|
+
minY = rectY;
|
|
57
|
+
maxY = rectBottom;
|
|
58
|
+
hasRects = true;
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
const rects = selection.blocks.value.map((block) => dom.getBlockRect(block.uuid)).filter(falsy).filter((rect2) => rect2.height || rect2.width);
|
|
62
|
+
hasRects = !!rects.length;
|
|
63
|
+
if (hasRects) {
|
|
64
|
+
for (let i = 0; i < rects.length; i++) {
|
|
65
|
+
const { x: x2, y: y2, height: height2, width: rectWidth } = rects[i];
|
|
66
|
+
const rectX = (x2 + offset.x / scale) * scale;
|
|
67
|
+
const rectY = (y2 + offset.y / scale) * scale;
|
|
68
|
+
const rectRight = rectX + rectWidth * scale;
|
|
69
|
+
const rectBottom = rectY + height2 * scale;
|
|
70
|
+
if (i === 0 || rectX < minX) {
|
|
71
|
+
minX = rectX;
|
|
72
|
+
}
|
|
73
|
+
if (i === 0 || rectRight > maxX) {
|
|
74
|
+
maxX = rectRight;
|
|
75
|
+
}
|
|
76
|
+
if (i === 0 || rectY < minY) {
|
|
77
|
+
minY = rectY;
|
|
78
|
+
}
|
|
79
|
+
if (i === 0 || rectBottom > maxY) {
|
|
80
|
+
maxY = rectBottom;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
if (!selection.hasHostSelected.value) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
minX = offset.x;
|
|
88
|
+
maxX = minX + ui.artboardSize.value.width;
|
|
89
|
+
minY = offset.y;
|
|
90
|
+
maxY = minY + ui.artboardSize.value.height;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const padding = ui.visibleViewportPadded.value;
|
|
94
|
+
const xSubtract = hasRects ? 5 * Math.min(scale, 1) : 0;
|
|
95
|
+
const margin = getMargin() * Math.min(scale, 1);
|
|
96
|
+
let actualPlacementY = placementY === "auto" ? "bottom" : placementY;
|
|
97
|
+
if (placementY === "auto") {
|
|
98
|
+
const spaceAbove = minY - padding.y;
|
|
99
|
+
const spaceBelow = padding.y + padding.height - maxY;
|
|
100
|
+
const requiredSpace = height + margin;
|
|
101
|
+
if (spaceBelow >= requiredSpace) {
|
|
102
|
+
actualPlacementY = "bottom";
|
|
103
|
+
} else if (spaceAbove >= requiredSpace) {
|
|
104
|
+
actualPlacementY = "top";
|
|
105
|
+
} else {
|
|
106
|
+
actualPlacementY = spaceAbove > spaceBelow ? "top" : "bottom";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const y = actualPlacementY === "top" ? minY - height - margin : maxY + margin;
|
|
110
|
+
const centerX = (minX + maxX) / 2;
|
|
111
|
+
let x;
|
|
112
|
+
if (placementX === "center") {
|
|
113
|
+
x = centerX - width / 2;
|
|
114
|
+
} else {
|
|
115
|
+
x = minX - xSubtract;
|
|
116
|
+
}
|
|
117
|
+
const rect = limitPlacedRect(
|
|
118
|
+
{
|
|
119
|
+
x,
|
|
120
|
+
y,
|
|
121
|
+
width,
|
|
122
|
+
height
|
|
123
|
+
},
|
|
124
|
+
padding
|
|
125
|
+
);
|
|
126
|
+
const idealPosition = findIdealRectPosition(
|
|
127
|
+
ui.viewportBlockingRects.value,
|
|
128
|
+
rect,
|
|
129
|
+
padding
|
|
130
|
+
);
|
|
131
|
+
if (!idealPosition) {
|
|
132
|
+
return void 0;
|
|
133
|
+
}
|
|
134
|
+
const caretWidth = getCaretWidth();
|
|
135
|
+
const caretHalfWidth = caretWidth / 2;
|
|
136
|
+
const minCaretX = caretHalfWidth;
|
|
137
|
+
const maxCaretX = width - caretHalfWidth;
|
|
138
|
+
const caretX = Math.max(
|
|
139
|
+
minCaretX,
|
|
140
|
+
Math.min(centerX - idealPosition.x, maxCaretX)
|
|
141
|
+
);
|
|
142
|
+
return { ...idealPosition, actualPlacementY, caretX };
|
|
143
|
+
}
|
|
144
|
+
function getWidth() {
|
|
145
|
+
if (options && options.getWidth) {
|
|
146
|
+
return options.getWidth();
|
|
147
|
+
}
|
|
148
|
+
if (el.value) {
|
|
149
|
+
return el.value.clientWidth;
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
function getHeight() {
|
|
154
|
+
if (options && options.getHeight) {
|
|
155
|
+
return options.getHeight();
|
|
156
|
+
}
|
|
157
|
+
if (el.value) {
|
|
158
|
+
return el.value.clientHeight;
|
|
159
|
+
}
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
function getPlacementVertical() {
|
|
163
|
+
if (options && options.getPlacementY) {
|
|
164
|
+
return options.getPlacementY();
|
|
165
|
+
}
|
|
166
|
+
return "top";
|
|
167
|
+
}
|
|
168
|
+
function getPlacementHorizontal() {
|
|
169
|
+
if (options && options.getPlacementX) {
|
|
170
|
+
return options.getPlacementX();
|
|
171
|
+
}
|
|
172
|
+
return "left";
|
|
173
|
+
}
|
|
174
|
+
onBlokkliEvent("canvas:draw", (ctx) => {
|
|
175
|
+
if (!el.value) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (ui.isMobile.value) {
|
|
179
|
+
el.value.style.transform = "";
|
|
180
|
+
shouldRender.value = true;
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (options && options.shouldUpdate && !options.shouldUpdate()) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const width = getWidth();
|
|
187
|
+
const height = getHeight();
|
|
188
|
+
if (width === null || height === null) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const placementY = getPlacementVertical();
|
|
192
|
+
const placementX = getPlacementHorizontal();
|
|
193
|
+
const coords = getCoords(
|
|
194
|
+
width,
|
|
195
|
+
height,
|
|
196
|
+
placementY,
|
|
197
|
+
placementX,
|
|
198
|
+
ctx.artboardOffset,
|
|
199
|
+
ctx.artboardScale
|
|
200
|
+
);
|
|
201
|
+
if (!coords) {
|
|
202
|
+
shouldRender.value = false;
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
el.value.style.transform = `translate3d(${coords.x}px, ${coords.y}px, 0)`;
|
|
206
|
+
actualPlacement.value = coords.actualPlacementY;
|
|
207
|
+
caretXPosition.value = coords.caretX;
|
|
208
|
+
shouldRender.value = true;
|
|
209
|
+
});
|
|
210
|
+
return {
|
|
211
|
+
shouldRender: computed(() => shouldRender.value),
|
|
212
|
+
placementY: computed(() => actualPlacement.value),
|
|
213
|
+
caretX: computed(() => caretXPosition.value)
|
|
214
|
+
};
|
|
215
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Ref, type ComputedRef } from '#imports';
|
|
2
|
-
import type { BlockDefinition, FragmentDefinition } from '#blokkli-build/definitions';
|
|
2
|
+
import type { BlockDefinition, FragmentDefinition, ProviderDefinition } from '#blokkli-build/definitions';
|
|
3
3
|
import type { ValidFieldListTypes, BlockBundleWithNested } from '#blokkli-build/generated-types';
|
|
4
4
|
import type { DeepReadonly } from 'vue';
|
|
5
5
|
import type { BlockDefinitionOptionsInput } from '../types/index.js';
|
|
@@ -8,6 +8,7 @@ export type DefinitionProvider = {
|
|
|
8
8
|
getBlockDefinition: (bundle: string, fieldListType: ValidFieldListTypes, parentBundle?: BlockBundleWithNested) => BlockDefinition | undefined;
|
|
9
9
|
getDefaultDefinition: (bundle: string) => BlockDefinition | undefined;
|
|
10
10
|
getFragmentDefinition: (name: string) => FragmentDefinition | undefined;
|
|
11
|
+
getProviderDefinition: (entityType: string, entityBundle: string) => ProviderDefinition | undefined;
|
|
11
12
|
getBlockIcon: (bundle: string) => string | undefined;
|
|
12
13
|
fragmentDefinitions: ComputedRef<FragmentDefinition[]>;
|
|
13
14
|
blockDefinitions: ComputedRef<BlockDefinition[]>;
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
export default function() {
|
|
7
7
|
const blocks = ref(definitions.blocks);
|
|
8
8
|
const fragments = ref(definitions.fragments);
|
|
9
|
+
const providers = ref(definitions.providers);
|
|
9
10
|
const renderKey = ref(definitions.renderKey);
|
|
10
11
|
const blockIcons = ref(definitions.icons);
|
|
11
12
|
const allGlobalOptions = ref(
|
|
@@ -18,6 +19,7 @@ export default function() {
|
|
|
18
19
|
renderKey.value = newDefinitions?.default.renderKey || "";
|
|
19
20
|
blocks.value = newDefinitions?.default?.blocks || [];
|
|
20
21
|
fragments.value = newDefinitions?.default?.fragments || [];
|
|
22
|
+
providers.value = newDefinitions?.default?.providers || [];
|
|
21
23
|
blockIcons.value = newDefinitions?.default?.icons || {};
|
|
22
24
|
allGlobalOptions.value = newDefinitions?.default?.globalOptions || {};
|
|
23
25
|
});
|
|
@@ -57,6 +59,16 @@ export default function() {
|
|
|
57
59
|
{}
|
|
58
60
|
)
|
|
59
61
|
);
|
|
62
|
+
const providersByName = computed(
|
|
63
|
+
() => providers.value.reduce(
|
|
64
|
+
(acc, definition) => {
|
|
65
|
+
const key = `${definition.entityType}:${definition.bundle}`;
|
|
66
|
+
acc[key] = definition;
|
|
67
|
+
return acc;
|
|
68
|
+
},
|
|
69
|
+
{}
|
|
70
|
+
)
|
|
71
|
+
);
|
|
60
72
|
function getBlockDefinition(bundle, fieldListType, parentBundle) {
|
|
61
73
|
const forFieldListType = bundle + "__field:" + fieldListType;
|
|
62
74
|
if (blocksByKey.value[forFieldListType]) {
|
|
@@ -73,6 +85,10 @@ export default function() {
|
|
|
73
85
|
function getFragmentDefinition(name) {
|
|
74
86
|
return fragmentsByName.value[name];
|
|
75
87
|
}
|
|
88
|
+
function getProviderDefinition(entityType, entityBundle) {
|
|
89
|
+
const key = `${entityType}:${entityBundle}`;
|
|
90
|
+
return providersByName.value[key];
|
|
91
|
+
}
|
|
76
92
|
function getDefaultDefinition(bundle) {
|
|
77
93
|
return blocksByKey.value[bundle];
|
|
78
94
|
}
|
|
@@ -82,6 +98,7 @@ export default function() {
|
|
|
82
98
|
return {
|
|
83
99
|
getBlockDefinition,
|
|
84
100
|
getFragmentDefinition,
|
|
101
|
+
getProviderDefinition,
|
|
85
102
|
getDefaultDefinition,
|
|
86
103
|
getBlockIcon,
|
|
87
104
|
fragmentDefinitions: computed(() => fragments.value),
|
|
@@ -26,6 +26,7 @@ export type DomProvider = {
|
|
|
26
26
|
updateFieldElement: (entity: EntityContext, fieldName: string, element: HTMLElement) => void;
|
|
27
27
|
unregisterField: (entity: EntityContext, fieldName: string) => void;
|
|
28
28
|
registeredFieldTypes: ComputedRef<RegisteredFieldType[]>;
|
|
29
|
+
registeredBlockUuids: ComputedRef<string[]>;
|
|
29
30
|
/**
|
|
30
31
|
* Get all droppable entity fields.
|
|
31
32
|
*/
|
|
@@ -36,7 +37,7 @@ export type DomProvider = {
|
|
|
36
37
|
isBlockVisible(uuid: string): boolean;
|
|
37
38
|
getActiveProviderElement: () => HTMLElement;
|
|
38
39
|
getBlockRects: () => Record<string, MeasuredBlockRect>;
|
|
39
|
-
getBlockRect: (uuid: string) => MeasuredBlockRect | undefined;
|
|
40
|
+
getBlockRect: (uuid: string, refresh?: boolean) => MeasuredBlockRect | undefined;
|
|
40
41
|
refreshBlockRect: (uuid: string) => void;
|
|
41
42
|
getFieldRect: (key: string) => Rectangle | undefined;
|
|
42
43
|
updateVisibleRects: () => void;
|
|
@@ -52,12 +52,25 @@ export default function(ui, debug, definitions) {
|
|
|
52
52
|
const logger = debug.createLogger("DomProvider");
|
|
53
53
|
const mutationsReady = ref(true);
|
|
54
54
|
const intersectionReady = ref(false);
|
|
55
|
+
const registeredBlocks = reactive({});
|
|
56
|
+
const registeredFields = reactive({});
|
|
55
57
|
const visibleBlocks = /* @__PURE__ */ new Set();
|
|
56
58
|
const visibleFields = /* @__PURE__ */ new Set();
|
|
57
59
|
const blockRects = {};
|
|
58
60
|
const fieldRects = {};
|
|
59
61
|
const blockUuidCurrentKey = {};
|
|
60
62
|
let draggableBlockCache = {};
|
|
63
|
+
let initTimeout = null;
|
|
64
|
+
const isInitalizing = ref(true);
|
|
65
|
+
const observedElementCache = /* @__PURE__ */ new Map();
|
|
66
|
+
const registeredBlockUuids = computed(() => {
|
|
67
|
+
return Object.entries(registeredBlocks).map(([uuid, element]) => {
|
|
68
|
+
if (element) {
|
|
69
|
+
return uuid;
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}).filter(falsy);
|
|
73
|
+
});
|
|
61
74
|
const resizeObserver = new ResizeObserver(function(entries) {
|
|
62
75
|
for (const entry of entries) {
|
|
63
76
|
if (!(entry.target instanceof HTMLElement)) {
|
|
@@ -127,8 +140,6 @@ export default function(ui, debug, definitions) {
|
|
|
127
140
|
}
|
|
128
141
|
}
|
|
129
142
|
const intersectionObserver = useDelayedIntersectionObserver(intersectionCallback);
|
|
130
|
-
const registeredBlocks = reactive({});
|
|
131
|
-
const registeredFields = reactive({});
|
|
132
143
|
const registeredFieldTypes = computed(() => {
|
|
133
144
|
const fields = Object.values(registeredFields);
|
|
134
145
|
const found = /* @__PURE__ */ new Set();
|
|
@@ -172,10 +183,15 @@ export default function(ui, debug, definitions) {
|
|
|
172
183
|
visibleFields.delete(key);
|
|
173
184
|
registeredFields[key] = void 0;
|
|
174
185
|
};
|
|
175
|
-
function getElementToObserve(el, bundle, fieldListType, parentBlockBundle) {
|
|
186
|
+
function getElementToObserve(uuid, el, bundle, fieldListType, parentBlockBundle) {
|
|
176
187
|
if (el.classList.contains("bk-block-proxy")) {
|
|
177
188
|
return el;
|
|
178
189
|
}
|
|
190
|
+
const key = `${uuid}${bundle}${fieldListType}${parentBlockBundle ?? "none"}`;
|
|
191
|
+
const cached = observedElementCache.get(key);
|
|
192
|
+
if (cached) {
|
|
193
|
+
return cached;
|
|
194
|
+
}
|
|
179
195
|
const definition = definitions.getBlockDefinition(
|
|
180
196
|
bundle,
|
|
181
197
|
fieldListType,
|
|
@@ -186,8 +202,10 @@ export default function(ui, debug, definitions) {
|
|
|
186
202
|
}
|
|
187
203
|
const observableElement = (definition.editor?.getDraggableElement ? definition.editor.getDraggableElement(el) : el) || el;
|
|
188
204
|
if (observableElement instanceof HTMLElement) {
|
|
205
|
+
observedElementCache.set(key, observableElement);
|
|
189
206
|
return observableElement;
|
|
190
207
|
}
|
|
208
|
+
observedElementCache.set(key, el);
|
|
191
209
|
return el;
|
|
192
210
|
}
|
|
193
211
|
const findBlock = (uuid) => {
|
|
@@ -261,23 +279,41 @@ export default function(ui, debug, definitions) {
|
|
|
261
279
|
function getBlockRects() {
|
|
262
280
|
return blockRects;
|
|
263
281
|
}
|
|
264
|
-
function getBlockRect(uuid) {
|
|
282
|
+
function getBlockRect(uuid, refresh) {
|
|
283
|
+
if (refresh) {
|
|
284
|
+
refreshBlockRect(uuid);
|
|
285
|
+
}
|
|
265
286
|
return blockRects[uuid];
|
|
266
287
|
}
|
|
267
288
|
function getFieldRect(key) {
|
|
268
289
|
return fieldRects[key];
|
|
269
290
|
}
|
|
270
|
-
function refreshBlockRect(uuid) {
|
|
271
|
-
const
|
|
272
|
-
|
|
291
|
+
function refreshBlockRect(uuid, providedOffset, providedScale) {
|
|
292
|
+
const offset = providedOffset ?? ui.artboardOffset.value;
|
|
293
|
+
const scale = providedScale ?? ui.artboardScale.value;
|
|
294
|
+
const el = registeredBlocks[uuid];
|
|
295
|
+
if (!el) {
|
|
273
296
|
return;
|
|
274
297
|
}
|
|
275
|
-
const
|
|
276
|
-
|
|
298
|
+
const bundle = el.dataset.itemBundle;
|
|
299
|
+
const hostBundle = el.dataset.hostBundle;
|
|
300
|
+
const hostFieldListType = el.dataset.hostFieldListType;
|
|
301
|
+
if (!bundle || !hostFieldListType) {
|
|
277
302
|
return;
|
|
278
303
|
}
|
|
304
|
+
const observableElement = getElementToObserve(
|
|
305
|
+
uuid,
|
|
306
|
+
el,
|
|
307
|
+
bundle,
|
|
308
|
+
hostFieldListType,
|
|
309
|
+
hostBundle
|
|
310
|
+
);
|
|
279
311
|
blockRects[uuid] = rectWithTime(
|
|
280
|
-
ui.getAbsoluteElementRect(
|
|
312
|
+
ui.getAbsoluteElementRect(
|
|
313
|
+
observableElement.getBoundingClientRect(),
|
|
314
|
+
scale,
|
|
315
|
+
offset
|
|
316
|
+
)
|
|
281
317
|
);
|
|
282
318
|
}
|
|
283
319
|
function refreshFieldRect(key) {
|
|
@@ -298,34 +334,15 @@ export default function(ui, debug, definitions) {
|
|
|
298
334
|
return getVisibleBlocks();
|
|
299
335
|
}
|
|
300
336
|
function updateVisibleRects() {
|
|
337
|
+
logger.log("Update visible rects");
|
|
301
338
|
const toUpdate = getUuidsToUpdateRectsFor();
|
|
302
339
|
const offset = ui.artboardOffset.value;
|
|
303
340
|
const scale = ui.artboardScale.value;
|
|
304
341
|
for (let i = 0; i < toUpdate.length; i++) {
|
|
305
342
|
const uuid = toUpdate[i];
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
continue;
|
|
343
|
+
if (uuid) {
|
|
344
|
+
refreshBlockRect(uuid, offset, scale);
|
|
309
345
|
}
|
|
310
|
-
const bundle = el.dataset.itemBundle;
|
|
311
|
-
const hostBundle = el.dataset.hostBundle;
|
|
312
|
-
const hostFieldListType = el.dataset.hostFieldListType;
|
|
313
|
-
if (!bundle || !hostFieldListType) {
|
|
314
|
-
continue;
|
|
315
|
-
}
|
|
316
|
-
const observableElement = getElementToObserve(
|
|
317
|
-
el,
|
|
318
|
-
bundle,
|
|
319
|
-
hostFieldListType,
|
|
320
|
-
hostBundle
|
|
321
|
-
);
|
|
322
|
-
blockRects[uuid] = rectWithTime(
|
|
323
|
-
ui.getAbsoluteElementRect(
|
|
324
|
-
observableElement.getBoundingClientRect(),
|
|
325
|
-
scale,
|
|
326
|
-
offset
|
|
327
|
-
)
|
|
328
|
-
);
|
|
329
346
|
}
|
|
330
347
|
const visibleFieldKeys = getVisibleFields();
|
|
331
348
|
for (let i = 0; i < visibleFieldKeys.length; i++) {
|
|
@@ -342,10 +359,15 @@ export default function(ui, debug, definitions) {
|
|
|
342
359
|
}
|
|
343
360
|
}
|
|
344
361
|
onBlokkliEvent("state:reloaded", () => {
|
|
362
|
+
observedElementCache.clear();
|
|
345
363
|
draggableBlockCache = {};
|
|
346
364
|
if (stateReloadTimeout) {
|
|
347
365
|
window.clearTimeout(stateReloadTimeout);
|
|
348
366
|
}
|
|
367
|
+
const allUuids = Object.keys(registeredBlocks);
|
|
368
|
+
if (allUuids.length < 150) {
|
|
369
|
+
updateVisibleRects();
|
|
370
|
+
}
|
|
349
371
|
stateReloadTimeout = window.setTimeout(updateVisibleRects, 300);
|
|
350
372
|
});
|
|
351
373
|
onBlokkliEvent("ui:resized", function() {
|
|
@@ -361,24 +383,45 @@ export default function(ui, debug, definitions) {
|
|
|
361
383
|
const dragElementUuidMap = /* @__PURE__ */ new WeakMap();
|
|
362
384
|
const dragElementCache = /* @__PURE__ */ new Map();
|
|
363
385
|
function getDragElement(block) {
|
|
364
|
-
const cached = dragElementCache.get(block.uuid);
|
|
365
|
-
if (cached && document.body.contains(cached)) {
|
|
366
|
-
return cached;
|
|
367
|
-
}
|
|
368
386
|
const el = block.element();
|
|
369
387
|
if (!el) {
|
|
370
|
-
return;
|
|
388
|
+
return void 0;
|
|
371
389
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
390
|
+
return getElementToObserve(
|
|
391
|
+
block.uuid,
|
|
392
|
+
el,
|
|
393
|
+
block.itemBundle,
|
|
394
|
+
block.hostFieldListType,
|
|
395
|
+
block.hostBundle
|
|
396
|
+
);
|
|
375
397
|
}
|
|
376
398
|
function isBlockVisible(uuid) {
|
|
377
399
|
return visibleBlocks.has(uuid);
|
|
378
400
|
}
|
|
401
|
+
function refreshAllBlockRects() {
|
|
402
|
+
const uuids = Object.keys(blockRects);
|
|
403
|
+
if (uuids.length < 200) {
|
|
404
|
+
for (let i = 0; i < uuids.length; i++) {
|
|
405
|
+
const uuid = uuids[i];
|
|
406
|
+
if (!uuid) {
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
refreshBlockRect(uuid);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
379
413
|
function registerBlock(key, uuid, el) {
|
|
380
414
|
logger.log("registerBlock: " + uuid);
|
|
381
415
|
blockUuidCurrentKey[uuid] = key;
|
|
416
|
+
if (initTimeout) {
|
|
417
|
+
window.clearTimeout(initTimeout);
|
|
418
|
+
}
|
|
419
|
+
if (isInitalizing.value) {
|
|
420
|
+
initTimeout = window.setTimeout(() => {
|
|
421
|
+
isInitalizing.value = false;
|
|
422
|
+
refreshAllBlockRects();
|
|
423
|
+
}, 500);
|
|
424
|
+
}
|
|
382
425
|
if (!el) {
|
|
383
426
|
logger.log("registerBlock call unregisterBlock because no element", uuid);
|
|
384
427
|
unregisterBlock(key, uuid);
|
|
@@ -394,6 +437,7 @@ export default function(ui, debug, definitions) {
|
|
|
394
437
|
const item = buildDraggableItem(el);
|
|
395
438
|
if (item && item.itemType === "existing") {
|
|
396
439
|
const observableElement = getElementToObserve(
|
|
440
|
+
item.uuid,
|
|
397
441
|
el,
|
|
398
442
|
item.itemBundle,
|
|
399
443
|
item.hostFieldListType,
|
|
@@ -415,7 +459,6 @@ export default function(ui, debug, definitions) {
|
|
|
415
459
|
intersectionObserver.unobserve(el);
|
|
416
460
|
resizeObserver.unobserve(el);
|
|
417
461
|
dragElementUuidMap.delete(el);
|
|
418
|
-
dragElementUuidMap.delete(el);
|
|
419
462
|
}
|
|
420
463
|
dragElementCache.delete(uuid);
|
|
421
464
|
registeredBlocks[uuid] = void 0;
|
|
@@ -441,12 +484,15 @@ export default function(ui, debug, definitions) {
|
|
|
441
484
|
getFieldRect,
|
|
442
485
|
refreshBlockRect,
|
|
443
486
|
isBlockVisible,
|
|
444
|
-
isReady: computed(
|
|
487
|
+
isReady: computed(
|
|
488
|
+
() => mutationsReady.value && intersectionReady.value && !isInitalizing.value
|
|
489
|
+
),
|
|
445
490
|
init,
|
|
446
491
|
getDragElement,
|
|
447
492
|
updateVisibleRects,
|
|
448
493
|
registeredFieldTypes,
|
|
449
494
|
registerBlock,
|
|
450
|
-
unregisterBlock
|
|
495
|
+
unregisterBlock,
|
|
496
|
+
registeredBlockUuids
|
|
451
497
|
};
|
|
452
498
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BlokkliFieldElement } from '#blokkli/types';
|
|
2
|
+
export type Orientation = 'horizontal' | 'vertical';
|
|
3
|
+
export declare const MIN_GAP = 20;
|
|
4
|
+
export declare function getGapSize(orientation: Orientation, element: HTMLElement): number;
|
|
5
|
+
export declare function getChildrenOrientation(element: HTMLElement): Orientation;
|
|
6
|
+
export declare function determineCanAddChildren(field: BlokkliFieldElement, children: HTMLElement[], uuids: string[], currentCount: number, itemsToAdd: number, draggingBundles?: string[]): boolean;
|