@june-ai/june-ui 0.2.8 → 0.2.9
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 +5 -0
- package/dist/{chunk-3NVO336D.cjs → chunk-GFCROSGQ.cjs} +268 -183
- package/dist/{chunk-H26BMR5S.js → chunk-JSRO5CRO.js} +138 -53
- package/dist/entry-core.cjs +2 -2
- package/dist/entry-core.js +1 -1
- package/dist/index.cjs +24 -7
- package/dist/index.d.cts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +20 -3
- package/docs/troubleshooting.md +1 -1
- package/package.json +1 -1
|
@@ -22,49 +22,120 @@ import {
|
|
|
22
22
|
} from "./chunk-27XM6EVX.js";
|
|
23
23
|
|
|
24
24
|
// src/engine/openui-devtools.tsx
|
|
25
|
+
import { useEffect } from "react";
|
|
25
26
|
import { OpenUIDevtools } from "@openuidev/devtools";
|
|
26
27
|
import { jsx } from "react/jsx-runtime";
|
|
27
28
|
var AUTO_MOUNT_FLAG = /* @__PURE__ */ Symbol.for("openui.devtools.autoMount");
|
|
28
29
|
var BLOCKED_BY_JUNE = /* @__PURE__ */ Symbol.for("openui.devtools.blockedByJune");
|
|
30
|
+
var AUTO_MOUNT_HOST = "data-openui-devtools-auto-mount";
|
|
29
31
|
var flags = globalThis;
|
|
30
|
-
var scheduledByOpenUI = flags[AUTO_MOUNT_FLAG] === true && flags[BLOCKED_BY_JUNE] !== true;
|
|
31
32
|
flags[AUTO_MOUNT_FLAG] = true;
|
|
32
33
|
flags[BLOCKED_BY_JUNE] = true;
|
|
33
34
|
var DEVTOOLS_BUNDLE = "https://cdn.jsdelivr.net/npm/@openuidev/devtools@0/dist/devtools.browser.js";
|
|
34
35
|
var ALIAS_CACHE_MS = 5 * 60 * 1e3;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
36
|
+
var LOCAL_WIDGET = "../../node_modules/@openuidev/devtools/dist/devtools.browser.js";
|
|
37
|
+
var loadFromCdn = () => {
|
|
38
38
|
const url = `${DEVTOOLS_BUNDLE}?t=${Math.floor(Date.now() / ALIAS_CACHE_MS)}`;
|
|
39
|
-
|
|
40
|
-
let unmount = () => {
|
|
41
|
-
cancelled = true;
|
|
42
|
-
};
|
|
43
|
-
void Promise.all([
|
|
39
|
+
return Promise.all([
|
|
44
40
|
import(
|
|
41
|
+
/* webpackIgnore: true */
|
|
45
42
|
/* @vite-ignore */
|
|
46
43
|
url
|
|
47
44
|
),
|
|
48
45
|
import("react"),
|
|
49
46
|
import("react-dom"),
|
|
50
47
|
import("react-dom/client")
|
|
51
|
-
])
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
48
|
+
]);
|
|
49
|
+
};
|
|
50
|
+
var loadInstalledOrCdn = async () => {
|
|
51
|
+
const [react, reactDom, reactDomClient] = await Promise.all([
|
|
52
|
+
import("react"),
|
|
53
|
+
import("react-dom"),
|
|
54
|
+
import("react-dom/client")
|
|
55
|
+
]);
|
|
56
|
+
try {
|
|
57
|
+
const devtools = await import(LOCAL_WIDGET);
|
|
58
|
+
return [devtools, react, reactDom, reactDomClient];
|
|
59
|
+
} catch {
|
|
60
|
+
const [devtools] = await loadFromCdn();
|
|
61
|
+
return [devtools, react, reactDom, reactDomClient];
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
function nodeEnv() {
|
|
65
|
+
try {
|
|
66
|
+
return process.env.NODE_ENV;
|
|
67
|
+
} catch {
|
|
68
|
+
return void 0;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
var isAutoMountHost = (node) => node instanceof Element && node.hasAttribute(AUTO_MOUNT_HOST);
|
|
72
|
+
function createDevtoolsGuard(load = loadInstalledOrCdn) {
|
|
73
|
+
let started = false;
|
|
74
|
+
let claimed = false;
|
|
75
|
+
let observer = null;
|
|
76
|
+
let unmount = null;
|
|
77
|
+
let stopped = false;
|
|
78
|
+
const claim = () => {
|
|
79
|
+
if (claimed) return;
|
|
80
|
+
claimed = true;
|
|
81
|
+
observer?.disconnect();
|
|
82
|
+
observer = null;
|
|
83
|
+
load().then(([devtools, react, reactDom, reactDomClient]) => {
|
|
84
|
+
if (stopped) return;
|
|
85
|
+
unmount = devtools.mountOpenUIDevtools({
|
|
86
|
+
React: react,
|
|
87
|
+
ReactDOM: reactDom,
|
|
88
|
+
ReactDOMClient: reactDomClient,
|
|
89
|
+
loadReactLang: () => import("@openuidev/react-lang"),
|
|
90
|
+
props: { enabled: false }
|
|
91
|
+
});
|
|
92
|
+
}).catch(() => {
|
|
59
93
|
});
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
94
|
+
};
|
|
95
|
+
const watch = () => {
|
|
96
|
+
const body = document.body;
|
|
97
|
+
if (!body) return;
|
|
98
|
+
if (Array.from(body.children).some(isAutoMountHost)) {
|
|
99
|
+
claim();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (typeof MutationObserver === "undefined") return;
|
|
103
|
+
observer = new MutationObserver((records) => {
|
|
104
|
+
if (records.some((r) => Array.from(r.addedNodes).some(isAutoMountHost))) claim();
|
|
105
|
+
});
|
|
106
|
+
observer.observe(body, { childList: true });
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
/** Starts watching (browser only). Safe to call many times. */
|
|
110
|
+
start() {
|
|
111
|
+
if (started || typeof document === "undefined") return;
|
|
112
|
+
started = true;
|
|
113
|
+
if (document.body) watch();
|
|
114
|
+
else document.addEventListener("DOMContentLoaded", watch, { once: true });
|
|
115
|
+
},
|
|
116
|
+
/** True once the disabled widget has been requested. */
|
|
117
|
+
get claimed() {
|
|
118
|
+
return claimed;
|
|
119
|
+
},
|
|
120
|
+
/** Stops watching and removes the disabled widget (tests, teardown). */
|
|
121
|
+
stop() {
|
|
122
|
+
stopped = true;
|
|
123
|
+
observer?.disconnect();
|
|
124
|
+
observer = null;
|
|
125
|
+
unmount?.();
|
|
126
|
+
unmount = null;
|
|
127
|
+
}
|
|
128
|
+
};
|
|
63
129
|
}
|
|
64
|
-
|
|
65
|
-
|
|
130
|
+
var guard = createDevtoolsGuard();
|
|
131
|
+
function hideOpenUIDevtools() {
|
|
132
|
+
if (nodeEnv() === "development") guard.start();
|
|
66
133
|
}
|
|
134
|
+
hideOpenUIDevtools();
|
|
67
135
|
function OpenUIDevtoolsGate() {
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
hideOpenUIDevtools();
|
|
138
|
+
}, []);
|
|
68
139
|
return /* @__PURE__ */ jsx(OpenUIDevtools, { enabled: false });
|
|
69
140
|
}
|
|
70
141
|
|
|
@@ -165,7 +236,7 @@ function useDocumentValue(store, id, selector) {
|
|
|
165
236
|
}
|
|
166
237
|
|
|
167
238
|
// src/features/document-editor/use-document-bridge.ts
|
|
168
|
-
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
239
|
+
import { useCallback, useEffect as useEffect2, useMemo, useRef } from "react";
|
|
169
240
|
|
|
170
241
|
// src/features/document-editor/document-merge.ts
|
|
171
242
|
var MAX_CELLS = 4e6;
|
|
@@ -483,7 +554,7 @@ function useDocumentBridge(options) {
|
|
|
483
554
|
const latest = useRef({ onResponseChange, responseChangeDelay, response, onJuneError });
|
|
484
555
|
latest.current = { onResponseChange, responseChangeDelay, response, onJuneError };
|
|
485
556
|
const timersRef = useRef(/* @__PURE__ */ new Map());
|
|
486
|
-
|
|
557
|
+
useEffect2(() => {
|
|
487
558
|
const timers = timersRef.current;
|
|
488
559
|
return () => {
|
|
489
560
|
timers.forEach(clearTimeout);
|
|
@@ -652,8 +723,10 @@ var ATTACHABLE = /* @__PURE__ */ new Set([
|
|
|
652
723
|
"ImageGallery",
|
|
653
724
|
"InlineHeader",
|
|
654
725
|
"LineChart",
|
|
726
|
+
"FollowUpBlock",
|
|
655
727
|
"ListBlock",
|
|
656
728
|
"MarkDownRenderer",
|
|
729
|
+
"SectionBlock",
|
|
657
730
|
"Modal",
|
|
658
731
|
"OverviewCardBlock",
|
|
659
732
|
"PieChart",
|
|
@@ -674,7 +747,7 @@ var ATTACHABLE = /* @__PURE__ */ new Set([
|
|
|
674
747
|
]);
|
|
675
748
|
function normalizeProgram(source) {
|
|
676
749
|
const rewritten = rewriteCalls(source);
|
|
677
|
-
return attachOrphans(rewritten);
|
|
750
|
+
return liftStackRoot(attachOrphans(rewritten));
|
|
678
751
|
}
|
|
679
752
|
function rewriteCalls(source) {
|
|
680
753
|
let out = "";
|
|
@@ -818,7 +891,7 @@ function attachOrphans(source) {
|
|
|
818
891
|
if (orphans.length === 0) return source;
|
|
819
892
|
const names = orphans.map((stmt) => stmt.name);
|
|
820
893
|
const root = stmts.find((stmt) => stmt.name === "root");
|
|
821
|
-
if (!root) return `root =
|
|
894
|
+
if (!root) return `root = Card([${names.join(", ")}])
|
|
822
895
|
${text}`;
|
|
823
896
|
const rawRhs = text.slice(root.rhsStart, root.end);
|
|
824
897
|
const lead = /^\s*/.exec(rawRhs)?.[0] ?? "";
|
|
@@ -827,10 +900,22 @@ ${text}`;
|
|
|
827
900
|
return text.slice(0, root.rhsStart) + lead + spliced + text.slice(root.end);
|
|
828
901
|
}
|
|
829
902
|
const body = fresh(new Set(stmts.map((stmt) => stmt.name)), "rootBody");
|
|
830
|
-
const wrapped = `root =
|
|
903
|
+
const wrapped = `root = Card([${body}, ${names.join(", ")}])
|
|
831
904
|
${body} = ${rawRhs.trim()}`;
|
|
832
905
|
return text.slice(0, root.start) + wrapped + text.slice(root.end);
|
|
833
906
|
}
|
|
907
|
+
function liftStackRoot(source) {
|
|
908
|
+
const stmts = parseStatements(source);
|
|
909
|
+
if (!stmts) return source;
|
|
910
|
+
const root = stmts.find((stmt) => stmt.name === "root");
|
|
911
|
+
if (!root) return source;
|
|
912
|
+
const rhs = source.slice(root.rhsStart, root.end).trim();
|
|
913
|
+
if (!/^Stack\s*\(/.test(rhs)) return source;
|
|
914
|
+
const body = fresh(new Set(stmts.map((stmt) => stmt.name)), "rootLayout");
|
|
915
|
+
const wrapped = `root = Card([${body}])
|
|
916
|
+
${body} = ${rhs}`;
|
|
917
|
+
return source.slice(0, root.start) + wrapped + source.slice(root.end);
|
|
918
|
+
}
|
|
834
919
|
function spliceFirstArray(rhs, names) {
|
|
835
920
|
const match = /^([A-Za-z_]\w*)\s*\(/.exec(rhs);
|
|
836
921
|
if (!match || match[1] !== "Stack" && match[1] !== "Card") return null;
|
|
@@ -1558,7 +1643,7 @@ function defineJuneAction(definition) {
|
|
|
1558
1643
|
}
|
|
1559
1644
|
|
|
1560
1645
|
// src/features/streaming/use-june-stream.ts
|
|
1561
|
-
import { useCallback as useCallback3, useEffect as
|
|
1646
|
+
import { useCallback as useCallback3, useEffect as useEffect3, useMemo as useMemo4, useRef as useRef3, useState } from "react";
|
|
1562
1647
|
|
|
1563
1648
|
// src/features/streaming/stream-handler.ts
|
|
1564
1649
|
function isReadableStream(source) {
|
|
@@ -1813,7 +1898,7 @@ function useJuneStream(options = {}) {
|
|
|
1813
1898
|
clearTimer();
|
|
1814
1899
|
setState(INITIAL);
|
|
1815
1900
|
}, [clearTimer]);
|
|
1816
|
-
|
|
1901
|
+
useEffect3(
|
|
1817
1902
|
() => () => {
|
|
1818
1903
|
runIdRef.current++;
|
|
1819
1904
|
controllerRef.current?.abort();
|
|
@@ -1850,7 +1935,7 @@ function DocumentDraft({ title, words, state }) {
|
|
|
1850
1935
|
|
|
1851
1936
|
// src/features/document-editor/document-editor.tsx
|
|
1852
1937
|
import { useEditor } from "@tiptap/react";
|
|
1853
|
-
import { useCallback as useCallback4, useEffect as
|
|
1938
|
+
import { useCallback as useCallback4, useEffect as useEffect7, useId, useMemo as useMemo5, useRef as useRef8, useState as useState6 } from "react";
|
|
1854
1939
|
|
|
1855
1940
|
// src/features/document-editor/document-bubble.tsx
|
|
1856
1941
|
import { useEditorState as useEditorState2 } from "@tiptap/react";
|
|
@@ -2082,12 +2167,12 @@ function Icon({ name, size = 16 }) {
|
|
|
2082
2167
|
}
|
|
2083
2168
|
|
|
2084
2169
|
// src/features/document-editor/document-popover.tsx
|
|
2085
|
-
import { useEffect as
|
|
2170
|
+
import { useEffect as useEffect4, useRef as useRef4, useState as useState2 } from "react";
|
|
2086
2171
|
import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
2087
2172
|
function Dropdown({ trigger, children, align = "start", className, onOpen }) {
|
|
2088
2173
|
const [open, setOpen] = useState2(false);
|
|
2089
2174
|
const anchor = useRef4(null);
|
|
2090
|
-
|
|
2175
|
+
useEffect4(() => {
|
|
2091
2176
|
if (!open) return;
|
|
2092
2177
|
const onDown = (e) => {
|
|
2093
2178
|
if (anchor.current && !anchor.current.contains(e.target)) setOpen(false);
|
|
@@ -2707,13 +2792,13 @@ function DocumentBubbleMenu({ editor }) {
|
|
|
2707
2792
|
|
|
2708
2793
|
// src/features/document-editor/document-content.tsx
|
|
2709
2794
|
import { EditorContent } from "@tiptap/react";
|
|
2710
|
-
import { useEffect as
|
|
2795
|
+
import { useEffect as useEffect5, useLayoutEffect, useRef as useRef6, useState as useState4 } from "react";
|
|
2711
2796
|
import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2712
2797
|
var PAGE_WIDTH = 794;
|
|
2713
2798
|
var PAGE_HEIGHT = 1123;
|
|
2714
2799
|
var PAGE_GAP = 28;
|
|
2715
2800
|
var CANVAS_PAD_X = 24;
|
|
2716
|
-
var useIsoLayoutEffect = typeof window === "undefined" ?
|
|
2801
|
+
var useIsoLayoutEffect = typeof window === "undefined" ? useEffect5 : useLayoutEffect;
|
|
2717
2802
|
function geometry(width) {
|
|
2718
2803
|
const ratio = width / PAGE_WIDTH;
|
|
2719
2804
|
const height = Math.round(PAGE_HEIGHT * ratio);
|
|
@@ -2749,7 +2834,7 @@ function DocumentContent({ editor, layout = "page", zoom = 1, showMarks = false,
|
|
|
2749
2834
|
ro.observe(c);
|
|
2750
2835
|
return () => ro.disconnect();
|
|
2751
2836
|
}, []);
|
|
2752
|
-
|
|
2837
|
+
useEffect5(() => {
|
|
2753
2838
|
if (!editor) return;
|
|
2754
2839
|
setPaginationConfig(editor, {
|
|
2755
2840
|
enabled: paged,
|
|
@@ -2759,7 +2844,7 @@ function DocumentContent({ editor, layout = "page", zoom = 1, showMarks = false,
|
|
|
2759
2844
|
padBottom: g.padY
|
|
2760
2845
|
});
|
|
2761
2846
|
}, [editor, paged, g.height, g.padY, width]);
|
|
2762
|
-
|
|
2847
|
+
useEffect5(() => {
|
|
2763
2848
|
const c = canvas.current;
|
|
2764
2849
|
const s = sheet.current;
|
|
2765
2850
|
if (!editor || !c || !s) return;
|
|
@@ -2815,7 +2900,7 @@ function DocumentContent({ editor, layout = "page", zoom = 1, showMarks = false,
|
|
|
2815
2900
|
|
|
2816
2901
|
// src/features/document-editor/document-findbar.tsx
|
|
2817
2902
|
import { useEditorState as useEditorState3 } from "@tiptap/react";
|
|
2818
|
-
import { useEffect as
|
|
2903
|
+
import { useEffect as useEffect6, useRef as useRef7, useState as useState5 } from "react";
|
|
2819
2904
|
import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2820
2905
|
function DocumentFindBar({ editor, editable, onClose, onNotice }) {
|
|
2821
2906
|
const [term, setTerm] = useState5(() => {
|
|
@@ -2832,14 +2917,14 @@ function DocumentFindBar({ editor, editable, onClose, onNotice }) {
|
|
|
2832
2917
|
return { count: s?.matches.length ?? 0, current: s?.current ?? -1 };
|
|
2833
2918
|
}
|
|
2834
2919
|
});
|
|
2835
|
-
|
|
2920
|
+
useEffect6(() => {
|
|
2836
2921
|
input.current?.focus();
|
|
2837
2922
|
input.current?.select();
|
|
2838
2923
|
}, []);
|
|
2839
|
-
|
|
2924
|
+
useEffect6(() => {
|
|
2840
2925
|
setSearch(editor, { term, caseSensitive, current: 0 });
|
|
2841
2926
|
}, [editor, term, caseSensitive]);
|
|
2842
|
-
|
|
2927
|
+
useEffect6(() => () => {
|
|
2843
2928
|
if (!editor.isDestroyed) setSearch(editor, { term: "" });
|
|
2844
2929
|
}, [editor]);
|
|
2845
2930
|
const count = info?.count ?? 0;
|
|
@@ -3534,7 +3619,7 @@ function DocumentEditorImpl(props) {
|
|
|
3534
3619
|
return { json: null, error: toJuneError(e, "DOCUMENT_ERROR") };
|
|
3535
3620
|
}
|
|
3536
3621
|
}, [contentKey]);
|
|
3537
|
-
|
|
3622
|
+
useEffect7(() => {
|
|
3538
3623
|
if (parsed.error) optionsRef.current.onError?.(parsed.error);
|
|
3539
3624
|
}, [parsed.error]);
|
|
3540
3625
|
const title = useDocumentValue(store, documentId, (r) => r?.title ?? titleProp);
|
|
@@ -3550,7 +3635,7 @@ function DocumentEditorImpl(props) {
|
|
|
3550
3635
|
const [findOpen, setFindOpen] = useState6(false);
|
|
3551
3636
|
const [zoom, setZoom] = useState6(1);
|
|
3552
3637
|
const [metrics, setMetrics] = useState6({ page: 1, pages: 1 });
|
|
3553
|
-
|
|
3638
|
+
useEffect7(() => {
|
|
3554
3639
|
if (!fullscreen || typeof document === "undefined") return;
|
|
3555
3640
|
const prev = document.body.style.overflow;
|
|
3556
3641
|
document.body.style.overflow = "hidden";
|
|
@@ -3564,7 +3649,7 @@ function DocumentEditorImpl(props) {
|
|
|
3564
3649
|
const flash = useCallback4((message) => {
|
|
3565
3650
|
setNotice(message);
|
|
3566
3651
|
}, []);
|
|
3567
|
-
|
|
3652
|
+
useEffect7(() => {
|
|
3568
3653
|
if (!notice) return;
|
|
3569
3654
|
const t = setTimeout(() => setNotice(null), 3e3);
|
|
3570
3655
|
return () => clearTimeout(t);
|
|
@@ -3582,7 +3667,7 @@ function DocumentEditorImpl(props) {
|
|
|
3582
3667
|
const delay = options.autosaveDelay ?? 1500;
|
|
3583
3668
|
return delay > 0 ? debounce(() => void saveRef.current(), delay) : null;
|
|
3584
3669
|
}, [options.autosaveDelay]);
|
|
3585
|
-
|
|
3670
|
+
useEffect7(() => () => autosave?.flush(), [autosave]);
|
|
3586
3671
|
saveRef.current = async () => {
|
|
3587
3672
|
const record = store.get(documentId);
|
|
3588
3673
|
const onSave = optionsRef.current.onSave;
|
|
@@ -3624,7 +3709,7 @@ function DocumentEditorImpl(props) {
|
|
|
3624
3709
|
},
|
|
3625
3710
|
[autosave]
|
|
3626
3711
|
);
|
|
3627
|
-
|
|
3712
|
+
useEffect7(() => {
|
|
3628
3713
|
if (saveState !== "saved" || options.onSave) return;
|
|
3629
3714
|
const t = setTimeout(() => setSaveState((s) => s === "saved" ? "idle" : s), 2500);
|
|
3630
3715
|
return () => clearTimeout(t);
|
|
@@ -3653,11 +3738,11 @@ function DocumentEditorImpl(props) {
|
|
|
3653
3738
|
},
|
|
3654
3739
|
onUpdate: ({ editor: ed }) => onUpdateRef.current(ed.getJSON())
|
|
3655
3740
|
});
|
|
3656
|
-
|
|
3741
|
+
useEffect7(() => {
|
|
3657
3742
|
if (!editor || editor.isEditable === editable) return;
|
|
3658
3743
|
editor.setEditable(editable);
|
|
3659
3744
|
}, [editor, editable]);
|
|
3660
|
-
|
|
3745
|
+
useEffect7(() => {
|
|
3661
3746
|
if (!parsed.json) return;
|
|
3662
3747
|
if (isDocumentEcho(store, documentId, contentKey)) return;
|
|
3663
3748
|
const outcome = store.receive({
|
|
@@ -3679,7 +3764,7 @@ function DocumentEditorImpl(props) {
|
|
|
3679
3764
|
});
|
|
3680
3765
|
}
|
|
3681
3766
|
}, [store, documentId, titleProp, parsed.json, documentType, status, emitChange, markDirty]);
|
|
3682
|
-
|
|
3767
|
+
useEffect7(() => {
|
|
3683
3768
|
if (!editor) return;
|
|
3684
3769
|
const apply = () => {
|
|
3685
3770
|
const record = store.get(documentId);
|
|
@@ -3696,7 +3781,7 @@ function DocumentEditorImpl(props) {
|
|
|
3696
3781
|
apply();
|
|
3697
3782
|
return store.subscribe(apply);
|
|
3698
3783
|
}, [editor, store, documentId, instanceId]);
|
|
3699
|
-
|
|
3784
|
+
useEffect7(() => {
|
|
3700
3785
|
if (!editor || readyRef.current) return;
|
|
3701
3786
|
const record = store.get(documentId);
|
|
3702
3787
|
if (!record) return;
|
|
@@ -3937,8 +4022,8 @@ function getDocumentEditorInstructions(options = {}) {
|
|
|
3937
4022
|
const rules = getDocumentEditorRules(options);
|
|
3938
4023
|
return ["Document drafting:", ...rules.map((rule, i) => `${i + 1}. ${rule}`)].join("\n");
|
|
3939
4024
|
}
|
|
3940
|
-
var EXAMPLE_NEW = 'root =
|
|
3941
|
-
var EXAMPLE_EDIT = 'root =
|
|
4025
|
+
var EXAMPLE_NEW = 'root = Card([doc])\ndoc = DocumentEditor("business-proposal", "Business Proposal", "## Executive Summary\\n\\nThis proposal outlines [SERVICE] for [CLIENT NAME].\\n\\n## Scope of Work\\n\\n- Discovery\\n- Delivery\\n\\n## Pricing\\n\\n| Item | Cost |\\n| --- | --- |\\n| Discovery | [AMOUNT] |", "proposal", "draft")';
|
|
4026
|
+
var EXAMPLE_EDIT = 'root = Card([doc])\ndoc = DocumentEditor("business-proposal", "Business Proposal", "## Executive Summary\\n\\nThis proposal outlines [SERVICE] for [CLIENT NAME].\\n\\n## Scope of Work\\n\\n- Discovery\\n- Delivery\\n\\n## Pricing\\n\\n| Item | Cost |\\n| --- | --- |\\n| Discovery | [AMOUNT] |\\n| Delivery | [AMOUNT] |", "proposal", "draft")';
|
|
3942
4027
|
function documentPromptOptions(options = {}) {
|
|
3943
4028
|
return {
|
|
3944
4029
|
additionalRules: getDocumentEditorRules(options),
|
|
@@ -4089,7 +4174,7 @@ function ToolApprovalList({ approvals, pendingOnly = false, renderItem, labels,
|
|
|
4089
4174
|
}
|
|
4090
4175
|
|
|
4091
4176
|
// src/features/tool-approval/use-tool-approval.ts
|
|
4092
|
-
import { useCallback as useCallback5, useEffect as
|
|
4177
|
+
import { useCallback as useCallback5, useEffect as useEffect8, useMemo as useMemo6, useRef as useRef9, useState as useState8 } from "react";
|
|
4093
4178
|
var counter = 0;
|
|
4094
4179
|
var nextId = () => `june-approval-${++counter}`;
|
|
4095
4180
|
function useToolApproval() {
|
|
@@ -4138,7 +4223,7 @@ function useToolApproval() {
|
|
|
4138
4223
|
},
|
|
4139
4224
|
[request]
|
|
4140
4225
|
);
|
|
4141
|
-
|
|
4226
|
+
useEffect8(() => {
|
|
4142
4227
|
const map = waiters.current;
|
|
4143
4228
|
return () => {
|
|
4144
4229
|
map.forEach((resolve) => resolve({ choice: "reject" }));
|
package/dist/entry-core.cjs
CHANGED
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
var
|
|
70
|
+
var _chunkGFCROSGQcjs = require('./chunk-GFCROSGQ.cjs');
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
|
|
@@ -145,4 +145,4 @@ var _chunkG6YPSE6Jcjs = require('./chunk-G6YPSE6J.cjs');
|
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
|
|
148
|
-
exports.ALL_EXPORT_FORMATS =
|
|
148
|
+
exports.ALL_EXPORT_FORMATS = _chunkGFCROSGQcjs.ALL_EXPORT_FORMATS; exports.ComponentRegistry = _chunkGFCROSGQcjs.ComponentRegistry; exports.DOCUMENT_COMPONENT_DESCRIPTION = _chunkGFCROSGQcjs.DOCUMENT_COMPONENT_DESCRIPTION; exports.DocumentBridge = _chunkGFCROSGQcjs.DocumentBridge; exports.DocumentEditor = _chunkGFCROSGQcjs.DocumentEditor; exports.JuneDocumentContext = _chunkGFCROSGQcjs.JuneDocumentContext; exports.JuneDocumentEditorComponent = _chunkGFCROSGQcjs.JuneDocumentEditorComponent; exports.JuneError = _chunkG6YPSE6Jcjs.JuneError; exports.JuneErrorBoundary = _chunkGFCROSGQcjs.JuneErrorBoundary; exports.JuneRenderer = _chunkGFCROSGQcjs.JuneRenderer; exports.JuneRuntimeContext = _chunkGFCROSGQcjs.JuneRuntimeContext; exports.JuneThemeProvider = _chunkGFCROSGQcjs.JuneThemeProvider; exports.MarkdownText = _chunkGFCROSGQcjs.MarkdownText; exports.ToolApproval = _chunkGFCROSGQcjs.ToolApproval; exports.ToolApprovalList = _chunkGFCROSGQcjs.ToolApprovalList; exports.consumeStream = _chunkGFCROSGQcjs.consumeStream; exports.copyDocumentToClipboard = _chunkGFCROSGQcjs.copyDocumentToClipboard; exports.createActionHandler = _chunkGFCROSGQcjs.createActionHandler; exports.createComponentRegistry = _chunkGFCROSGQcjs.createComponentRegistry; exports.createDocumentStore = _chunkGFCROSGQcjs.createDocumentStore; exports.createJuneLibrary = _chunkGFCROSGQcjs.createJuneLibrary; exports.createLangGraphExtractor = _chunkGFCROSGQcjs.createLangGraphExtractor; exports.createTheme = _chunkGFCROSGQcjs.createTheme; exports.darkTheme = _chunkGFCROSGQcjs.darkTheme; exports.defaultParseActionEvent = _chunkGFCROSGQcjs.defaultParseActionEvent; exports.defaultToolApprovalLabels = _chunkGFCROSGQcjs.defaultToolApprovalLabels; exports.defineComponent = _chunkGFCROSGQcjs.defineComponent; exports.defineJuneAction = _chunkGFCROSGQcjs.defineJuneAction; exports.defineJuneComponent = _chunkGFCROSGQcjs.defineJuneComponent; exports.documentPromptOptions = _chunkGFCROSGQcjs.documentPromptOptions; exports.downloadResult = _chunkGFCROSGQcjs.downloadResult; exports.exportDocument = _chunkGFCROSGQcjs.exportDocument; exports.fetchStream = _chunkGFCROSGQcjs.fetchStream; exports.getDefaultDocumentStore = _chunkGFCROSGQcjs.getDefaultDocumentStore; exports.getDocumentEditorInstructions = _chunkGFCROSGQcjs.getDocumentEditorInstructions; exports.getDocumentEditorRules = _chunkGFCROSGQcjs.getDocumentEditorRules; exports.interruptToApprovalRequests = _chunkGFCROSGQcjs.interruptToApprovalRequests; exports.isDocumentEcho = _chunkGFCROSGQcjs.isDocumentEcho; exports.isJuneComponent = _chunkGFCROSGQcjs.isJuneComponent; exports.isJuneError = _chunkG6YPSE6Jcjs.isJuneError; exports.isThemeSet = _chunkGFCROSGQcjs.isThemeSet; exports.jsonFieldExtractor = _chunkGFCROSGQcjs.jsonFieldExtractor; exports.langGraphStreamOptions = _chunkGFCROSGQcjs.langGraphStreamOptions; exports.lightTheme = _chunkGFCROSGQcjs.lightTheme; exports.listDocumentExporters = _chunkGFCROSGQcjs.listDocumentExporters; exports.mergeDocuments = _chunkGFCROSGQcjs.mergeDocuments; exports.messageContentToText = _chunkGFCROSGQcjs.messageContentToText; exports.normalizeProgram = _chunkGFCROSGQcjs.normalizeProgram; exports.readDocumentFromProgram = _chunkGFCROSGQcjs.readDocumentFromProgram; exports.readLangGraphInterrupts = _chunkGFCROSGQcjs.readLangGraphInterrupts; exports.registerDocumentExporter = _chunkGFCROSGQcjs.registerDocumentExporter; exports.rememberDocumentEcho = _chunkGFCROSGQcjs.rememberDocumentEcho; exports.resolveMixedContent = _chunkGFCROSGQcjs.resolveMixedContent; exports.resolveThemeVars = _chunkGFCROSGQcjs.resolveThemeVars; exports.runAction = _chunkGFCROSGQcjs.runAction; exports.serializeDocumentsForAgent = _chunkGFCROSGQcjs.serializeDocumentsForAgent; exports.splitResponse = _chunkGFCROSGQcjs.splitResponse; exports.sseToText = _chunkGFCROSGQcjs.sseToText; exports.toAsyncIterable = _chunkGFCROSGQcjs.toAsyncIterable; exports.toJuneError = _chunkG6YPSE6Jcjs.toJuneError; exports.updateDocumentInProgram = _chunkGFCROSGQcjs.updateDocumentInProgram; exports.useDocumentBridge = _chunkGFCROSGQcjs.useDocumentBridge; exports.useDocumentOptions = _chunkGFCROSGQcjs.useDocumentOptions; exports.useJuneRuntime = _chunkGFCROSGQcjs.useJuneRuntime; exports.useJuneStream = _chunkGFCROSGQcjs.useJuneStream; exports.useJuneTheme = _chunkGFCROSGQcjs.useJuneTheme; exports.useRegistryLibrary = _chunkGFCROSGQcjs.useRegistryLibrary; exports.useResolvedTheme = _chunkGFCROSGQcjs.useResolvedTheme; exports.useToolApproval = _chunkGFCROSGQcjs.useToolApproval; exports.validateComponentDefinition = _chunkGFCROSGQcjs.validateComponentDefinition; exports.withDocumentEditor = _chunkGFCROSGQcjs.withDocumentEditor;
|
package/dist/entry-core.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
var
|
|
70
|
+
var _chunkGFCROSGQcjs = require('./chunk-GFCROSGQ.cjs');
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
|
|
@@ -86,8 +86,25 @@ function mergeDefined(...sources) {
|
|
|
86
86
|
|
|
87
87
|
// src/core/default-library.ts
|
|
88
88
|
var _reactui = require('@openuidev/react-ui');
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
function libraryComponent(library, name) {
|
|
90
|
+
const found = library.components[name];
|
|
91
|
+
if (!found) {
|
|
92
|
+
throw new Error(`OpenUI library is missing "${name}"`);
|
|
93
|
+
}
|
|
94
|
+
return found;
|
|
95
|
+
}
|
|
96
|
+
function withChatLayout(library) {
|
|
97
|
+
return library.extend({
|
|
98
|
+
components: {
|
|
99
|
+
add: [
|
|
100
|
+
{ component: libraryComponent(_reactui.openuiLibrary, "Stack"), slots: ["Card"] },
|
|
101
|
+
{ component: libraryComponent(_reactui.openuiLibrary, "Modal"), slots: ["Card"] }
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
var juneLibrary = _chunkGFCROSGQcjs.withDocumentEditor.call(void 0, withChatLayout(_reactui.openuiChatLibrary));
|
|
107
|
+
var defaultRegistry = _chunkGFCROSGQcjs.createComponentRegistry.call(void 0, { base: juneLibrary });
|
|
91
108
|
function registerComponent(components, options) {
|
|
92
109
|
return defaultRegistry.register(components, options);
|
|
93
110
|
}
|
|
@@ -112,14 +129,14 @@ function useJuneUIContext() {
|
|
|
112
129
|
function JuneUI({ library, june, ...props }) {
|
|
113
130
|
const context = useJuneUIContext();
|
|
114
131
|
const instance = _nullishCoalesce(june, () => ( _optionalChain([context, 'optionalAccess', _ => _.june])));
|
|
115
|
-
const registryLibrary =
|
|
132
|
+
const registryLibrary = _chunkGFCROSGQcjs.useRegistryLibrary.call(void 0, _nullishCoalesce(_optionalChain([instance, 'optionalAccess', _2 => _2.registry]), () => ( defaultRegistry)));
|
|
116
133
|
const merged = mergeDefined(_optionalChain([instance, 'optionalAccess', _3 => _3.defaults]), _optionalChain([context, 'optionalAccess', _4 => _4.defaults]), props);
|
|
117
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
134
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGFCROSGQcjs.JuneRenderer, { ...merged, library: _nullishCoalesce(library, () => ( registryLibrary)) });
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
// src/core/create-june-ui.ts
|
|
121
138
|
function createJuneUI(options = {}) {
|
|
122
|
-
const registry =
|
|
139
|
+
const registry = _chunkGFCROSGQcjs.createComponentRegistry.call(void 0, {
|
|
123
140
|
base: _nullishCoalesce(options.baseLibrary, () => ( juneLibrary)),
|
|
124
141
|
components: options.components,
|
|
125
142
|
overrides: options.overrides,
|
|
@@ -220,4 +237,4 @@ function createJuneUI(options = {}) {
|
|
|
220
237
|
|
|
221
238
|
|
|
222
239
|
|
|
223
|
-
exports.ALL_EXPORT_FORMATS =
|
|
240
|
+
exports.ALL_EXPORT_FORMATS = _chunkGFCROSGQcjs.ALL_EXPORT_FORMATS; exports.ComponentRegistry = _chunkGFCROSGQcjs.ComponentRegistry; exports.DOCUMENT_COMPONENT_DESCRIPTION = _chunkGFCROSGQcjs.DOCUMENT_COMPONENT_DESCRIPTION; exports.DocumentBridge = _chunkGFCROSGQcjs.DocumentBridge; exports.DocumentEditor = _chunkGFCROSGQcjs.DocumentEditor; exports.JuneDocumentContext = _chunkGFCROSGQcjs.JuneDocumentContext; exports.JuneDocumentEditorComponent = _chunkGFCROSGQcjs.JuneDocumentEditorComponent; exports.JuneError = _chunkG6YPSE6Jcjs.JuneError; exports.JuneErrorBoundary = _chunkGFCROSGQcjs.JuneErrorBoundary; exports.JuneRenderer = _chunkGFCROSGQcjs.JuneRenderer; exports.JuneRuntimeContext = _chunkGFCROSGQcjs.JuneRuntimeContext; exports.JuneThemeProvider = _chunkGFCROSGQcjs.JuneThemeProvider; exports.JuneUI = JuneUI; exports.JuneUIProvider = JuneUIProvider; exports.MarkdownText = _chunkGFCROSGQcjs.MarkdownText; exports.ToolApproval = _chunkGFCROSGQcjs.ToolApproval; exports.ToolApprovalList = _chunkGFCROSGQcjs.ToolApprovalList; exports.consumeStream = _chunkGFCROSGQcjs.consumeStream; exports.copyDocumentToClipboard = _chunkGFCROSGQcjs.copyDocumentToClipboard; exports.createActionHandler = _chunkGFCROSGQcjs.createActionHandler; exports.createComponentRegistry = _chunkGFCROSGQcjs.createComponentRegistry; exports.createDocumentStore = _chunkGFCROSGQcjs.createDocumentStore; exports.createJuneLibrary = _chunkGFCROSGQcjs.createJuneLibrary; exports.createJuneUI = createJuneUI; exports.createLangGraphExtractor = _chunkGFCROSGQcjs.createLangGraphExtractor; exports.createTheme = _chunkGFCROSGQcjs.createTheme; exports.darkTheme = _chunkGFCROSGQcjs.darkTheme; exports.defaultParseActionEvent = _chunkGFCROSGQcjs.defaultParseActionEvent; exports.defaultRegistry = defaultRegistry; exports.defaultToolApprovalLabels = _chunkGFCROSGQcjs.defaultToolApprovalLabels; exports.defineComponent = _chunkGFCROSGQcjs.defineComponent; exports.defineJuneAction = _chunkGFCROSGQcjs.defineJuneAction; exports.defineJuneComponent = _chunkGFCROSGQcjs.defineJuneComponent; exports.documentPromptOptions = _chunkGFCROSGQcjs.documentPromptOptions; exports.downloadResult = _chunkGFCROSGQcjs.downloadResult; exports.exportDocument = _chunkGFCROSGQcjs.exportDocument; exports.fetchStream = _chunkGFCROSGQcjs.fetchStream; exports.getDefaultDocumentStore = _chunkGFCROSGQcjs.getDefaultDocumentStore; exports.getDocumentEditorInstructions = _chunkGFCROSGQcjs.getDocumentEditorInstructions; exports.getDocumentEditorRules = _chunkGFCROSGQcjs.getDocumentEditorRules; exports.interruptToApprovalRequests = _chunkGFCROSGQcjs.interruptToApprovalRequests; exports.isDocumentEcho = _chunkGFCROSGQcjs.isDocumentEcho; exports.isJuneComponent = _chunkGFCROSGQcjs.isJuneComponent; exports.isJuneError = _chunkG6YPSE6Jcjs.isJuneError; exports.isThemeSet = _chunkGFCROSGQcjs.isThemeSet; exports.jsonFieldExtractor = _chunkGFCROSGQcjs.jsonFieldExtractor; exports.juneLibrary = juneLibrary; exports.langGraphStreamOptions = _chunkGFCROSGQcjs.langGraphStreamOptions; exports.lightTheme = _chunkGFCROSGQcjs.lightTheme; exports.listDocumentExporters = _chunkGFCROSGQcjs.listDocumentExporters; exports.mergeDocuments = _chunkGFCROSGQcjs.mergeDocuments; exports.messageContentToText = _chunkGFCROSGQcjs.messageContentToText; exports.normalizeProgram = _chunkGFCROSGQcjs.normalizeProgram; exports.readDocumentFromProgram = _chunkGFCROSGQcjs.readDocumentFromProgram; exports.readLangGraphInterrupts = _chunkGFCROSGQcjs.readLangGraphInterrupts; exports.registerComponent = registerComponent; exports.registerDocumentExporter = _chunkGFCROSGQcjs.registerDocumentExporter; exports.rememberDocumentEcho = _chunkGFCROSGQcjs.rememberDocumentEcho; exports.resolveMixedContent = _chunkGFCROSGQcjs.resolveMixedContent; exports.resolveThemeVars = _chunkGFCROSGQcjs.resolveThemeVars; exports.runAction = _chunkGFCROSGQcjs.runAction; exports.serializeDocumentsForAgent = _chunkGFCROSGQcjs.serializeDocumentsForAgent; exports.splitResponse = _chunkGFCROSGQcjs.splitResponse; exports.sseToText = _chunkGFCROSGQcjs.sseToText; exports.toAsyncIterable = _chunkGFCROSGQcjs.toAsyncIterable; exports.toJuneError = _chunkG6YPSE6Jcjs.toJuneError; exports.unregisterComponent = unregisterComponent; exports.updateDocumentInProgram = _chunkGFCROSGQcjs.updateDocumentInProgram; exports.useDocumentBridge = _chunkGFCROSGQcjs.useDocumentBridge; exports.useDocumentOptions = _chunkGFCROSGQcjs.useDocumentOptions; exports.useJuneRuntime = _chunkGFCROSGQcjs.useJuneRuntime; exports.useJuneStream = _chunkGFCROSGQcjs.useJuneStream; exports.useJuneTheme = _chunkGFCROSGQcjs.useJuneTheme; exports.useJuneUIContext = useJuneUIContext; exports.useRegistryLibrary = _chunkGFCROSGQcjs.useRegistryLibrary; exports.useResolvedTheme = _chunkGFCROSGQcjs.useResolvedTheme; exports.useToolApproval = _chunkGFCROSGQcjs.useToolApproval; exports.validateComponentDefinition = _chunkGFCROSGQcjs.validateComponentDefinition; exports.withDocumentEditor = _chunkGFCROSGQcjs.withDocumentEditor;
|
package/dist/index.d.cts
CHANGED
|
@@ -79,9 +79,8 @@ declare function JuneUIProvider({ june, defaults, children }: JuneUIProviderProp
|
|
|
79
79
|
declare function useJuneUIContext(): JuneUIContextValue | null;
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
* June's default library:
|
|
83
|
-
*
|
|
84
|
-
* Created once so its reference stays stable.
|
|
82
|
+
* June's default library: the OpenUI chat library, plus Stack, Modal and DocumentEditor.
|
|
83
|
+
* Root is Card, matching the chat language. Created once so its reference stays stable.
|
|
85
84
|
*/
|
|
86
85
|
declare const juneLibrary: OpenUILibrary;
|
|
87
86
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -79,9 +79,8 @@ declare function JuneUIProvider({ june, defaults, children }: JuneUIProviderProp
|
|
|
79
79
|
declare function useJuneUIContext(): JuneUIContextValue | null;
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
* June's default library:
|
|
83
|
-
*
|
|
84
|
-
* Created once so its reference stays stable.
|
|
82
|
+
* June's default library: the OpenUI chat library, plus Stack, Modal and DocumentEditor.
|
|
83
|
+
* Root is Card, matching the chat language. Created once so its reference stays stable.
|
|
85
84
|
*/
|
|
86
85
|
declare const juneLibrary: OpenUILibrary;
|
|
87
86
|
/**
|
package/dist/index.js
CHANGED
|
@@ -68,7 +68,7 @@ import {
|
|
|
68
68
|
useToolApproval,
|
|
69
69
|
validateComponentDefinition,
|
|
70
70
|
withDocumentEditor
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-JSRO5CRO.js";
|
|
72
72
|
import {
|
|
73
73
|
JuneError,
|
|
74
74
|
isJuneError,
|
|
@@ -86,8 +86,25 @@ function mergeDefined(...sources) {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
// src/core/default-library.ts
|
|
89
|
-
import { openuiLibrary } from "@openuidev/react-ui";
|
|
90
|
-
|
|
89
|
+
import { openuiChatLibrary, openuiLibrary } from "@openuidev/react-ui";
|
|
90
|
+
function libraryComponent(library, name) {
|
|
91
|
+
const found = library.components[name];
|
|
92
|
+
if (!found) {
|
|
93
|
+
throw new Error(`OpenUI library is missing "${name}"`);
|
|
94
|
+
}
|
|
95
|
+
return found;
|
|
96
|
+
}
|
|
97
|
+
function withChatLayout(library) {
|
|
98
|
+
return library.extend({
|
|
99
|
+
components: {
|
|
100
|
+
add: [
|
|
101
|
+
{ component: libraryComponent(openuiLibrary, "Stack"), slots: ["Card"] },
|
|
102
|
+
{ component: libraryComponent(openuiLibrary, "Modal"), slots: ["Card"] }
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
var juneLibrary = withDocumentEditor(withChatLayout(openuiChatLibrary));
|
|
91
108
|
var defaultRegistry = createComponentRegistry({ base: juneLibrary });
|
|
92
109
|
function registerComponent(components, options) {
|
|
93
110
|
return defaultRegistry.register(components, options);
|
package/docs/troubleshooting.md
CHANGED
|
@@ -56,4 +56,4 @@ Start by passing `onJuneError={(e) => console.log(e.code, e.message, e.details)}
|
|
|
56
56
|
| `Cannot find module '@june-ai/june-ui/core'` | Use `moduleResolution: "bundler"` or `"node16"`; upgrade from 0.2.7, where `/core` was not built. |
|
|
57
57
|
| Hooks error in Next.js | Render June from a `"use client"` file. |
|
|
58
58
|
| Two copies of React | Ensure a single `react` / `react-dom` (`npm ls react`). |
|
|
59
|
-
| OpenUI
|
|
59
|
+
| OpenUI Inspect logo / panel appears | June hides it automatically in development (it mounts OpenUI's widget with `enabled: false`, which the auto-launcher yields to). Make sure you run a June version with this fix and that the page was fully reloaded. If you *want* OpenUI Inspect, render `<OpenUIDevtools />` from `@openuidev/devtools` yourself before any June component mounts. |
|
package/package.json
CHANGED