@embedpdf/plugin-view-manager 2.0.0-next.0
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/LICENSE +21 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +549 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/actions.d.ts +61 -0
- package/dist/lib/index.d.ts +9 -0
- package/dist/lib/manifest.d.ts +4 -0
- package/dist/lib/reducer.d.ts +5 -0
- package/dist/lib/types.d.ts +66 -0
- package/dist/lib/view-manager-plugin.d.ts +43 -0
- package/dist/preact/adapter.d.ts +5 -0
- package/dist/preact/core.d.ts +1 -0
- package/dist/preact/index.cjs +2 -0
- package/dist/preact/index.cjs.map +1 -0
- package/dist/preact/index.d.ts +1 -0
- package/dist/preact/index.js +141 -0
- package/dist/preact/index.js.map +1 -0
- package/dist/react/adapter.d.ts +2 -0
- package/dist/react/core.d.ts +1 -0
- package/dist/react/index.cjs +2 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +140 -0
- package/dist/react/index.js.map +1 -0
- package/dist/shared/components/index.d.ts +1 -0
- package/dist/shared/components/view-context.d.ts +23 -0
- package/dist/shared/hooks/index.d.ts +1 -0
- package/dist/shared/hooks/use-view-manager.d.ts +25 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared-preact/components/index.d.ts +1 -0
- package/dist/shared-preact/components/view-context.d.ts +23 -0
- package/dist/shared-preact/hooks/index.d.ts +1 -0
- package/dist/shared-preact/hooks/use-view-manager.d.ts +25 -0
- package/dist/shared-preact/index.d.ts +3 -0
- package/dist/shared-react/components/index.d.ts +1 -0
- package/dist/shared-react/components/view-context.d.ts +23 -0
- package/dist/shared-react/hooks/index.d.ts +1 -0
- package/dist/shared-react/hooks/use-view-manager.d.ts +25 -0
- package/dist/shared-react/index.d.ts +3 -0
- package/dist/svelte/components/ViewContext.svelte.d.ts +10 -0
- package/dist/svelte/components/index.d.ts +2 -0
- package/dist/svelte/components/types.d.ts +12 -0
- package/dist/svelte/hooks/index.d.ts +1 -0
- package/dist/svelte/hooks/use-view-manager.svelte.d.ts +30 -0
- package/dist/svelte/index.cjs +2 -0
- package/dist/svelte/index.cjs.map +1 -0
- package/dist/svelte/index.d.ts +3 -0
- package/dist/svelte/index.js +202 -0
- package/dist/svelte/index.js.map +1 -0
- package/dist/vue/components/index.d.ts +2 -0
- package/dist/vue/components/view-context.vue.d.ts +31 -0
- package/dist/vue/hooks/index.d.ts +1 -0
- package/dist/vue/hooks/use-view-manager.d.ts +39 -0
- package/dist/vue/index.cjs +2 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.ts +3 -0
- package/dist/vue/index.js +197 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ViewManagerPlugin, View } from '../../index.ts';
|
|
2
|
+
export declare const useViewManagerPlugin: () => {
|
|
3
|
+
plugin: ViewManagerPlugin | null;
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
ready: Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export declare const useViewManagerCapability: () => {
|
|
8
|
+
provides: Readonly<import('../../index.ts').ViewManagerCapability> | null;
|
|
9
|
+
isLoading: boolean;
|
|
10
|
+
ready: Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Hook for a specific view's state
|
|
14
|
+
*/
|
|
15
|
+
export declare const useView: (viewId: string) => View | null;
|
|
16
|
+
/**
|
|
17
|
+
* Hook for focused view state
|
|
18
|
+
*/
|
|
19
|
+
export declare const useFocusedView: () => {
|
|
20
|
+
focusedViewId: string | null;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Hook for all views
|
|
24
|
+
*/
|
|
25
|
+
export declare const useAllViews: () => View[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './view-context';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ReactNode } from '../../preact/adapter.ts';
|
|
2
|
+
import { View } from '../../lib/index.ts';
|
|
3
|
+
export interface ViewContextRenderProps {
|
|
4
|
+
view: View;
|
|
5
|
+
documentIds: string[];
|
|
6
|
+
activeDocumentId: string | null;
|
|
7
|
+
isFocused: boolean;
|
|
8
|
+
addDocument: (documentId: string, index?: number) => void;
|
|
9
|
+
removeDocument: (documentId: string) => void;
|
|
10
|
+
setActiveDocument: (documentId: string | null) => void;
|
|
11
|
+
moveDocumentWithinView: (documentId: string, index: number) => void;
|
|
12
|
+
focus: () => void;
|
|
13
|
+
}
|
|
14
|
+
interface ViewContextProps {
|
|
15
|
+
viewId: string;
|
|
16
|
+
autoCreate?: boolean;
|
|
17
|
+
children: (props: ViewContextRenderProps) => ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Headless component for managing a single view with multiple documents
|
|
21
|
+
*/
|
|
22
|
+
export declare function ViewContext({ viewId, autoCreate, children }: ViewContextProps): import("preact").JSX.Element | null;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './use-view-manager';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ViewManagerPlugin, View } from '../../lib/index.ts';
|
|
2
|
+
export declare const useViewManagerPlugin: () => {
|
|
3
|
+
plugin: ViewManagerPlugin | null;
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
ready: Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export declare const useViewManagerCapability: () => {
|
|
8
|
+
provides: Readonly<import('../../lib/index.ts').ViewManagerCapability> | null;
|
|
9
|
+
isLoading: boolean;
|
|
10
|
+
ready: Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Hook for a specific view's state
|
|
14
|
+
*/
|
|
15
|
+
export declare const useView: (viewId: string) => View | null;
|
|
16
|
+
/**
|
|
17
|
+
* Hook for focused view state
|
|
18
|
+
*/
|
|
19
|
+
export declare const useFocusedView: () => {
|
|
20
|
+
focusedViewId: string | null;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Hook for all views
|
|
24
|
+
*/
|
|
25
|
+
export declare const useAllViews: () => View[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './view-context';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ReactNode } from '../../react/adapter.ts';
|
|
2
|
+
import { View } from '../../lib/index.ts';
|
|
3
|
+
export interface ViewContextRenderProps {
|
|
4
|
+
view: View;
|
|
5
|
+
documentIds: string[];
|
|
6
|
+
activeDocumentId: string | null;
|
|
7
|
+
isFocused: boolean;
|
|
8
|
+
addDocument: (documentId: string, index?: number) => void;
|
|
9
|
+
removeDocument: (documentId: string) => void;
|
|
10
|
+
setActiveDocument: (documentId: string | null) => void;
|
|
11
|
+
moveDocumentWithinView: (documentId: string, index: number) => void;
|
|
12
|
+
focus: () => void;
|
|
13
|
+
}
|
|
14
|
+
interface ViewContextProps {
|
|
15
|
+
viewId: string;
|
|
16
|
+
autoCreate?: boolean;
|
|
17
|
+
children: (props: ViewContextRenderProps) => ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Headless component for managing a single view with multiple documents
|
|
21
|
+
*/
|
|
22
|
+
export declare function ViewContext({ viewId, autoCreate, children }: ViewContextProps): import("react/jsx-runtime").JSX.Element | null;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './use-view-manager';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ViewManagerPlugin, View } from '../../lib/index.ts';
|
|
2
|
+
export declare const useViewManagerPlugin: () => {
|
|
3
|
+
plugin: ViewManagerPlugin | null;
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
ready: Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export declare const useViewManagerCapability: () => {
|
|
8
|
+
provides: Readonly<import('../../lib/index.ts').ViewManagerCapability> | null;
|
|
9
|
+
isLoading: boolean;
|
|
10
|
+
ready: Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Hook for a specific view's state
|
|
14
|
+
*/
|
|
15
|
+
export declare const useView: (viewId: string) => View | null;
|
|
16
|
+
/**
|
|
17
|
+
* Hook for focused view state
|
|
18
|
+
*/
|
|
19
|
+
export declare const useFocusedView: () => {
|
|
20
|
+
focusedViewId: string | null;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Hook for all views
|
|
24
|
+
*/
|
|
25
|
+
export declare const useAllViews: () => View[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Snippet } from 'svelte';
|
|
2
|
+
import { ViewContextRenderProps } from './types';
|
|
3
|
+
interface ViewContextProps {
|
|
4
|
+
viewId: string;
|
|
5
|
+
autoCreate?: boolean;
|
|
6
|
+
children: Snippet<[ViewContextRenderProps]>;
|
|
7
|
+
}
|
|
8
|
+
declare const ViewContext: import('svelte', { with: { "resolution-mode": "import" } }).Component<ViewContextProps, {}, "">;
|
|
9
|
+
type ViewContext = ReturnType<typeof ViewContext>;
|
|
10
|
+
export default ViewContext;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { View } from '../../lib/index.ts';
|
|
2
|
+
export interface ViewContextRenderProps {
|
|
3
|
+
view: View;
|
|
4
|
+
documentIds: string[];
|
|
5
|
+
activeDocumentId: string | null;
|
|
6
|
+
isFocused: boolean;
|
|
7
|
+
addDocument: (documentId: string, index?: number) => void;
|
|
8
|
+
removeDocument: (documentId: string) => void;
|
|
9
|
+
setActiveDocument: (documentId: string | null) => void;
|
|
10
|
+
moveDocumentWithinView: (documentId: string, index: number) => void;
|
|
11
|
+
focus: () => void;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './use-view-manager.svelte';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ViewManagerPlugin, View } from '../../lib/index.ts';
|
|
2
|
+
export declare const useViewManagerPlugin: () => {
|
|
3
|
+
plugin: ViewManagerPlugin | null;
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
ready: Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export declare const useViewManagerCapability: () => {
|
|
8
|
+
provides: Readonly<import('../../lib/index.ts').ViewManagerCapability> | null;
|
|
9
|
+
isLoading: boolean;
|
|
10
|
+
ready: Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Hook for a specific view's state
|
|
14
|
+
* @param getViewId Function that returns the view ID
|
|
15
|
+
*/
|
|
16
|
+
export declare const useView: (getViewId: () => string | null) => {
|
|
17
|
+
readonly current: View | null;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Hook for focused view state
|
|
21
|
+
*/
|
|
22
|
+
export declare const useFocusedView: () => {
|
|
23
|
+
readonly focusedViewId: string | null;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Hook for all views
|
|
27
|
+
*/
|
|
28
|
+
export declare const useAllViews: () => {
|
|
29
|
+
readonly current: View[];
|
|
30
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("svelte/internal/client"),t=require("@embedpdf/core/svelte"),i=require("@embedpdf/plugin-view-manager");function o(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const i in e)if("default"!==i){const o=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,o.get?o:{enumerable:!0,get:()=>e[i]})}return t.default=e,Object.freeze(t)}require("svelte/internal/disclose-version");const r=o(e),n=()=>t.useCapability(i.ViewManagerPlugin.id);exports.ViewContext=function(e,t){r.push(t,!0);let i=r.prop(t,"autoCreate",3,!0);const o=n();let d=r.state(null),s=r.state(!1);r.user_effect(()=>{if(!o.provides)return r.set(d,null),void r.set(s,!1);let e=o.provides.getView(t.viewId);!e&&i()&&(o.provides.createView(t.viewId),e=o.provides.getView(t.viewId)),r.set(d,e,!0),r.set(s,o.provides.getFocusedViewId()===t.viewId);const n=o.provides.onViewFocusChanged(e=>{r.set(s,e.currentViewId===t.viewId)}),u=o.provides.onDocumentAddedToView(e=>{e.viewId===t.viewId&&r.set(d,o.provides.getView(t.viewId),!0)}),v=o.provides.onDocumentRemovedFromView(e=>{e.viewId===t.viewId&&r.set(d,o.provides.getView(t.viewId),!0)}),c=o.provides.onViewActiveDocumentChanged(e=>{e.viewId===t.viewId&&r.set(d,o.provides.getView(t.viewId),!0)});return()=>{n(),u(),v(),c()}});const u=r.derived(()=>r.get(d)&&o.provides?{view:r.get(d),documentIds:r.get(d).documentIds,activeDocumentId:r.get(d).activeDocumentId,isFocused:r.get(s),addDocument:(e,i)=>{var r;return null==(r=o.provides)?void 0:r.addDocumentToView(t.viewId,e,i)},removeDocument:e=>{var i;return null==(i=o.provides)?void 0:i.removeDocumentFromView(t.viewId,e)},setActiveDocument:e=>{var i;return null==(i=o.provides)?void 0:i.setViewActiveDocument(t.viewId,e)},moveDocumentWithinView:(e,i)=>{var r;return null==(r=o.provides)?void 0:r.moveDocumentWithinView(t.viewId,e,i)},focus:()=>{var e;return null==(e=o.provides)?void 0:e.setFocusedView(t.viewId)}}:null);var v=r.comment(),c=r.first_child(v),w=e=>{var i=r.comment(),o=r.first_child(i);r.snippet(o,()=>t.children??r.noop,()=>r.get(u)),r.append(e,i)};r.if(c,e=>{r.get(u)&&e(w)}),r.append(e,v),r.pop()},exports.useAllViews=()=>{const e=n();let t=r.state(r.proxy([]));return r.user_effect(()=>{if(!e.provides)return void r.set(t,[],!0);const i=()=>{r.set(t,e.provides.getAllViews(),!0)};i();const o=e.provides.onViewCreated(i),n=e.provides.onViewRemoved(i),d=e.provides.onDocumentAddedToView(i),s=e.provides.onDocumentRemovedFromView(i),u=e.provides.onDocumentReordered(i),v=e.provides.onViewActiveDocumentChanged(i);return()=>{o(),n(),d(),s(),u(),v()}}),{get current(){return r.get(t)}}},exports.useFocusedView=()=>{const e=n();let t=r.state(null);return r.user_effect(()=>{if(e.provides)return r.set(t,e.provides.getFocusedViewId(),!0),e.provides.onViewFocusChanged(e=>{r.set(t,e.currentViewId,!0)});r.set(t,null)}),{get focusedViewId(){return r.get(t)}}},exports.useView=e=>{const t=n();let i=r.state(null);const o=r.derived(e);return r.user_effect(()=>{const e=t.provides,n=r.get(o);if(!e||!n)return void r.set(i,null);r.set(i,e.getView(n),!0);const d=e.onDocumentAddedToView(t=>{t.viewId===n&&r.set(i,e.getView(n),!0)}),s=e.onDocumentRemovedFromView(t=>{t.viewId===n&&r.set(i,e.getView(n),!0)}),u=e.onDocumentReordered(t=>{t.viewId===n&&r.set(i,e.getView(n),!0)}),v=e.onViewActiveDocumentChanged(t=>{t.viewId===n&&r.set(i,e.getView(n),!0)});return()=>{d(),s(),u(),v()}}),{get current(){return r.get(i)}}},exports.useViewManagerCapability=n,exports.useViewManagerPlugin=()=>t.usePlugin(i.ViewManagerPlugin.id),Object.keys(i).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>i[e]})});
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/svelte/hooks/use-view-manager.svelte.ts","../../src/svelte/components/ViewContext.svelte"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/svelte';\nimport { ViewManagerPlugin, View } from '@embedpdf/plugin-view-manager';\n\nexport const useViewManagerPlugin = () => usePlugin<ViewManagerPlugin>(ViewManagerPlugin.id);\nexport const useViewManagerCapability = () =>\n useCapability<ViewManagerPlugin>(ViewManagerPlugin.id);\n\n/**\n * Hook for a specific view's state\n * @param getViewId Function that returns the view ID\n */\nexport const useView = (getViewId: () => string | null) => {\n const capability = useViewManagerCapability();\n\n let view = $state<View | null>(null);\n\n // Reactive viewId\n const viewId = $derived(getViewId());\n\n $effect(() => {\n const provides = capability.provides;\n const currentViewId = viewId;\n\n if (!provides || !currentViewId) {\n view = null;\n return;\n }\n\n // Get initial view\n view = provides.getView(currentViewId);\n\n // Subscribe to all document events for this view\n const unsubAdded = provides.onDocumentAddedToView((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n const unsubRemoved = provides.onDocumentRemovedFromView((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n const unsubReordered = provides.onDocumentReordered((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n const unsubActiveChanged = provides.onViewActiveDocumentChanged((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n return () => {\n unsubAdded();\n unsubRemoved();\n unsubReordered();\n unsubActiveChanged();\n };\n });\n\n return {\n get current() {\n return view;\n },\n };\n};\n\n/**\n * Hook for focused view state\n */\nexport const useFocusedView = () => {\n const capability = useViewManagerCapability();\n\n let focusedViewId = $state<string | null>(null);\n\n $effect(() => {\n if (!capability.provides) {\n focusedViewId = null;\n return;\n }\n\n focusedViewId = capability.provides.getFocusedViewId();\n\n return capability.provides.onViewFocusChanged((event) => {\n focusedViewId = event.currentViewId;\n });\n });\n\n return {\n get focusedViewId() {\n return focusedViewId;\n },\n };\n};\n\n/**\n * Hook for all views\n */\nexport const useAllViews = () => {\n const capability = useViewManagerCapability();\n\n let views = $state<View[]>([]);\n\n $effect(() => {\n if (!capability.provides) {\n views = [];\n return;\n }\n\n const updateViews = () => {\n views = capability.provides!.getAllViews();\n };\n\n updateViews();\n\n const unsubCreated = capability.provides.onViewCreated(updateViews);\n const unsubRemoved = capability.provides.onViewRemoved(updateViews);\n const unsubAdded = capability.provides.onDocumentAddedToView(updateViews);\n const unsubRemovedDoc = capability.provides.onDocumentRemovedFromView(updateViews);\n const unsubReordered = capability.provides.onDocumentReordered(updateViews);\n const unsubActiveChanged = capability.provides.onViewActiveDocumentChanged(updateViews);\n\n return () => {\n unsubCreated();\n unsubRemoved();\n unsubAdded();\n unsubRemovedDoc();\n unsubReordered();\n unsubActiveChanged();\n };\n });\n\n return {\n get current() {\n return views;\n },\n };\n};\n","<script lang=\"ts\">\n import type { Snippet } from 'svelte';\n import { useViewManagerCapability } from '../hooks';\n import type { View } from '@embedpdf/plugin-view-manager';\n import type { ViewContextRenderProps } from './types';\n\n interface ViewContextProps {\n viewId: string;\n autoCreate?: boolean;\n children: Snippet<[ViewContextRenderProps]>;\n }\n\n let { viewId, autoCreate = true, children }: ViewContextProps = $props();\n\n const capability = useViewManagerCapability();\n\n let view = $state<View | null>(null);\n let isFocused = $state(false);\n\n $effect(() => {\n if (!capability.provides) {\n view = null;\n isFocused = false;\n return;\n }\n\n // Get or create view\n let v = capability.provides.getView(viewId);\n if (!v && autoCreate) {\n capability.provides.createView(viewId);\n v = capability.provides.getView(viewId);\n }\n view = v;\n isFocused = capability.provides.getFocusedViewId() === viewId;\n\n const unsubFocus = capability.provides.onViewFocusChanged((event) => {\n isFocused = event.currentViewId === viewId;\n });\n\n const unsubAdded = capability.provides.onDocumentAddedToView((event) => {\n if (event.viewId === viewId) {\n view = capability.provides!.getView(viewId);\n }\n });\n\n const unsubRemoved = capability.provides.onDocumentRemovedFromView((event) => {\n if (event.viewId === viewId) {\n view = capability.provides!.getView(viewId);\n }\n });\n\n const unsubActiveChanged = capability.provides.onViewActiveDocumentChanged((event) => {\n if (event.viewId === viewId) {\n view = capability.provides!.getView(viewId);\n }\n });\n\n return () => {\n unsubFocus();\n unsubAdded();\n unsubRemoved();\n unsubActiveChanged();\n };\n });\n\n const slotProps = $derived.by((): ViewContextRenderProps | null => {\n if (!view || !capability.provides) return null;\n\n return {\n view,\n documentIds: view.documentIds,\n activeDocumentId: view.activeDocumentId,\n isFocused,\n addDocument: (docId: string, index?: number) =>\n capability.provides?.addDocumentToView(viewId, docId, index),\n removeDocument: (docId: string) => capability.provides?.removeDocumentFromView(viewId, docId),\n setActiveDocument: (docId: string | null) =>\n capability.provides?.setViewActiveDocument(viewId, docId),\n moveDocumentWithinView: (docId: string, index: number) =>\n capability.provides?.moveDocumentWithinView(viewId, docId, index),\n focus: () => capability.provides?.setFocusedView(viewId),\n };\n });\n</script>\n\n<!--\n Headless component for managing a single view with multiple documents\n \n @example\n <ViewContext viewId=\"main-view\">\n {#snippet children({ view, documentIds, activeDocumentId, isFocused, addDocument, removeDocument, setActiveDocument, focus })}\n <div class:focused={isFocused} onclick={focus}>\n {#each documentIds as docId (docId)}\n <button\n onclick={() => setActiveDocument(docId)}\n class:active={docId === activeDocumentId}\n >\n {docId}\n <button onclick={(e) => { e.stopPropagation(); removeDocument(docId); }}>×</button>\n </button>\n {/each}\n </div>\n {/snippet}\n </ViewContext>\n-->\n{#if slotProps}\n {@render children?.(slotProps)}\n{/if}\n"],"names":["useViewManagerCapability","useCapability","ViewManagerPlugin","id","autoCreate","capability","view","isFocused","$","user_effect","provides","set","v","getView","$$props","viewId","createView","getFocusedViewId","unsubFocus","onViewFocusChanged","event","currentViewId","unsubAdded","onDocumentAddedToView","unsubRemoved","onDocumentRemovedFromView","unsubActiveChanged","onViewActiveDocumentChanged","slotProps","derived","get","documentIds","activeDocumentId","addDocument","docId","index","_a","addDocumentToView","removeDocument","removeDocumentFromView","setActiveDocument","setViewActiveDocument","moveDocumentWithinView","focus","setFocusedView","consequent","views","state","proxy","updateViews","getAllViews","unsubCreated","onViewCreated","onViewRemoved","unsubRemovedDoc","unsubReordered","onDocumentReordered","current","focusedViewId","getViewId","usePlugin"],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import * as $ from "svelte/internal/client";
|
|
2
|
+
import { usePlugin, useCapability } from "@embedpdf/core/svelte";
|
|
3
|
+
import { ViewManagerPlugin } from "@embedpdf/plugin-view-manager";
|
|
4
|
+
export * from "@embedpdf/plugin-view-manager";
|
|
5
|
+
import "svelte/internal/disclose-version";
|
|
6
|
+
const useViewManagerPlugin = () => usePlugin(ViewManagerPlugin.id);
|
|
7
|
+
const useViewManagerCapability = () => useCapability(ViewManagerPlugin.id);
|
|
8
|
+
const useView = (getViewId) => {
|
|
9
|
+
const capability = useViewManagerCapability();
|
|
10
|
+
let view = $.state(null);
|
|
11
|
+
const viewId = $.derived(getViewId);
|
|
12
|
+
$.user_effect(() => {
|
|
13
|
+
const provides = capability.provides;
|
|
14
|
+
const currentViewId = $.get(viewId);
|
|
15
|
+
if (!provides || !currentViewId) {
|
|
16
|
+
$.set(view, null);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
$.set(view, provides.getView(currentViewId), true);
|
|
20
|
+
const unsubAdded = provides.onDocumentAddedToView((event) => {
|
|
21
|
+
if (event.viewId === currentViewId) {
|
|
22
|
+
$.set(view, provides.getView(currentViewId), true);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
const unsubRemoved = provides.onDocumentRemovedFromView((event) => {
|
|
26
|
+
if (event.viewId === currentViewId) {
|
|
27
|
+
$.set(view, provides.getView(currentViewId), true);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const unsubReordered = provides.onDocumentReordered((event) => {
|
|
31
|
+
if (event.viewId === currentViewId) {
|
|
32
|
+
$.set(view, provides.getView(currentViewId), true);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
const unsubActiveChanged = provides.onViewActiveDocumentChanged((event) => {
|
|
36
|
+
if (event.viewId === currentViewId) {
|
|
37
|
+
$.set(view, provides.getView(currentViewId), true);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return () => {
|
|
41
|
+
unsubAdded();
|
|
42
|
+
unsubRemoved();
|
|
43
|
+
unsubReordered();
|
|
44
|
+
unsubActiveChanged();
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
get current() {
|
|
49
|
+
return $.get(view);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
const useFocusedView = () => {
|
|
54
|
+
const capability = useViewManagerCapability();
|
|
55
|
+
let focusedViewId = $.state(null);
|
|
56
|
+
$.user_effect(() => {
|
|
57
|
+
if (!capability.provides) {
|
|
58
|
+
$.set(focusedViewId, null);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
$.set(focusedViewId, capability.provides.getFocusedViewId(), true);
|
|
62
|
+
return capability.provides.onViewFocusChanged((event) => {
|
|
63
|
+
$.set(focusedViewId, event.currentViewId, true);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
get focusedViewId() {
|
|
68
|
+
return $.get(focusedViewId);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
const useAllViews = () => {
|
|
73
|
+
const capability = useViewManagerCapability();
|
|
74
|
+
let views = $.state($.proxy([]));
|
|
75
|
+
$.user_effect(() => {
|
|
76
|
+
if (!capability.provides) {
|
|
77
|
+
$.set(views, [], true);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const updateViews = () => {
|
|
81
|
+
$.set(views, capability.provides.getAllViews(), true);
|
|
82
|
+
};
|
|
83
|
+
updateViews();
|
|
84
|
+
const unsubCreated = capability.provides.onViewCreated(updateViews);
|
|
85
|
+
const unsubRemoved = capability.provides.onViewRemoved(updateViews);
|
|
86
|
+
const unsubAdded = capability.provides.onDocumentAddedToView(updateViews);
|
|
87
|
+
const unsubRemovedDoc = capability.provides.onDocumentRemovedFromView(updateViews);
|
|
88
|
+
const unsubReordered = capability.provides.onDocumentReordered(updateViews);
|
|
89
|
+
const unsubActiveChanged = capability.provides.onViewActiveDocumentChanged(updateViews);
|
|
90
|
+
return () => {
|
|
91
|
+
unsubCreated();
|
|
92
|
+
unsubRemoved();
|
|
93
|
+
unsubAdded();
|
|
94
|
+
unsubRemovedDoc();
|
|
95
|
+
unsubReordered();
|
|
96
|
+
unsubActiveChanged();
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
get current() {
|
|
101
|
+
return $.get(views);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
function ViewContext($$anchor, $$props) {
|
|
106
|
+
$.push($$props, true);
|
|
107
|
+
let autoCreate = $.prop($$props, "autoCreate", 3, true);
|
|
108
|
+
const capability = useViewManagerCapability();
|
|
109
|
+
let view = $.state(null);
|
|
110
|
+
let isFocused = $.state(false);
|
|
111
|
+
$.user_effect(() => {
|
|
112
|
+
if (!capability.provides) {
|
|
113
|
+
$.set(view, null);
|
|
114
|
+
$.set(isFocused, false);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
let v = capability.provides.getView($$props.viewId);
|
|
118
|
+
if (!v && autoCreate()) {
|
|
119
|
+
capability.provides.createView($$props.viewId);
|
|
120
|
+
v = capability.provides.getView($$props.viewId);
|
|
121
|
+
}
|
|
122
|
+
$.set(view, v, true);
|
|
123
|
+
$.set(isFocused, capability.provides.getFocusedViewId() === $$props.viewId);
|
|
124
|
+
const unsubFocus = capability.provides.onViewFocusChanged((event) => {
|
|
125
|
+
$.set(isFocused, event.currentViewId === $$props.viewId);
|
|
126
|
+
});
|
|
127
|
+
const unsubAdded = capability.provides.onDocumentAddedToView((event) => {
|
|
128
|
+
if (event.viewId === $$props.viewId) {
|
|
129
|
+
$.set(view, capability.provides.getView($$props.viewId), true);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
const unsubRemoved = capability.provides.onDocumentRemovedFromView((event) => {
|
|
133
|
+
if (event.viewId === $$props.viewId) {
|
|
134
|
+
$.set(view, capability.provides.getView($$props.viewId), true);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
const unsubActiveChanged = capability.provides.onViewActiveDocumentChanged((event) => {
|
|
138
|
+
if (event.viewId === $$props.viewId) {
|
|
139
|
+
$.set(view, capability.provides.getView($$props.viewId), true);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return () => {
|
|
143
|
+
unsubFocus();
|
|
144
|
+
unsubAdded();
|
|
145
|
+
unsubRemoved();
|
|
146
|
+
unsubActiveChanged();
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
const slotProps = $.derived(() => {
|
|
150
|
+
if (!$.get(view) || !capability.provides) return null;
|
|
151
|
+
return {
|
|
152
|
+
view: $.get(view),
|
|
153
|
+
documentIds: $.get(view).documentIds,
|
|
154
|
+
activeDocumentId: $.get(view).activeDocumentId,
|
|
155
|
+
isFocused: $.get(isFocused),
|
|
156
|
+
addDocument: (docId, index) => {
|
|
157
|
+
var _a;
|
|
158
|
+
return (_a = capability.provides) == null ? void 0 : _a.addDocumentToView($$props.viewId, docId, index);
|
|
159
|
+
},
|
|
160
|
+
removeDocument: (docId) => {
|
|
161
|
+
var _a;
|
|
162
|
+
return (_a = capability.provides) == null ? void 0 : _a.removeDocumentFromView($$props.viewId, docId);
|
|
163
|
+
},
|
|
164
|
+
setActiveDocument: (docId) => {
|
|
165
|
+
var _a;
|
|
166
|
+
return (_a = capability.provides) == null ? void 0 : _a.setViewActiveDocument($$props.viewId, docId);
|
|
167
|
+
},
|
|
168
|
+
moveDocumentWithinView: (docId, index) => {
|
|
169
|
+
var _a;
|
|
170
|
+
return (_a = capability.provides) == null ? void 0 : _a.moveDocumentWithinView($$props.viewId, docId, index);
|
|
171
|
+
},
|
|
172
|
+
focus: () => {
|
|
173
|
+
var _a;
|
|
174
|
+
return (_a = capability.provides) == null ? void 0 : _a.setFocusedView($$props.viewId);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
});
|
|
178
|
+
var fragment = $.comment();
|
|
179
|
+
var node = $.first_child(fragment);
|
|
180
|
+
{
|
|
181
|
+
var consequent = ($$anchor2) => {
|
|
182
|
+
var fragment_1 = $.comment();
|
|
183
|
+
var node_1 = $.first_child(fragment_1);
|
|
184
|
+
$.snippet(node_1, () => $$props.children ?? $.noop, () => $.get(slotProps));
|
|
185
|
+
$.append($$anchor2, fragment_1);
|
|
186
|
+
};
|
|
187
|
+
$.if(node, ($$render) => {
|
|
188
|
+
if ($.get(slotProps)) $$render(consequent);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
$.append($$anchor, fragment);
|
|
192
|
+
$.pop();
|
|
193
|
+
}
|
|
194
|
+
export {
|
|
195
|
+
ViewContext,
|
|
196
|
+
useAllViews,
|
|
197
|
+
useFocusedView,
|
|
198
|
+
useView,
|
|
199
|
+
useViewManagerCapability,
|
|
200
|
+
useViewManagerPlugin
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/svelte/hooks/use-view-manager.svelte.ts","../../src/svelte/components/ViewContext.svelte"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/svelte';\nimport { ViewManagerPlugin, View } from '@embedpdf/plugin-view-manager';\n\nexport const useViewManagerPlugin = () => usePlugin<ViewManagerPlugin>(ViewManagerPlugin.id);\nexport const useViewManagerCapability = () =>\n useCapability<ViewManagerPlugin>(ViewManagerPlugin.id);\n\n/**\n * Hook for a specific view's state\n * @param getViewId Function that returns the view ID\n */\nexport const useView = (getViewId: () => string | null) => {\n const capability = useViewManagerCapability();\n\n let view = $state<View | null>(null);\n\n // Reactive viewId\n const viewId = $derived(getViewId());\n\n $effect(() => {\n const provides = capability.provides;\n const currentViewId = viewId;\n\n if (!provides || !currentViewId) {\n view = null;\n return;\n }\n\n // Get initial view\n view = provides.getView(currentViewId);\n\n // Subscribe to all document events for this view\n const unsubAdded = provides.onDocumentAddedToView((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n const unsubRemoved = provides.onDocumentRemovedFromView((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n const unsubReordered = provides.onDocumentReordered((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n const unsubActiveChanged = provides.onViewActiveDocumentChanged((event) => {\n if (event.viewId === currentViewId) {\n view = provides.getView(currentViewId);\n }\n });\n\n return () => {\n unsubAdded();\n unsubRemoved();\n unsubReordered();\n unsubActiveChanged();\n };\n });\n\n return {\n get current() {\n return view;\n },\n };\n};\n\n/**\n * Hook for focused view state\n */\nexport const useFocusedView = () => {\n const capability = useViewManagerCapability();\n\n let focusedViewId = $state<string | null>(null);\n\n $effect(() => {\n if (!capability.provides) {\n focusedViewId = null;\n return;\n }\n\n focusedViewId = capability.provides.getFocusedViewId();\n\n return capability.provides.onViewFocusChanged((event) => {\n focusedViewId = event.currentViewId;\n });\n });\n\n return {\n get focusedViewId() {\n return focusedViewId;\n },\n };\n};\n\n/**\n * Hook for all views\n */\nexport const useAllViews = () => {\n const capability = useViewManagerCapability();\n\n let views = $state<View[]>([]);\n\n $effect(() => {\n if (!capability.provides) {\n views = [];\n return;\n }\n\n const updateViews = () => {\n views = capability.provides!.getAllViews();\n };\n\n updateViews();\n\n const unsubCreated = capability.provides.onViewCreated(updateViews);\n const unsubRemoved = capability.provides.onViewRemoved(updateViews);\n const unsubAdded = capability.provides.onDocumentAddedToView(updateViews);\n const unsubRemovedDoc = capability.provides.onDocumentRemovedFromView(updateViews);\n const unsubReordered = capability.provides.onDocumentReordered(updateViews);\n const unsubActiveChanged = capability.provides.onViewActiveDocumentChanged(updateViews);\n\n return () => {\n unsubCreated();\n unsubRemoved();\n unsubAdded();\n unsubRemovedDoc();\n unsubReordered();\n unsubActiveChanged();\n };\n });\n\n return {\n get current() {\n return views;\n },\n };\n};\n","<script lang=\"ts\">\n import type { Snippet } from 'svelte';\n import { useViewManagerCapability } from '../hooks';\n import type { View } from '@embedpdf/plugin-view-manager';\n import type { ViewContextRenderProps } from './types';\n\n interface ViewContextProps {\n viewId: string;\n autoCreate?: boolean;\n children: Snippet<[ViewContextRenderProps]>;\n }\n\n let { viewId, autoCreate = true, children }: ViewContextProps = $props();\n\n const capability = useViewManagerCapability();\n\n let view = $state<View | null>(null);\n let isFocused = $state(false);\n\n $effect(() => {\n if (!capability.provides) {\n view = null;\n isFocused = false;\n return;\n }\n\n // Get or create view\n let v = capability.provides.getView(viewId);\n if (!v && autoCreate) {\n capability.provides.createView(viewId);\n v = capability.provides.getView(viewId);\n }\n view = v;\n isFocused = capability.provides.getFocusedViewId() === viewId;\n\n const unsubFocus = capability.provides.onViewFocusChanged((event) => {\n isFocused = event.currentViewId === viewId;\n });\n\n const unsubAdded = capability.provides.onDocumentAddedToView((event) => {\n if (event.viewId === viewId) {\n view = capability.provides!.getView(viewId);\n }\n });\n\n const unsubRemoved = capability.provides.onDocumentRemovedFromView((event) => {\n if (event.viewId === viewId) {\n view = capability.provides!.getView(viewId);\n }\n });\n\n const unsubActiveChanged = capability.provides.onViewActiveDocumentChanged((event) => {\n if (event.viewId === viewId) {\n view = capability.provides!.getView(viewId);\n }\n });\n\n return () => {\n unsubFocus();\n unsubAdded();\n unsubRemoved();\n unsubActiveChanged();\n };\n });\n\n const slotProps = $derived.by((): ViewContextRenderProps | null => {\n if (!view || !capability.provides) return null;\n\n return {\n view,\n documentIds: view.documentIds,\n activeDocumentId: view.activeDocumentId,\n isFocused,\n addDocument: (docId: string, index?: number) =>\n capability.provides?.addDocumentToView(viewId, docId, index),\n removeDocument: (docId: string) => capability.provides?.removeDocumentFromView(viewId, docId),\n setActiveDocument: (docId: string | null) =>\n capability.provides?.setViewActiveDocument(viewId, docId),\n moveDocumentWithinView: (docId: string, index: number) =>\n capability.provides?.moveDocumentWithinView(viewId, docId, index),\n focus: () => capability.provides?.setFocusedView(viewId),\n };\n });\n</script>\n\n<!--\n Headless component for managing a single view with multiple documents\n \n @example\n <ViewContext viewId=\"main-view\">\n {#snippet children({ view, documentIds, activeDocumentId, isFocused, addDocument, removeDocument, setActiveDocument, focus })}\n <div class:focused={isFocused} onclick={focus}>\n {#each documentIds as docId (docId)}\n <button\n onclick={() => setActiveDocument(docId)}\n class:active={docId === activeDocumentId}\n >\n {docId}\n <button onclick={(e) => { e.stopPropagation(); removeDocument(docId); }}>×</button>\n </button>\n {/each}\n </div>\n {/snippet}\n </ViewContext>\n-->\n{#if slotProps}\n {@render children?.(slotProps)}\n{/if}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { View } from '../../lib/index.ts';
|
|
2
|
+
export interface ViewContextRenderProps {
|
|
3
|
+
view: View;
|
|
4
|
+
documentIds: string[];
|
|
5
|
+
activeDocumentId: string | null;
|
|
6
|
+
isFocused: boolean;
|
|
7
|
+
addDocument: (documentId: string, index?: number) => void;
|
|
8
|
+
removeDocument: (documentId: string) => void;
|
|
9
|
+
setActiveDocument: (documentId: string | null) => void;
|
|
10
|
+
moveDocumentWithinView: (documentId: string, index: number) => void;
|
|
11
|
+
focus: () => void;
|
|
12
|
+
}
|
|
13
|
+
interface ViewContextProps {
|
|
14
|
+
viewId: string;
|
|
15
|
+
autoCreate?: boolean;
|
|
16
|
+
}
|
|
17
|
+
declare var __VLS_1: any;
|
|
18
|
+
type __VLS_Slots = {} & {
|
|
19
|
+
default?: (props: typeof __VLS_1) => any;
|
|
20
|
+
};
|
|
21
|
+
declare const __VLS_base: import('vue').DefineComponent<ViewContextProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ViewContextProps> & Readonly<{}>, {
|
|
22
|
+
autoCreate: boolean;
|
|
23
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
25
|
+
declare const _default: typeof __VLS_export;
|
|
26
|
+
export default _default;
|
|
27
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
28
|
+
new (): {
|
|
29
|
+
$slots: S;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './use-view-manager';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MaybeRefOrGetter } from 'vue';
|
|
2
|
+
import { ViewManagerPlugin, View } from '../../lib/index.ts';
|
|
3
|
+
export declare const useViewManagerPlugin: () => import('@embedpdf/core/vue').PluginState<ViewManagerPlugin>;
|
|
4
|
+
export declare const useViewManagerCapability: () => import('@embedpdf/core/vue').CapabilityState<Readonly<import('../../lib/index.ts').ViewManagerCapability>>;
|
|
5
|
+
/**
|
|
6
|
+
* Hook for a specific view's state
|
|
7
|
+
* @param viewId View ID (can be ref, computed, getter, or plain value)
|
|
8
|
+
*/
|
|
9
|
+
export declare const useView: (viewId: MaybeRefOrGetter<string>) => import('vue').Ref<{
|
|
10
|
+
id: string;
|
|
11
|
+
documentIds: string[];
|
|
12
|
+
activeDocumentId: string | null;
|
|
13
|
+
createdAt: number;
|
|
14
|
+
} | null, View | {
|
|
15
|
+
id: string;
|
|
16
|
+
documentIds: string[];
|
|
17
|
+
activeDocumentId: string | null;
|
|
18
|
+
createdAt: number;
|
|
19
|
+
} | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Hook for focused view state
|
|
22
|
+
*/
|
|
23
|
+
export declare const useFocusedView: () => {
|
|
24
|
+
focusedViewId: import('vue').Ref<string | null, string | null>;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Hook for all views
|
|
28
|
+
*/
|
|
29
|
+
export declare const useAllViews: () => import('vue').Ref<{
|
|
30
|
+
id: string;
|
|
31
|
+
documentIds: string[];
|
|
32
|
+
activeDocumentId: string | null;
|
|
33
|
+
createdAt: number;
|
|
34
|
+
}[], View[] | {
|
|
35
|
+
id: string;
|
|
36
|
+
documentIds: string[];
|
|
37
|
+
activeDocumentId: string | null;
|
|
38
|
+
createdAt: number;
|
|
39
|
+
}[]>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),t=require("@embedpdf/core/vue"),o=require("@embedpdf/plugin-view-manager"),u=()=>t.useCapability(o.ViewManagerPlugin.id),i=e.defineComponent({__name:"view-context",props:{viewId:{},autoCreate:{type:Boolean,default:!0}},setup(t){const o=t,{provides:i}=u(),n=e.ref(null),r=e.ref(!1);e.watch([i,()=>o.viewId,()=>o.autoCreate],([e,t,o],u,i)=>{if(!e)return n.value=null,void(r.value=!1);let d=e.getView(t);!d&&o&&(e.createView(t),d=e.getView(t)),n.value=d,r.value=e.getFocusedViewId()===t;const a=e.onViewFocusChanged(e=>{r.value=e.currentViewId===t}),v=e.onDocumentAddedToView(o=>{o.viewId===t&&(n.value=e.getView(t))}),l=e.onDocumentRemovedFromView(o=>{o.viewId===t&&(n.value=e.getView(t))}),c=e.onViewActiveDocumentChanged(o=>{o.viewId===t&&(n.value=e.getView(t))});i(()=>{a(),v(),l(),c()})},{immediate:!0});const d=e.computed(()=>n.value&&i.value?{view:n.value,documentIds:n.value.documentIds,activeDocumentId:n.value.activeDocumentId,isFocused:r.value,addDocument:(e,t)=>{var u;return null==(u=i.value)?void 0:u.addDocumentToView(o.viewId,e,t)},removeDocument:e=>{var t;return null==(t=i.value)?void 0:t.removeDocumentFromView(o.viewId,e)},setActiveDocument:e=>{var t;return null==(t=i.value)?void 0:t.setViewActiveDocument(o.viewId,e)},moveDocumentWithinView:(e,t)=>{var u;return null==(u=i.value)?void 0:u.moveDocumentWithinView(o.viewId,e,t)},focus:()=>{var e;return null==(e=i.value)?void 0:e.setFocusedView(o.viewId)}}:null);return(t,o)=>d.value?e.renderSlot(t.$slots,"default",e.normalizeProps(e.mergeProps({key:0},d.value))):e.createCommentVNode("",!0)}});exports.ViewContext=i,exports.useAllViews=()=>{const{provides:t}=u(),o=e.ref([]);return e.watch(t,(e,t,u)=>{if(!e)return void(o.value=[]);const i=()=>{o.value=e.getAllViews()};i();const n=e.onViewCreated(i),r=e.onViewRemoved(i),d=e.onDocumentAddedToView(i),a=e.onDocumentRemovedFromView(i),v=e.onDocumentReordered(i),l=e.onViewActiveDocumentChanged(i);u(()=>{n(),r(),d(),a(),v(),l()})},{immediate:!0}),o},exports.useFocusedView=()=>{const{provides:t}=u(),o=e.ref(null);return e.watch(t,(e,t,u)=>{if(!e)return void(o.value=null);o.value=e.getFocusedViewId();u(e.onViewFocusChanged(e=>{o.value=e.currentViewId}))},{immediate:!0}),{focusedViewId:o}},exports.useView=t=>{const{provides:o}=u(),i=e.ref(null);return e.watch([o,()=>e.toValue(t)],([e,t],o,u)=>{if(!e)return void(i.value=null);i.value=e.getView(t);const n=e.onDocumentAddedToView(o=>{o.viewId===t&&(i.value=e.getView(t))}),r=e.onDocumentRemovedFromView(o=>{o.viewId===t&&(i.value=e.getView(t))}),d=e.onDocumentReordered(o=>{o.viewId===t&&(i.value=e.getView(t))}),a=e.onViewActiveDocumentChanged(o=>{o.viewId===t&&(i.value=e.getView(t))});u(()=>{n(),r(),d(),a()})},{immediate:!0}),i},exports.useViewManagerCapability=u,exports.useViewManagerPlugin=()=>t.usePlugin(o.ViewManagerPlugin.id),Object.keys(o).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>o[e]})});
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-view-manager.ts","../../src/vue/components/view-context.vue"],"sourcesContent":["import { ref, watch, toValue, type MaybeRefOrGetter } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { ViewManagerPlugin } from '@embedpdf/plugin-view-manager';\nimport { View } from '@embedpdf/plugin-view-manager';\n\nexport const useViewManagerPlugin = () => usePlugin<ViewManagerPlugin>(ViewManagerPlugin.id);\nexport const useViewManagerCapability = () =>\n useCapability<ViewManagerPlugin>(ViewManagerPlugin.id);\n\n/**\n * Hook for a specific view's state\n * @param viewId View ID (can be ref, computed, getter, or plain value)\n */\nexport const useView = (viewId: MaybeRefOrGetter<string>) => {\n const { provides } = useViewManagerCapability();\n const view = ref<View | null>(null);\n\n watch(\n [provides, () => toValue(viewId)],\n ([providesValue, vId], _, onCleanup) => {\n if (!providesValue) {\n view.value = null;\n return;\n }\n\n // Get initial view\n view.value = providesValue.getView(vId);\n\n // Subscribe to all document events for this view\n const unsubAdded = providesValue.onDocumentAddedToView((event) => {\n if (event.viewId === vId) {\n view.value = providesValue.getView(vId);\n }\n });\n\n const unsubRemoved = providesValue.onDocumentRemovedFromView((event) => {\n if (event.viewId === vId) {\n view.value = providesValue.getView(vId);\n }\n });\n\n const unsubReordered = providesValue.onDocumentReordered((event) => {\n if (event.viewId === vId) {\n view.value = providesValue.getView(vId);\n }\n });\n\n const unsubActiveChanged = providesValue.onViewActiveDocumentChanged((event) => {\n if (event.viewId === vId) {\n view.value = providesValue.getView(vId);\n }\n });\n\n onCleanup(() => {\n unsubAdded();\n unsubRemoved();\n unsubReordered();\n unsubActiveChanged();\n });\n },\n { immediate: true },\n );\n\n return view;\n};\n\n/**\n * Hook for focused view state\n */\nexport const useFocusedView = () => {\n const { provides } = useViewManagerCapability();\n const focusedViewId = ref<string | null>(null);\n\n watch(\n provides,\n (providesValue, _, onCleanup) => {\n if (!providesValue) {\n focusedViewId.value = null;\n return;\n }\n\n focusedViewId.value = providesValue.getFocusedViewId();\n\n const unsubscribe = providesValue.onViewFocusChanged((event) => {\n focusedViewId.value = event.currentViewId;\n });\n\n onCleanup(unsubscribe);\n },\n { immediate: true },\n );\n\n return { focusedViewId };\n};\n\n/**\n * Hook for all views\n */\nexport const useAllViews = () => {\n const { provides } = useViewManagerCapability();\n const views = ref<View[]>([]);\n\n watch(\n provides,\n (providesValue, _, onCleanup) => {\n if (!providesValue) {\n views.value = [];\n return;\n }\n\n const updateViews = () => {\n views.value = providesValue.getAllViews();\n };\n\n updateViews();\n\n const unsubCreated = providesValue.onViewCreated(updateViews);\n const unsubRemoved = providesValue.onViewRemoved(updateViews);\n const unsubAdded = providesValue.onDocumentAddedToView(updateViews);\n const unsubRemovedDoc = providesValue.onDocumentRemovedFromView(updateViews);\n const unsubReordered = providesValue.onDocumentReordered(updateViews);\n const unsubActiveChanged = providesValue.onViewActiveDocumentChanged(updateViews);\n\n onCleanup(() => {\n unsubCreated();\n unsubRemoved();\n unsubAdded();\n unsubRemovedDoc();\n unsubReordered();\n unsubActiveChanged();\n });\n },\n { immediate: true },\n );\n\n return views;\n};\n","<script setup lang=\"ts\">\nimport { ref, watch, computed } from 'vue';\nimport { useViewManagerCapability } from '../hooks';\nimport type { View } from '@embedpdf/plugin-view-manager';\n\nexport interface ViewContextRenderProps {\n view: View;\n documentIds: string[];\n activeDocumentId: string | null;\n isFocused: boolean;\n addDocument: (documentId: string, index?: number) => void;\n removeDocument: (documentId: string) => void;\n setActiveDocument: (documentId: string | null) => void;\n moveDocumentWithinView: (documentId: string, index: number) => void;\n focus: () => void;\n}\n\ninterface ViewContextProps {\n viewId: string;\n autoCreate?: boolean;\n}\n\nconst props = withDefaults(defineProps<ViewContextProps>(), {\n autoCreate: true,\n});\n\nconst { provides } = useViewManagerCapability();\nconst view = ref<View | null>(null);\nconst isFocused = ref(false);\n\nwatch(\n [provides, () => props.viewId, () => props.autoCreate],\n ([providesValue, vId, autoCreateValue], _, onCleanup) => {\n if (!providesValue) {\n view.value = null;\n isFocused.value = false;\n return;\n }\n\n // Get or create view\n let v = providesValue.getView(vId);\n if (!v && autoCreateValue) {\n providesValue.createView(vId);\n v = providesValue.getView(vId);\n }\n view.value = v;\n isFocused.value = providesValue.getFocusedViewId() === vId;\n\n const unsubFocus = providesValue.onViewFocusChanged((event) => {\n isFocused.value = event.currentViewId === vId;\n });\n\n const unsubAdded = providesValue.onDocumentAddedToView((event) => {\n if (event.viewId === vId) {\n view.value = providesValue.getView(vId);\n }\n });\n\n const unsubRemoved = providesValue.onDocumentRemovedFromView((event) => {\n if (event.viewId === vId) {\n view.value = providesValue.getView(vId);\n }\n });\n\n const unsubActiveChanged = providesValue.onViewActiveDocumentChanged((event) => {\n if (event.viewId === vId) {\n view.value = providesValue.getView(vId);\n }\n });\n\n onCleanup(() => {\n unsubFocus();\n unsubAdded();\n unsubRemoved();\n unsubActiveChanged();\n });\n },\n { immediate: true },\n);\n\nconst slotProps = computed<ViewContextRenderProps | null>(() => {\n if (!view.value || !provides.value) return null;\n\n return {\n view: view.value,\n documentIds: view.value.documentIds,\n activeDocumentId: view.value.activeDocumentId,\n isFocused: isFocused.value,\n addDocument: (docId: string, index?: number) =>\n provides.value?.addDocumentToView(props.viewId, docId, index),\n removeDocument: (docId: string) => provides.value?.removeDocumentFromView(props.viewId, docId),\n setActiveDocument: (docId: string | null) =>\n provides.value?.setViewActiveDocument(props.viewId, docId),\n moveDocumentWithinView: (docId: string, index: number) =>\n provides.value?.moveDocumentWithinView(props.viewId, docId, index),\n focus: () => provides.value?.setFocusedView(props.viewId),\n };\n});\n</script>\n\n<template>\n <!--\n Headless component for managing a single view with multiple documents\n \n @example\n <ViewContext viewId=\"main-view\">\n <template #default=\"{ view, documentIds, activeDocumentId, isFocused, addDocument, removeDocument, setActiveDocument, focus }\">\n <div :class=\"{ focused: isFocused }\" @click=\"focus\">\n <button\n v-for=\"docId in documentIds\"\n :key=\"docId\"\n @click=\"setActiveDocument(docId)\"\n :class=\"{ active: docId === activeDocumentId }\"\n >\n {{ docId }}\n <button @click.stop=\"removeDocument(docId)\">×</button>\n </button>\n </div>\n </template>\n </ViewContext>\n -->\n <slot v-if=\"slotProps\" v-bind=\"slotProps\" />\n</template>\n"],"names":["useViewManagerCapability","useCapability","ViewManagerPlugin","id","props","__props","provides","view","ref","isFocused","watch","viewId","autoCreate","providesValue","vId","autoCreateValue","_","onCleanup","value","v","getView","createView","getFocusedViewId","unsubFocus","onViewFocusChanged","event","currentViewId","unsubAdded","onDocumentAddedToView","unsubRemoved","onDocumentRemovedFromView","unsubActiveChanged","onViewActiveDocumentChanged","immediate","slotProps","computed","documentIds","activeDocumentId","addDocument","docId","index","_a","addDocumentToView","removeDocument","removeDocumentFromView","setActiveDocument","setViewActiveDocument","moveDocumentWithinView","focus","setFocusedView","_renderSlot","_ctx","views","updateViews","getAllViews","unsubCreated","onViewCreated","onViewRemoved","unsubRemovedDoc","unsubReordered","onDocumentReordered","focusedViewId","toValue","usePlugin"],"mappings":"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"}
|