@vizbl/room-viewer 0.0.21 → 0.0.22
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.
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react';
|
|
2
|
+
import { RoomViewerDialog } from '@vizbl/react-room-viewer';
|
|
3
|
+
export interface DialogProps extends ComponentProps<typeof RoomViewerDialog> {
|
|
4
|
+
trigger: Element;
|
|
5
|
+
}
|
|
6
|
+
export declare function Dialog({ trigger, ...props }: DialogProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function DialogManager(): import("react/jsx-runtime").JSX.Element;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@vizbl/react-room-viewer/style.css';
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createElement, useCallback, useEffect, useState } from "react";
|
|
2
|
+
import client from "react-dom/client";
|
|
3
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
4
|
+
import { observe } from "selector-observer";
|
|
5
|
+
import { RoomViewerDialog } from "@vizbl/react-room-viewer";
|
|
6
|
+
import "@vizbl/react-room-viewer/style.css";
|
|
7
|
+
function Dialog({ trigger, ...props }) {
|
|
8
|
+
const [open, setOpen] = useState(false);
|
|
9
|
+
const handleClick = useCallback(()=>{
|
|
10
|
+
setOpen(true);
|
|
11
|
+
}, []);
|
|
12
|
+
const handleOpenChange = useCallback((newOpen)=>{
|
|
13
|
+
setOpen(newOpen);
|
|
14
|
+
}, []);
|
|
15
|
+
useEffect(()=>{
|
|
16
|
+
trigger.addEventListener('click', handleClick);
|
|
17
|
+
return ()=>{
|
|
18
|
+
trigger.removeEventListener('click', handleClick);
|
|
19
|
+
};
|
|
20
|
+
}, [
|
|
21
|
+
trigger,
|
|
22
|
+
handleClick
|
|
23
|
+
]);
|
|
24
|
+
return /*#__PURE__*/ jsx(RoomViewerDialog, {
|
|
25
|
+
open: open,
|
|
26
|
+
onOpenChange: handleOpenChange,
|
|
27
|
+
...props
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
let nextTriggerId = 0;
|
|
31
|
+
function DialogManager() {
|
|
32
|
+
const [triggers, setTriggers] = useState([]);
|
|
33
|
+
useEffect(()=>{
|
|
34
|
+
const observer = observe('[data-vizbl-room-viewer-dialog]', {
|
|
35
|
+
initialize (el) {
|
|
36
|
+
const type = el.getAttribute('data-vizbl-room-viewer-type');
|
|
37
|
+
const src = el.getAttribute('data-vizbl-room-viewer-src');
|
|
38
|
+
const tinuuid = el.getAttribute('data-vizbl-room-viewer-tinuuid');
|
|
39
|
+
const name = el.getAttribute('data-vizbl-room-viewer-name');
|
|
40
|
+
const language = el.getAttribute('data-vizbl-room-viewer-language');
|
|
41
|
+
const widthAttr = el.getAttribute('data-vizbl-room-viewer-width');
|
|
42
|
+
const heightAttr = el.getAttribute('data-vizbl-room-viewer-height');
|
|
43
|
+
const width = widthAttr ? Number(widthAttr) : void 0;
|
|
44
|
+
const height = heightAttr ? Number(heightAttr) : void 0;
|
|
45
|
+
const id = nextTriggerId++;
|
|
46
|
+
return {
|
|
47
|
+
add () {
|
|
48
|
+
setTriggers((prev)=>[
|
|
49
|
+
...prev,
|
|
50
|
+
{
|
|
51
|
+
id,
|
|
52
|
+
trigger: el,
|
|
53
|
+
src,
|
|
54
|
+
tinuuid,
|
|
55
|
+
type,
|
|
56
|
+
name,
|
|
57
|
+
language,
|
|
58
|
+
width,
|
|
59
|
+
height
|
|
60
|
+
}
|
|
61
|
+
]);
|
|
62
|
+
},
|
|
63
|
+
remove () {
|
|
64
|
+
setTriggers((prev)=>prev.filter((t)=>t.id !== id));
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return ()=>{
|
|
70
|
+
observer.abort();
|
|
71
|
+
};
|
|
72
|
+
}, []);
|
|
73
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
74
|
+
children: triggers.map((trigger)=>/*#__PURE__*/ jsx(Dialog, {
|
|
75
|
+
trigger: trigger.trigger,
|
|
76
|
+
src: trigger.src,
|
|
77
|
+
tinuuid: trigger.tinuuid,
|
|
78
|
+
type: trigger.type,
|
|
79
|
+
name: trigger.name,
|
|
80
|
+
language: trigger.language,
|
|
81
|
+
width: trigger.width,
|
|
82
|
+
height: trigger.height
|
|
83
|
+
}, trigger.id))
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const dialogContainer = document.createElement('div');
|
|
87
|
+
dialogContainer.id = 'vizbl-room-viewer-dialog-manager';
|
|
88
|
+
document.body.appendChild(dialogContainer);
|
|
89
|
+
const dialogRoot = client.createRoot(dialogContainer);
|
|
90
|
+
dialogRoot.render(createElement(DialogManager));
|