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

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 (199) hide show
  1. package/dist/global/types/blockOptions.d.ts +9 -2
  2. package/dist/global/types/definitions.d.ts +12 -5
  3. package/dist/module.d.mts +2 -2
  4. package/dist/module.json +1 -1
  5. package/dist/module.mjs +56 -4
  6. package/dist/modules/agent/index.d.mts +1 -1
  7. package/dist/modules/agent/index.mjs +38 -20
  8. package/dist/modules/agent/runtime/app/composables/agentProvider.d.ts +2 -2
  9. package/dist/modules/agent/runtime/app/composables/agentProvider.js +3 -3
  10. package/dist/modules/agent/runtime/app/features/agent/Panel/Input/Actions/index.vue +34 -60
  11. package/dist/modules/agent/runtime/app/features/agent/Transcript/index.d.vue.ts +8 -0
  12. package/dist/modules/agent/runtime/app/features/agent/Transcript/index.vue +138 -0
  13. package/dist/modules/agent/runtime/app/features/agent/Transcript/index.vue.d.ts +8 -0
  14. package/dist/modules/agent/runtime/app/features/agent/index.vue +5 -1
  15. package/dist/modules/agent/runtime/app/tools/get_bundle_info/index.js +175 -0
  16. package/dist/modules/agent/runtime/app/tools/get_paragraph_context/index.js +5 -0
  17. package/dist/modules/agent/runtime/app/tools/schemas.d.ts +10 -1
  18. package/dist/modules/agent/runtime/app/tools/schemas.js +36 -23
  19. package/dist/modules/agent/runtime/server/Session.d.ts +4 -2
  20. package/dist/modules/agent/runtime/server/Session.js +61 -57
  21. package/dist/modules/agent/runtime/server/agentPrompt.d.ts +9 -1
  22. package/dist/modules/agent/runtime/server/agentPrompt.js +26 -0
  23. package/dist/modules/agent/runtime/shared/types.d.ts +35 -1
  24. package/dist/modules/charts/index.d.mts +35 -0
  25. package/dist/modules/charts/index.mjs +43 -0
  26. package/dist/modules/charts/runtime/blokkli/skills/charts.d.ts +2 -0
  27. package/dist/modules/charts/runtime/blokkli/skills/charts.js +42 -0
  28. package/dist/modules/charts/runtime/blokkli/tools/chart_schemas.d.ts +63 -0
  29. package/dist/modules/charts/runtime/blokkli/tools/chart_schemas.js +98 -0
  30. package/dist/modules/charts/runtime/blokkli/tools/create_chart/index.d.ts +2 -0
  31. package/dist/modules/charts/runtime/blokkli/tools/create_chart/index.js +86 -0
  32. package/dist/modules/charts/runtime/blokkli/tools/get_chart_data/index.d.ts +2 -0
  33. package/dist/modules/charts/runtime/blokkli/tools/get_chart_data/index.js +74 -0
  34. package/dist/modules/charts/runtime/blokkli/tools/get_chart_type_options/index.d.ts +2 -0
  35. package/dist/modules/charts/runtime/blokkli/tools/get_chart_type_options/index.js +42 -0
  36. package/dist/modules/charts/runtime/blokkli/tools/update_chart/index.d.ts +2 -0
  37. package/dist/modules/charts/runtime/blokkli/tools/update_chart/index.js +101 -0
  38. package/dist/modules/charts/runtime/chartTypes/area.d.ts +2 -0
  39. package/dist/modules/charts/runtime/chartTypes/area.js +68 -0
  40. package/dist/modules/charts/runtime/chartTypes/bar.d.ts +2 -0
  41. package/dist/modules/charts/runtime/chartTypes/bar.js +76 -0
  42. package/dist/modules/charts/runtime/chartTypes/define.d.ts +2 -0
  43. package/dist/modules/charts/runtime/chartTypes/define.js +3 -0
  44. package/dist/modules/charts/runtime/chartTypes/donut.d.ts +2 -0
  45. package/dist/modules/charts/runtime/chartTypes/donut.js +45 -0
  46. package/dist/modules/charts/runtime/chartTypes/heatmap.d.ts +2 -0
  47. package/dist/modules/charts/runtime/chartTypes/heatmap.js +54 -0
  48. package/dist/modules/charts/runtime/chartTypes/index.d.ts +21 -0
  49. package/dist/modules/charts/runtime/chartTypes/index.js +47 -0
  50. package/dist/modules/charts/runtime/chartTypes/line.d.ts +2 -0
  51. package/dist/modules/charts/runtime/chartTypes/line.js +68 -0
  52. package/dist/modules/charts/runtime/chartTypes/pie.d.ts +2 -0
  53. package/dist/modules/charts/runtime/chartTypes/pie.js +28 -0
  54. package/dist/modules/charts/runtime/chartTypes/radar.d.ts +2 -0
  55. package/dist/modules/charts/runtime/chartTypes/radar.js +52 -0
  56. package/dist/modules/charts/runtime/chartTypes/radialBar.d.ts +2 -0
  57. package/dist/modules/charts/runtime/chartTypes/radialBar.js +44 -0
  58. package/dist/modules/charts/runtime/chartTypes/shared.d.ts +52 -0
  59. package/dist/modules/charts/runtime/chartTypes/shared.js +103 -0
  60. package/dist/modules/charts/runtime/chartTypes/types.d.ts +29 -0
  61. package/dist/modules/charts/runtime/chartTypes/types.js +0 -0
  62. package/dist/modules/charts/runtime/components/ChartRenderer/index.d.vue.ts +4 -0
  63. package/dist/modules/charts/runtime/components/ChartRenderer/index.vue +120 -0
  64. package/dist/modules/charts/runtime/components/ChartRenderer/index.vue.d.ts +4 -0
  65. package/dist/modules/charts/runtime/components/Fragment/BlokkliChart.d.vue.ts +3 -0
  66. package/dist/modules/charts/runtime/components/Fragment/BlokkliChart.vue +29 -0
  67. package/dist/modules/charts/runtime/components/Fragment/BlokkliChart.vue.d.ts +3 -0
  68. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypeOptions/index.d.vue.ts +15 -0
  69. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypeOptions/index.vue +97 -0
  70. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypeOptions/index.vue.d.ts +15 -0
  71. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypePicker/index.d.vue.ts +11 -0
  72. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypePicker/index.vue +34 -0
  73. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypePicker/index.vue.d.ts +11 -0
  74. package/dist/modules/charts/runtime/features/charts/Editor/ColorDropdown/index.d.vue.ts +12 -0
  75. package/dist/modules/charts/runtime/features/charts/Editor/ColorDropdown/index.vue +49 -0
  76. package/dist/modules/charts/runtime/features/charts/Editor/ColorDropdown/index.vue.d.ts +12 -0
  77. package/dist/modules/charts/runtime/features/charts/Editor/CsvImport/index.d.vue.ts +19 -0
  78. package/dist/modules/charts/runtime/features/charts/Editor/CsvImport/index.vue +90 -0
  79. package/dist/modules/charts/runtime/features/charts/Editor/CsvImport/index.vue.d.ts +19 -0
  80. package/dist/modules/charts/runtime/features/charts/Editor/DataTable/index.d.vue.ts +23 -0
  81. package/dist/modules/charts/runtime/features/charts/Editor/DataTable/index.vue +224 -0
  82. package/dist/modules/charts/runtime/features/charts/Editor/DataTable/index.vue.d.ts +23 -0
  83. package/dist/modules/charts/runtime/features/charts/Editor/FootnoteEditor/index.d.vue.ts +10 -0
  84. package/dist/modules/charts/runtime/features/charts/Editor/FootnoteEditor/index.vue +61 -0
  85. package/dist/modules/charts/runtime/features/charts/Editor/FootnoteEditor/index.vue.d.ts +10 -0
  86. package/dist/modules/charts/runtime/features/charts/Editor/Preview/index.d.vue.ts +8 -0
  87. package/dist/modules/charts/runtime/features/charts/Editor/Preview/index.vue +23 -0
  88. package/dist/modules/charts/runtime/features/charts/Editor/Preview/index.vue.d.ts +8 -0
  89. package/dist/modules/charts/runtime/features/charts/Editor/index.d.vue.ts +10 -0
  90. package/dist/modules/charts/runtime/features/charts/Editor/index.vue +243 -0
  91. package/dist/modules/charts/runtime/features/charts/Editor/index.vue.d.ts +10 -0
  92. package/dist/modules/charts/runtime/features/charts/Editor/useChartEditorState.d.ts +17 -0
  93. package/dist/modules/charts/runtime/features/charts/Editor/useChartEditorState.js +90 -0
  94. package/dist/modules/charts/runtime/features/charts/index.d.vue.ts +3 -0
  95. package/dist/modules/charts/runtime/features/charts/index.vue +72 -0
  96. package/dist/modules/charts/runtime/features/charts/index.vue.d.ts +3 -0
  97. package/dist/modules/charts/runtime/helpers/index.d.ts +1 -0
  98. package/dist/modules/charts/runtime/helpers/index.js +17 -0
  99. package/dist/modules/charts/runtime/types.d.ts +51 -0
  100. package/dist/modules/charts/runtime/types.js +64 -0
  101. package/dist/modules/drupal/graphql/features/fragments.graphql +2 -0
  102. package/dist/modules/drupal/index.d.mts +1 -1
  103. package/dist/modules/drupal/runtime/adapter/index.js +12 -8
  104. package/dist/modules/table-of-contents/index.d.mts +11 -0
  105. package/dist/modules/table-of-contents/index.mjs +24 -0
  106. package/dist/modules/table-of-contents/runtime/components/BlokkliTableOfContents/index.d.vue.ts +44 -0
  107. package/dist/modules/table-of-contents/runtime/components/BlokkliTableOfContents/index.vue +43 -0
  108. package/dist/modules/table-of-contents/runtime/components/BlokkliTableOfContents/index.vue.d.ts +44 -0
  109. package/dist/modules/table-of-contents/runtime/types/index.d.ts +4 -0
  110. package/dist/modules/table-of-contents/runtime/types/index.js +0 -0
  111. package/dist/runtime/components/Blocks/Fragment/index.vue +6 -2
  112. package/dist/runtime/components/BlokkliItem.vue +8 -3
  113. package/dist/runtime/components/BlokkliProvider.d.vue.ts +7 -0
  114. package/dist/runtime/components/BlokkliProvider.vue +7 -1
  115. package/dist/runtime/components/BlokkliProvider.vue.d.ts +7 -0
  116. package/dist/runtime/composables/useBlokkliHelper.js +4 -2
  117. package/dist/runtime/editor/components/AnimationCanvas/index.vue +4 -20
  118. package/dist/runtime/editor/components/Banner/index.d.vue.ts +12 -2
  119. package/dist/runtime/editor/components/Banner/index.vue +4 -2
  120. package/dist/runtime/editor/components/Banner/index.vue.d.ts +12 -2
  121. package/dist/runtime/editor/components/Dropdown/index.d.vue.ts +27 -0
  122. package/dist/runtime/editor/components/Dropdown/index.vue +107 -0
  123. package/dist/runtime/editor/components/Dropdown/index.vue.d.ts +27 -0
  124. package/dist/{modules/agent/runtime/app/features/agent/Panel/Input/Actions → runtime/editor/components}/DropdownItem/index.vue +1 -1
  125. package/dist/runtime/editor/components/EditProvider.d.vue.ts +2 -0
  126. package/dist/runtime/editor/components/EditProvider.vue +4 -3
  127. package/dist/runtime/editor/components/EditProvider.vue.d.ts +2 -0
  128. package/dist/runtime/editor/components/Form/Radio/index.d.vue.ts +1 -0
  129. package/dist/runtime/editor/components/Form/Radio/index.vue +3 -2
  130. package/dist/runtime/editor/components/Form/Radio/index.vue.d.ts +1 -0
  131. package/dist/runtime/editor/components/ItemIcon/index.vue +10 -2
  132. package/dist/runtime/editor/components/NestedEditorOverlay/index.d.vue.ts +13 -3
  133. package/dist/runtime/editor/components/NestedEditorOverlay/index.vue +15 -7
  134. package/dist/runtime/editor/components/NestedEditorOverlay/index.vue.d.ts +13 -3
  135. package/dist/runtime/editor/components/PreviewProvider.d.vue.ts +2 -0
  136. package/dist/runtime/editor/components/PreviewProvider.vue +3 -2
  137. package/dist/runtime/editor/components/PreviewProvider.vue.d.ts +2 -0
  138. package/dist/runtime/editor/components/ShortcutIndicator/index.vue +1 -1
  139. package/dist/runtime/editor/components/index.d.ts +3 -1
  140. package/dist/runtime/editor/components/index.js +4 -0
  141. package/dist/runtime/editor/composables/onElementResize.js +0 -1
  142. package/dist/runtime/editor/composables/useEditableFieldOverride.js +4 -5
  143. package/dist/runtime/editor/css/output.css +1 -1
  144. package/dist/runtime/editor/events/index.d.ts +7 -0
  145. package/dist/runtime/editor/features/add-list/Help/Item.vue +5 -2
  146. package/dist/runtime/editor/features/artboard/Renderer.vue +1 -1
  147. package/dist/runtime/editor/features/clipboard/index.vue +1 -1
  148. package/dist/runtime/editor/features/debug/index.vue +1 -1
  149. package/dist/runtime/editor/features/dev-mode/index.vue +86 -2
  150. package/dist/runtime/editor/features/edit/index.vue +20 -0
  151. package/dist/runtime/editor/features/fragments/types.d.ts +1 -0
  152. package/dist/runtime/editor/features/hover/Renderer/index.vue +30 -3
  153. package/dist/runtime/editor/features/hover/index.vue +1 -1
  154. package/dist/runtime/editor/features/options/Form/Checkbox/index.d.vue.ts +2 -2
  155. package/dist/runtime/editor/features/options/Form/Checkbox/index.vue +3 -3
  156. package/dist/runtime/editor/features/options/Form/Checkbox/index.vue.d.ts +2 -2
  157. package/dist/runtime/editor/features/options/Form/Checkboxes/index.d.vue.ts +2 -2
  158. package/dist/runtime/editor/features/options/Form/Checkboxes/index.vue +5 -5
  159. package/dist/runtime/editor/features/options/Form/Checkboxes/index.vue.d.ts +2 -2
  160. package/dist/runtime/editor/features/options/Form/Item.d.vue.ts +2 -2
  161. package/dist/runtime/editor/features/options/Form/Item.vue +14 -48
  162. package/dist/runtime/editor/features/options/Form/Item.vue.d.ts +2 -2
  163. package/dist/runtime/editor/features/options/Form/Number/index.d.vue.ts +3 -3
  164. package/dist/runtime/editor/features/options/Form/Number/index.vue +7 -17
  165. package/dist/runtime/editor/features/options/Form/Number/index.vue.d.ts +3 -3
  166. package/dist/runtime/editor/features/options/Form/Range/index.d.vue.ts +2 -2
  167. package/dist/runtime/editor/features/options/Form/Range/index.vue +4 -4
  168. package/dist/runtime/editor/features/options/Form/Range/index.vue.d.ts +2 -2
  169. package/dist/runtime/editor/features/options/Form/index.vue +10 -5
  170. package/dist/runtime/editor/features/selection/index.vue +2 -2
  171. package/dist/runtime/editor/features/transform/index.vue +1 -3
  172. package/dist/runtime/editor/plugins/Sidebar/index.d.vue.ts +1 -1
  173. package/dist/runtime/editor/plugins/Sidebar/index.vue.d.ts +1 -1
  174. package/dist/runtime/editor/providers/definition.d.ts +2 -2
  175. package/dist/runtime/editor/providers/definition.js +7 -1
  176. package/dist/runtime/editor/providers/dom.d.ts +5 -0
  177. package/dist/runtime/editor/providers/dom.js +11 -2
  178. package/dist/runtime/editor/providers/fields.d.ts +19 -1
  179. package/dist/runtime/editor/providers/fields.js +54 -2
  180. package/dist/runtime/editor/translations/de.json +269 -1
  181. package/dist/runtime/editor/translations/fr.json +269 -1
  182. package/dist/runtime/editor/translations/gsw_CH.json +269 -1
  183. package/dist/runtime/editor/translations/it.json +269 -1
  184. package/dist/runtime/helpers/imports/index.d.ts +8 -1
  185. package/dist/runtime/helpers/imports/index.js +15 -6
  186. package/dist/runtime/helpers/injections.d.ts +5 -1
  187. package/dist/runtime/helpers/injections.js +3 -0
  188. package/dist/runtime/helpers/runtimeHelpers/index.js +14 -0
  189. package/dist/runtime/types/definitions.d.ts +8 -5
  190. package/dist/runtime/types/provider.d.ts +2 -0
  191. package/dist/shared/editor.6D5vApr0.mjs +30 -0
  192. package/dist/shared/{editor.DMFfaLVE.mjs → editor.BFIzNSQM.mjs} +1 -30
  193. package/dist/shared/{editor.Iax3GCvt.d.mts → editor.CWQIFIEQ.d.mts} +22 -0
  194. package/dist/types.d.mts +1 -1
  195. package/package.json +17 -1
  196. package/dist/modules/agent/runtime/app/tools/get_available_bundles/index.js +0 -104
  197. /package/dist/modules/agent/runtime/app/tools/{get_available_bundles → get_bundle_info}/index.d.ts +0 -0
  198. /package/dist/{modules/agent/runtime/app/features/agent/Panel/Input/Actions → runtime/editor/components}/DropdownItem/index.d.vue.ts +0 -0
  199. /package/dist/{modules/agent/runtime/app/features/agent/Panel/Input/Actions → runtime/editor/components}/DropdownItem/index.vue.d.ts +0 -0
@@ -0,0 +1,44 @@
1
+ import type { fromLibraryBlockBundle } from '#blokkli-build/config';
2
+ import type { FieldListItemTyped } from '#blokkli-build/generated-types';
3
+ import type { BlokkliTableOfContentsLink } from './../../types/index.js';
4
+ type BundleWithoutLibrary = Exclude<FieldListItemTyped['bundle'], typeof fromLibraryBlockBundle>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
7
+ declare const __VLS_export: <T extends BundleWithoutLibrary>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
8
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<{
9
+ /**
10
+ * Which bundles to include. This will also match reusable blocks of this bundle.
11
+ */
12
+ bundles: T[];
13
+ /**
14
+ * The name of the defineBlokkli option used to toggle if a block should be
15
+ * added to the table of contents.
16
+ *
17
+ * If not provided, all blocks are included.
18
+ */
19
+ optionName?: string;
20
+ /**
21
+ * Map a block item to a link.
22
+ */
23
+ mapItem: (item: Extract<FieldListItemTyped, {
24
+ bundle: T;
25
+ }>) => BlokkliTableOfContentsLink | null;
26
+ }> & (typeof globalThis extends {
27
+ __VLS_PROPS_FALLBACK: infer P;
28
+ } ? P : {});
29
+ expose: (exposed: {}) => void;
30
+ attrs: any;
31
+ slots: {
32
+ default(props: {
33
+ links: BlokkliTableOfContentsLink[];
34
+ }): any;
35
+ };
36
+ emit: {};
37
+ }>) => import("vue").VNode & {
38
+ __ctx?: Awaited<typeof __VLS_setup>;
39
+ };
40
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
41
+ [K in keyof T]: T[K];
42
+ } : {
43
+ [K in keyof T as K]: T[K];
44
+ }) & {};
@@ -0,0 +1,43 @@
1
+ <template>
2
+ <slot :links />
3
+ </template>
4
+
5
+ <script>
6
+
7
+ </script>
8
+
9
+ <script setup>
10
+ import { falsy } from "#blokkli/helpers";
11
+ import { getRuntimeOptions } from "#blokkli/helpers/runtimeHelpers";
12
+ import { computed, useBlokkliHelper } from "#imports";
13
+ import { BK_HIDDEN_GLOBALLY } from "./../../../../../global/constants";
14
+ const props = defineProps({
15
+ bundles: { type: Array, required: true },
16
+ optionName: { type: String, required: false },
17
+ mapItem: { type: Function, required: true }
18
+ });
19
+ defineSlots();
20
+ const { queryBlocks } = useBlokkliHelper();
21
+ const items = queryBlocks(props.bundles);
22
+ const links = computed(() => {
23
+ return items.value.filter((item) => {
24
+ if ("bundle" in item) {
25
+ const options = getRuntimeOptions(item);
26
+ if (!options) {
27
+ return null;
28
+ }
29
+ if (props.optionName) {
30
+ const shouldShow = options[props.optionName];
31
+ if (!shouldShow) {
32
+ return false;
33
+ }
34
+ }
35
+ const hiddenGlobally = options[BK_HIDDEN_GLOBALLY];
36
+ if (hiddenGlobally) {
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ }).map(props.mapItem).filter(falsy);
42
+ });
43
+ </script>
@@ -0,0 +1,44 @@
1
+ import type { fromLibraryBlockBundle } from '#blokkli-build/config';
2
+ import type { FieldListItemTyped } from '#blokkli-build/generated-types';
3
+ import type { BlokkliTableOfContentsLink } from './../../types/index.js';
4
+ type BundleWithoutLibrary = Exclude<FieldListItemTyped['bundle'], typeof fromLibraryBlockBundle>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
7
+ declare const __VLS_export: <T extends BundleWithoutLibrary>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
8
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<{
9
+ /**
10
+ * Which bundles to include. This will also match reusable blocks of this bundle.
11
+ */
12
+ bundles: T[];
13
+ /**
14
+ * The name of the defineBlokkli option used to toggle if a block should be
15
+ * added to the table of contents.
16
+ *
17
+ * If not provided, all blocks are included.
18
+ */
19
+ optionName?: string;
20
+ /**
21
+ * Map a block item to a link.
22
+ */
23
+ mapItem: (item: Extract<FieldListItemTyped, {
24
+ bundle: T;
25
+ }>) => BlokkliTableOfContentsLink | null;
26
+ }> & (typeof globalThis extends {
27
+ __VLS_PROPS_FALLBACK: infer P;
28
+ } ? P : {});
29
+ expose: (exposed: {}) => void;
30
+ attrs: any;
31
+ slots: {
32
+ default(props: {
33
+ links: BlokkliTableOfContentsLink[];
34
+ }): any;
35
+ };
36
+ emit: {};
37
+ }>) => import("vue").VNode & {
38
+ __ctx?: Awaited<typeof __VLS_setup>;
39
+ };
40
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
41
+ [K in keyof T]: T[K];
42
+ } : {
43
+ [K in keyof T as K]: T[K];
44
+ }) & {};
@@ -0,0 +1,4 @@
1
+ export type BlokkliTableOfContentsLink = {
2
+ id: string;
3
+ label: string;
4
+ };
@@ -19,12 +19,16 @@ const ctx = defineBlokkli({
19
19
  disableEdit: true
20
20
  }
21
21
  });
22
+ const providerType = ctx.provider.value?.providerType;
22
23
  const allComponentsChunk = inject(INJECT_ALL_COMPONENTS_CHUNK, null);
23
24
  const component = getComponent(
24
25
  "fragment",
25
26
  componentProps.name,
26
- void 0,
27
- void 0,
27
+ {
28
+ fieldListType: void 0,
29
+ parentBundle: void 0,
30
+ providerType
31
+ },
28
32
  allComponentsChunk
29
33
  );
30
34
  provide(INJECT_FRAGMENT_CONTEXT, ctx);
@@ -33,7 +33,8 @@ import {
33
33
  INJECT_FIELD_PROXY_MODE,
34
34
  INJECT_FIELD_USES_PROXY,
35
35
  INJECT_GLOBAL_PROXY_MODE,
36
- INJECT_ITEM_PROPS_OVERRIDE
36
+ INJECT_ITEM_PROPS_OVERRIDE,
37
+ INJECT_PROVIDER_TYPE
37
38
  } from "../helpers/injections";
38
39
  import { fragmentBlockBundle, itemEntityType } from "#blokkli-build/config";
39
40
  const componentProps = defineProps({
@@ -53,6 +54,7 @@ const allComponentsChunk = inject(INJECT_ALL_COMPONENTS_CHUNK, null);
53
54
  const fieldUsesProxy = inject(INJECT_FIELD_USES_PROXY, false);
54
55
  const isGlobalProxyMode = inject(INJECT_GLOBAL_PROXY_MODE, null);
55
56
  const fieldListType = inject(INJECT_FIELD_LIST_TYPE, void 0);
57
+ const providerType = inject(INJECT_PROVIDER_TYPE, void 0);
56
58
  const itemProps = computed(() => {
57
59
  if (mutatedItemProps) {
58
60
  const mutatedProps = mutatedItemProps[componentProps.uuid];
@@ -70,8 +72,11 @@ const component = isProxyMode || isGlobalProxyMode?.value ? defineAsyncComponent
70
72
  ) : getComponent(
71
73
  "block",
72
74
  componentProps.bundle,
73
- fieldListType?.value || "default",
74
- componentProps.parentType,
75
+ {
76
+ fieldListType: fieldListType?.value || "default",
77
+ parentBundle: componentProps.parentType,
78
+ providerType
79
+ },
75
80
  allComponentsChunk
76
81
  );
77
82
  const blockNotImplemented = componentProps.isEditing ? defineAsyncComponent(() => import("./Blocks/NotImplemented/index.vue")) : null;
@@ -1,4 +1,5 @@
1
1
  import type { EditPermission } from '#blokkli/types/provider';
2
+ import type { ValidProviderTypes } from '#blokkli-build/generated-types';
2
3
  declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
3
4
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
4
5
  /**
@@ -41,6 +42,12 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
41
42
  * Whether to isolate the provider element during editing.
42
43
  */
43
44
  isolate?: boolean;
45
+ /**
46
+ * The provider type.
47
+ *
48
+ * @default "default"
49
+ */
50
+ providerType?: ValidProviderTypes;
44
51
  } & ({
45
52
  /**
46
53
  * The entity data. Will be merged with the mutatedEntity data during editing.
@@ -15,6 +15,7 @@
15
15
  :entity-uuid
16
16
  :entity-bundle
17
17
  :language
18
+ :provider-type
18
19
  >
19
20
  <slot
20
21
  :entity="mutatedEntity"
@@ -34,6 +35,7 @@
34
35
  :language
35
36
  :isolate
36
37
  :permissions
38
+ :provider-type
37
39
  >
38
40
  <slot
39
41
  :is-editing
@@ -78,7 +80,8 @@ import {
78
80
  } from "#imports";
79
81
  import {
80
82
  INJECT_ENTITY_CONTEXT,
81
- INJECT_PROVIDER_CONTEXT
83
+ INJECT_PROVIDER_CONTEXT,
84
+ INJECT_PROVIDER_TYPE
82
85
  } from "../helpers/injections";
83
86
  const props = defineProps({
84
87
  entityType: { type: String, required: true },
@@ -91,6 +94,7 @@ const props = defineProps({
91
94
  hostOptions: { type: Object, required: false, default: void 0 },
92
95
  permissions: { type: Array, required: false, default: () => [] },
93
96
  isolate: { type: Boolean, required: false },
97
+ providerType: { type: null, required: false, default: "default" },
94
98
  entity: { type: null, required: false, default: void 0 }
95
99
  });
96
100
  defineSlots();
@@ -136,6 +140,7 @@ function edit() {
136
140
  const blokkliProviderEntityContext = computed(
137
141
  () => {
138
142
  return {
143
+ providerType: props.providerType,
139
144
  uuid: props.entityUuid,
140
145
  type: props.entityType,
141
146
  bundle: props.entityBundle,
@@ -152,6 +157,7 @@ const entityContext = computed(() => {
152
157
  });
153
158
  provide(INJECT_PROVIDER_CONTEXT, blokkliProviderEntityContext);
154
159
  provide(INJECT_ENTITY_CONTEXT, entityContext.value);
160
+ provide(INJECT_PROVIDER_TYPE, props.providerType);
155
161
  onMounted(() => {
156
162
  shouldRender.value = true;
157
163
  });
@@ -1,4 +1,5 @@
1
1
  import type { EditPermission } from '#blokkli/types/provider';
2
+ import type { ValidProviderTypes } from '#blokkli-build/generated-types';
2
3
  declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
3
4
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
4
5
  /**
@@ -41,6 +42,12 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
41
42
  * Whether to isolate the provider element during editing.
42
43
  */
43
44
  isolate?: boolean;
45
+ /**
46
+ * The provider type.
47
+ *
48
+ * @default "default"
49
+ */
50
+ providerType?: ValidProviderTypes;
44
51
  } & ({
45
52
  /**
46
53
  * The entity data. Will be merged with the mutatedEntity data during editing.
@@ -32,8 +32,10 @@ function walkBlocks(matches, callback, mutatedOptions, mutatedFieldsMap, list) {
32
32
  if (!("props" in mappedItem) || !mappedItem.props) continue;
33
33
  const propNames = Object.keys(nestedFieldMapping);
34
34
  for (const propName of propNames) {
35
- const fieldName = nestedFieldMapping[propName];
36
- const key = mappedItem.uuid + ":" + fieldName;
35
+ const mapping = nestedFieldMapping[propName];
36
+ if (!mapping) continue;
37
+ if (mapping[0] !== "field") continue;
38
+ const key = mappedItem.uuid + ":" + mapping[1];
37
39
  const value = mutatedFieldsMap ? mutatedFieldsMap[key]?.list : mappedItem.props?.[propName];
38
40
  if (!value) continue;
39
41
  const valueAsArray = Array.isArray(value) ? value : [value];
@@ -43,7 +43,8 @@ const {
43
43
  animation,
44
44
  state,
45
45
  directive,
46
- blocks
46
+ blocks,
47
+ fields
47
48
  } = useBlokkli();
48
49
  function onCanvasFocus() {
49
50
  ui.setCanvasFocused(true);
@@ -78,22 +79,11 @@ let pointerDownElement = null;
78
79
  let mouseStartCoordinates = null;
79
80
  let pointerDownTimestamp = 0;
80
81
  let pointerUpTimestamp = 0;
81
- function getFieldZIndex(uuid) {
82
- const fieldKey = state.getFieldKeyForUuid(uuid);
83
- if (!fieldKey) {
84
- return 0;
85
- }
86
- const separatorIndex = fieldKey.indexOf(":");
87
- const entityUuid = fieldKey.substring(0, separatorIndex);
88
- const fieldName = fieldKey.substring(separatorIndex + 1);
89
- return dom.getRegisteredField(entityUuid, fieldName)?.zIndex ?? 0;
90
- }
91
82
  function getInteractedElement(e) {
92
83
  const { x, y } = getInteractionCoordinates(e);
93
84
  const visibleUuids = dom.getVisibleBlocks();
94
85
  let deepestUuid = "";
95
86
  let deepestLevel = -1;
96
- let deepestZIndex = 0;
97
87
  for (let i = 0; i < visibleUuids.length; i++) {
98
88
  const uuid = visibleUuids[i];
99
89
  if (!uuid) {
@@ -114,13 +104,8 @@ function getInteractedElement(e) {
114
104
  if (level > deepestLevel) {
115
105
  deepestUuid = uuid;
116
106
  deepestLevel = level;
117
- deepestZIndex = getFieldZIndex(uuid);
118
- } else {
119
- const zIndex = getFieldZIndex(uuid);
120
- if (zIndex > deepestZIndex) {
121
- deepestUuid = uuid;
122
- deepestZIndex = zIndex;
123
- }
107
+ } else if (fields.compareFieldPriority(uuid, deepestUuid) > 0) {
108
+ deepestUuid = uuid;
124
109
  }
125
110
  }
126
111
  const editableField = directive.getEditableAtPoint(x, y);
@@ -342,7 +327,6 @@ function onPointerUp(e) {
342
327
  } else if (keyboard.isPressingShift.value) {
343
328
  eventBus.emit("select:shiftToggle", clicked.uuid);
344
329
  } else {
345
- console.log("asdfasdf");
346
330
  eventBus.emit("select", clicked.uuid);
347
331
  }
348
332
  return;
@@ -3,11 +3,15 @@ import type { ThemeColorName } from './../../../../global/types/theme.js';
3
3
  type __VLS_Props = {
4
4
  id: string;
5
5
  icon: BlokkliIcon;
6
- text: string;
6
+ text?: string;
7
7
  button?: string;
8
8
  scheme?: ThemeColorName;
9
9
  };
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
10
+ declare var __VLS_6: {};
11
+ type __VLS_Slots = {} & {
12
+ default?: (props: typeof __VLS_6) => any;
13
+ };
14
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
11
15
  click: () => any;
12
16
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
13
17
  onClick?: (() => any) | undefined;
@@ -15,5 +19,11 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
15
19
  button: string;
16
20
  scheme: ThemeColorName;
17
21
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
18
23
  declare const _default: typeof __VLS_export;
19
24
  export default _default;
25
+ type __VLS_WithSlots<T, S> = T & {
26
+ new (): {
27
+ $slots: S;
28
+ };
29
+ };
@@ -5,7 +5,9 @@
5
5
  :class="scheme ? 'bk-scheme-' + scheme : void 0"
6
6
  >
7
7
  <Icon :name="icon" />
8
- <p v-html="text" />
8
+ <slot>
9
+ <p v-if="text" v-html="text" />
10
+ </slot>
9
11
  <button v-if="button" class="bk-banner-close" @click="$emit('click')">
10
12
  {{ button }}
11
13
  <Icon name="bk_mdi_close" />
@@ -24,7 +26,7 @@ import {
24
26
  const props = defineProps({
25
27
  id: { type: String, required: true },
26
28
  icon: { type: null, required: true },
27
- text: { type: String, required: true },
29
+ text: { type: String, required: false },
28
30
  button: { type: String, required: false, default: void 0 },
29
31
  scheme: { type: String, required: false, default: "accent" }
30
32
  });
@@ -3,11 +3,15 @@ import type { ThemeColorName } from './../../../../global/types/theme.js';
3
3
  type __VLS_Props = {
4
4
  id: string;
5
5
  icon: BlokkliIcon;
6
- text: string;
6
+ text?: string;
7
7
  button?: string;
8
8
  scheme?: ThemeColorName;
9
9
  };
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
10
+ declare var __VLS_6: {};
11
+ type __VLS_Slots = {} & {
12
+ default?: (props: typeof __VLS_6) => any;
13
+ };
14
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
11
15
  click: () => any;
12
16
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
13
17
  onClick?: (() => any) | undefined;
@@ -15,5 +19,11 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
15
19
  button: string;
16
20
  scheme: ThemeColorName;
17
21
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
18
23
  declare const _default: typeof __VLS_export;
19
24
  export default _default;
25
+ type __VLS_WithSlots<T, S> = T & {
26
+ new (): {
27
+ $slots: S;
28
+ };
29
+ };
@@ -0,0 +1,27 @@
1
+ type __VLS_Props = {
2
+ position?: 'bottom-left' | 'top-left' | 'top-right';
3
+ disabled?: boolean;
4
+ };
5
+ declare function close(): void;
6
+ declare var __VLS_1: {}, __VLS_9: {
7
+ close: typeof close;
8
+ };
9
+ type __VLS_Slots = {} & {
10
+ button?: (props: typeof __VLS_1) => any;
11
+ } & {
12
+ default?: (props: typeof __VLS_9) => any;
13
+ };
14
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
15
+ close: typeof close;
16
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
17
+ disabled: boolean;
18
+ position: "bottom-left" | "top-left" | "top-right";
19
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,107 @@
1
+ <template>
2
+ <div ref="container" class="bk-dropdown-menu">
3
+ <button
4
+ class="bk-dropdown-menu-trigger"
5
+ :disabled="disabled"
6
+ @click="showMenu = !showMenu"
7
+ >
8
+ <slot name="button" />
9
+ </button>
10
+ <BlokkliTransition name="drop-up">
11
+ <div
12
+ v-if="showMenu"
13
+ ref="contentEl"
14
+ class="bk-dropdown-menu-content"
15
+ :class="positionClass"
16
+ @keydown="onContentKeydown"
17
+ >
18
+ <slot :close="close" />
19
+ </div>
20
+ </BlokkliTransition>
21
+ </div>
22
+ </template>
23
+
24
+ <script setup>
25
+ import {
26
+ ref,
27
+ computed,
28
+ watch,
29
+ nextTick,
30
+ onMounted,
31
+ onBeforeUnmount,
32
+ useTemplateRef,
33
+ useBlokkli
34
+ } from "#imports";
35
+ import { BlokkliTransition } from "#blokkli/editor/components";
36
+ const props = defineProps({
37
+ position: { type: String, required: false, default: "bottom-left" },
38
+ disabled: { type: Boolean, required: false, default: false }
39
+ });
40
+ const { eventBus } = useBlokkli();
41
+ const container = useTemplateRef("container");
42
+ const contentEl = useTemplateRef("contentEl");
43
+ const showMenu = ref(false);
44
+ const positionClass = computed(() => `bk-is-${props.position}`);
45
+ function getFocusableItems() {
46
+ if (!contentEl.value) return [];
47
+ return Array.from(
48
+ contentEl.value.querySelectorAll("button, input, [tabindex]")
49
+ );
50
+ }
51
+ function focusTrigger() {
52
+ const trigger = container.value?.querySelector(
53
+ ".bk-dropdown-menu-trigger"
54
+ );
55
+ trigger?.focus();
56
+ }
57
+ function close() {
58
+ if (!showMenu.value) return;
59
+ showMenu.value = false;
60
+ focusTrigger();
61
+ }
62
+ watch(showMenu, (open) => {
63
+ if (open) {
64
+ nextTick(() => {
65
+ const items = getFocusableItems();
66
+ items[0]?.focus();
67
+ });
68
+ }
69
+ });
70
+ function onContentKeydown(e) {
71
+ const { key } = e;
72
+ if (key === "Escape") {
73
+ e.preventDefault();
74
+ e.stopPropagation();
75
+ close();
76
+ return;
77
+ }
78
+ if (key === "ArrowDown" || key === "ArrowUp") {
79
+ e.preventDefault();
80
+ e.stopPropagation();
81
+ const items = getFocusableItems();
82
+ if (!items.length) return;
83
+ const current = items.indexOf(document.activeElement);
84
+ let next;
85
+ if (key === "ArrowDown") {
86
+ next = current < items.length - 1 ? current + 1 : 0;
87
+ } else {
88
+ next = current > 0 ? current - 1 : items.length - 1;
89
+ }
90
+ items[next]?.focus();
91
+ return;
92
+ }
93
+ e.stopPropagation();
94
+ }
95
+ function onDocumentClick(e) {
96
+ if (!container.value?.contains(e.target)) {
97
+ close();
98
+ }
99
+ }
100
+ eventBus.on("mouse:up", close);
101
+ onMounted(() => document.addEventListener("click", onDocumentClick));
102
+ onBeforeUnmount(() => {
103
+ document.removeEventListener("click", onDocumentClick);
104
+ eventBus.off("mouse:up", close);
105
+ });
106
+ defineExpose({ close });
107
+ </script>
@@ -0,0 +1,27 @@
1
+ type __VLS_Props = {
2
+ position?: 'bottom-left' | 'top-left' | 'top-right';
3
+ disabled?: boolean;
4
+ };
5
+ declare function close(): void;
6
+ declare var __VLS_1: {}, __VLS_9: {
7
+ close: typeof close;
8
+ };
9
+ type __VLS_Slots = {} & {
10
+ button?: (props: typeof __VLS_1) => any;
11
+ } & {
12
+ default?: (props: typeof __VLS_9) => any;
13
+ };
14
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
15
+ close: typeof close;
16
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
17
+ disabled: boolean;
18
+ position: "bottom-left" | "top-left" | "top-right";
19
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <button @click="$emit('click')">
2
+ <button class="bk-dropdown-menu-item" @click="$emit('click')">
3
3
  <Icon :name="icon" />
4
4
  <span>{{ text }}</span>
5
5
  </button>
@@ -1,5 +1,6 @@
1
1
  import '#blokkli-build/styles.css';
2
2
  import type { EditPermission } from '#blokkli/types/provider';
3
+ import type { ValidProviderTypes } from '#blokkli-build/generated-types';
3
4
  declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
5
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
6
  entity?: T;
@@ -10,6 +11,7 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
10
11
  isolate?: boolean;
11
12
  permissions: Array<EditPermission | null>;
12
13
  providerEl: HTMLElement;
14
+ providerType: ValidProviderTypes;
13
15
  }> & (typeof globalThis extends {
14
16
  __VLS_PROPS_FALLBACK: infer P;
15
17
  } ? P : {});
@@ -139,7 +139,8 @@ const props = defineProps({
139
139
  language: { type: String, required: false, default: "en" },
140
140
  isolate: { type: Boolean, required: false },
141
141
  permissions: { type: Array, required: true },
142
- providerEl: { type: null, required: true }
142
+ providerEl: { type: null, required: true },
143
+ providerType: { type: null, required: true }
143
144
  });
144
145
  defineSlots();
145
146
  const mainLayoutElement = useTemplateRef("mainLayoutElement");
@@ -166,7 +167,7 @@ const route = useRoute();
166
167
  const toolbarLoaded = ref(false);
167
168
  const featuresLoaded = ref(false);
168
169
  const isInitializing = ref(true);
169
- const definitions = definitionProvider();
170
+ const definitions = definitionProvider(props.providerType);
170
171
  const $t = textProvider(context);
171
172
  const state = await editStateProvider(
172
173
  eventBus,
@@ -213,7 +214,7 @@ const animation = animationProvider(
213
214
  const types = await typesProvider(adapter, selection, context);
214
215
  const indicators = indicatorsProvider();
215
216
  const directive = directiveProvider(debug, ui);
216
- const fields = fieldsProvider(dom, types);
217
+ const fields = fieldsProvider(dom, types, state);
217
218
  const permissionsInstance = await permissionsProvider(adapter);
218
219
  const mutatedEntityProps = computed(() => state.mutatedItemProps.HOST);
219
220
  const mutatedEntity = computed(() => {
@@ -1,5 +1,6 @@
1
1
  import '#blokkli-build/styles.css';
2
2
  import type { EditPermission } from '#blokkli/types/provider';
3
+ import type { ValidProviderTypes } from '#blokkli-build/generated-types';
3
4
  declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
5
  props: import("vue").PublicProps & __VLS_PrettifyLocal<{
5
6
  entity?: T;
@@ -10,6 +11,7 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
10
11
  isolate?: boolean;
11
12
  permissions: Array<EditPermission | null>;
12
13
  providerEl: HTMLElement;
14
+ providerType: ValidProviderTypes;
13
15
  }> & (typeof globalThis extends {
14
16
  __VLS_PROPS_FALLBACK: infer P;
15
17
  } ? P : {});