@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.
@@ -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
- function claimDisabledDevtools() {
36
- if (typeof document === "undefined") return () => {
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
- let cancelled = false;
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
- ]).then(([devtools, react, reactDom, reactDomClient]) => {
52
- if (cancelled) return;
53
- unmount = devtools.mountOpenUIDevtools({
54
- React: react,
55
- ReactDOM: reactDom,
56
- ReactDOMClient: reactDomClient,
57
- loadReactLang: () => import("@openuidev/react-lang"),
58
- props: { enabled: false }
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
- }).catch(() => {
61
- });
62
- return () => unmount();
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
- if (scheduledByOpenUI && process.env.NODE_ENV === "development" && process.env.VITEST !== "true" && typeof document !== "undefined") {
65
- claimDisabledDevtools();
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
- useEffect(() => {
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 = Stack([${names.join(", ")}])
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 = Stack([${body}, ${names.join(", ")}])
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 useEffect2, useMemo as useMemo4, useRef as useRef3, useState } from "react";
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
- useEffect2(
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 useEffect6, useId, useMemo as useMemo5, useRef as useRef8, useState as useState6 } from "react";
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 useEffect3, useRef as useRef4, useState as useState2 } from "react";
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
- useEffect3(() => {
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 useEffect4, useLayoutEffect, useRef as useRef6, useState as useState4 } from "react";
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" ? useEffect4 : useLayoutEffect;
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
- useEffect4(() => {
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
- useEffect4(() => {
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 useEffect5, useRef as useRef7, useState as useState5 } from "react";
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
- useEffect5(() => {
2920
+ useEffect6(() => {
2836
2921
  input.current?.focus();
2837
2922
  input.current?.select();
2838
2923
  }, []);
2839
- useEffect5(() => {
2924
+ useEffect6(() => {
2840
2925
  setSearch(editor, { term, caseSensitive, current: 0 });
2841
2926
  }, [editor, term, caseSensitive]);
2842
- useEffect5(() => () => {
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
- useEffect6(() => {
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
- useEffect6(() => {
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
- useEffect6(() => {
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
- useEffect6(() => () => autosave?.flush(), [autosave]);
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
- useEffect6(() => {
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
- useEffect6(() => {
3741
+ useEffect7(() => {
3657
3742
  if (!editor || editor.isEditable === editable) return;
3658
3743
  editor.setEditable(editable);
3659
3744
  }, [editor, editable]);
3660
- useEffect6(() => {
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
- useEffect6(() => {
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
- useEffect6(() => {
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 = Stack([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")';
3941
- var EXAMPLE_EDIT = 'root = Stack([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")';
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 useEffect7, useMemo as useMemo6, useRef as useRef9, useState as useState8 } from "react";
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
- useEffect7(() => {
4226
+ useEffect8(() => {
4142
4227
  const map = waiters.current;
4143
4228
  return () => {
4144
4229
  map.forEach((resolve) => resolve({ choice: "reject" }));
@@ -67,7 +67,7 @@
67
67
 
68
68
 
69
69
 
70
- var _chunk3NVO336Dcjs = require('./chunk-3NVO336D.cjs');
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 = _chunk3NVO336Dcjs.ALL_EXPORT_FORMATS; exports.ComponentRegistry = _chunk3NVO336Dcjs.ComponentRegistry; exports.DOCUMENT_COMPONENT_DESCRIPTION = _chunk3NVO336Dcjs.DOCUMENT_COMPONENT_DESCRIPTION; exports.DocumentBridge = _chunk3NVO336Dcjs.DocumentBridge; exports.DocumentEditor = _chunk3NVO336Dcjs.DocumentEditor; exports.JuneDocumentContext = _chunk3NVO336Dcjs.JuneDocumentContext; exports.JuneDocumentEditorComponent = _chunk3NVO336Dcjs.JuneDocumentEditorComponent; exports.JuneError = _chunkG6YPSE6Jcjs.JuneError; exports.JuneErrorBoundary = _chunk3NVO336Dcjs.JuneErrorBoundary; exports.JuneRenderer = _chunk3NVO336Dcjs.JuneRenderer; exports.JuneRuntimeContext = _chunk3NVO336Dcjs.JuneRuntimeContext; exports.JuneThemeProvider = _chunk3NVO336Dcjs.JuneThemeProvider; exports.MarkdownText = _chunk3NVO336Dcjs.MarkdownText; exports.ToolApproval = _chunk3NVO336Dcjs.ToolApproval; exports.ToolApprovalList = _chunk3NVO336Dcjs.ToolApprovalList; exports.consumeStream = _chunk3NVO336Dcjs.consumeStream; exports.copyDocumentToClipboard = _chunk3NVO336Dcjs.copyDocumentToClipboard; exports.createActionHandler = _chunk3NVO336Dcjs.createActionHandler; exports.createComponentRegistry = _chunk3NVO336Dcjs.createComponentRegistry; exports.createDocumentStore = _chunk3NVO336Dcjs.createDocumentStore; exports.createJuneLibrary = _chunk3NVO336Dcjs.createJuneLibrary; exports.createLangGraphExtractor = _chunk3NVO336Dcjs.createLangGraphExtractor; exports.createTheme = _chunk3NVO336Dcjs.createTheme; exports.darkTheme = _chunk3NVO336Dcjs.darkTheme; exports.defaultParseActionEvent = _chunk3NVO336Dcjs.defaultParseActionEvent; exports.defaultToolApprovalLabels = _chunk3NVO336Dcjs.defaultToolApprovalLabels; exports.defineComponent = _chunk3NVO336Dcjs.defineComponent; exports.defineJuneAction = _chunk3NVO336Dcjs.defineJuneAction; exports.defineJuneComponent = _chunk3NVO336Dcjs.defineJuneComponent; exports.documentPromptOptions = _chunk3NVO336Dcjs.documentPromptOptions; exports.downloadResult = _chunk3NVO336Dcjs.downloadResult; exports.exportDocument = _chunk3NVO336Dcjs.exportDocument; exports.fetchStream = _chunk3NVO336Dcjs.fetchStream; exports.getDefaultDocumentStore = _chunk3NVO336Dcjs.getDefaultDocumentStore; exports.getDocumentEditorInstructions = _chunk3NVO336Dcjs.getDocumentEditorInstructions; exports.getDocumentEditorRules = _chunk3NVO336Dcjs.getDocumentEditorRules; exports.interruptToApprovalRequests = _chunk3NVO336Dcjs.interruptToApprovalRequests; exports.isDocumentEcho = _chunk3NVO336Dcjs.isDocumentEcho; exports.isJuneComponent = _chunk3NVO336Dcjs.isJuneComponent; exports.isJuneError = _chunkG6YPSE6Jcjs.isJuneError; exports.isThemeSet = _chunk3NVO336Dcjs.isThemeSet; exports.jsonFieldExtractor = _chunk3NVO336Dcjs.jsonFieldExtractor; exports.langGraphStreamOptions = _chunk3NVO336Dcjs.langGraphStreamOptions; exports.lightTheme = _chunk3NVO336Dcjs.lightTheme; exports.listDocumentExporters = _chunk3NVO336Dcjs.listDocumentExporters; exports.mergeDocuments = _chunk3NVO336Dcjs.mergeDocuments; exports.messageContentToText = _chunk3NVO336Dcjs.messageContentToText; exports.normalizeProgram = _chunk3NVO336Dcjs.normalizeProgram; exports.readDocumentFromProgram = _chunk3NVO336Dcjs.readDocumentFromProgram; exports.readLangGraphInterrupts = _chunk3NVO336Dcjs.readLangGraphInterrupts; exports.registerDocumentExporter = _chunk3NVO336Dcjs.registerDocumentExporter; exports.rememberDocumentEcho = _chunk3NVO336Dcjs.rememberDocumentEcho; exports.resolveMixedContent = _chunk3NVO336Dcjs.resolveMixedContent; exports.resolveThemeVars = _chunk3NVO336Dcjs.resolveThemeVars; exports.runAction = _chunk3NVO336Dcjs.runAction; exports.serializeDocumentsForAgent = _chunk3NVO336Dcjs.serializeDocumentsForAgent; exports.splitResponse = _chunk3NVO336Dcjs.splitResponse; exports.sseToText = _chunk3NVO336Dcjs.sseToText; exports.toAsyncIterable = _chunk3NVO336Dcjs.toAsyncIterable; exports.toJuneError = _chunkG6YPSE6Jcjs.toJuneError; exports.updateDocumentInProgram = _chunk3NVO336Dcjs.updateDocumentInProgram; exports.useDocumentBridge = _chunk3NVO336Dcjs.useDocumentBridge; exports.useDocumentOptions = _chunk3NVO336Dcjs.useDocumentOptions; exports.useJuneRuntime = _chunk3NVO336Dcjs.useJuneRuntime; exports.useJuneStream = _chunk3NVO336Dcjs.useJuneStream; exports.useJuneTheme = _chunk3NVO336Dcjs.useJuneTheme; exports.useRegistryLibrary = _chunk3NVO336Dcjs.useRegistryLibrary; exports.useResolvedTheme = _chunk3NVO336Dcjs.useResolvedTheme; exports.useToolApproval = _chunk3NVO336Dcjs.useToolApproval; exports.validateComponentDefinition = _chunk3NVO336Dcjs.validateComponentDefinition; exports.withDocumentEditor = _chunk3NVO336Dcjs.withDocumentEditor;
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;
@@ -68,7 +68,7 @@ import {
68
68
  useToolApproval,
69
69
  validateComponentDefinition,
70
70
  withDocumentEditor
71
- } from "./chunk-H26BMR5S.js";
71
+ } from "./chunk-JSRO5CRO.js";
72
72
  import {
73
73
  JuneError,
74
74
  isJuneError,
package/dist/index.cjs CHANGED
@@ -67,7 +67,7 @@
67
67
 
68
68
 
69
69
 
70
- var _chunk3NVO336Dcjs = require('./chunk-3NVO336D.cjs');
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
- var juneLibrary = _chunk3NVO336Dcjs.withDocumentEditor.call(void 0, _reactui.openuiLibrary);
90
- var defaultRegistry = _chunk3NVO336Dcjs.createComponentRegistry.call(void 0, { base: juneLibrary });
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 = _chunk3NVO336Dcjs.useRegistryLibrary.call(void 0, _nullishCoalesce(_optionalChain([instance, 'optionalAccess', _2 => _2.registry]), () => ( defaultRegistry)));
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, _chunk3NVO336Dcjs.JuneRenderer, { ...merged, library: _nullishCoalesce(library, () => ( registryLibrary)) });
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 = _chunk3NVO336Dcjs.createComponentRegistry.call(void 0, {
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 = _chunk3NVO336Dcjs.ALL_EXPORT_FORMATS; exports.ComponentRegistry = _chunk3NVO336Dcjs.ComponentRegistry; exports.DOCUMENT_COMPONENT_DESCRIPTION = _chunk3NVO336Dcjs.DOCUMENT_COMPONENT_DESCRIPTION; exports.DocumentBridge = _chunk3NVO336Dcjs.DocumentBridge; exports.DocumentEditor = _chunk3NVO336Dcjs.DocumentEditor; exports.JuneDocumentContext = _chunk3NVO336Dcjs.JuneDocumentContext; exports.JuneDocumentEditorComponent = _chunk3NVO336Dcjs.JuneDocumentEditorComponent; exports.JuneError = _chunkG6YPSE6Jcjs.JuneError; exports.JuneErrorBoundary = _chunk3NVO336Dcjs.JuneErrorBoundary; exports.JuneRenderer = _chunk3NVO336Dcjs.JuneRenderer; exports.JuneRuntimeContext = _chunk3NVO336Dcjs.JuneRuntimeContext; exports.JuneThemeProvider = _chunk3NVO336Dcjs.JuneThemeProvider; exports.JuneUI = JuneUI; exports.JuneUIProvider = JuneUIProvider; exports.MarkdownText = _chunk3NVO336Dcjs.MarkdownText; exports.ToolApproval = _chunk3NVO336Dcjs.ToolApproval; exports.ToolApprovalList = _chunk3NVO336Dcjs.ToolApprovalList; exports.consumeStream = _chunk3NVO336Dcjs.consumeStream; exports.copyDocumentToClipboard = _chunk3NVO336Dcjs.copyDocumentToClipboard; exports.createActionHandler = _chunk3NVO336Dcjs.createActionHandler; exports.createComponentRegistry = _chunk3NVO336Dcjs.createComponentRegistry; exports.createDocumentStore = _chunk3NVO336Dcjs.createDocumentStore; exports.createJuneLibrary = _chunk3NVO336Dcjs.createJuneLibrary; exports.createJuneUI = createJuneUI; exports.createLangGraphExtractor = _chunk3NVO336Dcjs.createLangGraphExtractor; exports.createTheme = _chunk3NVO336Dcjs.createTheme; exports.darkTheme = _chunk3NVO336Dcjs.darkTheme; exports.defaultParseActionEvent = _chunk3NVO336Dcjs.defaultParseActionEvent; exports.defaultRegistry = defaultRegistry; exports.defaultToolApprovalLabels = _chunk3NVO336Dcjs.defaultToolApprovalLabels; exports.defineComponent = _chunk3NVO336Dcjs.defineComponent; exports.defineJuneAction = _chunk3NVO336Dcjs.defineJuneAction; exports.defineJuneComponent = _chunk3NVO336Dcjs.defineJuneComponent; exports.documentPromptOptions = _chunk3NVO336Dcjs.documentPromptOptions; exports.downloadResult = _chunk3NVO336Dcjs.downloadResult; exports.exportDocument = _chunk3NVO336Dcjs.exportDocument; exports.fetchStream = _chunk3NVO336Dcjs.fetchStream; exports.getDefaultDocumentStore = _chunk3NVO336Dcjs.getDefaultDocumentStore; exports.getDocumentEditorInstructions = _chunk3NVO336Dcjs.getDocumentEditorInstructions; exports.getDocumentEditorRules = _chunk3NVO336Dcjs.getDocumentEditorRules; exports.interruptToApprovalRequests = _chunk3NVO336Dcjs.interruptToApprovalRequests; exports.isDocumentEcho = _chunk3NVO336Dcjs.isDocumentEcho; exports.isJuneComponent = _chunk3NVO336Dcjs.isJuneComponent; exports.isJuneError = _chunkG6YPSE6Jcjs.isJuneError; exports.isThemeSet = _chunk3NVO336Dcjs.isThemeSet; exports.jsonFieldExtractor = _chunk3NVO336Dcjs.jsonFieldExtractor; exports.juneLibrary = juneLibrary; exports.langGraphStreamOptions = _chunk3NVO336Dcjs.langGraphStreamOptions; exports.lightTheme = _chunk3NVO336Dcjs.lightTheme; exports.listDocumentExporters = _chunk3NVO336Dcjs.listDocumentExporters; exports.mergeDocuments = _chunk3NVO336Dcjs.mergeDocuments; exports.messageContentToText = _chunk3NVO336Dcjs.messageContentToText; exports.normalizeProgram = _chunk3NVO336Dcjs.normalizeProgram; exports.readDocumentFromProgram = _chunk3NVO336Dcjs.readDocumentFromProgram; exports.readLangGraphInterrupts = _chunk3NVO336Dcjs.readLangGraphInterrupts; exports.registerComponent = registerComponent; exports.registerDocumentExporter = _chunk3NVO336Dcjs.registerDocumentExporter; exports.rememberDocumentEcho = _chunk3NVO336Dcjs.rememberDocumentEcho; exports.resolveMixedContent = _chunk3NVO336Dcjs.resolveMixedContent; exports.resolveThemeVars = _chunk3NVO336Dcjs.resolveThemeVars; exports.runAction = _chunk3NVO336Dcjs.runAction; exports.serializeDocumentsForAgent = _chunk3NVO336Dcjs.serializeDocumentsForAgent; exports.splitResponse = _chunk3NVO336Dcjs.splitResponse; exports.sseToText = _chunk3NVO336Dcjs.sseToText; exports.toAsyncIterable = _chunk3NVO336Dcjs.toAsyncIterable; exports.toJuneError = _chunkG6YPSE6Jcjs.toJuneError; exports.unregisterComponent = unregisterComponent; exports.updateDocumentInProgram = _chunk3NVO336Dcjs.updateDocumentInProgram; exports.useDocumentBridge = _chunk3NVO336Dcjs.useDocumentBridge; exports.useDocumentOptions = _chunk3NVO336Dcjs.useDocumentOptions; exports.useJuneRuntime = _chunk3NVO336Dcjs.useJuneRuntime; exports.useJuneStream = _chunk3NVO336Dcjs.useJuneStream; exports.useJuneTheme = _chunk3NVO336Dcjs.useJuneTheme; exports.useJuneUIContext = useJuneUIContext; exports.useRegistryLibrary = _chunk3NVO336Dcjs.useRegistryLibrary; exports.useResolvedTheme = _chunk3NVO336Dcjs.useResolvedTheme; exports.useToolApproval = _chunk3NVO336Dcjs.useToolApproval; exports.validateComponentDefinition = _chunk3NVO336Dcjs.validateComponentDefinition; exports.withDocumentEditor = _chunk3NVO336Dcjs.withDocumentEditor;
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: every OpenUI component plus DocumentEditor.
83
- * This is the composition root: features contribute components here, the engine stays generic.
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: every OpenUI component plus DocumentEditor.
83
- * This is the composition root: features contribute components here, the engine stays generic.
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-H26BMR5S.js";
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
- var juneLibrary = withDocumentEditor(openuiLibrary);
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);
@@ -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's devtools logo appears | Import June before any other OpenUI package in your entry. |
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@june-ai/june-ui",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "description": "A modular React SDK for generative UI: Markdown, streaming OpenUI Lang, custom components and documents",
5
5
  "license": "MIT",
6
6
  "type": "module",