@webdevarif/dashui 1.2.6 → 1.2.7
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/dist/index.js +95 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +84 -0
- package/dist/index.mjs.map +1 -1
- package/dist/setup.js +130 -0
- package/dist/setup.js.map +1 -0
- package/dist/setup.mjs +86 -0
- package/dist/setup.mjs.map +1 -0
- package/dist/styles/animations.css +13 -0
- package/dist/styles/globals.css +437 -0
- package/dist/tokens/index.css +11 -0
- package/dist/tokens/primitives.css +92 -0
- package/dist/tokens/semantic-dark.css +87 -0
- package/dist/tokens/semantic-light.css +116 -0
- package/dist/tokens/storefront-schemes.css +96 -0
- package/package.json +8 -3
- package/dist/index.d.mts +0 -836
- package/dist/index.d.ts +0 -836
package/dist/setup.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/setup/index.ts
|
|
31
|
+
var setup_exports = {};
|
|
32
|
+
__export(setup_exports, {
|
|
33
|
+
AuthProvider: () => AuthProvider,
|
|
34
|
+
I18nProvider: () => I18nProvider,
|
|
35
|
+
RootProvider: () => RootProvider,
|
|
36
|
+
SWRProvider: () => SWRProvider,
|
|
37
|
+
prisma: () => prisma,
|
|
38
|
+
useAuth: () => useAuth,
|
|
39
|
+
useFetch: () => useFetch,
|
|
40
|
+
useI18n: () => useI18n
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(setup_exports);
|
|
43
|
+
|
|
44
|
+
// src/setup/providers/auth-provider.tsx
|
|
45
|
+
var import_react = require("next-auth/react");
|
|
46
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
47
|
+
function AuthProvider({ children, session }) {
|
|
48
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.SessionProvider, { session, children });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// src/setup/providers/i18n-provider.tsx
|
|
52
|
+
var import_next_intl = require("next-intl");
|
|
53
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
54
|
+
function I18nProvider({
|
|
55
|
+
children,
|
|
56
|
+
locale,
|
|
57
|
+
messages,
|
|
58
|
+
timeZone = "UTC"
|
|
59
|
+
}) {
|
|
60
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_next_intl.IntlProvider, { locale, messages, timeZone, children });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// src/setup/providers/swr-provider.tsx
|
|
64
|
+
var import_swr = require("swr");
|
|
65
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
66
|
+
var DEFAULT_SWR_CONFIG = {
|
|
67
|
+
revalidateOnFocus: false,
|
|
68
|
+
revalidateOnReconnect: true,
|
|
69
|
+
dedupingInterval: 6e4,
|
|
70
|
+
focusThrottleInterval: 3e5
|
|
71
|
+
};
|
|
72
|
+
function SWRProvider({ children }) {
|
|
73
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_swr.SWRConfig, { value: { fetcher: (url) => fetch(url).then((r) => r.json()), ...DEFAULT_SWR_CONFIG }, children });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// src/setup/providers/root-provider.tsx
|
|
77
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
78
|
+
function RootProvider({
|
|
79
|
+
children,
|
|
80
|
+
session,
|
|
81
|
+
locale,
|
|
82
|
+
messages,
|
|
83
|
+
timeZone
|
|
84
|
+
}) {
|
|
85
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AuthProvider, { session, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(I18nProvider, { locale, messages, timeZone, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SWRProvider, { children }) }) });
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// src/setup/hooks/use-auth.ts
|
|
89
|
+
var import_react2 = require("next-auth/react");
|
|
90
|
+
function useAuth() {
|
|
91
|
+
return (0, import_react2.useSession)();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// src/setup/hooks/use-i18n.ts
|
|
95
|
+
var import_next_intl2 = require("next-intl");
|
|
96
|
+
function useI18n() {
|
|
97
|
+
return (0, import_next_intl2.useIntl)();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// src/setup/hooks/use-fetch.ts
|
|
101
|
+
var import_swr2 = __toESM(require("swr"));
|
|
102
|
+
function useFetch(url, options) {
|
|
103
|
+
const { data, error, isLoading } = (0, import_swr2.default)(url, options);
|
|
104
|
+
return {
|
|
105
|
+
data,
|
|
106
|
+
isLoading,
|
|
107
|
+
error,
|
|
108
|
+
isError: !!error
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// src/setup/lib/prisma.ts
|
|
113
|
+
var import_client = require("@prisma/client");
|
|
114
|
+
var globalForPrisma = global;
|
|
115
|
+
var prisma = globalForPrisma.prisma || new import_client.PrismaClient({
|
|
116
|
+
log: process.env.NODE_ENV === "development" ? ["query"] : []
|
|
117
|
+
});
|
|
118
|
+
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
|
|
119
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
120
|
+
0 && (module.exports = {
|
|
121
|
+
AuthProvider,
|
|
122
|
+
I18nProvider,
|
|
123
|
+
RootProvider,
|
|
124
|
+
SWRProvider,
|
|
125
|
+
prisma,
|
|
126
|
+
useAuth,
|
|
127
|
+
useFetch,
|
|
128
|
+
useI18n
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/setup/index.ts","../src/setup/providers/auth-provider.tsx","../src/setup/providers/i18n-provider.tsx","../src/setup/providers/swr-provider.tsx","../src/setup/providers/root-provider.tsx","../src/setup/hooks/use-auth.ts","../src/setup/hooks/use-i18n.ts","../src/setup/hooks/use-fetch.ts","../src/setup/lib/prisma.ts"],"sourcesContent":["// Setup Providers\nexport * from './providers'\n\n// Setup Hooks\nexport * from './hooks'\n\n// Setup Utilities\nexport * from './lib'\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SessionProvider } from 'next-auth/react'\n\ninterface AuthProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * AuthProvider - Wraps your app with NextAuth SessionProvider\n * \n * Usage:\n * ```tsx\n * import { AuthProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <AuthProvider session={session}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function AuthProvider({ children, session }: AuthProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n </SessionProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { IntlProvider } from 'next-intl'\n\ninterface I18nProviderProps {\n children: ReactNode\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * I18nProvider - Wraps your app with next-intl IntlProvider\n * \n * Usage:\n * ```tsx\n * import { I18nProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <I18nProvider locale={locale} messages={messages} timeZone=\"Asia/Dhaka\">\n * <App />\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider({ \n children, \n locale, \n messages, \n timeZone = 'UTC' \n}: I18nProviderProps) {\n return (\n <IntlProvider locale={locale} messages={messages} timeZone={timeZone}>\n {children}\n </IntlProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SWRConfig } from 'swr'\n\ninterface SWRProviderProps {\n children: ReactNode\n}\n\nconst DEFAULT_SWR_CONFIG = {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000,\n focusThrottleInterval: 300000,\n}\n\n/**\n * SWRProvider - Wraps your app with optimized SWR config\n * \n * Default config:\n * - revalidateOnFocus: false (no refresh on window focus)\n * - revalidateOnReconnect: true (refresh when network reconnects)\n * - dedupingInterval: 60s (deduplicate requests within 60s)\n * - focusThrottleInterval: 5min (throttle focus revalidation)\n * \n * Usage:\n * ```tsx\n * import { SWRProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <SWRProvider>\n * <App />\n * </SWRProvider>\n * ```\n */\nexport function SWRProvider({ children }: SWRProviderProps) {\n return (\n <SWRConfig value={{ fetcher: (url) => fetch(url).then(r => r.json()), ...DEFAULT_SWR_CONFIG }}>\n {children}\n </SWRConfig>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { AuthProvider } from './auth-provider'\nimport { I18nProvider } from './i18n-provider'\nimport { SWRProvider } from './swr-provider'\n\ninterface RootProviderProps {\n children: ReactNode\n session?: any\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * RootProvider - Single provider that combines Auth + I18n + SWR\n * \n * Usage in layout.tsx:\n * ```tsx\n * import { RootProvider } from '@webdevarif/dashui-setup'\n * \n * export default function RootLayout({ \n * children, \n * params: { locale } \n * }: {\n * children: React.ReactNode\n * params: { locale: string }\n * }) {\n * const session = await auth()\n * const messages = await import(`../../messages/${locale}.json`)\n * \n * return (\n * <html lang={locale}>\n * <body>\n * <RootProvider \n * session={session}\n * locale={locale}\n * messages={messages.default}\n * >\n * {children}\n * </RootProvider>\n * </body>\n * </html>\n * )\n * }\n * ```\n */\nexport function RootProvider({\n children,\n session,\n locale,\n messages,\n timeZone,\n}: RootProviderProps) {\n return (\n <AuthProvider session={session}>\n <I18nProvider locale={locale} messages={messages} timeZone={timeZone}>\n <SWRProvider>\n {children}\n </SWRProvider>\n </I18nProvider>\n </AuthProvider>\n )\n}\n","import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","import { useIntl } from 'next-intl'\n\n/**\n * useI18n - Hook to access translations\n * \n * Returns the next-intl useIntl hook result\n * \n * Usage:\n * ```tsx\n * import { useI18n } from '@webdevarif/dashui-setup/hooks'\n * \n * function Header() {\n * const t = useI18n()\n * \n * return <h1>{t('home.title')}</h1>\n * }\n * ```\n */\nexport function useI18n() {\n return useIntl()\n}\n","import useSWR from 'swr'\n\n/**\n * useFetch - Simplified hook for data fetching with SWR\n * \n * Returns SWR hook result with built-in error handling\n * \n * Usage:\n * ```tsx\n * import { useFetch } from '@webdevarif/dashui-setup/hooks'\n * \n * function UserList() {\n * const { data, isLoading, error } = useFetch('/api/users')\n * \n * if (isLoading) return <div>Loading...</div>\n * if (error) return <div>Error: {error.message}</div>\n * \n * return (\n * <ul>\n * {data?.map(user => <li key={user.id}>{user.name}</li>)}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useFetch<T = any>(\n url: string | null | undefined,\n options?: any\n) {\n const { data, error, isLoading } = useSWR<T>(url, options)\n\n return {\n data,\n isLoading,\n error,\n isError: !!error,\n }\n}\n","import { PrismaClient } from '@prisma/client'\n\n/**\n * Prisma Singleton - Reuse PrismaClient across requests\n * \n * In development: Hot reload can create multiple PrismaClient instances\n * This singleton pattern prevents connection pool exhaustion\n * \n * Usage in lib/prisma.ts:\n * ```tsx\n * export { prisma } from '@webdevarif/dashui-setup/lib'\n * ```\n * \n * Then use in API routes:\n * ```tsx\n * import { prisma } from '@/lib/prisma'\n * \n * export async function GET() {\n * const users = await prisma.user.findMany()\n * return Response.json(users)\n * }\n * ```\n */\n\nconst globalForPrisma = global as unknown as { prisma: PrismaClient }\n\nexport const prisma =\n globalForPrisma.prisma ||\n new PrismaClient({\n log: process.env.NODE_ENV === 'development' ? ['query'] : [],\n })\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGA,mBAAgC;AAqB5B;AAFG,SAAS,aAAa,EAAE,UAAU,QAAQ,GAAsB;AACrE,SACE,4CAAC,gCAAgB,SACd,UACH;AAEJ;;;ACzBA,uBAA6B;AA4BzB,IAAAA,sBAAA;AAPG,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAsB;AACpB,SACE,6CAAC,iCAAa,QAAgB,UAAoB,UAC/C,UACH;AAEJ;;;AChCA,iBAA0B;AAiCtB,IAAAC,sBAAA;AA3BJ,IAAM,qBAAqB;AAAA,EACzB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAClB,uBAAuB;AACzB;AAoBO,SAAS,YAAY,EAAE,SAAS,GAAqB;AAC1D,SACE,6CAAC,wBAAU,OAAO,EAAE,SAAS,CAAC,QAAQ,MAAM,GAAG,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,GAAG,GAAG,mBAAmB,GACzF,UACH;AAEJ;;;ACkBQ,IAAAC,sBAAA;AAVD,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,SACE,6CAAC,gBAAa,SACZ,uDAAC,gBAAa,QAAgB,UAAoB,UAChD,uDAAC,eACE,UACH,GACF,GACF;AAEJ;;;AChEA,IAAAC,gBAA2B;AAqBpB,SAAS,UAAU;AACxB,aAAO,0BAAW;AACpB;;;ACvBA,IAAAC,oBAAwB;AAkBjB,SAAS,UAAU;AACxB,aAAO,2BAAQ;AACjB;;;ACpBA,IAAAC,cAAmB;AAyBZ,SAAS,SACd,KACA,SACA;AACA,QAAM,EAAE,MAAM,OAAO,UAAU,QAAI,YAAAC,SAAU,KAAK,OAAO;AAEzD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC,CAAC;AAAA,EACb;AACF;;;ACrCA,oBAA6B;AAwB7B,IAAM,kBAAkB;AAEjB,IAAM,SACX,gBAAgB,UAChB,IAAI,2BAAa;AAAA,EACf,KAAK,QAAQ,IAAI,aAAa,gBAAgB,CAAC,OAAO,IAAI,CAAC;AAC7D,CAAC;AAEH,IAAI,QAAQ,IAAI,aAAa,aAAc,iBAAgB,SAAS;","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_next_intl","import_swr","useSWR"]}
|
package/dist/setup.mjs
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// src/setup/providers/auth-provider.tsx
|
|
2
|
+
import { SessionProvider } from "next-auth/react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
function AuthProvider({ children, session }) {
|
|
5
|
+
return /* @__PURE__ */ jsx(SessionProvider, { session, children });
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// src/setup/providers/i18n-provider.tsx
|
|
9
|
+
import { IntlProvider } from "next-intl";
|
|
10
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
11
|
+
function I18nProvider({
|
|
12
|
+
children,
|
|
13
|
+
locale,
|
|
14
|
+
messages,
|
|
15
|
+
timeZone = "UTC"
|
|
16
|
+
}) {
|
|
17
|
+
return /* @__PURE__ */ jsx2(IntlProvider, { locale, messages, timeZone, children });
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// src/setup/providers/swr-provider.tsx
|
|
21
|
+
import { SWRConfig } from "swr";
|
|
22
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
23
|
+
var DEFAULT_SWR_CONFIG = {
|
|
24
|
+
revalidateOnFocus: false,
|
|
25
|
+
revalidateOnReconnect: true,
|
|
26
|
+
dedupingInterval: 6e4,
|
|
27
|
+
focusThrottleInterval: 3e5
|
|
28
|
+
};
|
|
29
|
+
function SWRProvider({ children }) {
|
|
30
|
+
return /* @__PURE__ */ jsx3(SWRConfig, { value: { fetcher: (url) => fetch(url).then((r) => r.json()), ...DEFAULT_SWR_CONFIG }, children });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// src/setup/providers/root-provider.tsx
|
|
34
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
35
|
+
function RootProvider({
|
|
36
|
+
children,
|
|
37
|
+
session,
|
|
38
|
+
locale,
|
|
39
|
+
messages,
|
|
40
|
+
timeZone
|
|
41
|
+
}) {
|
|
42
|
+
return /* @__PURE__ */ jsx4(AuthProvider, { session, children: /* @__PURE__ */ jsx4(I18nProvider, { locale, messages, timeZone, children: /* @__PURE__ */ jsx4(SWRProvider, { children }) }) });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/setup/hooks/use-auth.ts
|
|
46
|
+
import { useSession } from "next-auth/react";
|
|
47
|
+
function useAuth() {
|
|
48
|
+
return useSession();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// src/setup/hooks/use-i18n.ts
|
|
52
|
+
import { useIntl } from "next-intl";
|
|
53
|
+
function useI18n() {
|
|
54
|
+
return useIntl();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// src/setup/hooks/use-fetch.ts
|
|
58
|
+
import useSWR from "swr";
|
|
59
|
+
function useFetch(url, options) {
|
|
60
|
+
const { data, error, isLoading } = useSWR(url, options);
|
|
61
|
+
return {
|
|
62
|
+
data,
|
|
63
|
+
isLoading,
|
|
64
|
+
error,
|
|
65
|
+
isError: !!error
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// src/setup/lib/prisma.ts
|
|
70
|
+
import { PrismaClient } from "@prisma/client";
|
|
71
|
+
var globalForPrisma = global;
|
|
72
|
+
var prisma = globalForPrisma.prisma || new PrismaClient({
|
|
73
|
+
log: process.env.NODE_ENV === "development" ? ["query"] : []
|
|
74
|
+
});
|
|
75
|
+
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
|
|
76
|
+
export {
|
|
77
|
+
AuthProvider,
|
|
78
|
+
I18nProvider,
|
|
79
|
+
RootProvider,
|
|
80
|
+
SWRProvider,
|
|
81
|
+
prisma,
|
|
82
|
+
useAuth,
|
|
83
|
+
useFetch,
|
|
84
|
+
useI18n
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=setup.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/setup/providers/auth-provider.tsx","../src/setup/providers/i18n-provider.tsx","../src/setup/providers/swr-provider.tsx","../src/setup/providers/root-provider.tsx","../src/setup/hooks/use-auth.ts","../src/setup/hooks/use-i18n.ts","../src/setup/hooks/use-fetch.ts","../src/setup/lib/prisma.ts"],"sourcesContent":["'use client'\n\nimport { ReactNode } from 'react'\nimport { SessionProvider } from 'next-auth/react'\n\ninterface AuthProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * AuthProvider - Wraps your app with NextAuth SessionProvider\n * \n * Usage:\n * ```tsx\n * import { AuthProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <AuthProvider session={session}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function AuthProvider({ children, session }: AuthProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n </SessionProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { IntlProvider } from 'next-intl'\n\ninterface I18nProviderProps {\n children: ReactNode\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * I18nProvider - Wraps your app with next-intl IntlProvider\n * \n * Usage:\n * ```tsx\n * import { I18nProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <I18nProvider locale={locale} messages={messages} timeZone=\"Asia/Dhaka\">\n * <App />\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider({ \n children, \n locale, \n messages, \n timeZone = 'UTC' \n}: I18nProviderProps) {\n return (\n <IntlProvider locale={locale} messages={messages} timeZone={timeZone}>\n {children}\n </IntlProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SWRConfig } from 'swr'\n\ninterface SWRProviderProps {\n children: ReactNode\n}\n\nconst DEFAULT_SWR_CONFIG = {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000,\n focusThrottleInterval: 300000,\n}\n\n/**\n * SWRProvider - Wraps your app with optimized SWR config\n * \n * Default config:\n * - revalidateOnFocus: false (no refresh on window focus)\n * - revalidateOnReconnect: true (refresh when network reconnects)\n * - dedupingInterval: 60s (deduplicate requests within 60s)\n * - focusThrottleInterval: 5min (throttle focus revalidation)\n * \n * Usage:\n * ```tsx\n * import { SWRProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <SWRProvider>\n * <App />\n * </SWRProvider>\n * ```\n */\nexport function SWRProvider({ children }: SWRProviderProps) {\n return (\n <SWRConfig value={{ fetcher: (url) => fetch(url).then(r => r.json()), ...DEFAULT_SWR_CONFIG }}>\n {children}\n </SWRConfig>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { AuthProvider } from './auth-provider'\nimport { I18nProvider } from './i18n-provider'\nimport { SWRProvider } from './swr-provider'\n\ninterface RootProviderProps {\n children: ReactNode\n session?: any\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * RootProvider - Single provider that combines Auth + I18n + SWR\n * \n * Usage in layout.tsx:\n * ```tsx\n * import { RootProvider } from '@webdevarif/dashui-setup'\n * \n * export default function RootLayout({ \n * children, \n * params: { locale } \n * }: {\n * children: React.ReactNode\n * params: { locale: string }\n * }) {\n * const session = await auth()\n * const messages = await import(`../../messages/${locale}.json`)\n * \n * return (\n * <html lang={locale}>\n * <body>\n * <RootProvider \n * session={session}\n * locale={locale}\n * messages={messages.default}\n * >\n * {children}\n * </RootProvider>\n * </body>\n * </html>\n * )\n * }\n * ```\n */\nexport function RootProvider({\n children,\n session,\n locale,\n messages,\n timeZone,\n}: RootProviderProps) {\n return (\n <AuthProvider session={session}>\n <I18nProvider locale={locale} messages={messages} timeZone={timeZone}>\n <SWRProvider>\n {children}\n </SWRProvider>\n </I18nProvider>\n </AuthProvider>\n )\n}\n","import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","import { useIntl } from 'next-intl'\n\n/**\n * useI18n - Hook to access translations\n * \n * Returns the next-intl useIntl hook result\n * \n * Usage:\n * ```tsx\n * import { useI18n } from '@webdevarif/dashui-setup/hooks'\n * \n * function Header() {\n * const t = useI18n()\n * \n * return <h1>{t('home.title')}</h1>\n * }\n * ```\n */\nexport function useI18n() {\n return useIntl()\n}\n","import useSWR from 'swr'\n\n/**\n * useFetch - Simplified hook for data fetching with SWR\n * \n * Returns SWR hook result with built-in error handling\n * \n * Usage:\n * ```tsx\n * import { useFetch } from '@webdevarif/dashui-setup/hooks'\n * \n * function UserList() {\n * const { data, isLoading, error } = useFetch('/api/users')\n * \n * if (isLoading) return <div>Loading...</div>\n * if (error) return <div>Error: {error.message}</div>\n * \n * return (\n * <ul>\n * {data?.map(user => <li key={user.id}>{user.name}</li>)}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useFetch<T = any>(\n url: string | null | undefined,\n options?: any\n) {\n const { data, error, isLoading } = useSWR<T>(url, options)\n\n return {\n data,\n isLoading,\n error,\n isError: !!error,\n }\n}\n","import { PrismaClient } from '@prisma/client'\n\n/**\n * Prisma Singleton - Reuse PrismaClient across requests\n * \n * In development: Hot reload can create multiple PrismaClient instances\n * This singleton pattern prevents connection pool exhaustion\n * \n * Usage in lib/prisma.ts:\n * ```tsx\n * export { prisma } from '@webdevarif/dashui-setup/lib'\n * ```\n * \n * Then use in API routes:\n * ```tsx\n * import { prisma } from '@/lib/prisma'\n * \n * export async function GET() {\n * const users = await prisma.user.findMany()\n * return Response.json(users)\n * }\n * ```\n */\n\nconst globalForPrisma = global as unknown as { prisma: PrismaClient }\n\nexport const prisma =\n globalForPrisma.prisma ||\n new PrismaClient({\n log: process.env.NODE_ENV === 'development' ? ['query'] : [],\n })\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"mappings":";AAGA,SAAS,uBAAuB;AAqB5B;AAFG,SAAS,aAAa,EAAE,UAAU,QAAQ,GAAsB;AACrE,SACE,oBAAC,mBAAgB,SACd,UACH;AAEJ;;;ACzBA,SAAS,oBAAoB;AA4BzB,gBAAAA,YAAA;AAPG,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAsB;AACpB,SACE,gBAAAA,KAAC,gBAAa,QAAgB,UAAoB,UAC/C,UACH;AAEJ;;;AChCA,SAAS,iBAAiB;AAiCtB,gBAAAC,YAAA;AA3BJ,IAAM,qBAAqB;AAAA,EACzB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAClB,uBAAuB;AACzB;AAoBO,SAAS,YAAY,EAAE,SAAS,GAAqB;AAC1D,SACE,gBAAAA,KAAC,aAAU,OAAO,EAAE,SAAS,CAAC,QAAQ,MAAM,GAAG,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,GAAG,GAAG,mBAAmB,GACzF,UACH;AAEJ;;;ACkBQ,gBAAAC,YAAA;AAVD,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,SACE,gBAAAA,KAAC,gBAAa,SACZ,0BAAAA,KAAC,gBAAa,QAAgB,UAAoB,UAChD,0BAAAA,KAAC,eACE,UACH,GACF,GACF;AAEJ;;;AChEA,SAAS,kBAAkB;AAqBpB,SAAS,UAAU;AACxB,SAAO,WAAW;AACpB;;;ACvBA,SAAS,eAAe;AAkBjB,SAAS,UAAU;AACxB,SAAO,QAAQ;AACjB;;;ACpBA,OAAO,YAAY;AAyBZ,SAAS,SACd,KACA,SACA;AACA,QAAM,EAAE,MAAM,OAAO,UAAU,IAAI,OAAU,KAAK,OAAO;AAEzD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC,CAAC;AAAA,EACb;AACF;;;ACrCA,SAAS,oBAAoB;AAwB7B,IAAM,kBAAkB;AAEjB,IAAM,SACX,gBAAgB,UAChB,IAAI,aAAa;AAAA,EACf,KAAK,QAAQ,IAAI,aAAa,gBAAgB,CAAC,OAAO,IAAI,CAAC;AAC7D,CAAC;AAEH,IAAI,QAAQ,IAAI,aAAa,aAAc,iBAAgB,SAAS;","names":["jsx","jsx","jsx"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@keyframes dashui-shimmer {
|
|
2
|
+
0% { transform: translateX(-100%); }
|
|
3
|
+
100% { transform: translateX(200%); }
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
@keyframes dashui-spin {
|
|
7
|
+
to { transform: rotate(360deg); }
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@keyframes dashui-pulse {
|
|
11
|
+
0%, 100% { opacity: 1; }
|
|
12
|
+
50% { opacity: 0.5; }
|
|
13
|
+
}
|