@object-ui/app-shell 5.4.1 → 6.0.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/CHANGELOG.md +69 -0
- package/dist/console/home/HomeLayout.js +5 -5
- package/dist/console/organizations/OrganizationsPage.js +2 -3
- package/dist/console/organizations/resolveHomeUrl.d.ts +19 -0
- package/dist/console/organizations/resolveHomeUrl.js +21 -0
- package/dist/layout/ConsoleChatbotFab.d.ts +3 -0
- package/dist/layout/ConsoleChatbotFab.js +30 -0
- package/dist/layout/ConsoleFloatingChatbot.d.ts +3 -1
- package/dist/layout/ConsoleFloatingChatbot.js +18 -6
- package/dist/layout/ConsoleLayout.js +6 -5
- package/package.json +25 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,74 @@
|
|
|
1
1
|
# @object-ui/app-shell — Changelog
|
|
2
2
|
|
|
3
|
+
## 6.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 168a4d0: ai
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 451bbee: **HITL conversation loop:** `useHitlInChat` now accepts a
|
|
12
|
+
`continueConversation(prompt, ctx)` callback. After the operator approves
|
|
13
|
+
or rejects a tool call from inline chat buttons, the hook synthesises a
|
|
14
|
+
short follow-up user prompt (tagged `[HITL pa_xxx]`, with the executed
|
|
15
|
+
result or rejection reason) and invokes the callback so the LLM
|
|
16
|
+
continues the conversation with full awareness of the outcome.
|
|
17
|
+
|
|
18
|
+
`ConsoleFloatingChatbot` wires this callback to `useObjectChat`'s
|
|
19
|
+
`sendMessage`, closing the loop end-to-end. Execution failures stay
|
|
20
|
+
visible in the inline status badge but do NOT continue automatically —
|
|
21
|
+
the operator decides next steps.
|
|
22
|
+
|
|
23
|
+
No framework changes required. Internal `idMap` now also tracks the
|
|
24
|
+
tool name so the synthesised prompt is human-readable. New test suite
|
|
25
|
+
`useHitlInChat.test.tsx` covers approve/reject/failed/no-callback
|
|
26
|
+
branches.
|
|
27
|
+
|
|
28
|
+
- Updated dependencies [451bbee]
|
|
29
|
+
- @object-ui/plugin-chatbot@6.0.0
|
|
30
|
+
- @object-ui/types@6.0.0
|
|
31
|
+
- @object-ui/core@6.0.0
|
|
32
|
+
- @object-ui/i18n@6.0.0
|
|
33
|
+
- @object-ui/react@6.0.0
|
|
34
|
+
- @object-ui/components@6.0.0
|
|
35
|
+
- @object-ui/fields@6.0.0
|
|
36
|
+
- @object-ui/layout@6.0.0
|
|
37
|
+
- @object-ui/data-objectstack@6.0.0
|
|
38
|
+
- @object-ui/auth@6.0.0
|
|
39
|
+
- @object-ui/permissions@6.0.0
|
|
40
|
+
- @object-ui/plugin-calendar@6.0.0
|
|
41
|
+
- @object-ui/plugin-charts@6.0.0
|
|
42
|
+
- @object-ui/plugin-dashboard@6.0.0
|
|
43
|
+
- @object-ui/plugin-designer@6.0.0
|
|
44
|
+
- @object-ui/plugin-detail@6.0.0
|
|
45
|
+
- @object-ui/plugin-form@6.0.0
|
|
46
|
+
- @object-ui/plugin-grid@6.0.0
|
|
47
|
+
- @object-ui/plugin-kanban@6.0.0
|
|
48
|
+
- @object-ui/plugin-list@6.0.0
|
|
49
|
+
- @object-ui/plugin-report@6.0.0
|
|
50
|
+
- @object-ui/plugin-view@6.0.0
|
|
51
|
+
- @object-ui/collaboration@6.0.0
|
|
52
|
+
- @object-ui/providers@6.0.0
|
|
53
|
+
|
|
54
|
+
## 5.4.2
|
|
55
|
+
|
|
56
|
+
### Patch Changes
|
|
57
|
+
|
|
58
|
+
- 3efeecf: ai
|
|
59
|
+
- @object-ui/types@5.4.2
|
|
60
|
+
- @object-ui/core@5.4.2
|
|
61
|
+
- @object-ui/i18n@5.4.2
|
|
62
|
+
- @object-ui/react@5.4.2
|
|
63
|
+
- @object-ui/components@5.4.2
|
|
64
|
+
- @object-ui/fields@5.4.2
|
|
65
|
+
- @object-ui/layout@5.4.2
|
|
66
|
+
- @object-ui/data-objectstack@5.4.2
|
|
67
|
+
- @object-ui/auth@5.4.2
|
|
68
|
+
- @object-ui/permissions@5.4.2
|
|
69
|
+
- @object-ui/collaboration@5.4.2
|
|
70
|
+
- @object-ui/providers@5.4.2
|
|
71
|
+
|
|
3
72
|
## 5.4.1
|
|
4
73
|
|
|
5
74
|
### Patch Changes
|
|
@@ -8,13 +8,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
import { useEffect
|
|
11
|
+
import { useEffect } from 'react';
|
|
12
12
|
import { useNavigationContext } from '../../context/NavigationContext';
|
|
13
13
|
import { AppHeader } from '../../layout/AppHeader';
|
|
14
14
|
import { useDiscovery } from '@object-ui/react';
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
|
|
15
|
+
// Lightweight FAB stub — the heavy chat chunk graph only downloads on
|
|
16
|
+
// first hover/click. See ../../layout/ConsoleChatbotFab.tsx.
|
|
17
|
+
import { ConsoleChatbotFab } from '../../layout/ConsoleChatbotFab';
|
|
18
18
|
export function HomeLayout({ children }) {
|
|
19
19
|
const { setContext } = useNavigationContext();
|
|
20
20
|
const { isAiEnabled } = useDiscovery();
|
|
@@ -26,5 +26,5 @@ export function HomeLayout({ children }) {
|
|
|
26
26
|
useEffect(() => {
|
|
27
27
|
setContext('home');
|
|
28
28
|
}, [setContext]);
|
|
29
|
-
return (_jsxs("div", { className: "flex min-h-svh w-full flex-col bg-background", "data-testid": "home-layout", children: [_jsx("header", { className: "sticky top-0 z-30 flex h-14 w-full shrink-0 items-center gap-2 border-b bg-background px-2 sm:px-4", children: _jsx(AppHeader, { variant: "home" }) }), _jsx("main", { className: "flex-1 min-w-0 overflow-auto pb-20 sm:pb-0", children: children }), showChatbot &&
|
|
29
|
+
return (_jsxs("div", { className: "flex min-h-svh w-full flex-col bg-background", "data-testid": "home-layout", children: [_jsx("header", { className: "sticky top-0 z-30 flex h-14 w-full shrink-0 items-center gap-2 border-b bg-background px-2 sm:px-4", children: _jsx(AppHeader, { variant: "home" }) }), _jsx("main", { className: "flex-1 min-w-0 overflow-auto pb-20 sm:pb-0", children: children }), showChatbot && _jsx(ConsoleChatbotFab, { appLabel: "Workspace", objects: [] })] }));
|
|
30
30
|
}
|
|
@@ -14,6 +14,7 @@ import { useAuth } from '@object-ui/auth';
|
|
|
14
14
|
import { useObjectTranslation } from '@object-ui/i18n';
|
|
15
15
|
import { useNavigate } from 'react-router-dom';
|
|
16
16
|
import { CreateWorkspaceDialog } from './CreateWorkspaceDialog';
|
|
17
|
+
import { resolveHomeUrl } from './resolveHomeUrl';
|
|
17
18
|
function getOrgInitials(name) {
|
|
18
19
|
return name
|
|
19
20
|
.split(/[\s_-]+/)
|
|
@@ -42,9 +43,7 @@ export function OrganizationsPage() {
|
|
|
42
43
|
if (org.id !== activeOrganization?.id) {
|
|
43
44
|
await switchOrganization(org.id);
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
-
const normalizedBase = base.endsWith('/') ? base : `${base}/`;
|
|
47
|
-
window.location.href = `${window.location.origin}${normalizedBase}home`;
|
|
46
|
+
window.location.href = resolveHomeUrl();
|
|
48
47
|
}
|
|
49
48
|
catch (err) {
|
|
50
49
|
console.error('[OrganizationsPage] Failed to switch:', err);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the absolute URL of the console "home" route used after switching
|
|
3
|
+
* the active organization.
|
|
4
|
+
*
|
|
5
|
+
* Earlier versions concatenated `import.meta.env.BASE_URL` to
|
|
6
|
+
* `window.location.origin` ("`${origin}${base}home`"). That was correct for
|
|
7
|
+
* apps built with an absolute Vite base (e.g. `base: '/_console/'`), but
|
|
8
|
+
* silently broken for portable builds that ship with `base: './'` — the
|
|
9
|
+
* resulting URL `https://host./home` has a trailing-dot host (`host.` is a
|
|
10
|
+
* fully-qualified-domain marker the browser keeps) AND drops the mount
|
|
11
|
+
* prefix, landing the user on a 404.
|
|
12
|
+
*
|
|
13
|
+
* The fix is to resolve `home` against `document.baseURI`, which already
|
|
14
|
+
* accounts for any `<base href="...">` injected by the host page. This works
|
|
15
|
+
* for both `<base href="/_console/">` (tenant deployments) and
|
|
16
|
+
* `<base href="/">` (root-mount deployments), and also for hosts that omit
|
|
17
|
+
* `<base>` entirely (falls back to the current document URL's directory).
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveHomeUrl(baseURI?: string): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the absolute URL of the console "home" route used after switching
|
|
3
|
+
* the active organization.
|
|
4
|
+
*
|
|
5
|
+
* Earlier versions concatenated `import.meta.env.BASE_URL` to
|
|
6
|
+
* `window.location.origin` ("`${origin}${base}home`"). That was correct for
|
|
7
|
+
* apps built with an absolute Vite base (e.g. `base: '/_console/'`), but
|
|
8
|
+
* silently broken for portable builds that ship with `base: './'` — the
|
|
9
|
+
* resulting URL `https://host./home` has a trailing-dot host (`host.` is a
|
|
10
|
+
* fully-qualified-domain marker the browser keeps) AND drops the mount
|
|
11
|
+
* prefix, landing the user on a 404.
|
|
12
|
+
*
|
|
13
|
+
* The fix is to resolve `home` against `document.baseURI`, which already
|
|
14
|
+
* accounts for any `<base href="...">` injected by the host page. This works
|
|
15
|
+
* for both `<base href="/_console/">` (tenant deployments) and
|
|
16
|
+
* `<base href="/">` (root-mount deployments), and also for hosts that omit
|
|
17
|
+
* `<base>` entirely (falls back to the current document URL's directory).
|
|
18
|
+
*/
|
|
19
|
+
export function resolveHomeUrl(baseURI = document.baseURI) {
|
|
20
|
+
return new URL('home', baseURI).toString();
|
|
21
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* ConsoleChatbotFab
|
|
4
|
+
*
|
|
5
|
+
* Lightweight FAB proxy for the console's floating AI assistant.
|
|
6
|
+
*
|
|
7
|
+
* Before any interaction this component renders a small, zero-dependency
|
|
8
|
+
* button (~1KB). On first hover/focus it speculatively warms the heavy
|
|
9
|
+
* chat chunk graph (plugin-chatbot → streamdown → shiki → mermaid →
|
|
10
|
+
* @ai-sdk, ~20MB); on first click it lazy-mounts `<ConsoleFloatingChatbot
|
|
11
|
+
* defaultOpen />` which takes over (its own FAB replaces this stub).
|
|
12
|
+
*
|
|
13
|
+
* Net effect: every console page-load no longer pays the chat-bundle
|
|
14
|
+
* cost just for the FAB to be visible — those bytes only download when
|
|
15
|
+
* the user actually opens (or hovers) the assistant.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
import { Suspense, lazy, useState } from 'react';
|
|
20
|
+
const ConsoleFloatingChatbot = lazy(() => import('./ConsoleFloatingChatbot'));
|
|
21
|
+
const prefetchChatbot = () => {
|
|
22
|
+
void import('./ConsoleFloatingChatbot');
|
|
23
|
+
};
|
|
24
|
+
export function ConsoleChatbotFab(props) {
|
|
25
|
+
const [armed, setArmed] = useState(false);
|
|
26
|
+
if (armed) {
|
|
27
|
+
return (_jsx(Suspense, { fallback: null, children: _jsx(ConsoleFloatingChatbot, { ...props, defaultOpen: true }) }));
|
|
28
|
+
}
|
|
29
|
+
return (_jsx("button", { type: "button", "aria-label": `Open ${props.appLabel} assistant`, onClick: () => setArmed(true), onMouseEnter: prefetchChatbot, onFocus: prefetchChatbot, className: "fixed bottom-6 right-6 z-50 flex h-14 w-14 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-lg ring-1 ring-primary/20 transition-transform hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2", children: _jsxs("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M12 3v3" }), _jsx("path", { d: "M12 18v3" }), _jsx("path", { d: "M5.6 5.6l2.1 2.1" }), _jsx("path", { d: "M16.3 16.3l2.1 2.1" }), _jsx("path", { d: "M3 12h3" }), _jsx("path", { d: "M18 12h3" }), _jsx("path", { d: "M5.6 18.4l2.1-2.1" }), _jsx("path", { d: "M16.3 7.7l2.1-2.1" }), _jsx("circle", { cx: "12", cy: "12", r: "3" })] }) }));
|
|
30
|
+
}
|
|
@@ -12,6 +12,8 @@ export interface ConsoleFloatingChatbotProps {
|
|
|
12
12
|
apiBase?: string;
|
|
13
13
|
/** Default agent name to select on first render. */
|
|
14
14
|
defaultAgent?: string;
|
|
15
|
+
/** Whether the floating panel should open immediately on mount. */
|
|
16
|
+
defaultOpen?: boolean;
|
|
15
17
|
}
|
|
16
|
-
export default function ConsoleFloatingChatbot({ appLabel, objects, apiBase: apiBaseProp, defaultAgent: defaultAgentProp, }: ConsoleFloatingChatbotProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export default function ConsoleFloatingChatbot({ appLabel, objects, apiBase: apiBaseProp, defaultAgent: defaultAgentProp, defaultOpen, }: ConsoleFloatingChatbotProps): import("react/jsx-runtime").JSX.Element;
|
|
17
19
|
export {};
|
|
@@ -12,7 +12,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
12
12
|
* @module
|
|
13
13
|
*/
|
|
14
14
|
import React from 'react';
|
|
15
|
-
import { FloatingChatbot, useObjectChat, useAgents, } from '@object-ui/plugin-chatbot';
|
|
15
|
+
import { FloatingChatbot, useObjectChat, useAgents, useHitlInChat, } from '@object-ui/plugin-chatbot';
|
|
16
16
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@object-ui/components';
|
|
17
17
|
const DEFAULT_AI_PATH = '/api/v1/ai';
|
|
18
18
|
function resolveApiBase(explicit) {
|
|
@@ -25,7 +25,7 @@ function resolveApiBase(explicit) {
|
|
|
25
25
|
const serverUrl = env.VITE_SERVER_URL ?? '';
|
|
26
26
|
return `${serverUrl.replace(/\/$/, '')}${DEFAULT_AI_PATH}`;
|
|
27
27
|
}
|
|
28
|
-
function ChatbotInner({ appLabel, objects, agents, agentsLoading, agentsError, activeAgent, onAgentChange, chatApi, }) {
|
|
28
|
+
function ChatbotInner({ appLabel, objects, agents, agentsLoading, agentsError, activeAgent, onAgentChange, chatApi, apiBase, defaultOpen = false, }) {
|
|
29
29
|
const objectNames = objects.map((o) => o.label || o.name).join(', ');
|
|
30
30
|
const activeAgentLabel = React.useMemo(() => {
|
|
31
31
|
const found = agents.find((a) => a.name === activeAgent);
|
|
@@ -59,10 +59,22 @@ function ChatbotInner({ appLabel, objects, agents, agentsLoading, agentsError, a
|
|
|
59
59
|
: "Thanks for your message! I'm here to help you navigate and manage your data.",
|
|
60
60
|
autoResponseDelay: 600,
|
|
61
61
|
});
|
|
62
|
+
// HITL bridge — turns the pending-approval tool result envelope from the
|
|
63
|
+
// framework's action-tools.ts into inline approve/reject buttons that talk
|
|
64
|
+
// directly to /api/v1/ai/pending-actions/:id/{approve,reject}. After a
|
|
65
|
+
// successful decision the hook synthesises a short follow-up user message
|
|
66
|
+
// so the LLM continues the conversation aware of the outcome.
|
|
67
|
+
const hitl = useHitlInChat({
|
|
68
|
+
messages: messages,
|
|
69
|
+
apiBase,
|
|
70
|
+
continueConversation: (prompt) => {
|
|
71
|
+
sendMessage(prompt);
|
|
72
|
+
},
|
|
73
|
+
});
|
|
62
74
|
const headerExtra = agents.length > 0 ? (_jsxs(Select, { value: activeAgent, onValueChange: onAgentChange, disabled: agentsLoading, children: [_jsx(SelectTrigger, { className: "h-7 w-[180px] text-xs", "data-testid": "floating-chatbot-agent-picker", children: _jsx(SelectValue, { placeholder: "Choose agent..." }) }), _jsx(SelectContent, { align: "end", children: agents.map((agent) => (_jsxs(SelectItem, { value: agent.name, className: "text-xs", children: [_jsx("span", { className: "font-medium", children: agent.label }), agent.description ? (_jsx("span", { className: "block text-muted-foreground text-[10px] truncate max-w-[220px]", children: agent.description })) : null] }, agent.name))) })] })) : null;
|
|
63
75
|
return (_jsx(FloatingChatbot, { floatingConfig: {
|
|
64
76
|
position: 'bottom-right',
|
|
65
|
-
defaultOpen
|
|
77
|
+
defaultOpen,
|
|
66
78
|
panelWidth: 420,
|
|
67
79
|
panelHeight: 560,
|
|
68
80
|
title: `${appLabel} Assistant`,
|
|
@@ -71,9 +83,9 @@ function ChatbotInner({ appLabel, objects, agents, agentsLoading, agentsError, a
|
|
|
71
83
|
? `Ask ${activeAgentLabel}...`
|
|
72
84
|
: agentsLoading
|
|
73
85
|
? 'Loading agents...'
|
|
74
|
-
: 'Ask anything...', onSendMessage: (content) => sendMessage(content), onClear: clear, onStop: isLoading ? stop : undefined, onReload: reload, isLoading: isLoading, error: error, enableMarkdown: true }));
|
|
86
|
+
: 'Ask anything...', onSendMessage: (content) => sendMessage(content), onClear: clear, onStop: isLoading ? stop : undefined, onReload: reload, isLoading: isLoading, error: error, enableMarkdown: true, onToolApprove: hitl.decide, toolDecisions: hitl.decisions, toolApproveLabel: "Approve & run", toolDenyLabel: "Reject", toolDenyReason: "Operator rejected from chat" }));
|
|
75
87
|
}
|
|
76
|
-
export default function ConsoleFloatingChatbot({ appLabel, objects, apiBase: apiBaseProp, defaultAgent: defaultAgentProp, }) {
|
|
88
|
+
export default function ConsoleFloatingChatbot({ appLabel, objects, apiBase: apiBaseProp, defaultAgent: defaultAgentProp, defaultOpen = false, }) {
|
|
77
89
|
const apiBase = React.useMemo(() => resolveApiBase(apiBaseProp), [apiBaseProp]);
|
|
78
90
|
const env = import.meta.env ?? {};
|
|
79
91
|
const envDefaultAgent = env.VITE_AI_DEFAULT_AGENT;
|
|
@@ -92,5 +104,5 @@ export default function ConsoleFloatingChatbot({ appLabel, objects, apiBase: api
|
|
|
92
104
|
// `key` forces a clean remount whenever the active agent (and therefore the
|
|
93
105
|
// chat API URL) changes — required because `useObjectChat` locks its mode
|
|
94
106
|
// (api vs local) on first render.
|
|
95
|
-
return (_jsx(ChatbotInner, { appLabel: appLabel, objects: objects, agents: agents, agentsLoading: agentsLoading, agentsError: agentsError, activeAgent: activeAgent, onAgentChange: setActiveAgent, chatApi: chatApi }, chatApi ?? 'local'));
|
|
107
|
+
return (_jsx(ChatbotInner, { appLabel: appLabel, objects: objects, agents: agents, agentsLoading: agentsLoading, agentsError: agentsError, activeAgent: activeAgent, onAgentChange: setActiveAgent, chatApi: chatApi, apiBase: apiBase, defaultOpen: defaultOpen }, chatApi ?? 'local'));
|
|
96
108
|
}
|
|
@@ -8,12 +8,13 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
8
8
|
* Sets navigation context to 'app' for app-specific routes.
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
import { useEffect
|
|
11
|
+
import { useEffect } from 'react';
|
|
12
12
|
import { AppShell } from '@object-ui/layout';
|
|
13
13
|
import { useDiscovery } from '@object-ui/react';
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
|
|
14
|
+
// Lightweight FAB stub — the heavy chat chunk graph (plugin-chatbot,
|
|
15
|
+
// shiki, streamdown, mermaid, @ai-sdk, ~20MB) only downloads on first
|
|
16
|
+
// hover/click. See ConsoleChatbotFab.tsx.
|
|
17
|
+
import { ConsoleChatbotFab } from './ConsoleChatbotFab';
|
|
17
18
|
import { UnifiedSidebar } from './UnifiedSidebar';
|
|
18
19
|
import { AppHeader } from './AppHeader';
|
|
19
20
|
import { MobileViewSwitcherProvider } from './MobileViewSwitcherContext';
|
|
@@ -50,5 +51,5 @@ export function ConsoleLayout({ children, activeAppName, activeApp, onAppChange,
|
|
|
50
51
|
? `${resolveI18nLabel(activeApp.label)} — ObjectStack Console`
|
|
51
52
|
: undefined,
|
|
52
53
|
}
|
|
53
|
-
: undefined, children: [_jsx(ConsoleLayoutInner, { children: children }), showChatbot && (_jsx(
|
|
54
|
+
: undefined, children: [_jsx(ConsoleLayoutInner, { children: children }), showChatbot && (_jsx(ConsoleChatbotFab, { appLabel: appLabel, objects: objects }))] }) }));
|
|
54
55
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@object-ui/app-shell",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Minimal application shell for ObjectUI - framework-agnostic rendering engine",
|
|
@@ -28,35 +28,35 @@
|
|
|
28
28
|
"@sentry/react": "^8.55.2",
|
|
29
29
|
"lucide-react": "^1.16.0",
|
|
30
30
|
"sonner": "^2.0.7",
|
|
31
|
-
"@object-ui/auth": "
|
|
32
|
-
"@object-ui/collaboration": "
|
|
33
|
-
"@object-ui/components": "
|
|
34
|
-
"@object-ui/core": "
|
|
35
|
-
"@object-ui/data-objectstack": "
|
|
36
|
-
"@object-ui/fields": "
|
|
37
|
-
"@object-ui/i18n": "
|
|
38
|
-
"@object-ui/layout": "
|
|
39
|
-
"@object-ui/permissions": "
|
|
40
|
-
"@object-ui/providers": "
|
|
41
|
-
"@object-ui/react": "
|
|
42
|
-
"@object-ui/types": "
|
|
31
|
+
"@object-ui/auth": "6.0.0",
|
|
32
|
+
"@object-ui/collaboration": "6.0.0",
|
|
33
|
+
"@object-ui/components": "6.0.0",
|
|
34
|
+
"@object-ui/core": "6.0.0",
|
|
35
|
+
"@object-ui/data-objectstack": "6.0.0",
|
|
36
|
+
"@object-ui/fields": "6.0.0",
|
|
37
|
+
"@object-ui/i18n": "6.0.0",
|
|
38
|
+
"@object-ui/layout": "6.0.0",
|
|
39
|
+
"@object-ui/permissions": "6.0.0",
|
|
40
|
+
"@object-ui/providers": "6.0.0",
|
|
41
|
+
"@object-ui/react": "6.0.0",
|
|
42
|
+
"@object-ui/types": "6.0.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"react": "^18.0.0 || ^19.0.0",
|
|
46
46
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
47
47
|
"react-router-dom": "^6.0.0 || ^7.0.0",
|
|
48
|
-
"@object-ui/plugin-calendar": "^
|
|
49
|
-
"@object-ui/plugin-charts": "^
|
|
50
|
-
"@object-ui/plugin-chatbot": "^
|
|
51
|
-
"@object-ui/plugin-dashboard": "^
|
|
52
|
-
"@object-ui/plugin-designer": "^
|
|
53
|
-
"@object-ui/plugin-detail": "^
|
|
54
|
-
"@object-ui/plugin-form": "^
|
|
55
|
-
"@object-ui/plugin-grid": "^
|
|
56
|
-
"@object-ui/plugin-kanban": "^
|
|
57
|
-
"@object-ui/plugin-list": "^
|
|
58
|
-
"@object-ui/plugin-report": "^
|
|
59
|
-
"@object-ui/plugin-view": "^
|
|
48
|
+
"@object-ui/plugin-calendar": "^6.0.0",
|
|
49
|
+
"@object-ui/plugin-charts": "^6.0.0",
|
|
50
|
+
"@object-ui/plugin-chatbot": "^6.0.0",
|
|
51
|
+
"@object-ui/plugin-dashboard": "^6.0.0",
|
|
52
|
+
"@object-ui/plugin-designer": "^6.0.0",
|
|
53
|
+
"@object-ui/plugin-detail": "^6.0.0",
|
|
54
|
+
"@object-ui/plugin-form": "^6.0.0",
|
|
55
|
+
"@object-ui/plugin-grid": "^6.0.0",
|
|
56
|
+
"@object-ui/plugin-kanban": "^6.0.0",
|
|
57
|
+
"@object-ui/plugin-list": "^6.0.0",
|
|
58
|
+
"@object-ui/plugin-report": "^6.0.0",
|
|
59
|
+
"@object-ui/plugin-view": "^6.0.0"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@types/node": "^25.9.0",
|