@skaile/forge-editor 5.0.2 → 5.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/code/CodeSurface.vue.d.ts +2 -2
- package/dist/document/DocumentSurface.vue.d.ts +2 -2
- package/dist/features/composites/components/CompositeInspector.js +8 -8
- package/dist/features/composites/vue.js +1 -1
- package/dist/markdown/MarkdownSurface.vue.d.ts +8 -8
- package/dist/server/handlers/ai.d.ts +1 -1
- package/dist/tree/DocumentTree.js +1 -1
- package/dist/tree/use-tree-model.js +1 -1
- package/dist/vue/AdvancedEditor.vue.d.ts +6 -6
- package/dist/vue/SimpleEditor.vue.d.ts +6 -6
- package/dist/vue/components/EditorSurface.vue.d.ts +6 -6
- package/dist/vue/compose.js +1 -1
- package/dist/vue/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -12,12 +12,12 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
|
12
12
|
view: import("vue").ShallowRef<EditorView | undefined, EditorView | undefined>;
|
|
13
13
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
14
14
|
"update:modelValue": (text: string) => any;
|
|
15
|
-
save: (text: string) => any;
|
|
16
15
|
ready: (view: EditorView) => any;
|
|
16
|
+
save: (text: string) => any;
|
|
17
17
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
18
18
|
"onUpdate:modelValue"?: ((text: string) => any) | undefined;
|
|
19
|
-
onSave?: ((text: string) => any) | undefined;
|
|
20
19
|
onReady?: ((view: EditorView) => any) | undefined;
|
|
20
|
+
onSave?: ((text: string) => any) | undefined;
|
|
21
21
|
}>, {
|
|
22
22
|
modelValue: string;
|
|
23
23
|
editable: boolean;
|
|
@@ -33,12 +33,12 @@ type __VLS_Slots = {} & { [K in NonNullable<typeof __VLS_13>]?: (props: typeof _
|
|
|
33
33
|
};
|
|
34
34
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
35
35
|
"update:modelValue": (text: string) => any;
|
|
36
|
-
save: (text: string) => any;
|
|
37
36
|
ready: (target: DocumentSurfaceTarget) => any;
|
|
37
|
+
save: (text: string) => any;
|
|
38
38
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
39
39
|
"onUpdate:modelValue"?: ((text: string) => any) | undefined;
|
|
40
|
-
onSave?: ((text: string) => any) | undefined;
|
|
41
40
|
onReady?: ((target: DocumentSurfaceTarget) => any) | undefined;
|
|
41
|
+
onSave?: ((text: string) => any) | undefined;
|
|
42
42
|
}>, {
|
|
43
43
|
modelValue: string;
|
|
44
44
|
editable: boolean;
|
|
@@ -4,10 +4,10 @@ import { propertyHostOf } from "../properties.js";
|
|
|
4
4
|
import { useUiKit } from "../../../vue/kit/use-ui-kit.js";
|
|
5
5
|
import { useEditorI18n } from "../../../vue/use-editor-i18n.js";
|
|
6
6
|
import { compositeFieldText, isStructuredField } from "../inspector-model.js";
|
|
7
|
-
import _sfc_main$1 from "./
|
|
8
|
-
import _sfc_main$2 from "./
|
|
9
|
-
import _sfc_main$3 from "./
|
|
10
|
-
import _sfc_main$4 from "./
|
|
7
|
+
import _sfc_main$1 from "./DerivationBadge.js";
|
|
8
|
+
import _sfc_main$2 from "./CompositeFieldEditor.js";
|
|
9
|
+
import _sfc_main$3 from "./InspectorSections.js";
|
|
10
|
+
import _sfc_main$4 from "./DocumentBadges.js";
|
|
11
11
|
import { useCompositeInspector } from "../use-composite-inspector.js";
|
|
12
12
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderList, renderSlot, toDisplayString, unref, useId, withCtx } from "vue";
|
|
13
13
|
//#region src/features/composites/components/CompositeInspector.vue
|
|
@@ -109,7 +109,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
109
109
|
class: "text-sm font-semibold text-[var(--sk-fg-highlighted)]"
|
|
110
110
|
}, toDisplayString(unref(t)("composites.inspector.document")), 9, _hoisted_4),
|
|
111
111
|
createCommentVNode(" Chips of the whole document other features add (`EditorFeature.documentBadges`), e.g. the Freigabestatus. "),
|
|
112
|
-
createVNode(_sfc_main$
|
|
112
|
+
createVNode(_sfc_main$4, { editor: __props.editor }, null, 8, ["editor"])
|
|
113
113
|
]), createElementVNode("div", _hoisted_5, [renderSlot(_ctx.$slots, "document"), createElementVNode("dl", _hoisted_6, [
|
|
114
114
|
createElementVNode("dt", _hoisted_7, toDisplayString(unref(t)("composites.inspector.composites")), 1),
|
|
115
115
|
unref(kinds).length ? (openBlock(), createElementBlock("dd", _hoisted_8, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(kinds), (kind) => {
|
|
@@ -267,7 +267,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
267
267
|
label: field.label,
|
|
268
268
|
size: "sm"
|
|
269
269
|
}, {
|
|
270
|
-
default: withCtx(() => [createCommentVNode(" Fields whose value is not text (reference, bibliography, derivation) have their own editors, as in the details card; a text input would overwrite the stored object with a string. "), unref(isStructuredField)(field) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.editor ? (openBlock(), createBlock(_sfc_main$
|
|
270
|
+
default: withCtx(() => [createCommentVNode(" Fields whose value is not text (reference, bibliography, derivation) have their own editors, as in the details card; a text input would overwrite the stored object with a string. "), unref(isStructuredField)(field) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [__props.editor ? (openBlock(), createBlock(_sfc_main$2, {
|
|
271
271
|
key: 0,
|
|
272
272
|
editor: __props.editor,
|
|
273
273
|
row: unref(properties),
|
|
@@ -335,14 +335,14 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
335
335
|
label: unref(t)("composites.inspector.derivation"),
|
|
336
336
|
size: "sm"
|
|
337
337
|
}, {
|
|
338
|
-
default: withCtx(() => [createVNode(_sfc_main$
|
|
338
|
+
default: withCtx(() => [createVNode(_sfc_main$1, {
|
|
339
339
|
editor: __props.editor,
|
|
340
340
|
node: unref(derivation).node
|
|
341
341
|
}, null, 8, ["editor", "node"])]),
|
|
342
342
|
_: 1
|
|
343
343
|
}, 8, ["label"])) : createCommentVNode("v-if", true),
|
|
344
344
|
createCommentVNode(" Sections other features add (`EditorFeature.inspectorSections`), e.g. the Prüfstand. "),
|
|
345
|
-
__props.editor ? (openBlock(), createBlock(_sfc_main$
|
|
345
|
+
__props.editor ? (openBlock(), createBlock(_sfc_main$3, {
|
|
346
346
|
key: 3,
|
|
347
347
|
editor: __props.editor,
|
|
348
348
|
node: blockNode.value
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { embedViewOptions } from "./embed-dom.js";
|
|
2
2
|
import { typedBlockViewOptions } from "./node-views.js";
|
|
3
3
|
import { compositeFeatureCore } from "./feature.js";
|
|
4
|
-
import _sfc_main$13 from "./components/DocumentBadges.js";
|
|
5
4
|
import _sfc_main from "./components/BlockEmbedView.js";
|
|
6
5
|
import _sfc_main$1 from "./components/CiteView.js";
|
|
7
6
|
import _sfc_main$11 from "./components/CompositeView.js";
|
|
@@ -21,6 +20,7 @@ import _sfc_main$14 from "./components/EdgesSection.js";
|
|
|
21
20
|
import _sfc_main$16 from "./components/FocusChip.js";
|
|
22
21
|
import _sfc_main$18 from "./components/ReferenceView.js";
|
|
23
22
|
import _sfc_main$19 from "./components/SettingsEditingTab.js";
|
|
23
|
+
import _sfc_main$13 from "./components/DocumentBadges.js";
|
|
24
24
|
import _sfc_main$6 from "./components/CompositeInspector.js";
|
|
25
25
|
import _sfc_main$9 from "./components/CompositeTable.js";
|
|
26
26
|
import { VueNodeViewRenderer } from "@tiptap/vue-3";
|
|
@@ -41,24 +41,24 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
41
41
|
settingsOpen: import("vue").WritableComputedRef<boolean, boolean>;
|
|
42
42
|
settingsTab: import("vue").WritableComputedRef<string | undefined, string | undefined>;
|
|
43
43
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
44
|
-
|
|
45
|
-
ready: (editor: Editor) => any;
|
|
44
|
+
settingsOpen: (tab?: string | undefined) => any;
|
|
46
45
|
"update:sidebarOpen": (value: boolean) => any;
|
|
47
46
|
"update:commentsOpen": (value: boolean) => any;
|
|
47
|
+
"update:modelValue": (markdown: string) => any;
|
|
48
|
+
frontmatter: (frontmatter: string | null) => any;
|
|
49
|
+
ready: (editor: Editor) => any;
|
|
48
50
|
metadataCreate: (list: string, item: MetadataItem) => any;
|
|
49
51
|
contentError: (error: Error) => any;
|
|
50
|
-
settingsOpen: (tab?: string | undefined) => any;
|
|
51
|
-
frontmatter: (frontmatter: string | null) => any;
|
|
52
52
|
diagnostics: (diagnostics: MarkdownDiagnostic[]) => any;
|
|
53
53
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
54
|
-
|
|
55
|
-
onReady?: ((editor: Editor) => any) | undefined;
|
|
54
|
+
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
56
55
|
"onUpdate:sidebarOpen"?: ((value: boolean) => any) | undefined;
|
|
57
56
|
"onUpdate:commentsOpen"?: ((value: boolean) => any) | undefined;
|
|
57
|
+
"onUpdate:modelValue"?: ((markdown: string) => any) | undefined;
|
|
58
|
+
onFrontmatter?: ((frontmatter: string | null) => any) | undefined;
|
|
59
|
+
onReady?: ((editor: Editor) => any) | undefined;
|
|
58
60
|
onMetadataCreate?: ((list: string, item: MetadataItem) => any) | undefined;
|
|
59
61
|
onContentError?: ((error: Error) => any) | undefined;
|
|
60
|
-
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
61
|
-
onFrontmatter?: ((frontmatter: string | null) => any) | undefined;
|
|
62
62
|
onDiagnostics?: ((diagnostics: MarkdownDiagnostic[]) => any) | undefined;
|
|
63
63
|
}>, {
|
|
64
64
|
modelValue: string;
|
|
@@ -5,10 +5,10 @@ import { basketById } from "../features/composites/baskets.js";
|
|
|
5
5
|
import { useUiKit } from "../vue/kit/use-ui-kit.js";
|
|
6
6
|
import { useEditorSettings } from "../vue/settings.js";
|
|
7
7
|
import { useEditorI18n } from "../vue/use-editor-i18n.js";
|
|
8
|
+
import _sfc_main$1 from "../features/composites/components/DocumentBadges.js";
|
|
8
9
|
import { DRAG_MIME, focusCrumbs, indexItems, isOutlineHeader, itemBasket } from "./tree-items.js";
|
|
9
10
|
import { refocusRow, rowPosition } from "./row-focus.js";
|
|
10
11
|
import { rowOf } from "./tree-model.js";
|
|
11
|
-
import _sfc_main$1 from "../features/composites/components/DocumentBadges.js";
|
|
12
12
|
import { useTreeModel } from "./use-tree-model.js";
|
|
13
13
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, mergeModels, normalizeClass, normalizeStyle, openBlock, renderList, renderSlot, toDisplayString, unref, useModel, withCtx, withKeys, withModifiers } from "vue";
|
|
14
14
|
//#region src/tree/DocumentTree.vue
|
|
@@ -3,10 +3,10 @@ import { useEditorSettings } from "../vue/settings.js";
|
|
|
3
3
|
import { useEditorContext } from "../vue/context.js";
|
|
4
4
|
import { useEditorI18n } from "../vue/use-editor-i18n.js";
|
|
5
5
|
import { useStoreRef } from "../vue/store-ref.js";
|
|
6
|
+
import { useFileImport } from "../features/media/vue.js";
|
|
6
7
|
import { treeView } from "./tree-view-model.js";
|
|
7
8
|
import { createTreeModel } from "./tree-model.js";
|
|
8
9
|
import { createTreeExecutor, treeEditorOf } from "./tree-host.js";
|
|
9
|
-
import { useFileImport } from "../features/media/vue.js";
|
|
10
10
|
import { computed, onScopeDispose, shallowRef, watch } from "vue";
|
|
11
11
|
//#region src/tree/use-tree-model.ts
|
|
12
12
|
/**
|
|
@@ -82,21 +82,21 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
82
82
|
editor: import("vue").ComputedRef<Editor | undefined>;
|
|
83
83
|
preset: ComposedEditor<Component>;
|
|
84
84
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
85
|
-
|
|
86
|
-
ready: (editor: Editor) => any;
|
|
85
|
+
settingsOpen: (tab?: string | undefined) => any;
|
|
87
86
|
"update:sidebarOpen": (value: boolean) => any;
|
|
88
87
|
"update:commentsOpen": (value: boolean) => any;
|
|
88
|
+
"update:modelValue": (content: JSONContent) => any;
|
|
89
|
+
ready: (editor: Editor) => any;
|
|
89
90
|
metadataCreate: (list: string, item: MetadataItem) => any;
|
|
90
91
|
contentError: (error: Error) => any;
|
|
91
|
-
settingsOpen: (tab?: string | undefined) => any;
|
|
92
92
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
93
|
-
|
|
94
|
-
onReady?: ((editor: Editor) => any) | undefined;
|
|
93
|
+
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
95
94
|
"onUpdate:sidebarOpen"?: ((value: boolean) => any) | undefined;
|
|
96
95
|
"onUpdate:commentsOpen"?: ((value: boolean) => any) | undefined;
|
|
96
|
+
"onUpdate:modelValue"?: ((content: JSONContent) => any) | undefined;
|
|
97
|
+
onReady?: ((editor: Editor) => any) | undefined;
|
|
97
98
|
onMetadataCreate?: ((list: string, item: MetadataItem) => any) | undefined;
|
|
98
99
|
onContentError?: ((error: Error) => any) | undefined;
|
|
99
|
-
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
100
100
|
}>, {
|
|
101
101
|
content: ContentLevel | readonly FeatureId[];
|
|
102
102
|
ai: boolean;
|
|
@@ -41,21 +41,21 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
41
41
|
editor: import("vue").ComputedRef<Editor | undefined>;
|
|
42
42
|
preset: EditorPreset<Component>;
|
|
43
43
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
44
|
-
|
|
45
|
-
ready: (editor: Editor) => any;
|
|
44
|
+
settingsOpen: (tab?: string | undefined) => any;
|
|
46
45
|
"update:sidebarOpen": (value: boolean) => any;
|
|
47
46
|
"update:commentsOpen": (value: boolean) => any;
|
|
47
|
+
"update:modelValue": (content: JSONContent) => any;
|
|
48
|
+
ready: (editor: Editor) => any;
|
|
48
49
|
metadataCreate: (list: string, item: MetadataItem) => any;
|
|
49
50
|
contentError: (error: Error) => any;
|
|
50
|
-
settingsOpen: (tab?: string | undefined) => any;
|
|
51
51
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
52
|
-
|
|
53
|
-
onReady?: ((editor: Editor) => any) | undefined;
|
|
52
|
+
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
54
53
|
"onUpdate:sidebarOpen"?: ((value: boolean) => any) | undefined;
|
|
55
54
|
"onUpdate:commentsOpen"?: ((value: boolean) => any) | undefined;
|
|
55
|
+
"onUpdate:modelValue"?: ((content: JSONContent) => any) | undefined;
|
|
56
|
+
onReady?: ((editor: Editor) => any) | undefined;
|
|
56
57
|
onMetadataCreate?: ((list: string, item: MetadataItem) => any) | undefined;
|
|
57
58
|
onContentError?: ((error: Error) => any) | undefined;
|
|
58
|
-
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
59
59
|
}>, {
|
|
60
60
|
editable: boolean;
|
|
61
61
|
settingsUi: "internal" | "external";
|
|
@@ -43,21 +43,21 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
43
43
|
settingsOpen: import("vue").Ref<boolean, boolean>;
|
|
44
44
|
settingsTab: import("vue").Ref<string | undefined, string | undefined>;
|
|
45
45
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
46
|
-
|
|
47
|
-
ready: (editor: Editor) => any;
|
|
46
|
+
settingsOpen: (tab?: string | undefined) => any;
|
|
48
47
|
"update:sidebarOpen": (value: boolean) => any;
|
|
49
48
|
"update:commentsOpen": (value: boolean) => any;
|
|
49
|
+
"update:modelValue": (content: JSONContent) => any;
|
|
50
|
+
ready: (editor: Editor) => any;
|
|
50
51
|
metadataCreate: (list: string, item: MetadataItem) => any;
|
|
51
52
|
contentError: (error: Error) => any;
|
|
52
|
-
settingsOpen: (tab?: string | undefined) => any;
|
|
53
53
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
54
|
-
|
|
55
|
-
onReady?: ((editor: Editor) => any) | undefined;
|
|
54
|
+
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
56
55
|
"onUpdate:sidebarOpen"?: ((value: boolean) => any) | undefined;
|
|
57
56
|
"onUpdate:commentsOpen"?: ((value: boolean) => any) | undefined;
|
|
57
|
+
"onUpdate:modelValue"?: ((content: JSONContent) => any) | undefined;
|
|
58
|
+
onReady?: ((editor: Editor) => any) | undefined;
|
|
58
59
|
onMetadataCreate?: ((list: string, item: MetadataItem) => any) | undefined;
|
|
59
60
|
onContentError?: ((error: Error) => any) | undefined;
|
|
60
|
-
onSettingsOpen?: ((tab?: string | undefined) => any) | undefined;
|
|
61
61
|
}>, {
|
|
62
62
|
editable: boolean;
|
|
63
63
|
settingsUi: "internal" | "external";
|
package/dist/vue/compose.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { coreUiFeature } from "../core/core-feature.js";
|
|
2
2
|
import { AI_BINDINGS, layerCompositions } from "../presets/layer.js";
|
|
3
|
-
import { mediaFeature } from "../features/media/vue.js";
|
|
4
3
|
import _sfc_main from "./components/EditorCommandPalette.js";
|
|
5
4
|
import { aiFeature } from "../features/ai/vue.js";
|
|
6
5
|
import { authorsFeature } from "../features/authors/vue.js";
|
|
@@ -8,6 +7,7 @@ import { blockUiFeature } from "../features/block-ui/vue.js";
|
|
|
8
7
|
import { collabFeature } from "../features/collab/vue.js";
|
|
9
8
|
import { commentsFeature } from "../features/comments/vue.js";
|
|
10
9
|
import { compositeFeature } from "../features/composites/vue.js";
|
|
10
|
+
import { mediaFeature } from "../features/media/vue.js";
|
|
11
11
|
import { themesFeature } from "../features/themes/vue.js";
|
|
12
12
|
import { pruefungFeature } from "../features/pruefung/vue.js";
|
|
13
13
|
import { exploreFeature } from "../features/explore/vue.js";
|
package/dist/vue/index.js
CHANGED
|
@@ -11,8 +11,8 @@ import { vueSuggestionRenderer } from "./suggestion-renderer.js";
|
|
|
11
11
|
import _sfc_main$2 from "./components/EditorSettingsPanel.js";
|
|
12
12
|
import _sfc_main$1 from "./components/EditorSettingsModal.js";
|
|
13
13
|
import _sfc_main$3 from "./components/EditorSurface.js";
|
|
14
|
-
import { useNotifier } from "./use-notifier.js";
|
|
15
14
|
import _sfc_main from "./components/EditorCommandPalette.js";
|
|
15
|
+
import { useNotifier } from "./use-notifier.js";
|
|
16
16
|
import _sfc_main$5 from "./components/SettingsSection.js";
|
|
17
17
|
import _sfc_main$4 from "./components/EditorToolbar.js";
|
|
18
18
|
export { EDITOR_CONTEXT, EDITOR_UI, _sfc_main as EditorCommandPalette, _sfc_main$1 as EditorSettingsModal, _sfc_main$2 as EditorSettingsPanel, _sfc_main$3 as EditorSurface, _sfc_main$4 as EditorToolbar, _sfc_main$5 as SettingsSection, _sfc_main$6 as SuggestionList, VUE_UI_KIT, attachNotifier, createEditor, createQueuedNotifier, storeFromRef, trackedStore, useEditorContext, useEditorI18n, useEditorSettings, useEditorUi, useNotifier, useStoreRef, useUiKit, useWritableStoreRef, vueSuggestionRenderer };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skaile/forge-editor",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Vue and React editor library on TipTap v3 (Vue: Nuxt UI; React: shadcn/ui): framework-free features with Vue and React bindings, simple and advanced presets, tree-shakeable entries. Built ESM with type declarations.",
|
|
6
6
|
"license": "MIT",
|