@blokkli/editor 2.0.0-alpha.16 → 2.0.0-alpha.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +265 -83
  3. package/dist/modules/drupal/graphql/base/fragment.blokkliProps.graphql +1 -1
  4. package/dist/modules/drupal/graphql/features/comments.graphql +11 -8
  5. package/dist/modules/drupal/runtime/adapter/index.js +2 -2
  6. package/dist/runtime/blokkliPlugins/ItemAction/index.vue +1 -3
  7. package/dist/runtime/components/Blocks/FromLibrary/index.vue +4 -2
  8. package/dist/runtime/components/BlokkliEditable.vue +22 -4
  9. package/dist/runtime/components/BlokkliProvider.vue +29 -20
  10. package/dist/runtime/components/BlokkliProvider.vue.d.ts +2 -1
  11. package/dist/runtime/components/Edit/Actions/index.vue +9 -4
  12. package/dist/runtime/components/Edit/AnimationCanvas/index.vue +420 -25
  13. package/dist/runtime/components/Edit/ArtboardTooltip/index.vue +80 -0
  14. package/dist/runtime/components/Edit/ArtboardTooltip/index.vue.d.ts +32 -0
  15. package/dist/runtime/components/Edit/Banner/index.vue +51 -0
  16. package/dist/runtime/components/Edit/Banner/index.vue.d.ts +18 -0
  17. package/dist/runtime/components/Edit/EditIndicator.vue +118 -44
  18. package/dist/runtime/components/Edit/EditIndicator.vue.d.ts +3 -0
  19. package/dist/runtime/components/Edit/EditProvider.vue +79 -22
  20. package/dist/runtime/components/Edit/EditProvider.vue.d.ts +2 -0
  21. package/dist/runtime/components/Edit/Features/Analyze/Overlay/index.vue +19 -20
  22. package/dist/runtime/components/Edit/Features/BlockAddList/index.vue +1 -1
  23. package/dist/runtime/components/Edit/Features/CommandPalette/index.vue +2 -0
  24. package/dist/runtime/components/Edit/Features/Comments/AddForm/index.vue +35 -20
  25. package/dist/runtime/components/Edit/Features/Comments/AddForm/index.vue.d.ts +5 -3
  26. package/dist/runtime/components/Edit/Features/Comments/CommentInput/index.vue +29 -0
  27. package/dist/runtime/components/Edit/Features/Comments/CommentInput/index.vue.d.ts +13 -0
  28. package/dist/runtime/components/Edit/Features/Comments/Overlay/Item/index.vue +22 -16
  29. package/dist/runtime/components/Edit/Features/Comments/Overlay/Item/index.vue.d.ts +1 -0
  30. package/dist/runtime/components/Edit/Features/Comments/Overlay/index.vue +15 -6
  31. package/dist/runtime/components/Edit/Features/Comments/index.vue +20 -8
  32. package/dist/runtime/components/Edit/Features/Debug/Rects/index.vue +26 -35
  33. package/dist/runtime/components/Edit/Features/Debug/Renderer.vue +240 -0
  34. package/dist/runtime/components/Edit/Features/Debug/Renderer.vue.d.ts +6 -0
  35. package/dist/runtime/components/Edit/Features/Debug/index.vue +4 -165
  36. package/dist/runtime/components/Edit/Features/DraggingOverlay/DragItems/index.vue +1 -1
  37. package/dist/runtime/components/Edit/Features/DraggingOverlay/DropTargets/index.vue +41 -37
  38. package/dist/runtime/components/Edit/Features/Edit/index.vue +1 -1
  39. package/dist/runtime/components/Edit/Features/EditableField/Overlay/Frame/index.vue +63 -3
  40. package/dist/runtime/components/Edit/Features/EditableField/Overlay/Plaintext/index.vue +13 -9
  41. package/dist/runtime/components/Edit/Features/EditableField/Overlay/index.vue +17 -76
  42. package/dist/runtime/components/Edit/Features/EditableField/index.vue +1 -1
  43. package/dist/runtime/components/Edit/Features/History/index.vue +5 -2
  44. package/dist/runtime/components/Edit/Features/Hover/Overlay/fragment.glsl +139 -0
  45. package/dist/runtime/components/Edit/Features/Hover/Overlay/index.vue +270 -0
  46. package/dist/runtime/components/Edit/Features/Hover/Overlay/index.vue.d.ts +6 -0
  47. package/dist/runtime/components/Edit/Features/Hover/Overlay/vertex.glsl +117 -0
  48. package/dist/runtime/components/Edit/Features/Hover/index.vue +25 -0
  49. package/dist/runtime/components/Edit/Features/Library/LibraryDialog/index.vue +19 -27
  50. package/dist/runtime/components/Edit/Features/Library/ReusableDialog/index.vue +27 -23
  51. package/dist/runtime/components/Edit/Features/Library/index.vue +2 -1
  52. package/dist/runtime/components/Edit/Features/MultiSelect/Overlay/index.vue +34 -27
  53. package/dist/runtime/components/Edit/Features/MultiSelect/index.vue +2 -4
  54. package/dist/runtime/components/Edit/Features/Options/Form/Item.vue +6 -1
  55. package/dist/runtime/components/Edit/Features/Options/Form/index.vue +1 -0
  56. package/dist/runtime/components/Edit/Features/Ownership/Renderer.vue +35 -0
  57. package/dist/runtime/components/Edit/Features/Ownership/Renderer.vue.d.ts +6 -0
  58. package/dist/runtime/components/Edit/Features/Ownership/index.vue +7 -25
  59. package/dist/runtime/components/Edit/Features/ProxyView/index.vue +5 -1
  60. package/dist/runtime/components/Edit/Features/Selection/AddButtons/Overlay/index.vue +39 -74
  61. package/dist/runtime/components/Edit/Features/Selection/AddButtons/Overlay/index.vue.d.ts +4 -2
  62. package/dist/runtime/components/Edit/Features/Selection/AddButtons/Renderer/fragment.glsl +106 -0
  63. package/dist/runtime/components/Edit/Features/Selection/AddButtons/Renderer/index.vue +417 -0
  64. package/dist/runtime/components/Edit/Features/Selection/AddButtons/Renderer/index.vue.d.ts +32 -0
  65. package/dist/runtime/components/Edit/Features/Selection/AddButtons/Renderer/vertex.glsl +102 -0
  66. package/dist/runtime/components/Edit/Features/Selection/AddButtons/index.vue +33 -106
  67. package/dist/runtime/components/Edit/Features/Selection/Overlay/index.vue +88 -29
  68. package/dist/runtime/components/Edit/Features/Selection/Overlay/index.vue.d.ts +2 -0
  69. package/dist/runtime/components/Edit/Features/Selection/Overlay/vertex.glsl +11 -2
  70. package/dist/runtime/components/Edit/Features/Selection/index.vue +5 -12
  71. package/dist/runtime/components/Edit/Features/Translations/Banner/index.vue +17 -11
  72. package/dist/runtime/components/Edit/Features/Translations/index.vue +13 -16
  73. package/dist/runtime/components/Edit/Form/Text/index.vue +2 -1
  74. package/dist/runtime/components/Edit/Form/Text/index.vue.d.ts +1 -0
  75. package/dist/runtime/components/Edit/Indicators/index.vue +1 -1
  76. package/dist/runtime/components/Edit/Konami/Game/index.vue +5 -5
  77. package/dist/runtime/components/Edit/index.d.ts +5 -3
  78. package/dist/runtime/components/Edit/index.js +8 -4
  79. package/dist/runtime/composables/defineBlokkli.js +4 -2
  80. package/dist/runtime/css/output.css +1 -1
  81. package/dist/runtime/helpers/animationProvider.d.ts +34 -1
  82. package/dist/runtime/helpers/animationProvider.js +175 -48
  83. package/dist/runtime/helpers/composables/defineRenderer.d.ts +8 -0
  84. package/dist/runtime/helpers/composables/defineRenderer.js +8 -0
  85. package/dist/runtime/helpers/composables/useStickyToolbar.d.ts +4 -1
  86. package/dist/runtime/helpers/composables/useStickyToolbar.js +53 -35
  87. package/dist/runtime/helpers/dom/index.d.ts +1 -0
  88. package/dist/runtime/helpers/domProvider.d.ts +46 -0
  89. package/dist/runtime/helpers/domProvider.js +95 -6
  90. package/dist/runtime/helpers/editableProvider.d.ts +14 -0
  91. package/dist/runtime/helpers/editableProvider.js +144 -0
  92. package/dist/runtime/helpers/stateProvider.d.ts +6 -2
  93. package/dist/runtime/helpers/stateProvider.js +66 -3
  94. package/dist/runtime/helpers/storageProvider.d.ts +3 -2
  95. package/dist/runtime/helpers/storageProvider.js +6 -2
  96. package/dist/runtime/helpers/symbols.d.ts +1 -0
  97. package/dist/runtime/helpers/symbols.js +1 -0
  98. package/dist/runtime/helpers/uiProvider.d.ts +8 -1
  99. package/dist/runtime/helpers/uiProvider.js +34 -2
  100. package/dist/runtime/plugins/blokkliEditable.js +74 -3
  101. package/dist/runtime/types/index.d.ts +13 -1
  102. package/package.json +1 -1
  103. package/dist/runtime/components/Edit/DragInteractions/index.vue +0 -401
  104. package/dist/runtime/components/Edit/Features/Selection/AddButtons/AddButtonsField.vue +0 -54
  105. package/dist/runtime/components/Edit/Features/Selection/AddButtons/AddButtonsField.vue.d.ts +0 -14
  106. /package/dist/runtime/components/Edit/{DragInteractions → Features/Hover}/index.vue.d.ts +0 -0
@@ -13,15 +13,24 @@
13
13
  :class="{
14
14
  'bk-has-unresolved-comments': unresolvedCount > 0
15
15
  }"
16
- @click="$emit('toggle')"
16
+ @click.prevent="$emit('toggle')"
17
+ @pointerdown.prevent.stop
18
+ @pointerup.prevent.stop
19
+ @pointermove.prevent.stop
17
20
  >
18
21
  <Icon v-if="showComments" name="close" />
19
22
  <span v-else>{{ unresolvedCount }}</span>
20
23
  </button>
21
24
  <div
22
- v-show="showComments"
25
+ v-if="showComments"
23
26
  class="bk-comments-overlay-comments"
24
27
  :class="{ 'bk-is-left': isLeft, 'bk-is-right': !isLeft }"
28
+ :style="{
29
+ width: width + 'px'
30
+ }"
31
+ @pointerdown.capture.stop
32
+ @pointerup.capture.stop
33
+ @pointermove.capture.stop
25
34
  >
26
35
  <div class="bk-comments-overlay-comments-header">
27
36
  <Icon name="comment" />
@@ -36,17 +45,14 @@
36
45
  <Comment v-bind="comment" @resolve="resolveComment(comment.uuid)" />
37
46
  </div>
38
47
  <div class="bk-comments-overlay-form" @keydown.capture.stop>
39
- <textarea
40
- v-model="commentText"
41
- type="text"
42
- class="bk-form-input"
48
+ <CommentInput
49
+ id="comment_reply"
50
+ v-model.lazy="commentText"
43
51
  :placeholder="$t('commentBodyPlaceholder', 'Add reply')"
44
- required
45
- @focus="showFullForm = true"
46
52
  />
47
53
  <button
48
- v-if="showFullForm && commentText"
49
- class="bk-button bk-is-primary bk-is-small"
54
+ v-if="commentText"
55
+ class="bk-button bk-is-warning"
50
56
  @click="addComment"
51
57
  >
52
58
  {{ $t("commentAdd", "Add comment") }}
@@ -57,12 +63,12 @@
57
63
  </template>
58
64
 
59
65
  <script setup>
60
- import { ref, computed, useBlokkli } from "#imports";
66
+ import { computed, useBlokkli } from "#imports";
61
67
  import { Icon } from "#blokkli/components";
62
68
  import Comment from "./../../Comment/index.vue";
63
- const { $t } = useBlokkli();
64
- const commentText = ref("");
65
- const showFullForm = ref(false);
69
+ import CommentInput from "./../../CommentInput/index.vue";
70
+ const { $t, storage } = useBlokkli();
71
+ const commentText = storage.useWithContextPrefix("commentReply", "");
66
72
  const emit = defineEmits(["toggle", "addComment", "resolveComment"]);
67
73
  const props = defineProps({
68
74
  isReduced: { type: Boolean, required: true },
@@ -70,14 +76,14 @@ const props = defineProps({
70
76
  uuids: { type: Array, required: true },
71
77
  comments: { type: Array, required: true },
72
78
  style: { type: null, required: true },
73
- showComments: { type: Boolean, required: true }
79
+ showComments: { type: Boolean, required: true },
80
+ width: { type: Number, required: true }
74
81
  });
75
82
  const unresolvedCount = computed(
76
83
  () => props.comments.filter((v) => !v.resolved).length
77
84
  );
78
85
  function addComment() {
79
86
  emit("addComment", commentText.value);
80
- showFullForm.value = false;
81
87
  commentText.value = "";
82
88
  }
83
89
  function resolveComment(uuid) {
@@ -6,6 +6,7 @@ type __VLS_Props = {
6
6
  comments: CommentItem[];
7
7
  style: any;
8
8
  showComments: boolean;
9
+ width: number;
9
10
  };
10
11
  declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
12
  toggle: () => void;
@@ -1,13 +1,14 @@
1
1
  <template>
2
- <Teleport to="body">
3
- <div class="bk bk-comments-overlay bk-control">
2
+ <Teleport to="#bk-canvas-overlay">
3
+ <div ref="overlay" class="bk bk-comments-overlay bk-control">
4
4
  <Item
5
5
  v-for="item in indicators"
6
6
  :key="item.id"
7
7
  v-bind="item"
8
- :is-reduced="isReduced"
9
- :is-left="isLeft"
8
+ :is-reduced
9
+ :is-left
10
10
  :show-comments="active === item.id"
11
+ :width
11
12
  @toggle="toggle(item)"
12
13
  @add-comment="$emit('addComment', { body: $event, uuids: item.uuids })"
13
14
  @resolve-comment="$emit('resolveComment', $event)"
@@ -17,11 +18,19 @@
17
18
  </template>
18
19
 
19
20
  <script setup>
20
- import { ref, useBlokkli } from "#imports";
21
+ import { computed, ref, useBlokkli } from "#imports";
21
22
  import { falsy, getBounds } from "#blokkli/helpers";
22
23
  import Item from "./Item/index.vue";
23
24
  import onBlokkliEvent from "#blokkli/helpers/composables/onBlokkliEvent";
24
25
  const { eventBus, ui, dom } = useBlokkli();
26
+ const width = computed(() => {
27
+ if (ui.viewport.value.width > 1600) {
28
+ return 400;
29
+ } else if (ui.viewport.value.width > 1300) {
30
+ return 350;
31
+ }
32
+ return 300;
33
+ });
25
34
  const props = defineProps({
26
35
  comments: { type: Array, required: true }
27
36
  });
@@ -47,7 +56,7 @@ onBlokkliEvent("canvas:draw", (e) => {
47
56
  ui.visibleViewportPadded.value.x + ui.visibleViewportPadded.value.width - 30
48
57
  );
49
58
  isReduced.value = scale < 0.8;
50
- isLeft.value = x + 300 < ui.visibleViewportPadded.value.x + ui.visibleViewportPadded.value.width;
59
+ isLeft.value = x + width.value < ui.visibleViewportPadded.value.x + ui.visibleViewportPadded.value.width;
51
60
  const newIndicators = {};
52
61
  const yMap = /* @__PURE__ */ new Set();
53
62
  const findY = (y) => {
@@ -19,6 +19,7 @@
19
19
  </li>
20
20
  </ul>
21
21
  </div>
22
+
22
23
  <template v-if="unresolvedCount" #badge>
23
24
  <div class="bk-sidebar-badge bk-is-yellow">{{ unresolvedCount }}</div>
24
25
  </template>
@@ -26,17 +27,24 @@
26
27
 
27
28
  <PluginItemAction
28
29
  id="add_comment"
29
- :title="$t('addCommentToItem', 'Comment')"
30
+ :title="$t('addCommentToItem', 'Add Comment...')"
30
31
  :active="showAddComment"
31
32
  weight="last"
32
33
  icon="comment"
33
34
  multiple
34
35
  @click="showAddComment = !showAddComment"
35
- >
36
- <template v-if="showAddComment" #default="{ uuids }">
37
- <CommentAddForm ref="commentForm" @add="onAddComment($event, uuids)" />
38
- </template>
39
- </PluginItemAction>
36
+ />
37
+
38
+ <Teleport to="body">
39
+ <BlokkliTransition name="caret-tooltip">
40
+ <CommentAddForm
41
+ v-if="showAddComment"
42
+ ref="commentForm"
43
+ @add="onAddComment($event)"
44
+ @close="showAddComment = false"
45
+ />
46
+ </BlokkliTransition>
47
+ </Teleport>
40
48
 
41
49
  <CommentsOverlay
42
50
  v-if="comments.length"
@@ -55,6 +63,7 @@ import {
55
63
  computed
56
64
  } from "#imports";
57
65
  import { PluginSidebar, PluginItemAction } from "#blokkli/plugins";
66
+ import { BlokkliTransition } from "#blokkli/components";
58
67
  import Comment from "./Comment/index.vue";
59
68
  import CommentAddForm from "./AddForm/index.vue";
60
69
  import CommentsOverlay from "./Overlay/index.vue";
@@ -79,8 +88,11 @@ comments.value = await adapter.loadComments();
79
88
  const unresolvedCount = computed(
80
89
  () => comments.value.filter((v) => !v.resolved).length
81
90
  );
82
- const onAddComment = async (body, uuids) => {
83
- comments.value = await adapter.addComment(uuids, body);
91
+ const onAddComment = async (body, providedUuids) => {
92
+ const uuids = providedUuids ?? [...selection.uuids.value];
93
+ if (uuids.length) {
94
+ comments.value = await adapter.addComment(uuids, body);
95
+ }
84
96
  showAddComment.value = false;
85
97
  };
86
98
  const onResolveComment = async (uuid) => {
@@ -12,10 +12,26 @@
12
12
 
13
13
  <script setup>
14
14
  import { useBlokkli, ref } from "#imports";
15
- import { intersects } from "#blokkli/helpers";
15
+ import { falsy, intersects } from "#blokkli/helpers";
16
16
  import onBlokkliEvent from "#blokkli/helpers/composables/onBlokkliEvent";
17
- const { ui, dom } = useBlokkli();
17
+ const { ui, dom, editable } = useBlokkli();
18
18
  const canvasRects = ref(null);
19
+ function drawRects(ctx, rects, scale, offset, viewport) {
20
+ for (let i = 0; i < rects.length; i++) {
21
+ const rect = rects[i];
22
+ const drawnRect = {
23
+ x: rect.x * scale + offset.x,
24
+ y: rect.y * scale + offset.y,
25
+ width: rect.width * scale,
26
+ height: rect.height * scale
27
+ };
28
+ if (intersects(drawnRect, viewport)) {
29
+ ctx.beginPath();
30
+ ctx.rect(drawnRect.x, drawnRect.y, drawnRect.width, drawnRect.height);
31
+ ctx.stroke();
32
+ }
33
+ }
34
+ }
19
35
  onBlokkliEvent("canvas:draw", (e) => {
20
36
  if (!canvasRects.value) {
21
37
  return;
@@ -31,39 +47,14 @@ onBlokkliEvent("canvas:draw", (e) => {
31
47
  const blockRects = dom.getBlockRects();
32
48
  const viewport = ui.visibleViewport.value;
33
49
  const rects = Object.values(blockRects);
34
- for (let i = 0; i < rects.length; i++) {
35
- const rect = rects[i];
36
- const drawnRect = {
37
- x: rect.x * e.artboardScale + e.artboardOffset.x,
38
- y: rect.y * e.artboardScale + e.artboardOffset.y,
39
- width: rect.width * e.artboardScale,
40
- height: rect.height * e.artboardScale
41
- };
42
- if (intersects(drawnRect, viewport)) {
43
- ctx.beginPath();
44
- ctx.rect(drawnRect.x, drawnRect.y, drawnRect.width, drawnRect.height);
45
- ctx.stroke();
46
- }
47
- }
50
+ drawRects(ctx, rects, e.artboardScale, e.artboardOffset, viewport);
48
51
  ctx.strokeStyle = "red";
49
- const visibleFieldRects = dom.getVisibleFields();
50
- for (let i = 0; i < visibleFieldRects.length; i++) {
51
- const key = visibleFieldRects[i];
52
- const rect = dom.getFieldRect(key);
53
- if (!rect) {
54
- continue;
55
- }
56
- const drawnRect = {
57
- x: rect.x * e.artboardScale + e.artboardOffset.x,
58
- y: rect.y * e.artboardScale + e.artboardOffset.y,
59
- width: rect.width * e.artboardScale,
60
- height: rect.height * e.artboardScale
61
- };
62
- if (intersects(drawnRect, viewport)) {
63
- ctx.beginPath();
64
- ctx.rect(drawnRect.x, drawnRect.y, drawnRect.width, drawnRect.height);
65
- ctx.stroke();
66
- }
67
- }
52
+ const visibleFieldRects = dom.getVisibleFields().map((key) => {
53
+ return dom.getFieldRect(key);
54
+ }).filter(falsy);
55
+ drawRects(ctx, visibleFieldRects, e.artboardScale, e.artboardOffset, viewport);
56
+ ctx.strokeStyle = "green";
57
+ const editableRects = editable.getVisible();
58
+ drawRects(ctx, editableRects, e.artboardScale, e.artboardOffset, viewport);
68
59
  });
69
60
  </script>
@@ -0,0 +1,240 @@
1
+ <template>
2
+ <PluginSidebar id="debug" title="Debug" icon="bug" weight="200">
3
+ <div class="bk bk-debug">
4
+ <section>
5
+ <h2>Keyboard</h2>
6
+ <div class="bk-debug-list">
7
+ <div>
8
+ <div>Space</div>
9
+ <div>{{ keyboard.isPressingSpace.value }}</div>
10
+ </div>
11
+ <div>
12
+ <div>Control</div>
13
+ <div>{{ keyboard.isPressingControl.value }}</div>
14
+ </div>
15
+ </div>
16
+ </section>
17
+
18
+ <section>
19
+ <h2>Selection</h2>
20
+ <div class="bk-debug-list">
21
+ <div>
22
+ <div>Count</div>
23
+ <div>{{ selection.uuids.value.length }}</div>
24
+ </div>
25
+ <div>
26
+ <div>isDragging</div>
27
+ <div>{{ selection.isDragging.value }}</div>
28
+ </div>
29
+ <div>
30
+ <div>isDraggingExisting</div>
31
+ <div>{{ selection.isDraggingExisting.value }}</div>
32
+ </div>
33
+ <div>
34
+ <div>Is multiselecting</div>
35
+ <div>{{ selection.isMultiSelecting.value }}</div>
36
+ </div>
37
+ </div>
38
+ </section>
39
+
40
+ <section>
41
+ <h2>Rendering</h2>
42
+ <div class="bk-debug-list">
43
+ <div>
44
+ <div>DPI</div>
45
+ <div>{{ animation.dpi.value }}</div>
46
+ </div>
47
+ <div v-for="overlay in debug.overlays.value" :key="overlay.id">
48
+ <FormToggle
49
+ :label="overlay.label"
50
+ :model-value="overlay.active"
51
+ @update:model-value="debug.toggleOverlay(overlay.id)"
52
+ />
53
+ </div>
54
+ <div>
55
+ <FormToggle
56
+ label="Set transforming"
57
+ :model-value="ui.isTransforming.value"
58
+ @update:model-value="toggleTransforming"
59
+ />
60
+ </div>
61
+
62
+ <div>
63
+ <FormToggle
64
+ label="Enable WebGL"
65
+ :model-value="animation.webglEnabled.value"
66
+ @update:model-value="toggleWebgl"
67
+ />
68
+ </div>
69
+ <div>
70
+ <button
71
+ class="bk-button bk-is-small"
72
+ @click.prevent="() => dom.updateVisibleRects()"
73
+ >
74
+ Refresh Rects
75
+ </button>
76
+ </div>
77
+ </div>
78
+ </section>
79
+
80
+ <section>
81
+ <h2>Logging</h2>
82
+ <div class="bk-debug-list">
83
+ <div>
84
+ <div>
85
+ <FormToggle v-model="logEvents" label="Log Events" />
86
+ </div>
87
+ <div>
88
+ <button
89
+ class="bk-button bk-is-small"
90
+ @click.prevent="() => console.log(dom.getDebugData())"
91
+ >
92
+ Log DOM state
93
+ </button>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </section>
98
+
99
+ <section>
100
+ <h2>Icons</h2>
101
+ <div class="bk-debug-icons">
102
+ <div v-for="icon in iconItems" :key="icon">
103
+ <Icon :name="icon" />
104
+ <p>{{ icon }}</p>
105
+ </div>
106
+ </div>
107
+ </section>
108
+
109
+ <section>
110
+ <h2>Features</h2>
111
+ <div class="bk-debug-features">
112
+ <div v-for="feature in featuresList" :key="feature.id">
113
+ <div>
114
+ <span
115
+ class="bk-status-indicator"
116
+ :class="feature.mounted ? 'bk-is-success' : 'bk-is-danger'"
117
+ />
118
+ </div>
119
+ <div>
120
+ <h3>{{ feature.label }}</h3>
121
+ <div>{{ feature.id }}</div>
122
+ <p>{{ feature.description }}</p>
123
+ </div>
124
+ </div>
125
+ </div>
126
+ </section>
127
+ </div>
128
+ </PluginSidebar>
129
+
130
+ <PluginDebugOverlay id="viewport" title="Show viewport overlay">
131
+ <DebugViewport />
132
+ </PluginDebugOverlay>
133
+
134
+ <PluginDebugOverlay id="rects" title="Show field and block rects">
135
+ <DebugRects />
136
+ </PluginDebugOverlay>
137
+
138
+ <PluginItemDropdown
139
+ v-if="itemDropdownItems.length"
140
+ id="selection"
141
+ :title="$t('selectionActionGroupTitle', 'Selection')"
142
+ enabled
143
+ :items="itemDropdownItems"
144
+ icon="bug"
145
+ weight="200"
146
+ @select="onSelectDropdownItem"
147
+ />
148
+ </template>
149
+
150
+ <script setup>
151
+ import { useBlokkli, onMounted, onBeforeUnmount, computed } from "#imports";
152
+ import {
153
+ PluginSidebar,
154
+ PluginDebugOverlay,
155
+ PluginItemDropdown
156
+ } from "#blokkli/plugins";
157
+ import { Icon, FormToggle } from "#blokkli/components";
158
+ import { icons } from "#blokkli-build/icons";
159
+ import DebugViewport from "./Viewport/index.vue";
160
+ import DebugRects from "./Rects/index.vue";
161
+ const { logger } = defineProps({
162
+ logger: { type: Object, required: true }
163
+ });
164
+ const {
165
+ keyboard,
166
+ selection,
167
+ eventBus,
168
+ features,
169
+ debug,
170
+ ui,
171
+ animation,
172
+ dom,
173
+ storage,
174
+ $t
175
+ } = useBlokkli();
176
+ const logEvents = storage.use("debug:log-events", true);
177
+ const iconItems = computed(() => Object.keys(icons));
178
+ const featuresList = computed(() => {
179
+ return features.features.value.map((v) => {
180
+ const feature = features.mountedFeatures.value.find((f) => f.id === v.id);
181
+ return {
182
+ id: v.id,
183
+ label: v.label,
184
+ description: v.description,
185
+ dependencies: v.dependencies?.join(", "),
186
+ mounted: !!feature
187
+ };
188
+ });
189
+ });
190
+ const onEvent = (name, data) => {
191
+ if (!logEvents.value) {
192
+ return;
193
+ }
194
+ if (name === "animationFrame" || name === "animationFrame:before" || name === "animationFrame:after" || name === "canvas:draw") {
195
+ return;
196
+ }
197
+ logger.log("Event: " + String(name), data);
198
+ };
199
+ function toggleTransforming() {
200
+ if (ui.isTransforming.value) {
201
+ ui.setTransform();
202
+ } else {
203
+ ui.setTransform("Transform plugin label");
204
+ }
205
+ }
206
+ function toggleWebgl() {
207
+ if (animation.webglEnabled.value) {
208
+ animation.webglEnabled.value = false;
209
+ } else {
210
+ animation.webglEnabled.value = true;
211
+ }
212
+ }
213
+ onMounted(() => {
214
+ eventBus.on("*", onEvent);
215
+ });
216
+ onBeforeUnmount(() => {
217
+ eventBus.off("*", onEvent);
218
+ });
219
+ const itemDropdownItems = computed(() => {
220
+ if (selection.uuids.value.length === 1) {
221
+ return [
222
+ {
223
+ id: "copy-uuid",
224
+ label: "Copy UUID"
225
+ }
226
+ ];
227
+ }
228
+ return [];
229
+ });
230
+ async function onSelectDropdownItem(item) {
231
+ if (item.id === "copy-uuid") {
232
+ const type = "text/plain";
233
+ const clipboardItemData = {
234
+ [type]: selection.uuids.value.at(0) ?? ""
235
+ };
236
+ const clipboardItem = new ClipboardItem(clipboardItemData);
237
+ await navigator.clipboard.write([clipboardItem]);
238
+ }
239
+ }
240
+ </script>
@@ -0,0 +1,6 @@
1
+ import type { DebugLogger } from '#blokkli/helpers/debugProvider';
2
+ type __VLS_Props = {
3
+ logger: DebugLogger;
4
+ };
5
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ export default _default;