@blokkli/editor 2.0.0-alpha.36 → 2.0.0-alpha.38

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 (216) hide show
  1. package/dist/global/types/blockOptions.d.ts +4 -3
  2. package/dist/module.d.mts +2 -2
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +71 -4
  5. package/dist/modules/agent/index.d.mts +1 -1
  6. package/dist/modules/agent/index.mjs +276 -6
  7. package/dist/modules/agent/runtime/app/composables/agentProvider.js +31 -14
  8. package/dist/modules/agent/runtime/app/composables/defineBlokkliAgentTool.d.ts +2 -20
  9. package/dist/modules/agent/runtime/app/composables/defineBlokkliAgentTool.js +0 -3
  10. package/dist/modules/agent/runtime/app/features/agent/Panel/Conversation/Item/Assistant/index.vue +2 -2
  11. package/dist/modules/agent/runtime/app/features/agent/Panel/Conversation/Item/User/index.vue +1 -2
  12. package/dist/modules/agent/runtime/app/features/agent/Panel/DebugGallery/index.vue +1 -2
  13. package/dist/modules/agent/runtime/app/features/agent/Panel/Input/Actions/index.d.vue.ts +1 -0
  14. package/dist/modules/agent/runtime/app/features/agent/Panel/Input/Actions/index.vue +66 -59
  15. package/dist/modules/agent/runtime/app/features/agent/Panel/Input/Actions/index.vue.d.ts +1 -0
  16. package/dist/modules/agent/runtime/app/features/agent/Panel/Input/index.vue +10 -12
  17. package/dist/modules/agent/runtime/app/features/agent/Panel/Welcome/de.md +2 -2
  18. package/dist/modules/agent/runtime/app/features/agent/Panel/Welcome/en.md +2 -2
  19. package/dist/modules/agent/runtime/app/features/agent/Panel/index.vue +1 -5
  20. package/dist/modules/agent/runtime/app/features/agent/index.vue +89 -37
  21. package/dist/modules/agent/runtime/app/helpers/index.d.ts +16 -19
  22. package/dist/modules/agent/runtime/app/helpers/index.js +22 -46
  23. package/dist/modules/agent/runtime/app/helpers/pageStructure.js +1 -1
  24. package/dist/modules/agent/runtime/app/tools/add_content_search_paragraph/index.js +5 -9
  25. package/dist/modules/agent/runtime/app/tools/add_fragment/index.js +2 -6
  26. package/dist/modules/agent/runtime/app/tools/add_media_paragraph/index.js +2 -6
  27. package/dist/modules/agent/runtime/app/tools/add_paragraphs/index.js +2 -3
  28. package/dist/modules/agent/runtime/app/tools/add_reusable_paragraph/index.js +2 -6
  29. package/dist/modules/agent/runtime/app/tools/add_template/index.js +2 -6
  30. package/dist/modules/agent/runtime/app/tools/analyze_content/index.d.ts +2 -0
  31. package/dist/modules/agent/runtime/app/tools/analyze_content/index.js +120 -0
  32. package/dist/modules/agent/runtime/app/tools/check_readability/index.d.ts +2 -0
  33. package/dist/modules/agent/runtime/app/tools/check_readability/index.js +57 -0
  34. package/dist/modules/agent/runtime/app/tools/duplicate_paragraphs/index.js +2 -6
  35. package/dist/modules/agent/runtime/app/tools/get_all_page_content/index.js +1 -1
  36. package/dist/modules/agent/runtime/app/tools/get_bundle_info/index.js +2 -1
  37. package/dist/modules/agent/runtime/app/tools/get_content_fields/index.js +1 -1
  38. package/dist/modules/agent/runtime/app/tools/get_paragraph_context/index.js +2 -5
  39. package/dist/modules/agent/runtime/app/tools/get_paragraph_options/index.js +2 -1
  40. package/dist/modules/agent/runtime/app/tools/get_selected_paragraphs/index.js +2 -3
  41. package/dist/modules/agent/runtime/app/tools/helpers.d.ts +53 -0
  42. package/dist/modules/agent/runtime/app/tools/helpers.js +187 -0
  43. package/dist/modules/agent/runtime/app/tools/move_paragraphs/index.js +2 -6
  44. package/dist/modules/agent/runtime/app/tools/schemas.d.ts +0 -52
  45. package/dist/modules/agent/runtime/app/tools/schemas.js +0 -187
  46. package/dist/modules/agent/runtime/app/tools/search_content/index.js +40 -47
  47. package/dist/modules/agent/runtime/app/tools/set_paragraph_options/index.js +2 -5
  48. package/dist/modules/agent/runtime/app/types/index.d.ts +0 -61
  49. package/dist/modules/agent/runtime/server/Session.d.ts +25 -6
  50. package/dist/modules/agent/runtime/server/Session.js +109 -30
  51. package/dist/modules/agent/runtime/server/SessionManager.d.ts +3 -0
  52. package/dist/modules/agent/runtime/server/SessionManager.js +4 -1
  53. package/dist/modules/agent/runtime/server/agent.js +3 -2
  54. package/dist/modules/agent/runtime/server/default-skills/fixReadability.d.ts +2 -0
  55. package/dist/modules/agent/runtime/server/default-skills/fixReadability.js +69 -0
  56. package/dist/modules/agent/runtime/server/default-system-prompts/page-context.js +28 -0
  57. package/dist/modules/agent/runtime/server/server-tools/index.d.ts +10 -2
  58. package/dist/modules/agent/runtime/server/server-tools/index.js +1 -1
  59. package/dist/modules/agent/runtime/server/server-tools/load_tools/index.js +1 -1
  60. package/dist/modules/agent/runtime/shared/types.d.ts +46 -11
  61. package/dist/modules/agent/runtime/shared/types.js +22 -10
  62. package/dist/modules/charts/index.d.mts +1 -1
  63. package/dist/modules/charts/index.mjs +21 -7
  64. package/dist/modules/charts/runtime/blokkli/skills/charts.js +6 -6
  65. package/dist/modules/charts/runtime/blokkli/tools/chart_schemas.d.ts +25 -2
  66. package/dist/modules/charts/runtime/blokkli/tools/chart_schemas.js +39 -1
  67. package/dist/modules/charts/runtime/blokkli/tools/create_chart/index.js +24 -17
  68. package/dist/modules/charts/runtime/blokkli/tools/get_chart_data/index.js +11 -19
  69. package/dist/modules/charts/runtime/blokkli/tools/get_chart_type_options/index.js +2 -4
  70. package/dist/modules/charts/runtime/blokkli/tools/update_chart/index.js +8 -20
  71. package/dist/modules/charts/runtime/chartTypes/area.d.ts +6 -1
  72. package/dist/modules/charts/runtime/chartTypes/bar.d.ts +7 -1
  73. package/dist/modules/charts/runtime/chartTypes/define.d.ts +1 -1
  74. package/dist/modules/charts/runtime/chartTypes/donut.d.ts +5 -1
  75. package/dist/modules/charts/runtime/chartTypes/heatmap.d.ts +3 -1
  76. package/dist/modules/charts/runtime/chartTypes/index.d.ts +18 -0
  77. package/dist/modules/charts/runtime/chartTypes/line.d.ts +6 -1
  78. package/dist/modules/charts/runtime/chartTypes/pie.d.ts +4 -1
  79. package/dist/modules/charts/runtime/chartTypes/radar.d.ts +6 -1
  80. package/dist/modules/charts/runtime/chartTypes/radialBar.d.ts +5 -1
  81. package/dist/modules/charts/runtime/chartTypes/shared.d.ts +20 -5
  82. package/dist/modules/charts/runtime/chartTypes/types.d.ts +6 -6
  83. package/dist/modules/charts/runtime/components/ChartRenderer/index.d.vue.ts +145 -2
  84. package/dist/modules/charts/runtime/components/ChartRenderer/index.vue +2 -2
  85. package/dist/modules/charts/runtime/components/ChartRenderer/index.vue.d.ts +145 -2
  86. package/dist/modules/charts/runtime/components/index.d.ts +1 -0
  87. package/dist/modules/charts/runtime/components/index.js +1 -0
  88. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypeOptions/index.d.vue.ts +3 -2
  89. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypeOptions/index.vue.d.ts +3 -2
  90. package/dist/modules/charts/runtime/features/charts/Editor/CsvImport/index.vue +1 -2
  91. package/dist/modules/charts/runtime/features/charts/Editor/FootnoteEditor/index.vue +1 -1
  92. package/dist/modules/charts/runtime/features/charts/Editor/Preview/index.d.vue.ts +2 -0
  93. package/dist/modules/charts/runtime/features/charts/Editor/Preview/index.vue +35 -13
  94. package/dist/modules/charts/runtime/features/charts/Editor/Preview/index.vue.d.ts +2 -0
  95. package/dist/modules/charts/runtime/features/charts/Editor/index.d.vue.ts +1 -0
  96. package/dist/modules/charts/runtime/features/charts/Editor/index.vue +9 -3
  97. package/dist/modules/charts/runtime/features/charts/Editor/index.vue.d.ts +1 -0
  98. package/dist/modules/charts/runtime/features/charts/Editor/useChartEditorState.js +1 -1
  99. package/dist/modules/charts/runtime/features/charts/index.vue +6 -6
  100. package/dist/modules/charts/runtime/helpers/index.d.ts +25 -0
  101. package/dist/modules/charts/runtime/helpers/index.js +63 -0
  102. package/dist/modules/charts/runtime/types.d.ts +10 -28
  103. package/dist/modules/charts/runtime/types.js +0 -64
  104. package/dist/modules/drupal/index.d.mts +1 -1
  105. package/dist/modules/drupal/runtime/adapter/index.d.ts +3 -1
  106. package/dist/modules/drupal/runtime/adapter/index.js +4 -4
  107. package/dist/modules/table-of-contents/index.d.mts +1 -1
  108. package/dist/runtime/components/BlokkliItem.vue +1 -1
  109. package/dist/runtime/composables/defineBlokkli.js +1 -1
  110. package/dist/runtime/editor/components/AnimationCanvas/index.vue +13 -7
  111. package/dist/runtime/editor/components/Banner/index.d.vue.ts +1 -0
  112. package/dist/runtime/editor/components/Banner/index.vue +1 -1
  113. package/dist/runtime/editor/components/Banner/index.vue.d.ts +1 -0
  114. package/dist/runtime/editor/components/DropdownItem/index.d.vue.ts +1 -0
  115. package/dist/runtime/editor/components/DropdownItem/index.vue +3 -2
  116. package/dist/runtime/editor/components/DropdownItem/index.vue.d.ts +1 -0
  117. package/dist/runtime/editor/components/EditProvider.vue +7 -4
  118. package/dist/runtime/editor/components/FlexTextarea/index.d.vue.ts +4 -0
  119. package/dist/runtime/editor/components/FlexTextarea/index.vue +24 -101
  120. package/dist/runtime/editor/components/FlexTextarea/index.vue.d.ts +4 -0
  121. package/dist/runtime/editor/components/NestedEditorOverlay/index.vue +28 -9
  122. package/dist/runtime/editor/components/Popup/index.d.vue.ts +30 -0
  123. package/dist/runtime/editor/components/Popup/index.vue +82 -0
  124. package/dist/runtime/editor/components/Popup/index.vue.d.ts +30 -0
  125. package/dist/runtime/editor/components/Resizable/index.vue +4 -1
  126. package/dist/runtime/editor/components/Toolbar/index.vue +107 -6
  127. package/dist/runtime/editor/components/index.d.ts +4 -3
  128. package/dist/runtime/editor/components/index.js +6 -4
  129. package/dist/runtime/editor/composables/defineDropAreas.js +3 -3
  130. package/dist/runtime/editor/composables/defineDropHandler.d.ts +3 -0
  131. package/dist/runtime/editor/composables/defineDropHandler.js +10 -0
  132. package/dist/runtime/editor/composables/index.d.ts +1 -0
  133. package/dist/runtime/editor/composables/index.js +1 -0
  134. package/dist/runtime/editor/css/output.css +1 -1
  135. package/dist/runtime/editor/events/index.d.ts +9 -0
  136. package/dist/runtime/editor/features/add-list/index.vue +58 -1
  137. package/dist/runtime/editor/features/analyze/Main.d.vue.ts +3 -2
  138. package/dist/runtime/editor/features/analyze/Main.vue +28 -44
  139. package/dist/runtime/editor/features/analyze/Main.vue.d.ts +3 -2
  140. package/dist/runtime/editor/features/analyze/analyzers/readability.js +65 -0
  141. package/dist/runtime/editor/features/analyze/analyzers/types.d.ts +19 -0
  142. package/dist/runtime/editor/features/analyze/index.vue +18 -15
  143. package/dist/runtime/editor/features/clipboard/DropElement/Video.d.vue.ts +8 -0
  144. package/dist/runtime/editor/features/clipboard/{List/Item → DropElement}/Video.vue +1 -5
  145. package/dist/runtime/editor/features/clipboard/DropElement/Video.vue.d.ts +8 -0
  146. package/dist/runtime/editor/features/clipboard/DropElement/helpers.d.ts +1 -0
  147. package/dist/runtime/editor/features/clipboard/DropElement/helpers.js +14 -0
  148. package/dist/runtime/editor/features/clipboard/DropElement/index.d.vue.ts +16 -0
  149. package/dist/runtime/editor/features/clipboard/DropElement/index.vue +97 -0
  150. package/dist/runtime/editor/features/clipboard/DropElement/index.vue.d.ts +16 -0
  151. package/dist/runtime/editor/features/clipboard/helpers.d.ts +15 -0
  152. package/dist/runtime/editor/features/clipboard/helpers.js +62 -0
  153. package/dist/runtime/editor/features/clipboard/index.vue +585 -337
  154. package/dist/runtime/editor/features/clipboard/types.d.ts +14 -2
  155. package/dist/runtime/editor/features/dragging-overlay/DragItems/index.vue +17 -5
  156. package/dist/runtime/editor/features/dragging-overlay/Renderer/index.vue +2 -2
  157. package/dist/runtime/editor/features/dragging-overlay/index.vue +125 -219
  158. package/dist/runtime/editor/features/editable-field/Overlay/Plaintext/index.vue +4 -4
  159. package/dist/runtime/editor/features/editable-field/Overlay/index.vue +6 -0
  160. package/dist/runtime/editor/features/library/index.vue +14 -0
  161. package/dist/runtime/editor/features/media-library/index.vue +32 -1
  162. package/dist/runtime/editor/features/options/Form/ComplexType/index.d.vue.ts +11 -0
  163. package/dist/runtime/editor/features/options/Form/ComplexType/index.vue +36 -0
  164. package/dist/runtime/editor/features/options/Form/ComplexType/index.vue.d.ts +11 -0
  165. package/dist/runtime/editor/features/options/Form/Item.d.vue.ts +3 -2
  166. package/dist/runtime/editor/features/options/Form/Item.vue +10 -2
  167. package/dist/runtime/editor/features/options/Form/Item.vue.d.ts +3 -2
  168. package/dist/runtime/editor/features/options/Form/index.vue +5 -0
  169. package/dist/runtime/editor/features/search/index.vue +25 -1
  170. package/dist/runtime/editor/features/structure/index.vue +25 -1
  171. package/dist/runtime/editor/features/tour/index.vue +22 -12
  172. package/dist/runtime/editor/helpers/clipboardData/index.d.ts +11 -0
  173. package/dist/runtime/editor/helpers/clipboardData/index.js +157 -0
  174. package/dist/runtime/editor/helpers/options/index.js +5 -0
  175. package/dist/runtime/editor/icons/svg/stars.svg +5 -1
  176. package/dist/runtime/editor/plugins/Sidebar/index.d.vue.ts +13 -2
  177. package/dist/runtime/editor/plugins/Sidebar/index.vue +4 -2
  178. package/dist/runtime/editor/plugins/Sidebar/index.vue.d.ts +13 -2
  179. package/dist/runtime/editor/providers/analyze.d.ts +43 -0
  180. package/dist/runtime/editor/providers/analyze.js +78 -0
  181. package/dist/runtime/editor/providers/animation.d.ts +4 -0
  182. package/dist/runtime/editor/providers/animation.js +6 -0
  183. package/dist/runtime/editor/providers/dragdrop.d.ts +55 -0
  184. package/dist/runtime/editor/providers/dragdrop.js +37 -0
  185. package/dist/runtime/editor/providers/storage.js +15 -0
  186. package/dist/runtime/editor/providers/ui.d.ts +6 -0
  187. package/dist/runtime/editor/providers/ui.js +19 -0
  188. package/dist/runtime/editor/translations/de.json +73 -61
  189. package/dist/runtime/editor/translations/fr.json +67 -55
  190. package/dist/runtime/editor/translations/gsw_CH.json +71 -59
  191. package/dist/runtime/editor/translations/it.json +67 -55
  192. package/dist/runtime/editor/types/app.d.ts +4 -2
  193. package/dist/runtime/editor/types/draggable.d.ts +1 -0
  194. package/dist/runtime/editor/types/ui.d.ts +1 -1
  195. package/dist/runtime/helpers/injections.d.ts +1 -1
  196. package/dist/runtime/types/blockOptions.d.ts +2 -1
  197. package/dist/runtime/types/definitions.d.ts +4 -0
  198. package/dist/shared/{editor.CWQIFIEQ.d.mts → editor.BdBm1Z7C.d.mts} +12 -0
  199. package/dist/types.d.mts +1 -1
  200. package/package.json +5 -3
  201. package/dist/modules/charts/runtime/components/Fragment/BlokkliChart.d.vue.ts +0 -3
  202. package/dist/modules/charts/runtime/components/Fragment/BlokkliChart.vue +0 -29
  203. package/dist/modules/charts/runtime/components/Fragment/BlokkliChart.vue.d.ts +0 -3
  204. package/dist/runtime/editor/features/clipboard/List/Item/File.d.vue.ts +0 -4
  205. package/dist/runtime/editor/features/clipboard/List/Item/File.vue +0 -60
  206. package/dist/runtime/editor/features/clipboard/List/Item/File.vue.d.ts +0 -4
  207. package/dist/runtime/editor/features/clipboard/List/Item/Video.d.vue.ts +0 -4
  208. package/dist/runtime/editor/features/clipboard/List/Item/Video.vue.d.ts +0 -4
  209. package/dist/runtime/editor/features/clipboard/List/index.d.vue.ts +0 -11
  210. package/dist/runtime/editor/features/clipboard/List/index.vue +0 -72
  211. package/dist/runtime/editor/features/clipboard/List/index.vue.d.ts +0 -11
  212. package/dist/runtime/editor/features/tour/Popup/index.d.vue.ts +0 -9
  213. package/dist/runtime/editor/features/tour/Popup/index.vue +0 -34
  214. package/dist/runtime/editor/features/tour/Popup/index.vue.d.ts +0 -9
  215. package/dist/runtime/editor/providers/dropArea.d.ts +0 -48
  216. package/dist/runtime/editor/providers/dropArea.js +0 -22
@@ -0,0 +1,36 @@
1
+ <template>
2
+ <button
3
+ v-if="config"
4
+ class="bk-blokkli-item-options-complex-type"
5
+ @click="onClick"
6
+ >
7
+ <Icon :name="config.editorIcon" />
8
+ <span>{{ $t(config.editorButtonLabel, config.editorButtonLabel) }}</span>
9
+ </button>
10
+ </template>
11
+
12
+ <script setup>
13
+ import { useBlokkli } from "#imports";
14
+ import { Icon } from "#blokkli/editor/components";
15
+ import { COMPLEX_OPTION_TYPES } from "#blokkli-build/complex-option-types";
16
+ const { eventBus, $t } = useBlokkli();
17
+ const props = defineProps({
18
+ uuid: { type: String, required: true },
19
+ property: { type: String, required: true },
20
+ dataType: { type: String, required: true }
21
+ });
22
+ const config = COMPLEX_OPTION_TYPES[props.dataType];
23
+ function onClick() {
24
+ eventBus.emit("option:edit-complex", {
25
+ uuid: props.uuid,
26
+ key: props.property,
27
+ dataType: props.dataType
28
+ });
29
+ }
30
+ </script>
31
+
32
+ <script>
33
+ export default {
34
+ name: "OptionsFormComplexType"
35
+ };
36
+ </script>
@@ -0,0 +1,11 @@
1
+ declare const _default: typeof __VLS_export;
2
+ export default _default;
3
+ declare const __VLS_export: import("vue").DefineComponent<{
4
+ uuid: string;
5
+ property: string;
6
+ dataType: string;
7
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
8
+ uuid: string;
9
+ property: string;
10
+ dataType: string;
11
+ }> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,9 +1,10 @@
1
- import type { BlockOptionDefinition } from '#blokkli/types/blockOptions';
1
+ import type { BlockOptionDefinitionBase } from './../../../../../global/types/blockOptions.js';
2
2
  type __VLS_Props = {
3
- option: BlockOptionDefinition;
3
+ option: BlockOptionDefinitionBase;
4
4
  property: string;
5
5
  mutatedValue: any;
6
6
  isGrouped?: boolean;
7
+ uuid?: string;
7
8
  };
8
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
9
10
  update: (data: unknown) => any;
@@ -74,6 +74,12 @@
74
74
  :min="option.min"
75
75
  :max="option.max"
76
76
  />
77
+ <OptionComplexType
78
+ v-else-if="option.type === 'json' && option.dataType && uuid"
79
+ :uuid="uuid"
80
+ :property="property"
81
+ :data-type="option.dataType"
82
+ />
77
83
  </div>
78
84
  </div>
79
85
  </template>
@@ -88,14 +94,16 @@ import OptionColor from "./Color/index.vue";
88
94
  import OptionRange from "./Range/index.vue";
89
95
  import OptionNumber from "./Number/index.vue";
90
96
  import OptionDateTimeLocal from "./DateTimeLocal/index.vue";
97
+ import OptionComplexType from "./ComplexType/index.vue";
91
98
  import { BK_VISIBLE_LANGUAGES } from "./../../../../../global/constants";
92
99
  const { state, $t: $blokkliText } = useBlokkli();
93
100
  const emit = defineEmits(["update"]);
94
101
  const props = defineProps({
95
- option: { type: Object, required: true },
102
+ option: { type: null, required: true },
96
103
  property: { type: String, required: true },
97
104
  mutatedValue: { type: null, required: true },
98
- isGrouped: { type: Boolean, required: false }
105
+ isGrouped: { type: Boolean, required: false },
106
+ uuid: { type: String, required: false }
99
107
  });
100
108
  const hoveredOption = ref("");
101
109
  const showLabel = computed(() => {
@@ -1,9 +1,10 @@
1
- import type { BlockOptionDefinition } from '#blokkli/types/blockOptions';
1
+ import type { BlockOptionDefinitionBase } from './../../../../../global/types/blockOptions.js';
2
2
  type __VLS_Props = {
3
- option: BlockOptionDefinition;
3
+ option: BlockOptionDefinitionBase;
4
4
  property: string;
5
5
  mutatedValue: any;
6
6
  isGrouped?: boolean;
7
+ uuid?: string;
7
8
  };
8
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
9
10
  update: (data: unknown) => any;
@@ -12,6 +12,7 @@
12
12
  :option="plugin.option"
13
13
  :property="plugin.property"
14
14
  :mutated-value="currentValues[plugin.property]"
15
+ :uuid="firstUuid"
15
16
  class="bk-blokkli-item-options-item"
16
17
  :class="{
17
18
  'bk-is-disabled': isDisabled(plugin)
@@ -33,6 +34,7 @@
33
34
  :option="plugin.option"
34
35
  :property="plugin.property"
35
36
  :mutated-value="currentValues[plugin.property]"
37
+ :uuid="firstUuid"
36
38
  class="bk-blokkli-item-options-item"
37
39
  :class="{
38
40
  'bk-is-disabled': isDisabled(plugin)
@@ -88,6 +90,9 @@ const props = defineProps({
88
90
  uuids: { type: [Array, String], required: true },
89
91
  definition: { type: null, required: true }
90
92
  });
93
+ const firstUuid = computed(
94
+ () => Array.isArray(props.uuids) ? props.uuids[0] : void 0
95
+ );
91
96
  let pointerTimeout = null;
92
97
  let mouseLeaveTimeout = null;
93
98
  function onMouseLeave() {
@@ -45,7 +45,11 @@ import {
45
45
  import Overlay from "./Overlay/index.vue";
46
46
  import { BlokkliTransition } from "#blokkli/editor/components";
47
47
  import { PluginToolbarButton } from "#blokkli/editor/plugins";
48
- import { onBlokkliEvent, defineDropAreas } from "#blokkli/editor/composables";
48
+ import {
49
+ onBlokkliEvent,
50
+ defineDropAreas,
51
+ defineDropHandler
52
+ } from "#blokkli/editor/composables";
49
53
  import { falsy } from "#blokkli/helpers";
50
54
  import { itemEntityType } from "#blokkli-build/config";
51
55
  defineBlokkliFeature({
@@ -108,6 +112,26 @@ defineDropAreas((dragItems) => {
108
112
  };
109
113
  }).filter(falsy);
110
114
  });
115
+ defineDropHandler("search_content", {
116
+ resolveBundles({ items, field }) {
117
+ const item = items[0];
118
+ return field.allowedBundles.filter((b) => item.itemBundles.includes(b));
119
+ },
120
+ async execute({ items, host, afterUuid, bundle }) {
121
+ if (!adapter.addContentSearchItem) {
122
+ throw new Error('Adapter does not implement "addContentSearchItem".');
123
+ }
124
+ const item = items[0];
125
+ await state.mutateWithLoadingState(
126
+ () => adapter.addContentSearchItem({
127
+ item: item.searchItem,
128
+ host,
129
+ bundle,
130
+ afterUuid
131
+ })
132
+ );
133
+ }
134
+ });
111
135
  const isRendered = ref(false);
112
136
  const isVisible = ref(false);
113
137
  const overlay = useTemplateRef("overlay");
@@ -40,13 +40,37 @@ import {
40
40
  import { PluginSidebar } from "#blokkli/editor/plugins";
41
41
  import { ScrollBoundary } from "#blokkli/editor/components";
42
42
  import List from "./List/index.vue";
43
+ import { defineDropHandler } from "#blokkli/editor/composables";
43
44
  defineBlokkliFeature({
44
45
  id: "structure",
45
46
  icon: "bk_mdi_account_tree",
46
47
  label: "Structure",
47
48
  description: "Provides a sidebar button to render a structured list of all blocks on the current page."
48
49
  });
49
- const { $t, context } = useBlokkli();
50
+ const { $t, context, adapter, state, dom, ui, eventBus } = useBlokkli();
51
+ defineDropHandler("existing_structure", {
52
+ async execute({ items, host, afterUuid }) {
53
+ const uuids = items.map((v) => v.block.uuid);
54
+ await state.mutateWithLoadingState(
55
+ () => adapter.moveMultipleBlocks({
56
+ uuids,
57
+ afterUuid,
58
+ host
59
+ })
60
+ );
61
+ if (uuids.length >= 1 && uuids.length <= 10) {
62
+ for (let i = 0; i < uuids.length; i++) {
63
+ dom.refreshBlockRect(uuids[i]);
64
+ }
65
+ }
66
+ if (ui.isMobile.value && uuids.length) {
67
+ eventBus.emit("scrollIntoView", {
68
+ uuid: uuids[0],
69
+ center: true
70
+ });
71
+ }
72
+ }
73
+ });
50
74
  const isLoaded = ref(false);
51
75
  const visibleFieldKeys = reactive({});
52
76
  const observer = new IntersectionObserver(function(entries) {
@@ -1,29 +1,39 @@
1
1
  <template>
2
- <Overlay v-if="tour.isTouring.value" @close="close" />
3
- <Popup v-if="showTourPopup" @close="close" @start="start" />
2
+ <Overlay v-if="tour.isTouring.value" @close="stopTour" />
3
+ <Popup
4
+ id="tour"
5
+ theme="warning"
6
+ position="top-left"
7
+ :title="$t('tourLabel', 'Take a tour')"
8
+ :text="
9
+ $t(
10
+ 'tourIntro',
11
+ 'Explore the most important features of the editor and learn how to get started using bl\xF6kkli.'
12
+ )
13
+ "
14
+ :cta="$t('tourStartButton', 'Start the tour')"
15
+ @submit="startTour"
16
+ />
4
17
  </template>
5
18
 
6
19
  <script setup>
7
20
  import { defineBlokkliFeature, useBlokkli } from "#imports";
8
21
  import Overlay from "./Overlay/index.vue";
9
- import Popup from "./Popup/index.vue";
10
22
  import { defineMenuButton } from "#blokkli/editor/composables";
23
+ import { Popup } from "#blokkli/editor/components";
11
24
  defineBlokkliFeature({
12
25
  id: "tour",
13
26
  label: "Tour",
14
27
  icon: "bk_mdi_school-fill",
15
28
  description: "Provides a tour overlay to get to know the editor."
16
29
  });
17
- const { tour, $t, storage } = useBlokkli();
18
- const showTourPopup = storage.use("showTourPopup", true);
19
- const start = () => {
20
- showTourPopup.value = false;
30
+ const { tour, $t } = useBlokkli();
31
+ function startTour() {
21
32
  tour.isTouring.value = true;
22
- };
23
- const close = () => {
24
- showTourPopup.value = false;
33
+ }
34
+ function stopTour() {
25
35
  tour.isTouring.value = false;
26
- };
36
+ }
27
37
  defineMenuButton(() => {
28
38
  return {
29
39
  id: "tour",
@@ -32,7 +42,7 @@ defineMenuButton(() => {
32
42
  icon: "bk_mdi_school-fill",
33
43
  secondary: true,
34
44
  weight: -10,
35
- callback: start
45
+ callback: startTour
36
46
  };
37
47
  });
38
48
  </script>
@@ -0,0 +1,11 @@
1
+ export declare class ClipboardData {
2
+ private html;
3
+ private text;
4
+ constructor(data: DataTransfer);
5
+ hasHtml(): boolean;
6
+ hasText(): boolean;
7
+ /** Returns markdown converted from HTML, falling back to plain text. */
8
+ toMarkdown(): string;
9
+ /** Returns the raw plain text. */
10
+ toText(): string;
11
+ }
@@ -0,0 +1,157 @@
1
+ function convertNode(node) {
2
+ if (node.nodeType === Node.TEXT_NODE) {
3
+ return node.textContent || "";
4
+ }
5
+ if (node.nodeType !== Node.ELEMENT_NODE) {
6
+ return "";
7
+ }
8
+ const el = node;
9
+ const tag = el.tagName.toLowerCase();
10
+ const children = Array.from(el.childNodes).map(convertNode).join("");
11
+ switch (tag) {
12
+ case "br":
13
+ return "\n";
14
+ case "p":
15
+ case "div":
16
+ return children + "\n\n";
17
+ case "strong":
18
+ case "b":
19
+ return `**${children}**`;
20
+ case "em":
21
+ case "i":
22
+ return `*${children}*`;
23
+ case "del":
24
+ case "s":
25
+ return `~~${children}~~`;
26
+ case "code":
27
+ if (el.parentElement?.tagName.toLowerCase() === "pre") {
28
+ return children;
29
+ }
30
+ return `\`${children}\``;
31
+ case "pre": {
32
+ const codeEl = el.querySelector("code");
33
+ const content = codeEl ? convertNode(codeEl) : children;
34
+ return `
35
+ \`\`\`
36
+ ${content}
37
+ \`\`\`
38
+ `;
39
+ }
40
+ case "h1":
41
+ return `# ${children}
42
+
43
+ `;
44
+ case "h2":
45
+ return `## ${children}
46
+
47
+ `;
48
+ case "h3":
49
+ return `### ${children}
50
+
51
+ `;
52
+ case "h4":
53
+ return `#### ${children}
54
+
55
+ `;
56
+ case "h5":
57
+ return `##### ${children}
58
+
59
+ `;
60
+ case "h6":
61
+ return `###### ${children}
62
+
63
+ `;
64
+ case "a": {
65
+ const href = el.getAttribute("href");
66
+ return href ? `[${children}](${href})` : children;
67
+ }
68
+ case "ul":
69
+ case "ol":
70
+ return "\n" + children + "\n";
71
+ case "li": {
72
+ const parent = el.parentElement;
73
+ if (parent?.tagName.toLowerCase() === "ol") {
74
+ const index = Array.from(parent.children).indexOf(el) + 1;
75
+ return `${index}. ${children.trim()}
76
+ `;
77
+ }
78
+ return `- ${children.trim()}
79
+ `;
80
+ }
81
+ case "blockquote":
82
+ return children.trim().split("\n").map((line) => `> ${line}`).join("\n") + "\n";
83
+ case "table": {
84
+ const rows = [];
85
+ el.querySelectorAll("tr").forEach((tr) => {
86
+ const cells = [];
87
+ tr.querySelectorAll("td, th").forEach((cell) => {
88
+ cells.push(convertNode(cell).replace(/\n/g, " ").trim());
89
+ });
90
+ if (cells.length) {
91
+ rows.push(cells);
92
+ }
93
+ });
94
+ if (!rows.length) return "";
95
+ const colCount = Math.max(...rows.map((r) => r.length));
96
+ const colWidths = Array.from(
97
+ { length: colCount },
98
+ (_, i) => Math.max(3, ...rows.map((r) => (r[i] || "").length))
99
+ );
100
+ const formatRow = (cells) => "| " + colWidths.map((w, i) => (cells[i] || "").padEnd(w)).join(" | ") + " |";
101
+ const separator = "| " + colWidths.map((w) => "-".repeat(w)).join(" | ") + " |";
102
+ const [header, ...body] = rows;
103
+ if (!header) return "";
104
+ const lines = [formatRow(header), separator];
105
+ for (const row of body) {
106
+ lines.push(formatRow(row));
107
+ }
108
+ return "\n" + lines.join("\n") + "\n";
109
+ }
110
+ case "thead":
111
+ case "tbody":
112
+ case "tfoot":
113
+ case "colgroup":
114
+ case "col":
115
+ case "tr":
116
+ case "td":
117
+ case "th":
118
+ case "caption":
119
+ return children;
120
+ case "hr":
121
+ return "\n---\n";
122
+ case "style":
123
+ case "script":
124
+ return "";
125
+ default:
126
+ return children;
127
+ }
128
+ }
129
+ function htmlToMarkdown(html) {
130
+ const doc = new DOMParser().parseFromString(html, "text/html");
131
+ return convertNode(doc.body).replace(/\n{3,}/g, "\n\n").trim();
132
+ }
133
+ export class ClipboardData {
134
+ html;
135
+ text;
136
+ constructor(data) {
137
+ this.html = data.getData("text/html");
138
+ this.text = data.getData("text/plain");
139
+ }
140
+ hasHtml() {
141
+ return !!this.html;
142
+ }
143
+ hasText() {
144
+ return !!this.text;
145
+ }
146
+ /** Returns markdown converted from HTML, falling back to plain text. */
147
+ toMarkdown() {
148
+ if (this.html) {
149
+ return htmlToMarkdown(this.html);
150
+ }
151
+ return this.text;
152
+ }
153
+ /** Returns the raw plain text. */
154
+ toText() {
155
+ return this.text;
156
+ }
157
+ }
@@ -55,6 +55,11 @@ export function optionValueToStorable(definition, value) {
55
55
  if (typeof value === "string") {
56
56
  return value;
57
57
  }
58
+ } else if (definition.type === "json") {
59
+ if (typeof value === "string") {
60
+ return value;
61
+ }
62
+ return JSON.stringify(value);
58
63
  }
59
64
  return "";
60
65
  }
@@ -1 +1,5 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,1L17.74,3.75L15,5L17.74,6.26L19,9L20.25,6.26L23,5L20.25,3.75M9,4L6.5,9.5L1,12L6.5,14.5L9,20L11.5,14.5L17,12L11.5,9.5M19,15L17.74,17.74L15,19L17.74,20.25L19,23L20.25,20.25L23,19L20.25,17.74" /></svg>
1
+ <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M19 15L17.74 17.74L15 19L17.74 20.25L19 23L20.25 20.25L23 19L20.25 17.74" />
3
+ <path d="M9 4L6.5 9.5L1 12L6.5 14.5L9 20L11.5 14.5L17 12L11.5 9.5" />
4
+ <path d="M19 1L17.74 3.75L15 5L17.74 6.26L19 9L20.25 6.26L23 5L20.25 3.75" />
5
+ </svg>
@@ -11,6 +11,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
11
11
  * The title displayed in the sidebar header.
12
12
  */
13
13
  title: string;
14
+ /**
15
+ * The title for the tooltip. Falls back to the title.
16
+ */
17
+ tooltipTitle?: string;
14
18
  /**
15
19
  * Optional text for the interactive tour.
16
20
  *
@@ -92,8 +96,9 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
92
96
  isLoading?: boolean;
93
97
  }, {
94
98
  showSidebar: () => void;
95
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
96
- updated: () => any;
99
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
100
+ updated: () => void;
101
+ toggle: () => void;
97
102
  }, string, import("vue").PublicProps, Readonly<{
98
103
  /**
99
104
  * Unique identifier for this sidebar.
@@ -103,6 +108,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
103
108
  * The title displayed in the sidebar header.
104
109
  */
105
110
  title: string;
111
+ /**
112
+ * The title for the tooltip. Falls back to the title.
113
+ */
114
+ tooltipTitle?: string;
106
115
  /**
107
116
  * Optional text for the interactive tour.
108
117
  *
@@ -184,6 +193,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
184
193
  isLoading?: boolean;
185
194
  }> & Readonly<{
186
195
  onUpdated?: (() => any) | undefined;
196
+ onToggle?: (() => any) | undefined;
187
197
  }>, {
188
198
  keyCode: string;
189
199
  size: {
@@ -194,6 +204,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
194
204
  tourText: string;
195
205
  minWidth: number;
196
206
  region: SidebarRegion;
207
+ tooltipTitle: string;
197
208
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
198
209
  icon?: (props: {}) => any;
199
210
  } & {
@@ -17,7 +17,7 @@
17
17
  </slot>
18
18
  <slot name="badge" />
19
19
  <div class="bk-tooltip">
20
- <span>{{ title }}</span>
20
+ <span>{{ tooltipTitle || title }}</span>
21
21
  <ShortcutIndicator
22
22
  v-if="keyCode"
23
23
  :meta
@@ -132,6 +132,7 @@ import {
132
132
  const props = defineProps({
133
133
  id: { type: String, required: true },
134
134
  title: { type: String, required: true },
135
+ tooltipTitle: { type: String, required: false, default: void 0 },
135
136
  tourText: { type: String, required: false, default: void 0 },
136
137
  editOnly: { type: Boolean, required: false },
137
138
  icon: { type: null, required: true },
@@ -148,7 +149,7 @@ const props = defineProps({
148
149
  beta: { type: Boolean, required: false },
149
150
  isLoading: { type: Boolean, required: false }
150
151
  });
151
- const emit = defineEmits(["updated"]);
152
+ const emit = defineEmits(["updated", "toggle"]);
152
153
  const { storage, state, ui, $t } = useBlokkli();
153
154
  const tourElement = useTemplateRef("tourElement");
154
155
  const sidebarDetached = useTemplateRef("sidebarDetached");
@@ -197,6 +198,7 @@ const onAttachDetached = () => {
197
198
  emit("updated");
198
199
  };
199
200
  const toggleSidebar = () => {
201
+ emit("toggle");
200
202
  if (isDetached.value) {
201
203
  isDetached.value = false;
202
204
  return;
@@ -11,6 +11,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
11
11
  * The title displayed in the sidebar header.
12
12
  */
13
13
  title: string;
14
+ /**
15
+ * The title for the tooltip. Falls back to the title.
16
+ */
17
+ tooltipTitle?: string;
14
18
  /**
15
19
  * Optional text for the interactive tour.
16
20
  *
@@ -92,8 +96,9 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
92
96
  isLoading?: boolean;
93
97
  }, {
94
98
  showSidebar: () => void;
95
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
96
- updated: () => any;
99
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
100
+ updated: () => void;
101
+ toggle: () => void;
97
102
  }, string, import("vue").PublicProps, Readonly<{
98
103
  /**
99
104
  * Unique identifier for this sidebar.
@@ -103,6 +108,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
103
108
  * The title displayed in the sidebar header.
104
109
  */
105
110
  title: string;
111
+ /**
112
+ * The title for the tooltip. Falls back to the title.
113
+ */
114
+ tooltipTitle?: string;
106
115
  /**
107
116
  * Optional text for the interactive tour.
108
117
  *
@@ -184,6 +193,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
184
193
  isLoading?: boolean;
185
194
  }> & Readonly<{
186
195
  onUpdated?: (() => any) | undefined;
196
+ onToggle?: (() => any) | undefined;
187
197
  }>, {
188
198
  keyCode: string;
189
199
  size: {
@@ -194,6 +204,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
194
204
  tourText: string;
195
205
  minWidth: number;
196
206
  region: SidebarRegion;
207
+ tooltipTitle: string;
197
208
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
198
209
  icon?: (props: {}) => any;
199
210
  } & {
@@ -0,0 +1,43 @@
1
+ import { type Ref, type ComputedRef } from '#imports';
2
+ import type { AdaptersProvider } from './adapters.js';
3
+ import type { StateProvider } from './state.js';
4
+ import type { UiProvider } from './ui.js';
5
+ import type { AdapterContext } from '#blokkli/editor/adapter';
6
+ import type { TextProvider } from './texts.js';
7
+ import type { AnalyzeNode, AnalyzeResult, Analyzer, AnalyzerType } from '../features/analyze/analyzers/types.js';
8
+ import { AnalyzerContext } from '../features/analyze/analyzers/helpers/Context.js';
9
+ export type AnalyzeProvider = {
10
+ /**
11
+ * All available analyzers, fetched once from adapters.
12
+ * Empty array until initialized.
13
+ */
14
+ analyzers: Readonly<Ref<Analyzer[]>>;
15
+ /**
16
+ * Whether analyzers have been fetched and initialized.
17
+ */
18
+ isInitialized: Readonly<Ref<boolean>>;
19
+ /**
20
+ * Fetch analyzers and call init() on each one. Idempotent.
21
+ */
22
+ ensureInitialized: () => Promise<void>;
23
+ /**
24
+ * Create an AnalyzerContext scoped to the given element.
25
+ */
26
+ createContext: (element: HTMLElement, signal?: AbortSignal) => AnalyzerContext;
27
+ /**
28
+ * Run a single analyzer and return its results as a flat array.
29
+ */
30
+ runAnalyzer: (analyzer: Analyzer, context: AnalyzerContext) => Promise<AnalyzeResult[]>;
31
+ /**
32
+ * Run analyzeText on all analyzers that support it.
33
+ * Optionally filter by analyzer type.
34
+ * Returns nodes per analyzer per text.
35
+ */
36
+ runOnTexts: (texts: string[], analyzerType?: AnalyzerType) => Promise<Array<{
37
+ analyzerId: string;
38
+ analyzerLabel?: string;
39
+ text: string;
40
+ nodes: AnalyzeNode[];
41
+ }>>;
42
+ };
43
+ export default function analyzeProvider(adapters: AdaptersProvider, state: StateProvider, ui: UiProvider, context: ComputedRef<AdapterContext>, $t: TextProvider): AnalyzeProvider;