@creezio/shell-ui 0.22.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/README.md +336 -0
- package/dist/adapters/nav-shell.d.ts +54 -0
- package/dist/adapters/nav-shell.d.ts.map +1 -0
- package/dist/adapters/nav-shell.js +112 -0
- package/dist/adapters/nav-shell.js.map +1 -0
- package/dist/brand.d.ts +64 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +59 -0
- package/dist/brand.js.map +1 -0
- package/dist/core-nav.d.ts +17 -0
- package/dist/core-nav.d.ts.map +1 -0
- package/dist/core-nav.js +40 -0
- package/dist/core-nav.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-scopes.d.ts +24 -0
- package/dist/lib/api-scopes.d.ts.map +1 -0
- package/dist/lib/api-scopes.js +78 -0
- package/dist/lib/api-scopes.js.map +1 -0
- package/dist/lib/catalog-suspense-key.d.ts +3 -0
- package/dist/lib/catalog-suspense-key.d.ts.map +1 -0
- package/dist/lib/catalog-suspense-key.js +12 -0
- package/dist/lib/catalog-suspense-key.js.map +1 -0
- package/dist/lib/data-changed.d.ts +51 -0
- package/dist/lib/data-changed.d.ts.map +1 -0
- package/dist/lib/data-changed.js +227 -0
- package/dist/lib/data-changed.js.map +1 -0
- package/dist/lib/desktop-home-path.d.ts +14 -0
- package/dist/lib/desktop-home-path.d.ts.map +1 -0
- package/dist/lib/desktop-home-path.js +29 -0
- package/dist/lib/desktop-home-path.js.map +1 -0
- package/dist/lib/geo-distance.d.ts +6 -0
- package/dist/lib/geo-distance.d.ts.map +1 -0
- package/dist/lib/geo-distance.js +27 -0
- package/dist/lib/geo-distance.js.map +1 -0
- package/dist/lib/img.d.ts +2 -0
- package/dist/lib/img.d.ts.map +1 -0
- package/dist/lib/img.js +40 -0
- package/dist/lib/img.js.map +1 -0
- package/dist/lib/keepalive-eviction.d.ts +14 -0
- package/dist/lib/keepalive-eviction.d.ts.map +1 -0
- package/dist/lib/keepalive-eviction.js +44 -0
- package/dist/lib/keepalive-eviction.js.map +1 -0
- package/dist/lib/ops-track.d.ts +29 -0
- package/dist/lib/ops-track.d.ts.map +1 -0
- package/dist/lib/ops-track.js +37 -0
- package/dist/lib/ops-track.js.map +1 -0
- package/dist/lib/optimize-cover-url.d.ts +10 -0
- package/dist/lib/optimize-cover-url.d.ts.map +1 -0
- package/dist/lib/optimize-cover-url.js +80 -0
- package/dist/lib/optimize-cover-url.js.map +1 -0
- package/dist/lib/page-trails.d.ts +9 -0
- package/dist/lib/page-trails.d.ts.map +1 -0
- package/dist/lib/page-trails.js +20 -0
- package/dist/lib/page-trails.js.map +1 -0
- package/dist/lib/public-origin.d.ts +32 -0
- package/dist/lib/public-origin.d.ts.map +1 -0
- package/dist/lib/public-origin.js +125 -0
- package/dist/lib/public-origin.js.map +1 -0
- package/dist/lib/server-incident.d.ts +12 -0
- package/dist/lib/server-incident.d.ts.map +1 -0
- package/dist/lib/server-incident.js +72 -0
- package/dist/lib/server-incident.js.map +1 -0
- package/dist/lib/tab-document-url.d.ts +13 -0
- package/dist/lib/tab-document-url.d.ts.map +1 -0
- package/dist/lib/tab-document-url.js +60 -0
- package/dist/lib/tab-document-url.js.map +1 -0
- package/dist/lib/utils.d.ts +20 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +87 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/nav-catalog.d.ts +97 -0
- package/dist/nav-catalog.d.ts.map +1 -0
- package/dist/nav-catalog.js +282 -0
- package/dist/nav-catalog.js.map +1 -0
- package/dist/registry.d.ts +11 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +60 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist-cjs/adapters/nav-shell.js +115 -0
- package/dist-cjs/adapters/nav-shell.js.map +1 -0
- package/dist-cjs/brand.js +66 -0
- package/dist-cjs/brand.js.map +1 -0
- package/dist-cjs/core-nav.js +43 -0
- package/dist-cjs/core-nav.js.map +1 -0
- package/dist-cjs/index.js +95 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/lib/api-scopes.js +86 -0
- package/dist-cjs/lib/api-scopes.js.map +1 -0
- package/dist-cjs/lib/catalog-suspense-key.js +15 -0
- package/dist-cjs/lib/catalog-suspense-key.js.map +1 -0
- package/dist-cjs/lib/data-changed.js +236 -0
- package/dist-cjs/lib/data-changed.js.map +1 -0
- package/dist-cjs/lib/desktop-home-path.js +34 -0
- package/dist-cjs/lib/desktop-home-path.js.map +1 -0
- package/dist-cjs/lib/geo-distance.js +30 -0
- package/dist-cjs/lib/geo-distance.js.map +1 -0
- package/dist-cjs/lib/img.js +43 -0
- package/dist-cjs/lib/img.js.map +1 -0
- package/dist-cjs/lib/keepalive-eviction.js +49 -0
- package/dist-cjs/lib/keepalive-eviction.js.map +1 -0
- package/dist-cjs/lib/ops-track.js +41 -0
- package/dist-cjs/lib/ops-track.js.map +1 -0
- package/dist-cjs/lib/optimize-cover-url.js +83 -0
- package/dist-cjs/lib/optimize-cover-url.js.map +1 -0
- package/dist-cjs/lib/page-trails.js +25 -0
- package/dist-cjs/lib/page-trails.js.map +1 -0
- package/dist-cjs/lib/public-origin.js +130 -0
- package/dist-cjs/lib/public-origin.js.map +1 -0
- package/dist-cjs/lib/server-incident.js +75 -0
- package/dist-cjs/lib/server-incident.js.map +1 -0
- package/dist-cjs/lib/tab-document-url.js +65 -0
- package/dist-cjs/lib/tab-document-url.js.map +1 -0
- package/dist-cjs/lib/utils.js +97 -0
- package/dist-cjs/lib/utils.js.map +1 -0
- package/dist-cjs/nav-catalog.js +293 -0
- package/dist-cjs/nav-catalog.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/registry.js +64 -0
- package/dist-cjs/registry.js.map +1 -0
- package/dist-cjs/types.js +3 -0
- package/dist-cjs/types.js.map +1 -0
- package/package.json +163 -0
- package/ui/app-error-boundary.tsx +59 -0
- package/ui/data-table.tsx +121 -0
- package/ui/desktop/auth-window-chrome.tsx +51 -0
- package/ui/desktop/desktop-bridge.tsx +87 -0
- package/ui/desktop/external-site-slot.tsx +313 -0
- package/ui/desktop/external-site-surface.ts +58 -0
- package/ui/desktop/site-link.tsx +105 -0
- package/ui/desktop/window-chrome-controls.tsx +5 -0
- package/ui/desktop-types.ts +30 -0
- package/ui/faceted-filters.tsx +119 -0
- package/ui/global-search-host.ts +20 -0
- package/ui/global-search.tsx +66 -0
- package/ui/index.ts +178 -0
- package/ui/kit.ts +30 -0
- package/ui/layout/app-shell.tsx +58 -0
- package/ui/layout/desktop-update-banner.tsx +100 -0
- package/ui/layout/entity-header.tsx +44 -0
- package/ui/layout/native-os-nav.ts +104 -0
- package/ui/layout/nav-catalog-loader.tsx +98 -0
- package/ui/layout/nav-icons.ts +67 -0
- package/ui/layout/page-chrome.tsx +90 -0
- package/ui/layout/page-toolbar-context.tsx +82 -0
- package/ui/layout/sandbox-banner.tsx +38 -0
- package/ui/layout/section-view-shell.tsx +73 -0
- package/ui/layout/sidebar-host.ts +144 -0
- package/ui/layout/sidebar.tsx +1150 -0
- package/ui/lib/ai-screencast-hub.ts +127 -0
- package/ui/lib/ai-workspace-client.ts +46 -0
- package/ui/lib/aid.ts +22 -0
- package/ui/lib/desktop-host.ts +114 -0
- package/ui/lib/fleet-tracker-client.ts +237 -0
- package/ui/lib/hermes-ui.ts +114 -0
- package/ui/lib/n8n-ui.ts +115 -0
- package/ui/lib/use-creezio-resource.tsx +121 -0
- package/ui/lib/use-shell-ui-brand.ts +22 -0
- package/ui/list-toolbar.tsx +309 -0
- package/ui/os-pages/desktop-settings-page.tsx +158 -0
- package/ui/os-pages/index.ts +8 -0
- package/ui/page-loading/entity-page-loading.tsx +59 -0
- package/ui/page-loading/list-page-loading.tsx +61 -0
- package/ui/pagination.tsx +56 -0
- package/ui/primitives/avatar.tsx +33 -0
- package/ui/primitives/badge.tsx +36 -0
- package/ui/primitives/breadcrumb.tsx +93 -0
- package/ui/primitives/button.tsx +44 -0
- package/ui/primitives/card.tsx +44 -0
- package/ui/primitives/chart.tsx +317 -0
- package/ui/primitives/command.tsx +111 -0
- package/ui/primitives/dialog.tsx +100 -0
- package/ui/primitives/dropdown-menu.tsx +187 -0
- package/ui/primitives/input.tsx +19 -0
- package/ui/primitives/label.tsx +17 -0
- package/ui/primitives/resizable.tsx +45 -0
- package/ui/primitives/scroll-area.tsx +41 -0
- package/ui/primitives/select.tsx +73 -0
- package/ui/primitives/separator.tsx +26 -0
- package/ui/primitives/sheet.tsx +90 -0
- package/ui/primitives/skeleton.tsx +7 -0
- package/ui/primitives/sonner.tsx +22 -0
- package/ui/primitives/tabs.tsx +51 -0
- package/ui/primitives/textarea.tsx +22 -0
- package/ui/primitives/tooltip.tsx +31 -0
- package/ui/pwa/client-error-reporter.tsx +62 -0
- package/ui/pwa/register-sw.tsx +50 -0
- package/ui/range-filters.tsx +174 -0
- package/ui/search/global-search-config.ts +32 -0
- package/ui/search/global-search-provider.tsx +528 -0
- package/ui/search/search-history.ts +74 -0
- package/ui/search-input.tsx +146 -0
- package/ui/settings/account-settings.tsx +140 -0
- package/ui/settings/agent-profile-settings.tsx +184 -0
- package/ui/settings/api-keys-settings.tsx +349 -0
- package/ui/settings/desktop-background-settings.tsx +128 -0
- package/ui/settings/desktop-connection-settings.tsx +251 -0
- package/ui/settings/desktop-embed-env-panel.tsx +257 -0
- package/ui/settings/desktop-fleet-telemetry-settings.tsx +269 -0
- package/ui/settings/desktop-hermes-settings.tsx +341 -0
- package/ui/settings/desktop-llm-keys.tsx +192 -0
- package/ui/settings/desktop-n8n-settings.tsx +306 -0
- package/ui/settings/desktop-tunnel.tsx +264 -0
- package/ui/settings/desktop-update-settings.tsx +175 -0
- package/ui/settings/factory-reset-settings.tsx +89 -0
- package/ui/settings/host-only-settings.tsx +62 -0
- package/ui/settings/locked-config-field.tsx +30 -0
- package/ui/settings/ops-diagnostic-settings.tsx +242 -0
- package/ui/settings/search-reindex-settings.tsx +158 -0
- package/ui/settings/server-mode-cards.tsx +801 -0
- package/ui/theme/tailwind-preset.cjs +82 -0
- package/ui/theme/theme.css +328 -0
- package/ui/workspace/ai-activity-panel-host.tsx +19 -0
- package/ui/workspace/ai-workspace-agent-host.tsx +54 -0
- package/ui/workspace/ai-workspace-banner.tsx +168 -0
- package/ui/workspace/impersonation-banner.tsx +39 -0
- package/ui/workspace/keep-alive.tsx +220 -0
- package/ui/workspace/tab-workspace-context.tsx +1172 -0
- package/ui/workspace/tab-workspace-host.ts +89 -0
- package/ui/workspace/types.ts +500 -0
- package/ui/workspace/use-location-search.tsx +50 -0
- package/ui/workspace/window-chrome-controls.tsx +116 -0
- package/ui/workspace/workspace-config.ts +47 -0
- package/ui/workspace/workspace-root.tsx +147 -0
- package/ui/workspace/workspace-shell.tsx +292 -0
- package/ui/workspace/workspace-tab-bar.tsx +572 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
export type SidebarNavItem = {
|
|
2
|
+
href: string;
|
|
3
|
+
label: string;
|
|
4
|
+
icon: any;
|
|
5
|
+
fromShell?: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Permission requise pour voir l'entrée primaire (ex. "nav.panier") —
|
|
8
|
+
* filtrée sur me.permissions comme les entrées admin. Absente = visible.
|
|
9
|
+
*/
|
|
10
|
+
permission?: string | null;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type SidebarAdminItem = {
|
|
14
|
+
href: string;
|
|
15
|
+
label: string;
|
|
16
|
+
icon: any;
|
|
17
|
+
permission?: string | null;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type SidebarActionItem = {
|
|
21
|
+
/** Identifiant stable (clé de rendu, aid). */
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
icon: any;
|
|
25
|
+
/** Action au clic — entrée SANS navigation (ex. visite guidée). */
|
|
26
|
+
onSelect: () => void;
|
|
27
|
+
/** Permission requise (même filtrage que les entrées nav/admin). */
|
|
28
|
+
permission?: string | null;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type SidebarHost = {
|
|
32
|
+
/** Primary nav items (ordered). */
|
|
33
|
+
getNavItems: () => SidebarNavItem[];
|
|
34
|
+
/** Admin page links (Hermes/n8n added separately if tools enabled). */
|
|
35
|
+
getAdminItems?: () => SidebarAdminItem[];
|
|
36
|
+
/** Entrées d'action sans navigation (ex. visite guidée), rendues après le groupe Admin. */
|
|
37
|
+
getActionItems?: () => SidebarActionItem[];
|
|
38
|
+
/** ACL: return false to hide item. me from useSession. */
|
|
39
|
+
canShowHref?: (href: string, me: any) => boolean;
|
|
40
|
+
/** Forced active href for soft-ctx (product detail etc). */
|
|
41
|
+
resolveForcedActiveHref?: (pathname: string, search: string) => string | null;
|
|
42
|
+
/** Brand mark node factory (monogram). If absent, use productName initials. */
|
|
43
|
+
renderBrandMark?: (props: { className?: string }) => any;
|
|
44
|
+
/** Optional tools section renderer (Hermes/n8n links) - ReactNode or component. */
|
|
45
|
+
renderTools?: (ctx: { collapsed: boolean; me: any }) => any;
|
|
46
|
+
/** Optional plugins section. */
|
|
47
|
+
renderPlugins?: (ctx: { collapsed: boolean; me: any }) => any;
|
|
48
|
+
/** Plugin host optional (fetch + open). */
|
|
49
|
+
plugins?: {
|
|
50
|
+
changedEvent: string;
|
|
51
|
+
fetchVisible: () => Promise<Array<{ id: string; label: string; href?: string }>>;
|
|
52
|
+
openPanel: (id: string, opts: any) => void;
|
|
53
|
+
};
|
|
54
|
+
/** Extra footer actions (rechoose connection etc) - optional. */
|
|
55
|
+
onLogoutExtra?: () => void | Promise<void>;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
let host: SidebarHost | null = null;
|
|
59
|
+
let hostVersion = 0;
|
|
60
|
+
const hostListeners = new Set<() => void>();
|
|
61
|
+
|
|
62
|
+
function bumpSidebarHost(): void {
|
|
63
|
+
hostVersion += 1;
|
|
64
|
+
for (const listener of hostListeners) listener();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function configureSidebar(next: SidebarHost): void {
|
|
68
|
+
host = next;
|
|
69
|
+
bumpSidebarHost();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function getSidebarHost(): SidebarHost {
|
|
73
|
+
if (!host) throw new Error("@creezio/shell-ui: configureSidebar() requis");
|
|
74
|
+
return host;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function getSidebarHostOptional(): SidebarHost | null {
|
|
78
|
+
return host;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Abonnement aux reconfigurations (`NavCatalogLoader` bump après GET /). */
|
|
82
|
+
export function subscribeSidebarHost(listener: () => void): () => void {
|
|
83
|
+
hostListeners.add(listener);
|
|
84
|
+
return () => {
|
|
85
|
+
hostListeners.delete(listener);
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function getSidebarHostVersion(): number {
|
|
90
|
+
return hostVersion;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Registre d'actions sidebar contribuées par des modules kit (ex.
|
|
95
|
+
* @creezio/interactive-demo) SANS passer par le host de la marque : les
|
|
96
|
+
* providers enregistrés ici sont fusionnés avec `getActionItems` au
|
|
97
|
+
* rendu. Réactif (useSyncExternalStore) : le snapshot n'est recalculé
|
|
98
|
+
* qu'à l'enregistrement ou au retrait d'un provider.
|
|
99
|
+
*/
|
|
100
|
+
export type SidebarActionsProvider = () => SidebarActionItem[];
|
|
101
|
+
|
|
102
|
+
const sidebarActionsProviders = new Set<SidebarActionsProvider>();
|
|
103
|
+
const sidebarActionsListeners = new Set<() => void>();
|
|
104
|
+
let sidebarActionsSnapshot: SidebarActionItem[] = [];
|
|
105
|
+
|
|
106
|
+
function recomputeSidebarActions(): void {
|
|
107
|
+
const next: SidebarActionItem[] = [];
|
|
108
|
+
for (const provider of sidebarActionsProviders) {
|
|
109
|
+
try {
|
|
110
|
+
next.push(...(provider() ?? []));
|
|
111
|
+
} catch {
|
|
112
|
+
/* provider défaillant — les autres actions restent servies */
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
sidebarActionsSnapshot = next;
|
|
116
|
+
for (const listener of sidebarActionsListeners) listener();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Enregistre un provider d'actions sidebar et renvoie la fonction de retrait
|
|
121
|
+
* (à appeler au démontage). Le provider est relu à chaque
|
|
122
|
+
* enregistrement/retrait : le garder pur et sans I/O.
|
|
123
|
+
*/
|
|
124
|
+
export function registerSidebarActionsProvider(
|
|
125
|
+
provider: SidebarActionsProvider,
|
|
126
|
+
): () => void {
|
|
127
|
+
sidebarActionsProviders.add(provider);
|
|
128
|
+
recomputeSidebarActions();
|
|
129
|
+
return () => {
|
|
130
|
+
sidebarActionsProviders.delete(provider);
|
|
131
|
+
recomputeSidebarActions();
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export function subscribeSidebarActions(listener: () => void): () => void {
|
|
136
|
+
sidebarActionsListeners.add(listener);
|
|
137
|
+
return () => {
|
|
138
|
+
sidebarActionsListeners.delete(listener);
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function getSidebarActionsSnapshot(): SidebarActionItem[] {
|
|
143
|
+
return sidebarActionsSnapshot;
|
|
144
|
+
}
|