@blokkli/editor 2.0.0-alpha.12 → 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 +5 -5
- package/dist/module.mjs +4006 -1164
- 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 +4 -4
- 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 +45 -8
- 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 +15 -10
- 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/dom/index.d.ts +59 -0
- package/dist/runtime/helpers/dom/index.js +48 -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 +55 -38
- 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
|
@@ -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;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const MIN_GAP = 20;
|
|
2
|
+
export function getGapSize(orientation, element) {
|
|
3
|
+
const computedStyle = window.getComputedStyle(element);
|
|
4
|
+
if (computedStyle.display.includes("grid") || computedStyle.display.includes("flex")) {
|
|
5
|
+
const gap = orientation === "vertical" ? computedStyle.columnGap || computedStyle.gridColumnGap : computedStyle.rowGap || computedStyle.gridRowGap;
|
|
6
|
+
if (gap) {
|
|
7
|
+
const gapParts = gap.split(" ");
|
|
8
|
+
const gapValue = gapParts[0];
|
|
9
|
+
if (gapValue?.endsWith("px")) {
|
|
10
|
+
return Number.parseFloat(gapValue);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return MIN_GAP;
|
|
15
|
+
}
|
|
16
|
+
export function getChildrenOrientation(element) {
|
|
17
|
+
const computedStyle = window.getComputedStyle(element);
|
|
18
|
+
if (computedStyle.display.includes("flex")) {
|
|
19
|
+
if (computedStyle.flexDirection === "row" || computedStyle.flexDirection === "row-reverse") {
|
|
20
|
+
return "horizontal";
|
|
21
|
+
} else {
|
|
22
|
+
return "vertical";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (computedStyle.display.includes("grid")) {
|
|
26
|
+
if (computedStyle.gridTemplateColumns.split(" ").length > 1) {
|
|
27
|
+
return "horizontal";
|
|
28
|
+
} else {
|
|
29
|
+
return "vertical";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return "vertical";
|
|
33
|
+
}
|
|
34
|
+
export function determineCanAddChildren(field, children, uuids, currentCount, itemsToAdd, draggingBundles) {
|
|
35
|
+
if (field.cardinality !== -1) {
|
|
36
|
+
const childrenThatAreSelection = children.filter((child) => {
|
|
37
|
+
const uuid = child.dataset.uuid;
|
|
38
|
+
if (!uuid) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return uuids.includes(uuid);
|
|
42
|
+
}).length;
|
|
43
|
+
const countAfter = currentCount - childrenThatAreSelection + itemsToAdd;
|
|
44
|
+
if (countAfter > field.cardinality) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return !draggingBundles?.length || draggingBundles.every((bundle) => field.allowedBundles.includes(bundle));
|
|
49
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { EventbusEvents } from '#blokkli/types';
|
|
2
2
|
export declare const eventBus: import("mitt").Emitter<EventbusEvents>;
|
|
3
|
-
export declare const emitMessage: (message: string, type?: "success" | "error", additional?: string | Error | unknown) => void;
|
|
3
|
+
export declare const emitMessage: (message: string, type?: "success" | "error", additional?: string | Error | unknown, replace?: boolean) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import mitt from "mitt";
|
|
2
2
|
export const eventBus = mitt();
|
|
3
|
-
export const emitMessage = (message, type = "success", additional) => {
|
|
4
|
-
eventBus.emit("message", { type, message, additional });
|
|
3
|
+
export const emitMessage = (message, type = "success", additional, replace) => {
|
|
4
|
+
eventBus.emit("message", { type, message, additional, replace });
|
|
5
5
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DraggableItem, Rectangle, DroppableEntityField, DraggableExistingBlock, EntityContext, Coord, LibraryItemProps } from '#blokkli/types';
|
|
1
|
+
import type { DraggableItem, Rectangle, DroppableEntityField, DraggableExistingBlock, EntityContext, Coord, LibraryItemProps, Size } from '#blokkli/types';
|
|
2
2
|
import type { RGB } from '#blokkli/types/theme';
|
|
3
3
|
/**
|
|
4
4
|
* Type check for falsy values.
|
|
@@ -39,6 +39,15 @@ export declare function distanceToRectangle(x: number, y: number, rect: Rectangl
|
|
|
39
39
|
* Return the distance from the given coordinates to the center of the rectangle.
|
|
40
40
|
*/
|
|
41
41
|
export declare function distanceToClosestRectangleEdge(x: number, y: number, rect: Rectangle): number;
|
|
42
|
+
/**
|
|
43
|
+
* Subtracts a rectangle from a viewport and returns the remaining area as rectangles.
|
|
44
|
+
* The viewport is assumed to have x=0 and y=0.
|
|
45
|
+
*
|
|
46
|
+
* @param viewport - The size of the viewport to subtract from
|
|
47
|
+
* @param rect - The rectangle to subtract
|
|
48
|
+
* @returns An array of 0 to 4 rectangles representing the area outside of rect
|
|
49
|
+
*/
|
|
50
|
+
export declare function subtractRectFromViewport(viewport: Size, rect: Rectangle): Rectangle[];
|
|
42
51
|
export declare function getDistance(a: Coord, b: Coord): number;
|
|
43
52
|
export declare const parseColorString: (color: string) => RGB | undefined;
|
|
44
53
|
/**
|
|
@@ -234,6 +234,63 @@ export function distanceToClosestRectangleEdge(x, y, rect) {
|
|
|
234
234
|
const dy = Math.max(minY - y, 0, y - maxY);
|
|
235
235
|
return Math.sqrt(dx * dx + dy * dy);
|
|
236
236
|
}
|
|
237
|
+
export function subtractRectFromViewport(viewport, rect) {
|
|
238
|
+
const viewportLeft = 0;
|
|
239
|
+
const viewportTop = 0;
|
|
240
|
+
const viewportRight = viewport.width;
|
|
241
|
+
const viewportBottom = viewport.height;
|
|
242
|
+
const intersectLeft = Math.max(viewportLeft, rect.x);
|
|
243
|
+
const intersectTop = Math.max(viewportTop, rect.y);
|
|
244
|
+
const intersectRight = Math.min(viewportRight, rect.x + rect.width);
|
|
245
|
+
const intersectBottom = Math.min(viewportBottom, rect.y + rect.height);
|
|
246
|
+
if (intersectLeft >= intersectRight || intersectTop >= intersectBottom) {
|
|
247
|
+
return [
|
|
248
|
+
{
|
|
249
|
+
x: 0,
|
|
250
|
+
y: 0,
|
|
251
|
+
width: viewport.width,
|
|
252
|
+
height: viewport.height
|
|
253
|
+
}
|
|
254
|
+
];
|
|
255
|
+
}
|
|
256
|
+
if (intersectLeft <= viewportLeft && intersectTop <= viewportTop && intersectRight >= viewportRight && intersectBottom >= viewportBottom) {
|
|
257
|
+
return [];
|
|
258
|
+
}
|
|
259
|
+
const result = [];
|
|
260
|
+
if (intersectTop > viewportTop) {
|
|
261
|
+
result.push({
|
|
262
|
+
x: viewportLeft,
|
|
263
|
+
y: viewportTop,
|
|
264
|
+
width: viewport.width,
|
|
265
|
+
height: intersectTop - viewportTop
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
if (intersectBottom < viewportBottom) {
|
|
269
|
+
result.push({
|
|
270
|
+
x: viewportLeft,
|
|
271
|
+
y: intersectBottom,
|
|
272
|
+
width: viewport.width,
|
|
273
|
+
height: viewportBottom - intersectBottom
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
if (intersectLeft > viewportLeft) {
|
|
277
|
+
result.push({
|
|
278
|
+
x: viewportLeft,
|
|
279
|
+
y: intersectTop,
|
|
280
|
+
width: intersectLeft - viewportLeft,
|
|
281
|
+
height: intersectBottom - intersectTop
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
if (intersectRight < viewportRight) {
|
|
285
|
+
result.push({
|
|
286
|
+
x: intersectRight,
|
|
287
|
+
y: intersectTop,
|
|
288
|
+
width: viewportRight - intersectRight,
|
|
289
|
+
height: intersectBottom - intersectTop
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
237
294
|
export function getDistance(a, b) {
|
|
238
295
|
const dx = a.x - b.x;
|
|
239
296
|
const dy = a.y - b.y;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import type { BlockIndicator } from '../types/index.js';
|
|
3
|
+
export type IndicatorsProvider = {
|
|
4
|
+
indicators: Ref<BlockIndicator[]>;
|
|
5
|
+
hovered: Ref<string>;
|
|
6
|
+
addIndicator: (indicator: BlockIndicator) => void;
|
|
7
|
+
removeIndicator: (id: string, uuid: string) => void;
|
|
8
|
+
setHovered: (uuid?: string | null) => void;
|
|
9
|
+
};
|
|
10
|
+
export default function (): IndicatorsProvider;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ref } from "vue";
|
|
2
|
+
export default function() {
|
|
3
|
+
const indicators = ref([]);
|
|
4
|
+
const hovered = ref("");
|
|
5
|
+
function addIndicator(indicator) {
|
|
6
|
+
indicators.value.push(indicator);
|
|
7
|
+
}
|
|
8
|
+
function removeIndicator(id, uuid) {
|
|
9
|
+
indicators.value = indicators.value.filter(
|
|
10
|
+
(v) => v.id !== id || v.uuid !== uuid
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
function setHovered(uuid) {
|
|
14
|
+
hovered.value = uuid ?? "";
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
indicators,
|
|
18
|
+
hovered,
|
|
19
|
+
addIndicator,
|
|
20
|
+
removeIndicator,
|
|
21
|
+
setHovered
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -13,6 +13,8 @@ export type KeyboardProvider = {
|
|
|
13
13
|
shortcuts: ComputedRef<RegisteredShortcut[]>;
|
|
14
14
|
registerShortcut: (shortcut: KeyboardShortcut) => void;
|
|
15
15
|
unregisterShortcut: (shortcut: KeyboardShortcut) => void;
|
|
16
|
+
lockKeyboardEvents: (id: string) => void;
|
|
17
|
+
unlockKeyboardEvents: (id: string) => void;
|
|
16
18
|
};
|
|
17
19
|
export default function (animationProvider: AnimationProvider): KeyboardProvider;
|
|
18
20
|
export {};
|
|
@@ -18,6 +18,8 @@ export default function(animationProvider) {
|
|
|
18
18
|
const isPressingSpace = ref(false);
|
|
19
19
|
const isPressingShift = ref(false);
|
|
20
20
|
const registeredShortcuts = ref([]);
|
|
21
|
+
const keyboardLocks = ref([]);
|
|
22
|
+
const keyboardLocked = computed(() => !!keyboardLocks.value.length);
|
|
21
23
|
const onKeyUp = (e) => {
|
|
22
24
|
isPressingControl.value = e.getModifierState("Control") || e.getModifierState("Meta");
|
|
23
25
|
isPressingShift.value = e.getModifierState("Shift");
|
|
@@ -29,6 +31,9 @@ export default function(animationProvider) {
|
|
|
29
31
|
}
|
|
30
32
|
};
|
|
31
33
|
const onKeyDown = (e) => {
|
|
34
|
+
if (keyboardLocked.value) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
32
37
|
isPressingControl.value = getControlState(e);
|
|
33
38
|
isPressingShift.value = e.getModifierState("Shift");
|
|
34
39
|
if (!isPressingSpace.value) {
|
|
@@ -78,6 +83,15 @@ export default function(animationProvider) {
|
|
|
78
83
|
isPressingControl.value = getControlState(e);
|
|
79
84
|
isPressingShift.value = !!e.shiftKey;
|
|
80
85
|
}
|
|
86
|
+
function lockKeyboardEvents(id) {
|
|
87
|
+
if (keyboardLocks.value.includes(id)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
keyboardLocks.value.push(id);
|
|
91
|
+
}
|
|
92
|
+
function unlockKeyboardEvents(id) {
|
|
93
|
+
keyboardLocks.value = keyboardLocks.value.filter((v) => v !== id);
|
|
94
|
+
}
|
|
81
95
|
return {
|
|
82
96
|
isPressingSpace: readonly(isPressingSpace),
|
|
83
97
|
isPressingControl: readonly(isPressingControl),
|
|
@@ -85,6 +99,8 @@ export default function(animationProvider) {
|
|
|
85
99
|
shortcuts,
|
|
86
100
|
registerShortcut,
|
|
87
101
|
unregisterShortcut,
|
|
88
|
-
setShortcutStateFromEvent
|
|
102
|
+
setShortcutStateFromEvent,
|
|
103
|
+
lockKeyboardEvents,
|
|
104
|
+
unlockKeyboardEvents
|
|
89
105
|
};
|
|
90
106
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AddAction } from '#blokkli/types';
|
|
2
|
+
type PluginAddFunction<T> = () => T | T[] | undefined;
|
|
3
|
+
type AddActionFunction = PluginAddFunction<AddAction>;
|
|
4
|
+
export type PluginProvider = {
|
|
5
|
+
addAddAction: (fn: AddActionFunction) => void;
|
|
6
|
+
removeAddAction: (fn: AddActionFunction) => void;
|
|
7
|
+
getAddActions: () => AddAction[];
|
|
8
|
+
};
|
|
9
|
+
export default function (): PluginProvider;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export default function() {
|
|
2
|
+
let addActions = [];
|
|
3
|
+
function addAddAction(fn) {
|
|
4
|
+
addActions.push(fn);
|
|
5
|
+
}
|
|
6
|
+
function removeAddAction(fn) {
|
|
7
|
+
addActions = addActions.filter((v) => v !== fn);
|
|
8
|
+
}
|
|
9
|
+
function getAddActions() {
|
|
10
|
+
const actions = [];
|
|
11
|
+
for (let i = 0; i < addActions.length; i++) {
|
|
12
|
+
const callback = addActions[i];
|
|
13
|
+
if (!callback) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const result = callback();
|
|
17
|
+
if (!result) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (Array.isArray(result)) {
|
|
21
|
+
actions.push(...result);
|
|
22
|
+
} else {
|
|
23
|
+
actions.push(result);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return actions;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
addAddAction,
|
|
30
|
+
removeAddAction,
|
|
31
|
+
getAddActions
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function renderCycle(): Promise<void>;
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
bundlesWithHiddenGlobally
|
|
7
7
|
} from "#blokkli-build/default-global-options";
|
|
8
8
|
import { BK_HIDDEN_GLOBALLY, BK_VISIBLE_LANGUAGES } from "../symbols.js";
|
|
9
|
+
import { BUNDLE_FROM_LIBRARY } from "#blokkli/constants";
|
|
9
10
|
export function mapCheckboxTrue(v) {
|
|
10
11
|
return v === true || v === "1" || v === 1 || v === "true" ? "1" : "0";
|
|
11
12
|
}
|
|
@@ -82,16 +83,18 @@ export function isVisibleByOptions(item, language) {
|
|
|
82
83
|
return true;
|
|
83
84
|
}
|
|
84
85
|
export function getRuntimeOptions(item, context, fromLibraryOptions) {
|
|
85
|
-
if (item.bundle ===
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
if (item.bundle === BUNDLE_FROM_LIBRARY) {
|
|
87
|
+
if ("props" in item && item.props && "libraryItem" in item.props) {
|
|
88
|
+
const actualBlock = item.props.libraryItem?.block;
|
|
89
|
+
if (actualBlock) {
|
|
90
|
+
return getRuntimeOptions(
|
|
91
|
+
actualBlock,
|
|
92
|
+
context,
|
|
93
|
+
item.options
|
|
94
|
+
);
|
|
95
|
+
}
|
|
89
96
|
}
|
|
90
|
-
|
|
91
|
-
actualBlock,
|
|
92
|
-
context,
|
|
93
|
-
item.options
|
|
94
|
-
);
|
|
97
|
+
throw new Error("Missing block");
|
|
95
98
|
}
|
|
96
99
|
const availableOptions = OPTIONS["block:" + item.bundle] || {};
|
|
97
100
|
return Object.entries(availableOptions).reduce(
|
|
@@ -114,7 +117,7 @@ export function getRuntimeOptions(item, context, fromLibraryOptions) {
|
|
|
114
117
|
);
|
|
115
118
|
}
|
|
116
119
|
export function getActualBlock(item) {
|
|
117
|
-
if (item.bundle ===
|
|
120
|
+
if (item.bundle === BUNDLE_FROM_LIBRARY) {
|
|
118
121
|
const block = item.props.libraryItem?.block;
|
|
119
122
|
if (!block) {
|
|
120
123
|
return null;
|
|
@@ -131,7 +134,7 @@ export function getItemsforBundles(items, bundles) {
|
|
|
131
134
|
const filtered = [];
|
|
132
135
|
for (let i = 0; i < items.length; i++) {
|
|
133
136
|
const item = items[i];
|
|
134
|
-
if (item.bundle ===
|
|
137
|
+
if (item.bundle === BUNDLE_FROM_LIBRARY) {
|
|
135
138
|
const actual = getActualBlock(item);
|
|
136
139
|
if (actual && bundles.includes(actual.bundle)) {
|
|
137
140
|
filtered.push(actual);
|
|
@@ -6,6 +6,14 @@ export type SelectionProvider = {
|
|
|
6
6
|
* The currently selected UUIDs.
|
|
7
7
|
*/
|
|
8
8
|
uuids: Readonly<Ref<string[]>>;
|
|
9
|
+
/**
|
|
10
|
+
* Whether the host is currently selected.
|
|
11
|
+
*/
|
|
12
|
+
hasHostSelected: ComputedRef<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Whether anything is selected.
|
|
15
|
+
*/
|
|
16
|
+
hasAnythingSelected: ComputedRef<boolean>;
|
|
9
17
|
/**
|
|
10
18
|
* The currently selected UUIDs as a Set.
|
|
11
19
|
*/
|
|
@@ -59,5 +67,13 @@ export type SelectionProvider = {
|
|
|
59
67
|
*/
|
|
60
68
|
dragItemsBundles: ComputedRef<string[]>;
|
|
61
69
|
isBlockSelected(uuid: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Lock selection.
|
|
72
|
+
*/
|
|
73
|
+
lockSelection: (key: string) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Unlock selection.
|
|
76
|
+
*/
|
|
77
|
+
unlockSelection: (key: string) => void;
|
|
62
78
|
};
|
|
63
79
|
export default function (dom: DomProvider): SelectionProvider;
|