@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 @@
|
|
|
1
|
+
{"version":3,"file":"server-incident.js","sourceRoot":"","sources":["../../src/lib/server-incident.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comparaison d'URL « même document » pour onglets sites externes.
|
|
3
|
+
*
|
|
4
|
+
* Ignore le hash (soft-nav SPA). Normalise trailing slash sur pathname,
|
|
5
|
+
* hostname en minuscules, et aligne localhost ↔ 127.0.0.1.
|
|
6
|
+
* Dupliqué volontairement dans electron/tab-url.ts (rootDir Electron isolé).
|
|
7
|
+
*/
|
|
8
|
+
export declare function normalizeTabDocumentUrl(raw: string): string | null;
|
|
9
|
+
/** true si a et b désignent le même document (pas besoin de loadURL). */
|
|
10
|
+
export declare function isSameTabDocument(a: string, b: string): boolean;
|
|
11
|
+
/** Même origine (scheme + host + port normalisés). */
|
|
12
|
+
export declare function isSameTabOrigin(a: string, b: string): boolean;
|
|
13
|
+
//# sourceMappingURL=tab-document-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-document-url.d.ts","sourceRoot":"","sources":["../../src/lib/tab-document-url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBlE;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK/D;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAgB7D"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comparaison d'URL « même document » pour onglets sites externes.
|
|
3
|
+
*
|
|
4
|
+
* Ignore le hash (soft-nav SPA). Normalise trailing slash sur pathname,
|
|
5
|
+
* hostname en minuscules, et aligne localhost ↔ 127.0.0.1.
|
|
6
|
+
* Dupliqué volontairement dans electron/tab-url.ts (rootDir Electron isolé).
|
|
7
|
+
*/
|
|
8
|
+
export function normalizeTabDocumentUrl(raw) {
|
|
9
|
+
const trimmed = String(raw || "").trim();
|
|
10
|
+
if (!trimmed || trimmed.startsWith("data:") || trimmed.startsWith("about:")) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const u = new URL(trimmed);
|
|
15
|
+
if (u.protocol !== "http:" && u.protocol !== "https:")
|
|
16
|
+
return null;
|
|
17
|
+
let host = u.hostname.toLowerCase();
|
|
18
|
+
if (host === "localhost" || host === "[::1]")
|
|
19
|
+
host = "127.0.0.1";
|
|
20
|
+
const port = u.port || (u.protocol === "https:" ? "443" : "80");
|
|
21
|
+
let pathname = u.pathname || "/";
|
|
22
|
+
if (pathname.length > 1 && pathname.endsWith("/")) {
|
|
23
|
+
pathname = pathname.slice(0, -1);
|
|
24
|
+
}
|
|
25
|
+
return `${u.protocol}//${host}:${port}${pathname}${u.search}`;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** true si a et b désignent le même document (pas besoin de loadURL). */
|
|
32
|
+
export function isSameTabDocument(a, b) {
|
|
33
|
+
const na = normalizeTabDocumentUrl(a);
|
|
34
|
+
const nb = normalizeTabDocumentUrl(b);
|
|
35
|
+
if (!na || !nb)
|
|
36
|
+
return false;
|
|
37
|
+
return na === nb;
|
|
38
|
+
}
|
|
39
|
+
/** Même origine (scheme + host + port normalisés). */
|
|
40
|
+
export function isSameTabOrigin(a, b) {
|
|
41
|
+
try {
|
|
42
|
+
const ua = new URL(String(a || "").trim());
|
|
43
|
+
const ub = new URL(String(b || "").trim());
|
|
44
|
+
if (ua.protocol !== ub.protocol)
|
|
45
|
+
return false;
|
|
46
|
+
const norm = (h) => {
|
|
47
|
+
const x = h.toLowerCase();
|
|
48
|
+
return x === "localhost" || x === "[::1]" ? "127.0.0.1" : x;
|
|
49
|
+
};
|
|
50
|
+
if (norm(ua.hostname) !== norm(ub.hostname))
|
|
51
|
+
return false;
|
|
52
|
+
const portA = ua.port || (ua.protocol === "https:" ? "443" : "80");
|
|
53
|
+
const portB = ub.port || (ub.protocol === "https:" ? "443" : "80");
|
|
54
|
+
return portA === portB;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=tab-document-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-document-url.js","sourceRoot":"","sources":["../../src/lib/tab-document-url.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ClassValue } from "clsx";
|
|
2
|
+
export declare function cn(...inputs: ClassValue[]): string;
|
|
3
|
+
export declare function formatDate(value?: string | null): string;
|
|
4
|
+
export declare function formatDateTime(value?: string | null): string;
|
|
5
|
+
export declare function formatMoney(value?: number | string | null, currency?: string): string;
|
|
6
|
+
export declare function parsePage(sp?: {
|
|
7
|
+
page?: string;
|
|
8
|
+
pageSize?: string;
|
|
9
|
+
q?: string;
|
|
10
|
+
}): {
|
|
11
|
+
page: number;
|
|
12
|
+
pageSize: number;
|
|
13
|
+
q: string;
|
|
14
|
+
};
|
|
15
|
+
/** Affiche une variation déjà exprimée en pourcent (ex. 5.4 → « +5.4 % »). */
|
|
16
|
+
export declare function formatVariationPct(value?: number | string | null): string;
|
|
17
|
+
/** Affiche un delta monétaire signé (ex. -0.47 → « −0,47 € »). */
|
|
18
|
+
export declare function formatDeltaMoney(value?: number | string | null, currency?: string): string;
|
|
19
|
+
export declare function variationTone(value?: number | string | null): "up" | "down" | "flat";
|
|
20
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAED,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,UAS/C;AAED,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,UAWnD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,QAAQ,SAAQ,UAa3E;AAED,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE;;;;EAK9E;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAMzE;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,QAAQ,SAAQ,GAAG,MAAM,CAQzF;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAKpF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { clsx } from "clsx";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
export function cn(...inputs) {
|
|
4
|
+
return twMerge(clsx(inputs));
|
|
5
|
+
}
|
|
6
|
+
export function formatDate(value) {
|
|
7
|
+
if (!value)
|
|
8
|
+
return "—";
|
|
9
|
+
const d = new Date(value);
|
|
10
|
+
if (Number.isNaN(d.getTime()))
|
|
11
|
+
return value;
|
|
12
|
+
return d.toLocaleDateString("fr-FR", {
|
|
13
|
+
day: "2-digit",
|
|
14
|
+
month: "short",
|
|
15
|
+
year: "numeric",
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function formatDateTime(value) {
|
|
19
|
+
if (!value)
|
|
20
|
+
return "—";
|
|
21
|
+
const d = new Date(value);
|
|
22
|
+
if (Number.isNaN(d.getTime()))
|
|
23
|
+
return value;
|
|
24
|
+
return d.toLocaleString("fr-FR", {
|
|
25
|
+
day: "2-digit",
|
|
26
|
+
month: "short",
|
|
27
|
+
year: "numeric",
|
|
28
|
+
hour: "2-digit",
|
|
29
|
+
minute: "2-digit",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function formatMoney(value, currency = "EUR") {
|
|
33
|
+
if (value === null || value === undefined || value === "")
|
|
34
|
+
return "—";
|
|
35
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
36
|
+
if (!Number.isFinite(n))
|
|
37
|
+
return String(value);
|
|
38
|
+
try {
|
|
39
|
+
return new Intl.NumberFormat("fr-FR", {
|
|
40
|
+
style: "currency",
|
|
41
|
+
currency: currency || "EUR",
|
|
42
|
+
maximumFractionDigits: 2,
|
|
43
|
+
}).format(n);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return `${n.toLocaleString("fr-FR")} ${currency}`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function parsePage(sp) {
|
|
50
|
+
const page = Math.max(Number(sp?.page || 1) || 1, 1);
|
|
51
|
+
const pageSize = Math.min(Math.max(Number(sp?.pageSize || 50) || 50, 1), 200);
|
|
52
|
+
const q = (sp?.q || "").trim();
|
|
53
|
+
return { page, pageSize, q };
|
|
54
|
+
}
|
|
55
|
+
/** Affiche une variation déjà exprimée en pourcent (ex. 5.4 → « +5.4 % »). */
|
|
56
|
+
export function formatVariationPct(value) {
|
|
57
|
+
if (value === null || value === undefined || value === "")
|
|
58
|
+
return "—";
|
|
59
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
60
|
+
if (!Number.isFinite(n))
|
|
61
|
+
return String(value);
|
|
62
|
+
const sign = n > 0 ? "+" : "";
|
|
63
|
+
return `${sign}${n.toFixed(1)} %`;
|
|
64
|
+
}
|
|
65
|
+
/** Affiche un delta monétaire signé (ex. -0.47 → « −0,47 € »). */
|
|
66
|
+
export function formatDeltaMoney(value, currency = "EUR") {
|
|
67
|
+
if (value === null || value === undefined || value === "")
|
|
68
|
+
return "—";
|
|
69
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
70
|
+
if (!Number.isFinite(n))
|
|
71
|
+
return String(value);
|
|
72
|
+
const formatted = formatMoney(Math.abs(n), currency);
|
|
73
|
+
if (n > 0)
|
|
74
|
+
return `+${formatted}`;
|
|
75
|
+
if (n < 0)
|
|
76
|
+
return `−${formatted}`;
|
|
77
|
+
return formatted;
|
|
78
|
+
}
|
|
79
|
+
export function variationTone(value) {
|
|
80
|
+
if (value === null || value === undefined || value === "")
|
|
81
|
+
return "flat";
|
|
82
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
83
|
+
if (!Number.isFinite(n) || n === 0)
|
|
84
|
+
return "flat";
|
|
85
|
+
return n > 0 ? "up" : "down";
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catalogue de nav OS — SoT unique des entrées primaires (Phase A).
|
|
3
|
+
*
|
|
4
|
+
* Types + merge pur + registre runtime. Zéro React, zéro lucide, zéro DB.
|
|
5
|
+
* Cible produit : docs/plans/PLAN-NAV-CATALOG.md (§3.1–3.2).
|
|
6
|
+
*
|
|
7
|
+
* Overrides persistés + mount HTTP + écran admin = Phase B (`@creezio/nav`).
|
|
8
|
+
*/
|
|
9
|
+
export type NavCatalogSource = "os" | "module" | "plugin" | "extra";
|
|
10
|
+
export type NavCatalogGroup = "core" | "brand" | "plugin" | "admin";
|
|
11
|
+
export type NavCatalogEntry = {
|
|
12
|
+
/** Stable, never a href (hrefs change). Ex. "os.granola", "module.prospects". */
|
|
13
|
+
id: string;
|
|
14
|
+
href: string;
|
|
15
|
+
label: string;
|
|
16
|
+
/** Nom lucide, pas un composant — sérialisable JSON / brand.db. */
|
|
17
|
+
icon: string;
|
|
18
|
+
group: NavCatalogGroup;
|
|
19
|
+
order: number;
|
|
20
|
+
permission?: string;
|
|
21
|
+
/** Défaut kit/marque avant override admin. */
|
|
22
|
+
defaultVisible: boolean;
|
|
23
|
+
source: NavCatalogSource;
|
|
24
|
+
/** false = feature-off, jamais listé même si override visible. */
|
|
25
|
+
available: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type NavOverride = {
|
|
28
|
+
entryId: string;
|
|
29
|
+
hidden?: boolean;
|
|
30
|
+
order?: number;
|
|
31
|
+
label?: string;
|
|
32
|
+
group?: NavCatalogGroup;
|
|
33
|
+
permission?: string;
|
|
34
|
+
};
|
|
35
|
+
export type NavCatalogFeatures = {
|
|
36
|
+
plugins?: boolean;
|
|
37
|
+
fleet?: boolean;
|
|
38
|
+
};
|
|
39
|
+
export type NavCatalogError = {
|
|
40
|
+
code: "id_collision" | "href_collision";
|
|
41
|
+
message: string;
|
|
42
|
+
id?: string;
|
|
43
|
+
href?: string;
|
|
44
|
+
};
|
|
45
|
+
export type ResolveNavCatalogInput = {
|
|
46
|
+
os?: readonly NavCatalogEntry[];
|
|
47
|
+
modules?: readonly NavCatalogEntry[];
|
|
48
|
+
plugins?: readonly NavCatalogEntry[];
|
|
49
|
+
extras?: readonly NavCatalogEntry[];
|
|
50
|
+
overrides?: readonly NavOverride[];
|
|
51
|
+
features?: NavCatalogFeatures;
|
|
52
|
+
/**
|
|
53
|
+
* Tests / doctor : throw sur collision d'`id`.
|
|
54
|
+
* Runtime (défaut) : collecter dans `errors[]` et ignorer le doublon.
|
|
55
|
+
*/
|
|
56
|
+
throwOnIdCollision?: boolean;
|
|
57
|
+
/** Conserver les entrées `hidden` (admin catalog). Défaut false. */
|
|
58
|
+
includeHidden?: boolean;
|
|
59
|
+
};
|
|
60
|
+
export type ResolveNavCatalogResult = {
|
|
61
|
+
entries: NavCatalogEntry[];
|
|
62
|
+
errors: NavCatalogError[];
|
|
63
|
+
warnings: NavCatalogError[];
|
|
64
|
+
};
|
|
65
|
+
/** Noms lucide autorisés (résolus côté `shell-ui/ui` par `resolveNavIcon`). */
|
|
66
|
+
export declare const NAV_ICON_ALLOWLIST: readonly ["Activity", "Bot", "Braces", "Cable", "Circle", "Database", "FileText", "KeyRound", "LayoutDashboard", "List", "ListTodo", "Mail", "NotebookPen", "Package", "ScrollText", "Settings", "Shield", "ShieldCheck", "SlidersHorizontal", "SquarePen", "Workflow"];
|
|
67
|
+
export type NavIconName = (typeof NAV_ICON_ALLOWLIST)[number];
|
|
68
|
+
export declare function isKnownNavIcon(name: string): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Merge déterministe os + modules + extras + plugins + overrides + features.
|
|
71
|
+
* Collision d'`id` = erreur (throw si `throwOnIdCollision`). Collision
|
|
72
|
+
* d'`href` = warning, le provider le plus spécifique gagne (`module` > `os`).
|
|
73
|
+
*/
|
|
74
|
+
export declare function resolveNavCatalog(input: ResolveNavCatalogInput): ResolveNavCatalogResult;
|
|
75
|
+
export declare function registerOsNavEntry(entry: NavCatalogEntry): () => void;
|
|
76
|
+
export declare function listOsNavEntries(): NavCatalogEntry[];
|
|
77
|
+
/** Seed des entrées OS primaires actuelles. Idempotent. */
|
|
78
|
+
export declare function registerDefaultOsNavEntries(): void;
|
|
79
|
+
export declare function defaultOsCatalogEntries(): NavCatalogEntry[];
|
|
80
|
+
/** Tests uniquement — vide le registre et autorise un re-seed. */
|
|
81
|
+
export declare function resetOsNavRegistryForTests(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Contrat `GET /api/v1/modules/nav` — catalogue résolu session.
|
|
84
|
+
* `{ items: [{ id, href, label, order, group?, permission?, icon }] }`
|
|
85
|
+
*/
|
|
86
|
+
export type NavCatalogSessionItem = {
|
|
87
|
+
id: string;
|
|
88
|
+
href: string;
|
|
89
|
+
label: string;
|
|
90
|
+
order: number;
|
|
91
|
+
group?: string;
|
|
92
|
+
permission?: string;
|
|
93
|
+
icon: string;
|
|
94
|
+
};
|
|
95
|
+
/** Parse le body JSON du mount nav (tolérant : items manquants → []). */
|
|
96
|
+
export declare function parseNavCatalogSessionItems(body: unknown): NavCatalogSessionItem[];
|
|
97
|
+
//# sourceMappingURL=nav-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-catalog.d.ts","sourceRoot":"","sources":["../src/nav-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catalogue de nav OS — SoT unique des entrées primaires (Phase A).
|
|
3
|
+
*
|
|
4
|
+
* Types + merge pur + registre runtime. Zéro React, zéro lucide, zéro DB.
|
|
5
|
+
* Cible produit : docs/plans/PLAN-NAV-CATALOG.md (§3.1–3.2).
|
|
6
|
+
*
|
|
7
|
+
* Overrides persistés + mount HTTP + écran admin = Phase B (`@creezio/nav`).
|
|
8
|
+
*/
|
|
9
|
+
/** Noms lucide autorisés (résolus côté `shell-ui/ui` par `resolveNavIcon`). */
|
|
10
|
+
export const NAV_ICON_ALLOWLIST = [
|
|
11
|
+
"Activity",
|
|
12
|
+
"Bot",
|
|
13
|
+
"Braces",
|
|
14
|
+
"Cable",
|
|
15
|
+
"Circle",
|
|
16
|
+
"Database",
|
|
17
|
+
"FileText",
|
|
18
|
+
"KeyRound",
|
|
19
|
+
"LayoutDashboard",
|
|
20
|
+
"List",
|
|
21
|
+
"ListTodo",
|
|
22
|
+
"Mail",
|
|
23
|
+
"NotebookPen",
|
|
24
|
+
"Package",
|
|
25
|
+
"ScrollText",
|
|
26
|
+
"Settings",
|
|
27
|
+
"Shield",
|
|
28
|
+
"ShieldCheck",
|
|
29
|
+
"SlidersHorizontal",
|
|
30
|
+
"SquarePen",
|
|
31
|
+
"Workflow",
|
|
32
|
+
];
|
|
33
|
+
const NAV_ICON_ALLOWLIST_SET = new Set(NAV_ICON_ALLOWLIST);
|
|
34
|
+
export function isKnownNavIcon(name) {
|
|
35
|
+
return NAV_ICON_ALLOWLIST_SET.has(name);
|
|
36
|
+
}
|
|
37
|
+
const SOURCE_RANK = {
|
|
38
|
+
os: 0,
|
|
39
|
+
plugin: 1,
|
|
40
|
+
extra: 2,
|
|
41
|
+
module: 3,
|
|
42
|
+
};
|
|
43
|
+
function cloneEntry(entry) {
|
|
44
|
+
return { ...entry };
|
|
45
|
+
}
|
|
46
|
+
function isPluginFeatureEntry(entry) {
|
|
47
|
+
return (entry.source === "plugin" ||
|
|
48
|
+
entry.group === "plugin" ||
|
|
49
|
+
entry.href === "/admin/plugins");
|
|
50
|
+
}
|
|
51
|
+
function isFleetFeatureEntry(entry) {
|
|
52
|
+
return (entry.id === "os.fleet" ||
|
|
53
|
+
entry.id.startsWith("os.fleet.") ||
|
|
54
|
+
entry.href === "/admin/fleet");
|
|
55
|
+
}
|
|
56
|
+
function applyFeatures(entry, features) {
|
|
57
|
+
if (features?.plugins === false && isPluginFeatureEntry(entry)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if (features?.fleet === false && isFleetFeatureEntry(entry)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return entry.available;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Merge déterministe os + modules + extras + plugins + overrides + features.
|
|
67
|
+
* Collision d'`id` = erreur (throw si `throwOnIdCollision`). Collision
|
|
68
|
+
* d'`href` = warning, le provider le plus spécifique gagne (`module` > `os`).
|
|
69
|
+
*/
|
|
70
|
+
export function resolveNavCatalog(input) {
|
|
71
|
+
const errors = [];
|
|
72
|
+
const warnings = [];
|
|
73
|
+
const byId = new Map();
|
|
74
|
+
const byHref = new Map();
|
|
75
|
+
const buckets = [
|
|
76
|
+
{ source: "os", items: input.os ?? [] },
|
|
77
|
+
{ source: "plugin", items: input.plugins ?? [] },
|
|
78
|
+
{ source: "extra", items: input.extras ?? [] },
|
|
79
|
+
{ source: "module", items: input.modules ?? [] },
|
|
80
|
+
];
|
|
81
|
+
for (const bucket of buckets) {
|
|
82
|
+
for (const raw of bucket.items) {
|
|
83
|
+
const entry = cloneEntry(raw);
|
|
84
|
+
if (!entry.source)
|
|
85
|
+
entry.source = bucket.source;
|
|
86
|
+
const existingId = byId.get(entry.id);
|
|
87
|
+
if (existingId) {
|
|
88
|
+
const err = {
|
|
89
|
+
code: "id_collision",
|
|
90
|
+
message: `Nav catalog: collision d'id "${entry.id}" (${existingId.source} vs ${entry.source})`,
|
|
91
|
+
id: entry.id,
|
|
92
|
+
};
|
|
93
|
+
errors.push(err);
|
|
94
|
+
if (input.throwOnIdCollision) {
|
|
95
|
+
throw new Error(err.message);
|
|
96
|
+
}
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const hrefOwnerId = byHref.get(entry.href);
|
|
100
|
+
if (hrefOwnerId) {
|
|
101
|
+
const owner = byId.get(hrefOwnerId);
|
|
102
|
+
const ownerRank = owner ? SOURCE_RANK[owner.source] : -1;
|
|
103
|
+
const nextRank = SOURCE_RANK[entry.source];
|
|
104
|
+
warnings.push({
|
|
105
|
+
code: "href_collision",
|
|
106
|
+
message: `Nav catalog: collision d'href "${entry.href}" (${hrefOwnerId} vs ${entry.id}) — le plus spécifique gagne`,
|
|
107
|
+
href: entry.href,
|
|
108
|
+
id: entry.id,
|
|
109
|
+
});
|
|
110
|
+
if (nextRank > ownerRank) {
|
|
111
|
+
byId.delete(hrefOwnerId);
|
|
112
|
+
byId.set(entry.id, entry);
|
|
113
|
+
byHref.set(entry.href, entry.id);
|
|
114
|
+
}
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
byId.set(entry.id, entry);
|
|
118
|
+
byHref.set(entry.href, entry.id);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const overrideById = new Map((input.overrides ?? []).map((o) => [o.entryId, o]));
|
|
122
|
+
const entries = [];
|
|
123
|
+
for (const entry of byId.values()) {
|
|
124
|
+
const available = applyFeatures(entry, input.features);
|
|
125
|
+
const override = overrideById.get(entry.id);
|
|
126
|
+
if (override?.hidden && !input.includeHidden) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
entries.push({
|
|
130
|
+
...entry,
|
|
131
|
+
available,
|
|
132
|
+
label: override?.label ?? entry.label,
|
|
133
|
+
order: override?.order ?? entry.order,
|
|
134
|
+
group: override?.group ?? entry.group,
|
|
135
|
+
permission: override?.permission ?? entry.permission,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
entries.sort((a, b) => a.order - b.order || a.id.localeCompare(b.id));
|
|
139
|
+
return { entries, errors, warnings };
|
|
140
|
+
}
|
|
141
|
+
/* ── Registre runtime OS (Node-safe) ── */
|
|
142
|
+
const osNavEntries = new Map();
|
|
143
|
+
let defaultsRegistered = false;
|
|
144
|
+
export function registerOsNavEntry(entry) {
|
|
145
|
+
const prev = osNavEntries.get(entry.id);
|
|
146
|
+
if (prev) {
|
|
147
|
+
if (prev.href === entry.href && prev.label === entry.label) {
|
|
148
|
+
return () => {
|
|
149
|
+
osNavEntries.delete(entry.id);
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
throw new Error(`Nav catalog: collision d'id "${entry.id}" (déjà enregistré: ${prev.href})`);
|
|
153
|
+
}
|
|
154
|
+
osNavEntries.set(entry.id, {
|
|
155
|
+
...entry,
|
|
156
|
+
source: entry.source || "os",
|
|
157
|
+
});
|
|
158
|
+
return () => {
|
|
159
|
+
osNavEntries.delete(entry.id);
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
export function listOsNavEntries() {
|
|
163
|
+
return [...osNavEntries.values()].sort((a, b) => a.order - b.order || a.id.localeCompare(b.id));
|
|
164
|
+
}
|
|
165
|
+
/** Seed des entrées OS primaires actuelles. Idempotent. */
|
|
166
|
+
export function registerDefaultOsNavEntries() {
|
|
167
|
+
if (defaultsRegistered)
|
|
168
|
+
return;
|
|
169
|
+
defaultsRegistered = true;
|
|
170
|
+
for (const entry of DEFAULT_OS_NAV_ENTRIES) {
|
|
171
|
+
if (!osNavEntries.has(entry.id)) {
|
|
172
|
+
registerOsNavEntry(entry);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export function defaultOsCatalogEntries() {
|
|
177
|
+
registerDefaultOsNavEntries();
|
|
178
|
+
return listOsNavEntries();
|
|
179
|
+
}
|
|
180
|
+
/** Tests uniquement — vide le registre et autorise un re-seed. */
|
|
181
|
+
export function resetOsNavRegistryForTests() {
|
|
182
|
+
osNavEntries.clear();
|
|
183
|
+
defaultsRegistered = false;
|
|
184
|
+
}
|
|
185
|
+
const DEFAULT_OS_NAV_ENTRIES = [
|
|
186
|
+
{
|
|
187
|
+
id: "os.taches",
|
|
188
|
+
href: "/taches",
|
|
189
|
+
label: "Tâches",
|
|
190
|
+
icon: "ListTodo",
|
|
191
|
+
group: "core",
|
|
192
|
+
order: 10,
|
|
193
|
+
defaultVisible: true,
|
|
194
|
+
source: "os",
|
|
195
|
+
available: true,
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: "os.mails",
|
|
199
|
+
href: "/mails",
|
|
200
|
+
label: "Mails",
|
|
201
|
+
icon: "Mail",
|
|
202
|
+
group: "core",
|
|
203
|
+
order: 20,
|
|
204
|
+
defaultVisible: true,
|
|
205
|
+
source: "os",
|
|
206
|
+
available: true,
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
id: "os.granola",
|
|
210
|
+
href: "/granola",
|
|
211
|
+
label: "Granola",
|
|
212
|
+
icon: "NotebookPen",
|
|
213
|
+
group: "core",
|
|
214
|
+
order: 30,
|
|
215
|
+
defaultVisible: true,
|
|
216
|
+
source: "os",
|
|
217
|
+
available: true,
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
id: "os.grokbot",
|
|
221
|
+
href: "/grokbot",
|
|
222
|
+
label: "GrokBot",
|
|
223
|
+
icon: "Bot",
|
|
224
|
+
group: "core",
|
|
225
|
+
order: 40,
|
|
226
|
+
defaultVisible: true,
|
|
227
|
+
source: "os",
|
|
228
|
+
available: true,
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
id: "os.parametres",
|
|
232
|
+
href: "/parametres",
|
|
233
|
+
label: "Préférences",
|
|
234
|
+
icon: "SlidersHorizontal",
|
|
235
|
+
group: "core",
|
|
236
|
+
order: 50,
|
|
237
|
+
defaultVisible: true,
|
|
238
|
+
source: "os",
|
|
239
|
+
available: true,
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
id: "os.collaborateurs",
|
|
243
|
+
href: "/collaborateurs",
|
|
244
|
+
label: "Collaborateurs",
|
|
245
|
+
icon: "Shield",
|
|
246
|
+
group: "core",
|
|
247
|
+
order: 60,
|
|
248
|
+
defaultVisible: true,
|
|
249
|
+
source: "os",
|
|
250
|
+
available: true,
|
|
251
|
+
},
|
|
252
|
+
];
|
|
253
|
+
/** Parse le body JSON du mount nav (tolérant : items manquants → []). */
|
|
254
|
+
export function parseNavCatalogSessionItems(body) {
|
|
255
|
+
if (!body || typeof body !== "object" || Array.isArray(body))
|
|
256
|
+
return [];
|
|
257
|
+
const raw = body.items;
|
|
258
|
+
if (!Array.isArray(raw))
|
|
259
|
+
return [];
|
|
260
|
+
const out = [];
|
|
261
|
+
for (const row of raw) {
|
|
262
|
+
if (!row || typeof row !== "object" || Array.isArray(row))
|
|
263
|
+
continue;
|
|
264
|
+
const r = row;
|
|
265
|
+
const id = typeof r.id === "string" ? r.id.trim() : "";
|
|
266
|
+
const href = typeof r.href === "string" ? r.href.trim() : "";
|
|
267
|
+
const label = typeof r.label === "string" ? r.label.trim() : "";
|
|
268
|
+
const icon = typeof r.icon === "string" && r.icon.trim() ? r.icon.trim() : "Circle";
|
|
269
|
+
const order = typeof r.order === "number" && Number.isFinite(r.order) ? r.order : 0;
|
|
270
|
+
if (!id || !href || !label)
|
|
271
|
+
continue;
|
|
272
|
+
const item = { id, href, label, order, icon };
|
|
273
|
+
if (typeof r.group === "string" && r.group)
|
|
274
|
+
item.group = r.group;
|
|
275
|
+
if (typeof r.permission === "string" && r.permission) {
|
|
276
|
+
item.permission = r.permission;
|
|
277
|
+
}
|
|
278
|
+
out.push(item);
|
|
279
|
+
}
|
|
280
|
+
return out;
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=nav-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-catalog.js","sourceRoot":"","sources":["../src/nav-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CoreNavItem, NavSlot, NavSlotId } from "./types.js";
|
|
2
|
+
export type NavRegistry = {
|
|
3
|
+
registerBrandNav(items: CoreNavItem[], slot?: NavSlotId): void;
|
|
4
|
+
getBrandNav(slot?: NavSlotId): CoreNavItem[];
|
|
5
|
+
getSlots(): NavSlot[];
|
|
6
|
+
clearBrandNav(slot?: NavSlotId): void;
|
|
7
|
+
};
|
|
8
|
+
export declare function createNavRegistry(): NavRegistry;
|
|
9
|
+
/** Fusion nav cœur + items brand (slot primary par défaut). */
|
|
10
|
+
export declare function mergeNav(core: readonly CoreNavItem[], brand: readonly CoreNavItem[]): CoreNavItem[];
|
|
11
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA+BlE,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/D,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,EAAE,CAAC;IAC7C,QAAQ,IAAI,OAAO,EAAE,CAAC;IACtB,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,WAAW,CA8B/C;AAED,+DAA+D;AAC/D,wBAAgB,QAAQ,CACtB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,SAAS,WAAW,EAAE,GAC5B,WAAW,EAAE,CAEf"}
|