kritzel-vue 0.3.21 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './components';
2
2
  export * from './composables';
3
3
  export * from './plugin';
4
- export { KritzelBaseObject, KritzelText, KritzelPath, KritzelImage, KritzelLine, KritzelShape, KritzelGroup, KritzelBaseTool, KritzelBrushTool, KritzelTextTool, KritzelLineTool, KritzelShapeTool, KritzelEraserTool, KritzelSelectionTool, KritzelImageTool, KritzelWorkspace, InMemorySyncProvider, IndexedDBSyncProvider, BroadcastSyncProvider, WebSocketSyncProvider, HocuspocusSyncProvider, KritzelThemeManager, KritzelLocalizationManager, KritzelLicenseManager, ShapeType, KritzelAlignment, lightTheme, darkTheme, EN_LOCALE, DE_LOCALE, FR_LOCALE, DEFAULT_BRUSH_CONFIG, DEFAULT_TEXT_CONFIG, } from 'kritzel-stencil';
4
+ export * from './vue-custom-element-renderer';
5
+ export { KritzelBaseObject, KritzelText, KritzelPath, KritzelImage, KritzelLine, KritzelShape, KritzelGroup, KritzelCustomElement, KritzelBaseTool, KritzelBrushTool, KritzelTextTool, KritzelLineTool, KritzelShapeTool, KritzelEraserTool, KritzelSelectionTool, KritzelImageTool, KritzelWorkspace, InMemorySyncProvider, IndexedDBSyncProvider, BroadcastSyncProvider, WebSocketSyncProvider, HocuspocusSyncProvider, KritzelThemeManager, KritzelLocalizationManager, KritzelLicenseManager, ShapeType, KritzelAlignment, lightTheme, darkTheme, EN_LOCALE, DE_LOCALE, FR_LOCALE, DEFAULT_BRUSH_CONFIG, DEFAULT_TEXT_CONFIG, } from 'kritzel-stencil';
5
6
  export type { HTMLKritzelEditorElement, HTMLKritzelEngineElement, KritzelToolbarControl, KritzelBrushToolConfig, KritzelLineToolConfig, KritzelShapeToolConfig, KritzelTextToolConfig, KritzelSyncConfig, KritzelTheme, KritzelViewportState, ContextMenuItem, ThemeAwareColor, ThemeName, KritzelLocale, LocaleCode, KritzelTerms, KritzelTermKey, KritzelTermVars, LoginEvent, EditorIsReadyEvent, ActiveWorkspaceChangeEvent, ObjectsAddedEvent, ObjectsRemovedEvent, ObjectsUpdatedEvent, ObjectsInViewportChangeEvent, KritzelUndoState, IKritzelIsPublicChangedEvent, KritzelEngineState, KritzelDebugInfo, IKritzelUser, } from 'kritzel-stencil';
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './components';
2
2
  export * from './composables';
3
3
  export * from './plugin';
4
- export { KritzelBaseObject, KritzelText, KritzelPath, KritzelImage, KritzelLine, KritzelShape, KritzelGroup, KritzelBaseTool, KritzelBrushTool, KritzelTextTool, KritzelLineTool, KritzelShapeTool, KritzelEraserTool, KritzelSelectionTool, KritzelImageTool, KritzelWorkspace, InMemorySyncProvider, IndexedDBSyncProvider, BroadcastSyncProvider, WebSocketSyncProvider, HocuspocusSyncProvider, KritzelThemeManager, KritzelLocalizationManager, KritzelLicenseManager, ShapeType, KritzelAlignment, lightTheme, darkTheme, EN_LOCALE, DE_LOCALE, FR_LOCALE, DEFAULT_BRUSH_CONFIG, DEFAULT_TEXT_CONFIG, } from 'kritzel-stencil';
4
+ export * from './vue-custom-element-renderer';
5
+ export { KritzelBaseObject, KritzelText, KritzelPath, KritzelImage, KritzelLine, KritzelShape, KritzelGroup, KritzelCustomElement, KritzelBaseTool, KritzelBrushTool, KritzelTextTool, KritzelLineTool, KritzelShapeTool, KritzelEraserTool, KritzelSelectionTool, KritzelImageTool, KritzelWorkspace, InMemorySyncProvider, IndexedDBSyncProvider, BroadcastSyncProvider, WebSocketSyncProvider, HocuspocusSyncProvider, KritzelThemeManager, KritzelLocalizationManager, KritzelLicenseManager, ShapeType, KritzelAlignment, lightTheme, darkTheme, EN_LOCALE, DE_LOCALE, FR_LOCALE, DEFAULT_BRUSH_CONFIG, DEFAULT_TEXT_CONFIG, } from 'kritzel-stencil';
@@ -0,0 +1,14 @@
1
+ import { type DefineComponent } from 'vue';
2
+ import { type KritzelCustomElementRenderContext, type KritzelCustomElementRenderer } from 'kritzel-stencil';
3
+ export interface VueCustomElementRendererOptions<TState = unknown> {
4
+ tagName: string;
5
+ component: DefineComponent<any, any, any, any, any, any, any, any>;
6
+ createInitialState?: () => TState;
7
+ getInitialState?: (data: unknown, context: KritzelCustomElementRenderContext) => TState;
8
+ mapProps?: (state: TState | undefined, context: KritzelCustomElementRenderContext) => Record<string, unknown>;
9
+ normalizeState?: (state: unknown, context: KritzelCustomElementRenderContext) => TState;
10
+ onStateChangeProp?: string | null;
11
+ styles?: string;
12
+ }
13
+ export declare function createVueCustomElementRenderer<TState = unknown>(options: VueCustomElementRendererOptions<TState>): KritzelCustomElementRenderer;
14
+ export declare function registerVueCustomElementRenderer<TState = unknown>(rendererKey: string, options: VueCustomElementRendererOptions<TState>): () => void;
@@ -0,0 +1,75 @@
1
+ import { defineCustomElement } from 'vue';
2
+ import { KritzelCustomElementRendererRegistry, } from 'kritzel-stencil';
3
+ function setHostProps(host, props) {
4
+ Object.entries(props).forEach(([key, value]) => {
5
+ host[key] = value;
6
+ });
7
+ }
8
+ export function createVueCustomElementRenderer(options) {
9
+ const mountedElements = new Map();
10
+ const ensureCustomElementDefined = () => {
11
+ if (!customElements.get(options.tagName)) {
12
+ customElements.define(options.tagName, defineCustomElement(options.component));
13
+ }
14
+ };
15
+ return {
16
+ onMount: (context) => {
17
+ var _a, _b;
18
+ if (!context.container) {
19
+ return;
20
+ }
21
+ ensureCustomElementDefined();
22
+ const initialState = options.getInitialState
23
+ ? options.getInitialState(context.data, context)
24
+ : (_a = context.data) !== null && _a !== void 0 ? _a : (_b = options.createInitialState) === null || _b === void 0 ? void 0 : _b.call(options);
25
+ const host = document.createElement(options.tagName);
26
+ const mounted = {
27
+ host,
28
+ latestState: initialState,
29
+ };
30
+ const baseProps = options.mapProps
31
+ ? options.mapProps(initialState, context)
32
+ : (initialState !== undefined ? { initialState } : {});
33
+ const onStateChangeProp = options.onStateChangeProp === undefined ? 'onStateChange' : options.onStateChangeProp;
34
+ if (onStateChangeProp !== null) {
35
+ const existing = baseProps[onStateChangeProp];
36
+ baseProps[onStateChangeProp] = (nextState) => {
37
+ mounted.latestState = options.normalizeState
38
+ ? options.normalizeState(nextState, context)
39
+ : nextState;
40
+ if (typeof existing === 'function') {
41
+ existing(nextState);
42
+ }
43
+ };
44
+ }
45
+ context.container.innerHTML = '';
46
+ if (options.styles) {
47
+ const styleElement = document.createElement('style');
48
+ styleElement.textContent = options.styles;
49
+ context.container.appendChild(styleElement);
50
+ }
51
+ setHostProps(host, baseProps);
52
+ context.container.appendChild(host);
53
+ mountedElements.set(context.object.id, mounted);
54
+ },
55
+ onUnmount: (context) => {
56
+ const mounted = mountedElements.get(context.object.id);
57
+ if (!mounted) {
58
+ return undefined;
59
+ }
60
+ mounted.host.remove();
61
+ mountedElements.delete(context.object.id);
62
+ if (context.container) {
63
+ context.container.innerHTML = '';
64
+ }
65
+ return mounted.latestState;
66
+ },
67
+ };
68
+ }
69
+ export function registerVueCustomElementRenderer(rendererKey, options) {
70
+ const renderer = createVueCustomElementRenderer(options);
71
+ KritzelCustomElementRendererRegistry.register(rendererKey, renderer);
72
+ return () => {
73
+ KritzelCustomElementRendererRegistry.unregister(rendererKey);
74
+ };
75
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kritzel-vue",
3
- "version": "0.3.21",
3
+ "version": "0.3.23",
4
4
  "homepage": "https://kritzel.io/",
5
5
  "description": "Kritzel helps you build infinite canvas experiences with Vue.",
6
6
  "keywords": [
@@ -38,6 +38,6 @@
38
38
  "@stencil/vue-output-target": "0.11.8"
39
39
  },
40
40
  "peerDependencies": {
41
- "kritzel-stencil": "^0.3.21"
41
+ "kritzel-stencil": "^0.3.23"
42
42
  }
43
43
  }