@nxtode/app-shell 0.2.1

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.
Files changed (31) hide show
  1. package/README.md +13 -0
  2. package/dist/components/brand/nxtode-logo.d.ts +8 -0
  3. package/dist/components/brand/nxtode-logo.d.ts.map +1 -0
  4. package/dist/components/brand/nxtode-logo.js +10 -0
  5. package/dist/components/brand/nxtode-logo.js.map +1 -0
  6. package/dist/components/layout/app-switcher-menu.d.ts +2 -0
  7. package/dist/components/layout/app-switcher-menu.d.ts.map +1 -0
  8. package/dist/components/layout/app-switcher-menu.js +95 -0
  9. package/dist/components/layout/app-switcher-menu.js.map +1 -0
  10. package/dist/components/layout/notification-menu.d.ts +6 -0
  11. package/dist/components/layout/notification-menu.d.ts.map +1 -0
  12. package/dist/components/layout/notification-menu.js +205 -0
  13. package/dist/components/layout/notification-menu.js.map +1 -0
  14. package/dist/components/layout/profile-menu.d.ts +16 -0
  15. package/dist/components/layout/profile-menu.d.ts.map +1 -0
  16. package/dist/components/layout/profile-menu.js +160 -0
  17. package/dist/components/layout/profile-menu.js.map +1 -0
  18. package/dist/components/layout/site-footer.d.ts +6 -0
  19. package/dist/components/layout/site-footer.d.ts.map +1 -0
  20. package/dist/components/layout/site-footer.js +8 -0
  21. package/dist/components/layout/site-footer.js.map +1 -0
  22. package/dist/config/app.d.ts +14 -0
  23. package/dist/config/app.d.ts.map +1 -0
  24. package/dist/config/app.js +14 -0
  25. package/dist/config/app.js.map +1 -0
  26. package/dist/index.d.ts +49 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +348 -0
  29. package/dist/index.js.map +1 -0
  30. package/package.json +45 -0
  31. package/styles.css +8106 -0
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ import { NxtodeLogo } from "../brand/nxtode-logo";
4
+ import { appConfig } from "../../config/app";
5
+ export function SiteFooter({ compact = false }) {
6
+ return (_jsx("footer", { className: "site-footer px-4 pb-6 sm:px-6 lg:px-8", children: _jsxs("div", { className: `app-page-container overflow-hidden rounded-2xl border site-footer-card ${compact ? "" : "mt-8"}`, children: [_jsx("div", { className: "px-5 py-6", children: _jsxs("div", { className: "grid gap-6 md:grid-cols-[1fr_auto] md:items-start", children: [_jsxs("div", { children: [_jsx(NxtodeLogo, { variant: "wordmark", className: "h-8 w-36" }), _jsx("p", { className: "site-footer-muted mt-2 max-w-xl text-sm leading-6", children: "NXTode builds secure software for accounts, automation, integrations, and connected business operations." })] }), _jsx("div", { className: "flex justify-start md:justify-end", children: _jsx("span", { className: "site-footer-muted text-xs", children: "Dark theme" }) })] }) }), _jsx("div", { className: "site-footer-divider border-t px-5 py-4 text-xs site-footer-subtle", children: _jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:items-center md:justify-between", children: [_jsxs("p", { children: ["\u00A9 ", new Date().getFullYear(), " ", appConfig.parentCompanyName, ". All rights reserved."] }), _jsxs("div", { className: "flex flex-wrap gap-3", children: [_jsx(Link, { href: "/pricing", className: "hover:text-zinc-300", children: "Pricing" }), _jsx(Link, { href: "/refund", className: "hover:text-zinc-300", children: "Refund" }), _jsx(Link, { href: "/terms", className: "hover:text-zinc-300", children: "Terms" }), _jsx(Link, { href: "/privacy", className: "hover:text-zinc-300", children: "Privacy" }), _jsx(Link, { href: "/cookies", className: "hover:text-zinc-300", children: "Cookies" }), _jsxs("span", { children: ["v", appConfig.buildNumber] })] })] }) })] }) }));
7
+ }
8
+ //# sourceMappingURL=site-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-footer.js","sourceRoot":"","sources":["../../../src/components/layout/site-footer.tsx"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM7C,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,EAAmB;IAC7D,OAAO,CACL,iBAAQ,SAAS,EAAC,uCAAuC,YACvD,eACE,SAAS,EAAE,0EACT,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MACjB,EAAE,aAEF,cAAK,SAAS,EAAC,WAAW,YACxB,eAAK,SAAS,EAAC,mDAAmD,aAChE,0BACE,KAAC,UAAU,IAAC,OAAO,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,GAAG,EACtD,YAAG,SAAS,EAAC,mDAAmD,yHAG5D,IACA,EAEN,cAAK,SAAS,EAAC,mCAAmC,YAChD,eAAM,SAAS,EAAC,2BAA2B,2BAAkB,GACzD,IACF,GACF,EAEN,cAAK,SAAS,EAAC,mEAAmE,YAChF,eAAK,SAAS,EAAC,oEAAoE,aACjF,mCACK,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,OAAG,SAAS,CAAC,iBAAiB,8BAEvD,EAEJ,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,qBAAqB,wBAE9C,EACP,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,qBAAqB,uBAE7C,EACP,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,qBAAqB,sBAE5C,EACP,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,qBAAqB,wBAE9C,EACP,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,qBAAqB,wBAE9C,EACP,gCAAQ,SAAS,CAAC,WAAW,IAAQ,IACjC,IACF,GACF,IACF,GACC,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const appConfig: {
2
+ name: string;
3
+ logo: {
4
+ icon: string;
5
+ wordmarkDark: string;
6
+ wordmarkLight: string;
7
+ };
8
+ parentCompanyName: string;
9
+ description: string;
10
+ buildNumber: string;
11
+ supportEmail: string;
12
+ adminUrl: string;
13
+ };
14
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/config/app.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;CAYrB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const appConfig = {
2
+ name: process.env.NEXT_PUBLIC_APP_NAME || "NXTode",
3
+ logo: {
4
+ icon: "/brand/primary-icon-nxtode.png",
5
+ wordmarkDark: "/brand/nxtode-logo-blue-nxt-white-ode.png",
6
+ wordmarkLight: "/brand/nxtode-logo-blue-nxt-black-ode.png",
7
+ },
8
+ parentCompanyName: "NXTode",
9
+ description: "A secure account and authentication platform for NXTode apps.",
10
+ buildNumber: process.env.NEXT_PUBLIC_APP_VERSION || "0.1.0",
11
+ supportEmail: process.env.NEXT_PUBLIC_SUPPORT_EMAIL || "support@nxtode.com",
12
+ adminUrl: process.env.NEXT_PUBLIC_ADMIN_URL || "https://admin.nxtode.com",
13
+ };
14
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/config/app.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,QAAQ;IAClD,IAAI,EAAE;QACJ,IAAI,EAAE,gCAAgC;QACtC,YAAY,EAAE,2CAA2C;QACzD,aAAa,EAAE,2CAA2C;KAC3D;IACD,iBAAiB,EAAE,QAAQ;IAC3B,WAAW,EAAE,+DAA+D;IAC5E,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO;IAC3D,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,oBAAoB;IAC3E,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,0BAA0B;CAC1E,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { type ReactNode } from "react";
2
+ export type NxtodeShellUser = {
3
+ firstName: string;
4
+ lastName: string;
5
+ email: string;
6
+ imageUrl?: string | null;
7
+ originalImageUrl?: string | null;
8
+ imagePositionX?: number;
9
+ imagePositionY?: number;
10
+ imageScale?: number;
11
+ };
12
+ export type NxtodeShellNavigationItem = {
13
+ href: string;
14
+ label: string;
15
+ activeKey?: string;
16
+ icon?: "dashboard" | "reports" | "organizations" | "settings" | "integrations" | "folder" | "portal";
17
+ };
18
+ export type NxtodeShellWorkspace = {
19
+ id: string;
20
+ name: string;
21
+ type?: string;
22
+ initials?: string;
23
+ role?: string;
24
+ status?: string;
25
+ description?: string;
26
+ manageUrl?: string | null;
27
+ };
28
+ export type NxtodeShellQuickApp = {
29
+ href: string;
30
+ label: string;
31
+ description: string;
32
+ icon?: "database" | "document" | "workflow" | "portal";
33
+ };
34
+ export type NxtodeAppShellProps = {
35
+ user: NxtodeShellUser;
36
+ children: ReactNode;
37
+ appName?: string;
38
+ appHomeHref?: string;
39
+ activeItem?: string;
40
+ navigation?: NxtodeShellNavigationItem[];
41
+ workspace?: NxtodeShellWorkspace | null;
42
+ workspaces?: NxtodeShellWorkspace[];
43
+ quickApps?: NxtodeShellQuickApp[];
44
+ searchPlaceholder?: string;
45
+ unreadNotifications?: number;
46
+ };
47
+ export declare function NxtodeAppShell({ user, activeItem, navigation, children, workspace, workspaces, quickApps, searchPlaceholder, unreadNotifications, appHomeHref, }: NxtodeAppShellProps): import("react/jsx-runtime").JSX.Element;
48
+ export { NxtodeAppShell as AppShell };
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACtG,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACzC,SAAS,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAmTF,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,UAAU,EACV,UAA8B,EAC9B,QAAQ,EACR,SAAS,EACT,UAAe,EACf,SAA4B,EAC5B,iBAAmC,EACnC,mBAAuB,EACvB,WAA0B,GAC3B,EAAE,mBAAmB,2CAsdrB;AAED,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,348 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import Link from "next/link";
4
+ import { usePathname, useSearchParams } from "next/navigation";
5
+ import { useEffect, useRef, useState, useSyncExternalStore, } from "react";
6
+ import { NxtodeLogo } from "./components/brand/nxtode-logo";
7
+ import { AppSwitcherMenu } from "./components/layout/app-switcher-menu";
8
+ import { NotificationMenu } from "./components/layout/notification-menu";
9
+ import { ProfileMenu } from "./components/layout/profile-menu";
10
+ import { SiteFooter } from "./components/layout/site-footer";
11
+ import { appConfig } from "./config/app";
12
+ const SIDEBAR_STORAGE_KEY = "nxtode.sidebar.open";
13
+ const SIDEBAR_STORAGE_EVENT = "nxtode:sidebar-open-change";
14
+ const WORKSPACE_STORAGE_KEY = "nxtode.active-workspace-id";
15
+ const WORKSPACE_STORAGE_EVENT = "nxtode:workspace-change";
16
+ const SCROLL_TOP_VISIBLE_THRESHOLD = 360;
17
+ const defaultNavigation = [
18
+ { href: "/dashboard", label: "Dashboard", icon: "dashboard", activeKey: "dashboard" },
19
+ { href: "/reports", label: "Reports", icon: "reports", activeKey: "reports" },
20
+ { href: "/settings", label: "Settings", icon: "settings", activeKey: "settings" },
21
+ ];
22
+ const defaultQuickApps = [
23
+ {
24
+ href: "/dashboard",
25
+ label: "Dashboard",
26
+ description: "Primary workspace overview",
27
+ icon: "document",
28
+ },
29
+ {
30
+ href: "/reports",
31
+ label: "Reports",
32
+ description: "Reports and audit outputs",
33
+ icon: "document",
34
+ },
35
+ ];
36
+ function initialsFromName(name) {
37
+ const value = name
38
+ .split(/\s+/)
39
+ .filter(Boolean)
40
+ .slice(0, 2)
41
+ .map((part) => part[0]?.toUpperCase())
42
+ .join("");
43
+ return value || "NX";
44
+ }
45
+ function getSidebarSnapshot() {
46
+ if (typeof window === "undefined") {
47
+ return false;
48
+ }
49
+ return window.localStorage.getItem(SIDEBAR_STORAGE_KEY) === "true";
50
+ }
51
+ function getServerSidebarSnapshot() {
52
+ return false;
53
+ }
54
+ function subscribeToSidebar(callback) {
55
+ if (typeof window === "undefined") {
56
+ return () => { };
57
+ }
58
+ function handleStorage(event) {
59
+ if (event.key === SIDEBAR_STORAGE_KEY) {
60
+ callback();
61
+ }
62
+ }
63
+ window.addEventListener("storage", handleStorage);
64
+ window.addEventListener(SIDEBAR_STORAGE_EVENT, callback);
65
+ return () => {
66
+ window.removeEventListener("storage", handleStorage);
67
+ window.removeEventListener(SIDEBAR_STORAGE_EVENT, callback);
68
+ };
69
+ }
70
+ function setSidebarOpen(nextValue) {
71
+ localStorage.setItem(SIDEBAR_STORAGE_KEY, String(nextValue));
72
+ document.documentElement.dataset.leftSidebarOpen = String(nextValue);
73
+ window.dispatchEvent(new Event(SIDEBAR_STORAGE_EVENT));
74
+ }
75
+ function getWorkspaceSnapshot() {
76
+ if (typeof window === "undefined") {
77
+ return "";
78
+ }
79
+ return window.localStorage.getItem(WORKSPACE_STORAGE_KEY) || "";
80
+ }
81
+ function getServerWorkspaceSnapshot() {
82
+ return "";
83
+ }
84
+ function subscribeToWorkspace(callback) {
85
+ if (typeof window === "undefined") {
86
+ return () => { };
87
+ }
88
+ function handleStorage(event) {
89
+ if (event.key === WORKSPACE_STORAGE_KEY) {
90
+ callback();
91
+ }
92
+ }
93
+ window.addEventListener("storage", handleStorage);
94
+ window.addEventListener(WORKSPACE_STORAGE_EVENT, callback);
95
+ return () => {
96
+ window.removeEventListener("storage", handleStorage);
97
+ window.removeEventListener(WORKSPACE_STORAGE_EVENT, callback);
98
+ };
99
+ }
100
+ function setStoredWorkspaceId(workspaceId) {
101
+ localStorage.setItem(WORKSPACE_STORAGE_KEY, workspaceId);
102
+ window.dispatchEvent(new Event(WORKSPACE_STORAGE_EVENT));
103
+ }
104
+ function formatPathSegment(value) {
105
+ return value
106
+ .split("-")
107
+ .filter(Boolean)
108
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
109
+ .join(" ");
110
+ }
111
+ function getBreadcrumbItems(pathname, activeTab) {
112
+ const segments = pathname.split("/").filter(Boolean);
113
+ if (segments.length === 0) {
114
+ return [{ label: "Home" }];
115
+ }
116
+ const hasSettingsTab = segments[0] === "settings" && Boolean(activeTab);
117
+ const items = segments.map((segment, index) => {
118
+ const isLastPathSegment = index === segments.length - 1;
119
+ const isCurrent = isLastPathSegment && !hasSettingsTab;
120
+ const href = `/${segments.slice(0, index + 1).join("/")}`;
121
+ return {
122
+ label: formatPathSegment(segment),
123
+ href: isCurrent ? undefined : href,
124
+ };
125
+ });
126
+ if (hasSettingsTab && activeTab) {
127
+ items.push({
128
+ label: formatPathSegment(activeTab),
129
+ href: undefined,
130
+ });
131
+ }
132
+ return items;
133
+ }
134
+ function LogoMark() {
135
+ return (_jsx(NxtodeLogo, { variant: "icon", priority: true, className: "h-10 w-10 rounded-xl" }));
136
+ }
137
+ function HomeIcon({ className = "h-5 w-5" }) {
138
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("path", { d: "m3 11 9-8 9 8" }), _jsx("path", { d: "M5 10v10h14V10" }), _jsx("path", { d: "M9 20v-6h6v6" })] }));
139
+ }
140
+ function SearchIcon({ className = "h-4 w-4" }) {
141
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("path", { d: "m21 21-4.35-4.35" }), _jsx("circle", { cx: "11", cy: "11", r: "7" })] }));
142
+ }
143
+ function ChevronIcon({ className = "h-5 w-5" }) {
144
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: _jsx("path", { d: "m9 18 6-6-6-6" }) }));
145
+ }
146
+ function ArrowUpIcon({ className = "h-5 w-5" }) {
147
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.9", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: _jsx("path", { d: "m18 15-6-6-6 6" }) }));
148
+ }
149
+ function FolderIcon({ className = "h-5 w-5" }) {
150
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: _jsx("path", { d: "M3.5 7.5a2 2 0 0 1 2-2h4l2 2h7a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z" }) }));
151
+ }
152
+ function BuildingIcon({ className = "h-5 w-5" }) {
153
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("path", { d: "M4 21V5.5A2.5 2.5 0 0 1 6.5 3h7A2.5 2.5 0 0 1 16 5.5V21" }), _jsx("path", { d: "M16 8h1.5A2.5 2.5 0 0 1 20 10.5V21" }), _jsx("path", { d: "M8 7h4" }), _jsx("path", { d: "M8 11h4" }), _jsx("path", { d: "M8 15h4" }), _jsx("path", { d: "M3 21h18" })] }));
154
+ }
155
+ function CheckIcon({ className = "h-4 w-4" }) {
156
+ return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: _jsx("path", { d: "m5 12 4 4L19 6" }) }));
157
+ }
158
+ function DocumentIcon({ className = "h-5 w-5" }) {
159
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("path", { d: "M7 3.5h6l4 4v13H7z" }), _jsx("path", { d: "M13 3.5v4h4" }), _jsx("path", { d: "M9.5 12h5" }), _jsx("path", { d: "M9.5 15h5" })] }));
160
+ }
161
+ function WorkflowIcon({ className = "h-5 w-5" }) {
162
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("path", { d: "M6 6h4v4H6z" }), _jsx("path", { d: "M14 14h4v4h-4z" }), _jsx("path", { d: "M10 8h2a4 4 0 0 1 4 4v2" })] }));
163
+ }
164
+ function DatabaseIcon({ className = "h-5 w-5" }) {
165
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("ellipse", { cx: "12", cy: "6", rx: "7", ry: "3" }), _jsx("path", { d: "M5 6v6c0 1.66 3.13 3 7 3s7-1.34 7-3V6" }), _jsx("path", { d: "M5 12v6c0 1.66 3.13 3 7 3s7-1.34 7-3v-6" })] }));
166
+ }
167
+ function SettingsIcon({ className = "h-5 w-5" }) {
168
+ return (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("path", { d: "M12 15.5A3.5 3.5 0 1 0 12 8a3.5 3.5 0 0 0 0 7.5Z" }), _jsx("path", { d: "M19.4 15a1.8 1.8 0 0 0 .36 2l.04.04a2.1 2.1 0 0 1-2.97 2.97l-.04-.04a1.8 1.8 0 0 0-2-.36 1.8 1.8 0 0 0-1.09 1.65V21a2.1 2.1 0 0 1-4.2 0v-.06a1.8 1.8 0 0 0-1.09-1.65 1.8 1.8 0 0 0-2 .36l-.04.04a2.1 2.1 0 0 1-2.97-2.97l.04-.04a1.8 1.8 0 0 0 .36-2 1.8 1.8 0 0 0-1.65-1.09H2a2.1 2.1 0 0 1 0-4.2h.06a1.8 1.8 0 0 0 1.65-1.09 1.8 1.8 0 0 0-.36-2l-.04-.04a2.1 2.1 0 0 1 2.97-2.97l.04.04a1.8 1.8 0 0 0 2 .36 1.8 1.8 0 0 0 1.09-1.65V2a2.1 2.1 0 0 1 4.2 0v.06a1.8 1.8 0 0 0 1.09 1.65 1.8 1.8 0 0 0 2-.36l.04-.04a2.1 2.1 0 0 1 2.97 2.97l-.04.04a1.8 1.8 0 0 0-.36 2 1.8 1.8 0 0 0 1.65 1.09H22a2.1 2.1 0 0 1 0 4.2h-.06A1.8 1.8 0 0 0 19.4 15Z" })] }));
169
+ }
170
+ function getNavIcon(icon) {
171
+ switch (icon) {
172
+ case "reports":
173
+ return DocumentIcon;
174
+ case "organizations":
175
+ case "portal":
176
+ return BuildingIcon;
177
+ case "settings":
178
+ case "integrations":
179
+ return SettingsIcon;
180
+ case "folder":
181
+ return FolderIcon;
182
+ case "dashboard":
183
+ default:
184
+ return HomeIcon;
185
+ }
186
+ }
187
+ function getQuickIcon(icon) {
188
+ switch (icon) {
189
+ case "database":
190
+ case "portal":
191
+ return DatabaseIcon;
192
+ case "workflow":
193
+ return WorkflowIcon;
194
+ case "document":
195
+ default:
196
+ return DocumentIcon;
197
+ }
198
+ }
199
+ export function NxtodeAppShell({ user, activeItem, navigation = defaultNavigation, children, workspace, workspaces = [], quickApps = defaultQuickApps, searchPlaceholder = "Search or ask", unreadNotifications = 0, appHomeHref = "/dashboard", }) {
200
+ const pathname = usePathname();
201
+ const searchParams = useSearchParams();
202
+ const activeTab = searchParams.get("tab");
203
+ const workspaceButtonRef = useRef(null);
204
+ const workspaceFlyoutRef = useRef(null);
205
+ const sampleButtonRef = useRef(null);
206
+ const sampleFlyoutRef = useRef(null);
207
+ const activeWorkspaceId = useSyncExternalStore(subscribeToWorkspace, getWorkspaceSnapshot, getServerWorkspaceSnapshot);
208
+ const [isWorkspaceFlyoutOpen, setIsWorkspaceFlyoutOpen] = useState(false);
209
+ const [isSampleFlyoutOpen, setIsSampleFlyoutOpen] = useState(false);
210
+ const [workspaceFlyoutTop, setWorkspaceFlyoutTop] = useState(128);
211
+ const [sampleFlyoutTop, setSampleFlyoutTop] = useState(128);
212
+ const [scrollProgress, setScrollProgress] = useState(0);
213
+ const [isScrollTopVisible, setIsScrollTopVisible] = useState(false);
214
+ const breadcrumbItems = getBreadcrumbItems(pathname, activeTab);
215
+ const workspaceItems = workspaces.length
216
+ ? workspaces
217
+ : workspace
218
+ ? [workspace]
219
+ : [{ id: "workspace", name: "Personal account", initials: "AC", type: "Account", role: "Account" }];
220
+ const activeWorkspace = workspaceItems.find((item) => item.id === activeWorkspaceId) ??
221
+ workspace ??
222
+ workspaceItems[0];
223
+ const isSidebarOpen = useSyncExternalStore(subscribeToSidebar, getSidebarSnapshot, getServerSidebarSnapshot);
224
+ useEffect(() => {
225
+ if (!isSampleFlyoutOpen && !isWorkspaceFlyoutOpen) {
226
+ return;
227
+ }
228
+ function handlePointerDown(event) {
229
+ if (!(event.target instanceof Node)) {
230
+ return;
231
+ }
232
+ const clickedWorkspaceButton = workspaceButtonRef.current?.contains(event.target);
233
+ const clickedWorkspaceFlyout = workspaceFlyoutRef.current?.contains(event.target);
234
+ const clickedSampleButton = sampleButtonRef.current?.contains(event.target);
235
+ const clickedSampleFlyout = sampleFlyoutRef.current?.contains(event.target);
236
+ if (!clickedWorkspaceButton && !clickedWorkspaceFlyout && !clickedSampleButton && !clickedSampleFlyout) {
237
+ setIsWorkspaceFlyoutOpen(false);
238
+ setIsSampleFlyoutOpen(false);
239
+ }
240
+ }
241
+ function handleKeyDown(event) {
242
+ if (event.key === "Escape") {
243
+ setIsWorkspaceFlyoutOpen(false);
244
+ setIsSampleFlyoutOpen(false);
245
+ }
246
+ }
247
+ document.addEventListener("pointerdown", handlePointerDown);
248
+ document.addEventListener("keydown", handleKeyDown);
249
+ return () => {
250
+ document.removeEventListener("pointerdown", handlePointerDown);
251
+ document.removeEventListener("keydown", handleKeyDown);
252
+ };
253
+ }, [isSampleFlyoutOpen, isWorkspaceFlyoutOpen]);
254
+ useEffect(() => {
255
+ let frameId = 0;
256
+ function updateScrollState() {
257
+ frameId = 0;
258
+ const scrollableHeight = document.documentElement.scrollHeight - window.innerHeight;
259
+ const nextProgress = scrollableHeight > 0
260
+ ? Math.min(100, Math.max(0, (window.scrollY / scrollableHeight) * 100))
261
+ : 0;
262
+ setScrollProgress(nextProgress);
263
+ setIsScrollTopVisible(window.scrollY > SCROLL_TOP_VISIBLE_THRESHOLD);
264
+ }
265
+ function scheduleUpdate() {
266
+ if (frameId !== 0)
267
+ return;
268
+ frameId = window.requestAnimationFrame(updateScrollState);
269
+ }
270
+ scheduleUpdate();
271
+ window.addEventListener("scroll", scheduleUpdate, { passive: true });
272
+ window.addEventListener("resize", scheduleUpdate);
273
+ return () => {
274
+ if (frameId !== 0)
275
+ window.cancelAnimationFrame(frameId);
276
+ window.removeEventListener("scroll", scheduleUpdate);
277
+ window.removeEventListener("resize", scheduleUpdate);
278
+ };
279
+ }, []);
280
+ useEffect(() => {
281
+ if (!isWorkspaceFlyoutOpen || !workspaceButtonRef.current)
282
+ return;
283
+ const rect = workspaceButtonRef.current.getBoundingClientRect();
284
+ setWorkspaceFlyoutTop(rect.top);
285
+ }, [isWorkspaceFlyoutOpen, isSidebarOpen]);
286
+ useEffect(() => {
287
+ if (!isSampleFlyoutOpen || !sampleButtonRef.current)
288
+ return;
289
+ const rect = sampleButtonRef.current.getBoundingClientRect();
290
+ setSampleFlyoutTop(rect.top);
291
+ }, [isSampleFlyoutOpen, isSidebarOpen]);
292
+ function toggleSidebar() {
293
+ setSidebarOpen(!isSidebarOpen);
294
+ }
295
+ function selectWorkspace(workspaceId) {
296
+ setStoredWorkspaceId(workspaceId);
297
+ setIsWorkspaceFlyoutOpen(false);
298
+ }
299
+ function toggleWorkspaceFlyout() {
300
+ if (workspaceButtonRef.current) {
301
+ const rect = workspaceButtonRef.current.getBoundingClientRect();
302
+ setWorkspaceFlyoutTop(rect.top);
303
+ }
304
+ setIsSampleFlyoutOpen(false);
305
+ setIsWorkspaceFlyoutOpen((current) => !current);
306
+ }
307
+ function toggleSampleFlyout() {
308
+ if (sampleButtonRef.current) {
309
+ const rect = sampleButtonRef.current.getBoundingClientRect();
310
+ setSampleFlyoutTop(rect.top);
311
+ }
312
+ setIsWorkspaceFlyoutOpen(false);
313
+ setIsSampleFlyoutOpen((current) => !current);
314
+ }
315
+ function scrollToTop() {
316
+ window.scrollTo({
317
+ top: 0,
318
+ behavior: "smooth",
319
+ });
320
+ }
321
+ function isActive(item) {
322
+ if (activeItem && item.activeKey)
323
+ return activeItem === item.activeKey;
324
+ if (item.href === "/dashboard")
325
+ return pathname === "/" || pathname === "/dashboard";
326
+ return pathname === item.href || pathname.startsWith(`${item.href}/`);
327
+ }
328
+ return (_jsxs("div", { className: "app-shell-root min-h-screen bg-zinc-950 text-white", children: [_jsxs("header", { className: "app-top-nav fixed inset-x-0 top-0 z-50 border-b border-zinc-800 bg-zinc-950/95 backdrop-blur", children: [_jsxs("div", { className: "flex h-16 items-center gap-4 px-4 sm:px-6 lg:pl-3 lg:pr-6", children: [_jsx(Link, { href: appHomeHref, className: "flex h-10 w-10 shrink-0 items-center justify-center", "aria-label": `${appConfig.name} home`, children: _jsx(LogoMark, {}) }), _jsxs("div", { className: "relative min-w-0 flex-1 sm:max-w-md xl:max-w-xl", children: [_jsx(SearchIcon, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-zinc-500" }), _jsx("input", { type: "search", placeholder: searchPlaceholder, className: "h-10 w-full rounded-xl border border-zinc-800 bg-zinc-900 pl-9 pr-3 text-sm text-zinc-100 outline-none transition placeholder:text-zinc-500 focus:border-zinc-600" })] }), _jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [_jsx(NotificationMenu, { unreadCount: unreadNotifications }), _jsx(AppSwitcherMenu, {}), _jsx(ProfileMenu, { user: user })] })] }), _jsx("nav", { className: "flex gap-1 overflow-x-auto border-t border-zinc-900 px-4 py-2 lg:hidden", "aria-label": "Mobile navigation", children: navigation.slice(0, 4).map((item) => {
329
+ const Icon = getNavIcon(item.icon);
330
+ const active = isActive(item);
331
+ return (_jsxs(Link, { href: item.href, className: `inline-flex items-center gap-2 rounded-xl px-3 py-2 text-sm transition ${active ? "bg-zinc-800 text-white" : "text-zinc-400 hover:bg-zinc-900 hover:text-zinc-100"}`, children: [_jsx(Icon, { className: "h-4 w-4" }), item.label] }, item.href));
332
+ }) })] }), _jsx("div", { className: "app-scroll-progress-track", "aria-hidden": "true", children: _jsx("span", { className: "app-scroll-progress-fill", style: { width: `${scrollProgress}%` } }) }), _jsx("aside", { className: "app-left-sidebar fixed bottom-0 left-0 top-16 z-40 hidden overflow-hidden border-r lg:block", "aria-label": "Primary navigation", "data-state": isSidebarOpen ? "open" : "closed", children: _jsxs("nav", { className: "app-left-sidebar-nav", children: [_jsx("div", { className: "app-workspace-sidebar-block", children: _jsxs("button", { ref: workspaceButtonRef, type: "button", onClick: toggleWorkspaceFlyout, className: `app-left-sidebar-item app-workspace-switcher-button ${isWorkspaceFlyoutOpen ? "is-active" : ""}`, "aria-expanded": isWorkspaceFlyoutOpen, "aria-haspopup": "menu", "aria-label": "Switch workspace", title: "Switch workspace", children: [_jsx("span", { className: "app-left-sidebar-icon app-workspace-avatar", children: activeWorkspace.initials || initialsFromName(activeWorkspace.name) }), _jsxs("span", { className: "app-left-sidebar-label app-workspace-label", children: [_jsx("span", { className: "app-workspace-name", children: activeWorkspace.name }), _jsxs("span", { className: "app-workspace-kind", children: [activeWorkspace.type || "Workspace", " \u00B7 ", activeWorkspace.role || activeWorkspace.status || "Active"] })] }), _jsx("span", { className: "app-left-sidebar-disclosure", children: _jsx(ChevronIcon, { className: `h-4 w-4 transition-transform duration-150 ${isWorkspaceFlyoutOpen ? "rotate-90" : "rotate-0"}` }) })] }) }), _jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-2", children: [navigation.map((item) => {
333
+ const Icon = getNavIcon(item.icon);
334
+ const active = isActive(item);
335
+ return (_jsxs(Link, { href: item.href, className: `app-left-sidebar-item ${active ? "is-active" : ""}`, "aria-current": active ? "page" : undefined, "aria-label": item.label, title: item.label, children: [_jsx("span", { className: "app-left-sidebar-icon", children: _jsx(Icon, { className: "h-5 w-5" }) }), _jsx("span", { className: "app-left-sidebar-label", children: item.label })] }, item.href));
336
+ }), _jsxs("button", { ref: sampleButtonRef, type: "button", onClick: toggleSampleFlyout, className: `app-left-sidebar-item ${isSampleFlyoutOpen ? "is-active" : ""}`, "aria-expanded": isSampleFlyoutOpen, "aria-haspopup": "menu", "aria-label": "Quick apps", title: "Quick apps", children: [_jsx("span", { className: "app-left-sidebar-icon", children: _jsx(FolderIcon, { className: "h-5 w-5" }) }), _jsx("span", { className: "app-left-sidebar-label", children: "Quick apps" }), _jsx("span", { className: "app-left-sidebar-disclosure", children: _jsx(ChevronIcon, { className: `h-4 w-4 transition-transform duration-150 ${isSampleFlyoutOpen ? "rotate-90" : "rotate-0"}` }) })] })] }), _jsxs("button", { type: "button", onClick: toggleSidebar, className: "app-left-sidebar-item", "aria-label": isSidebarOpen ? "Collapse sidebar" : "Expand sidebar", "aria-expanded": isSidebarOpen, title: isSidebarOpen ? "Collapse sidebar" : "Expand sidebar", children: [_jsx("span", { className: "app-left-sidebar-icon", children: _jsx(ChevronIcon, { className: `h-5 w-5 transition-transform duration-150 ${isSidebarOpen ? "rotate-180" : "rotate-0"}` }) }), _jsx("span", { className: "app-left-sidebar-label", children: "Collapse" })] })] }) }), isWorkspaceFlyoutOpen ? (_jsxs("div", { ref: workspaceFlyoutRef, className: "app-left-sidebar-flyout app-workspace-flyout fixed z-[55] hidden w-80 lg:block", style: { top: workspaceFlyoutTop }, role: "menu", "aria-label": "Workspace switcher", children: [_jsxs("div", { className: "app-left-sidebar-flyout-header", children: [_jsx("div", { className: "app-left-sidebar-flyout-header-icon", children: _jsx(BuildingIcon, { className: "h-4 w-4" }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "app-left-sidebar-flyout-title", children: "Workspaces" }), _jsx("p", { className: "app-left-sidebar-flyout-description", children: "Switch workspace or open the selected workspace." })] })] }), _jsx("div", { className: "app-workspace-flyout-list", children: workspaceItems.map((item) => {
337
+ const active = item.id === activeWorkspace.id;
338
+ return (_jsxs("button", { type: "button", onClick: () => selectWorkspace(item.id), className: `app-workspace-flyout-link ${active ? "is-active" : ""}`, role: "menuitem", children: [_jsx("span", { className: "app-workspace-flyout-avatar", children: item.initials || initialsFromName(item.name) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "app-workspace-flyout-name", children: item.name }), _jsxs("span", { className: "app-workspace-flyout-meta", children: [item.type || "Workspace", " \u00B7 ", item.status || item.role || "Active"] })] }), active ? _jsx(CheckIcon, { className: "h-4 w-4" }) : null] }, item.id));
339
+ }) }), _jsx("div", { className: "app-workspace-flyout-actions", children: activeWorkspace.manageUrl ? (_jsxs("a", { href: activeWorkspace.manageUrl, className: "app-workspace-flyout-action", children: [_jsx(ChevronIcon, { className: "h-4 w-4" }), "Manage workspace"] })) : (_jsxs("span", { className: "app-workspace-flyout-action opacity-60", children: [_jsx(ChevronIcon, { className: "h-4 w-4" }), "No management link configured"] })) })] })) : null, isSampleFlyoutOpen ? (_jsxs("div", { ref: sampleFlyoutRef, className: "app-left-sidebar-flyout fixed z-[55] hidden w-72 lg:block", style: { top: sampleFlyoutTop }, role: "menu", "aria-label": "Quick apps", children: [_jsxs("div", { className: "app-left-sidebar-flyout-header", children: [_jsx("div", { className: "app-left-sidebar-flyout-header-icon", children: _jsx(FolderIcon, { className: "h-4 w-4" }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "app-left-sidebar-flyout-title", children: "Quick apps" }), _jsx("p", { className: "app-left-sidebar-flyout-description", children: "Fast access to NXTode apps and work surfaces." })] })] }), _jsx("div", { className: "app-left-sidebar-flyout-list", children: quickApps.map((item) => {
340
+ const ItemIcon = getQuickIcon(item.icon);
341
+ return (_jsxs(Link, { href: item.href, className: "app-left-sidebar-flyout-link", role: "menuitem", onClick: () => setIsSampleFlyoutOpen(false), children: [_jsx("span", { className: "app-left-sidebar-flyout-link-icon", children: _jsx(ItemIcon, {}) }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "app-left-sidebar-flyout-link-label", children: item.label }), _jsx("span", { className: "app-left-sidebar-flyout-link-description", children: item.description })] })] }, item.label));
342
+ }) })] })) : null, _jsx("main", { className: "app-shell-content min-h-screen", children: _jsxs("div", { className: "app-shell-content-inner px-4 pb-6 pt-2 sm:px-6 lg:px-8", children: [_jsx("nav", { className: "app-breadcrumb-inline", "aria-label": "Breadcrumb", children: _jsx("ol", { className: "app-breadcrumb-list", children: breadcrumbItems.map((item, index) => {
343
+ const isCurrent = index === breadcrumbItems.length - 1;
344
+ return (_jsxs("li", { className: "app-breadcrumb-item", children: [index > 0 ? _jsx(ChevronIcon, { className: "app-breadcrumb-chevron", "aria-hidden": "true" }) : null, item.href && !isCurrent ? (_jsx(Link, { href: item.href, className: "app-breadcrumb-link", children: item.label })) : (_jsx("span", { className: "app-breadcrumb-current", "aria-current": isCurrent ? "page" : undefined, children: item.label }))] }, `${item.label}-${index}`));
345
+ }) }) }), children] }) }), _jsx("div", { className: "app-shell-footer", children: _jsx(SiteFooter, { compact: true }) }), _jsx("button", { type: "button", onClick: scrollToTop, className: `app-scroll-top-button ${isScrollTopVisible ? "is-visible" : ""}`, "aria-label": "Scroll to top", title: "Scroll to top", children: _jsx(ArrowUpIcon, { className: "h-5 w-5" }) })] }));
346
+ }
347
+ export { NxtodeAppShell as AppShell };
348
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@nxtode/app-shell",
3
+ "version": "0.2.1",
4
+ "private": false,
5
+ "description": "Shared NXTode application shell for top nav, sidebar, footer, and app layout.",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "styles.css"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public",
17
+ "registry": "https://registry.npmjs.org/"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json",
21
+ "typecheck": "tsc --noEmit",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "peerDependencies": {
25
+ "next": "^16.0.0",
26
+ "react": "^19.0.0",
27
+ "react-dom": "^19.0.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20",
31
+ "@types/react": "^19",
32
+ "@types/react-dom": "^19",
33
+ "next": "16.2.6",
34
+ "react": "19.2.4",
35
+ "react-dom": "19.2.4",
36
+ "typescript": "^5"
37
+ },
38
+ "exports": {
39
+ ".": {
40
+ "types": "./dist/index.d.ts",
41
+ "import": "./dist/index.js"
42
+ },
43
+ "./styles.css": "./styles.css"
44
+ }
45
+ }