@nextworks/blocks-core 0.1.0-alpha.8 → 0.2.0-alpha.10
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 +10 -10
- package/dist/components/AppProviders.client.d.ts +12 -0
- package/dist/components/AppProviders.client.d.ts.map +1 -0
- package/dist/components/AppProviders.client.js +12 -0
- package/dist/components/AppProviders.server.d.ts +1 -0
- package/dist/components/AppProviders.server.d.ts.map +1 -1
- package/dist/components/AppProviders.server.js +4 -57
- package/dist/components/enhanced-theme-provider.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/providers/BlocksAppProviders.d.ts +13 -0
- package/dist/providers/BlocksAppProviders.d.ts.map +1 -0
- package/dist/providers/BlocksAppProviders.js +11 -0
- package/dist/server/theme-vars.d.ts +13 -0
- package/dist/server/theme-vars.d.ts.map +1 -0
- package/dist/server/theme-vars.js +44 -0
- package/dist/server.d.ts +2 -1
- package/dist/ui/button.js +1 -1
- package/dist/ui/testimonial-card.js +1 -1
- package/dist/ui/theme-selector.d.ts.map +1 -1
- package/dist-cjs/components/AppProviders.client.cjs +15 -0
- package/dist-cjs/components/AppProviders.server.cjs +10 -0
- package/dist-cjs/components/enhanced-theme-provider.cjs +142 -0
- package/dist-cjs/components/theme-provider.cjs +9 -0
- package/dist-cjs/index.cjs +51 -0
- package/dist-cjs/lib/themes.cjs +399 -0
- package/dist-cjs/lib/utils.cjs +8 -0
- package/dist-cjs/providers/BlocksAppProviders.cjs +14 -0
- package/dist-cjs/server/theme-vars.cjs +47 -0
- package/dist-cjs/server.cjs +10 -0
- package/dist-cjs/ui/alert-dialog.cjs +105 -0
- package/dist-cjs/ui/brand-node.cjs +46 -0
- package/dist-cjs/ui/button.cjs +108 -0
- package/dist-cjs/ui/card.cjs +54 -0
- package/dist-cjs/ui/checkbox.cjs +60 -0
- package/dist-cjs/ui/cta-button.cjs +53 -0
- package/dist-cjs/ui/dropdown-menu.cjs +122 -0
- package/dist-cjs/ui/feature-card.cjs +20 -0
- package/dist-cjs/ui/input.cjs +60 -0
- package/dist-cjs/ui/label.cjs +61 -0
- package/dist-cjs/ui/pricing-card.cjs +28 -0
- package/dist-cjs/ui/select.cjs +56 -0
- package/dist-cjs/ui/skeleton.cjs +20 -0
- package/dist-cjs/ui/switch.cjs +60 -0
- package/dist-cjs/ui/table.cjs +48 -0
- package/dist-cjs/ui/testimonial-card.cjs +39 -0
- package/dist-cjs/ui/textarea.cjs +60 -0
- package/dist-cjs/ui/theme-selector.cjs +92 -0
- package/dist-cjs/ui/theme-toggle.cjs +22 -0
- package/dist-cjs/ui/toaster.cjs +9 -0
- package/package.json +73 -59
package/README.md
CHANGED
|
@@ -8,22 +8,22 @@ This package provides:
|
|
|
8
8
|
- Theme helpers and providers
|
|
9
9
|
- Types and helpers shared by other `@nextworks/blocks-*` packages
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Recommended: install via the nextworks CLI
|
|
12
|
+
|
|
13
|
+
Most developers should install Blocks via the **nextworks** CLI (copy-in / shadcn-style) rather than consuming this package directly.
|
|
12
14
|
|
|
13
15
|
```bash
|
|
14
|
-
|
|
15
|
-
# or
|
|
16
|
-
pnpm add @nextworks/blocks-core
|
|
17
|
-
# or
|
|
18
|
-
yarn add @nextworks/blocks-core
|
|
16
|
+
npx nextworks@latest add blocks --templates
|
|
19
17
|
```
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
- npm (CLI): https://www.npmjs.com/package/nextworks
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
## Direct installation (advanced)
|
|
22
|
+
|
|
23
|
+
If you’re building on top of the compiled `@nextworks/blocks-*` packages, you can install this package directly:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
|
|
26
|
+
npm install @nextworks/blocks-core
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
You will typically not use this package directly unless you are composing your own blocks or building on top of `@nextworks/blocks-sections` or `@nextworks/blocks-templates`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type AppProvidersClientProps = Readonly<{
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}>;
|
|
5
|
+
/**
|
|
6
|
+
* Client-safe AppProviders for Pages Router.
|
|
7
|
+
*
|
|
8
|
+
* Unlike the App Router server variant, this version does not read cookies
|
|
9
|
+
* or inject server-rendered theme CSS.
|
|
10
|
+
*/
|
|
11
|
+
export default function AppProvidersClient({ children, }: AppProvidersClientProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=AppProviders.client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppProviders.client.d.ts","sourceRoot":"","sources":["../../src/components/AppProviders.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,QAAQ,GACT,EAAE,uBAAuB,2CAMzB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { BlocksAppProviders } from "../providers/BlocksAppProviders";
|
|
4
|
+
/**
|
|
5
|
+
* Client-safe AppProviders for Pages Router.
|
|
6
|
+
*
|
|
7
|
+
* Unlike the App Router server variant, this version does not read cookies
|
|
8
|
+
* or inject server-rendered theme CSS.
|
|
9
|
+
*/
|
|
10
|
+
export default function AppProvidersClient({ children, }) {
|
|
11
|
+
return (_jsx("div", { className: "antialiased", children: _jsx(BlocksAppProviders, { children: children }) }));
|
|
12
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppProviders.server.d.ts","sourceRoot":"","sources":["../../src/components/AppProviders.server.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AppProviders.server.d.ts","sourceRoot":"","sources":["../../src/components/AppProviders.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,wBAA8B,YAAY,CAAC,EACzC,QAAQ,GACT,EAAE,QAAQ,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAAC,oDAazC"}
|
|
@@ -1,60 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { cookies } from "next/headers";
|
|
5
|
-
import { themes, darkThemes, } from "../lib/themes";
|
|
6
|
-
const geistSans = Geist({
|
|
7
|
-
variable: "--font-geist-sans",
|
|
8
|
-
subsets: ["latin"],
|
|
9
|
-
});
|
|
10
|
-
const geistMono = Geist_Mono({
|
|
11
|
-
variable: "--font-geist-mono",
|
|
12
|
-
subsets: ["latin"],
|
|
13
|
-
});
|
|
14
|
-
const outfit = Outfit({
|
|
15
|
-
variable: "--font-outfit",
|
|
16
|
-
subsets: ["latin"],
|
|
17
|
-
});
|
|
18
|
-
const inter = Inter({
|
|
19
|
-
variable: "--font-inter",
|
|
20
|
-
subsets: ["latin"],
|
|
21
|
-
});
|
|
22
|
-
const poppins = Poppins({
|
|
23
|
-
variable: "--font-poppins",
|
|
24
|
-
subsets: ["latin"],
|
|
25
|
-
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
|
|
26
|
-
});
|
|
27
|
-
function toCssVars(colors) {
|
|
28
|
-
return Object.entries(colors)
|
|
29
|
-
.map(([key, value]) => `--${key.replace(/([A-Z])/g, "-$1").toLowerCase()}: ${value};`)
|
|
30
|
-
.join("");
|
|
31
|
-
}
|
|
32
|
-
function safeParseCustomTokens(value) {
|
|
33
|
-
if (!value)
|
|
34
|
-
return null;
|
|
35
|
-
try {
|
|
36
|
-
return JSON.parse(decodeURIComponent(value));
|
|
37
|
-
}
|
|
38
|
-
catch (_a) {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
2
|
+
import { BlocksAppProviders } from "../providers/BlocksAppProviders";
|
|
3
|
+
import { getInitialThemeFromCookies } from "../server/theme-vars";
|
|
42
4
|
export default async function AppProviders({ children, }) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const cookieStore = await cookies();
|
|
46
|
-
const cookieVariant = (_a = cookieStore.get("theme-variant")) === null || _a === void 0 ? void 0 : _a.value;
|
|
47
|
-
const variant = cookieVariant && cookieVariant in themes ? cookieVariant : "default";
|
|
48
|
-
const cookieCustom = variant === "custom"
|
|
49
|
-
? safeParseCustomTokens((_b = cookieStore.get("theme-custom")) === null || _b === void 0 ? void 0 : _b.value)
|
|
50
|
-
: null;
|
|
51
|
-
const baseLight = themes[variant].colors;
|
|
52
|
-
const baseDark = darkThemes[variant].colors;
|
|
53
|
-
const lightMerged = cookieCustom
|
|
54
|
-
? Object.assign(Object.assign({}, baseLight), cookieCustom) : baseLight;
|
|
55
|
-
const darkMerged = cookieCustom ? Object.assign(Object.assign({}, baseDark), cookieCustom) : baseDark;
|
|
56
|
-
const lightVars = toCssVars(lightMerged);
|
|
57
|
-
const darkVars = toCssVars(darkMerged);
|
|
58
|
-
const inlineThemeCss = `:root{${lightVars}}.dark{${darkVars}}`;
|
|
59
|
-
return (_jsxs(_Fragment, { children: [_jsx("style", { id: "theme-variant-vars", dangerouslySetInnerHTML: { __html: inlineThemeCss } }), _jsx("div", { className: `${geistSans.variable} ${geistMono.variable} ${outfit.variable} ${inter.variable} ${poppins.variable} antialiased`, children: _jsx(EnhancedThemeProvider, { defaultThemeVariant: variant, children: children }) })] }));
|
|
5
|
+
const { variant, styleTag } = await getInitialThemeFromCookies();
|
|
6
|
+
return (_jsxs(_Fragment, { children: [styleTag, _jsx("div", { className: "antialiased", children: _jsx(BlocksAppProviders, { defaultThemeVariant: variant, children: children }) })] }));
|
|
60
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhanced-theme-provider.d.ts","sourceRoot":"","sources":["../../src/components/enhanced-theme-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,YAAY,EAGZ,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAEvB,KAAK,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAGzC,UAAU,0BAA0B;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC;IACvD,yBAAyB,CAAC,EAAE,uBAAuB,CAAC,2BAA2B,CAAC,CAAC;IACjF,mBAAmB,CAAC,EAAE,YAAY,CAAC;IAEnC,mBAAmB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACnD;AAED,UAAU,gBAAgB;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAEjD,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9D,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAE7D,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/D;AAMD,wBAAgB,eAAe,qBAQ9B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,SAAmB,EACnB,YAAuB,EACvB,YAAmB,EACnB,yBAAiC,EACjC,mBAAkC,EAClC,mBAA0B,GAC3B,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"enhanced-theme-provider.d.ts","sourceRoot":"","sources":["../../src/components/enhanced-theme-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,YAAY,EAGZ,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAEvB,KAAK,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAGzC,UAAU,0BAA0B;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC;IACvD,yBAAyB,CAAC,EAAE,uBAAuB,CAAC,2BAA2B,CAAC,CAAC;IACjF,mBAAmB,CAAC,EAAE,YAAY,CAAC;IAEnC,mBAAmB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACnD;AAED,UAAU,gBAAgB;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAEjD,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9D,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAE7D,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/D;AAMD,wBAAgB,eAAe,qBAQ9B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,SAAmB,EACnB,YAAuB,EACvB,YAAmB,EACnB,yBAAiC,EACjC,mBAAkC,EAClC,mBAA0B,GAC3B,EAAE,0BAA0B,2CAoI5B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
// Auto-generated by scripts/postbuild.js
|
|
3
1
|
export * from "./lib/themes";
|
|
4
2
|
export * from "./lib/utils";
|
|
5
3
|
export * from "./components/enhanced-theme-provider";
|
|
6
4
|
export * from "./components/theme-provider";
|
|
5
|
+
export { default as AppProvidersClient } from "./components/AppProviders.client";
|
|
6
|
+
export * from "./providers/BlocksAppProviders";
|
|
7
7
|
export * from "./ui/alert-dialog";
|
|
8
8
|
export * from "./ui/brand-node";
|
|
9
9
|
export * from "./ui/button";
|
|
@@ -24,3 +24,4 @@ export * from "./ui/textarea";
|
|
|
24
24
|
export * from "./ui/theme-selector";
|
|
25
25
|
export * from "./ui/theme-toggle";
|
|
26
26
|
export * from "./ui/toaster";
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAG5B,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAG5B,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGjF,cAAc,gCAAgC,CAAC;AAG/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,9 @@ export * from "./lib/utils";
|
|
|
4
4
|
// Client-safe providers/hooks
|
|
5
5
|
export * from "./components/enhanced-theme-provider";
|
|
6
6
|
export * from "./components/theme-provider";
|
|
7
|
+
export { default as AppProvidersClient } from "./components/AppProviders.client";
|
|
8
|
+
// Provider composition (no next/* imports)
|
|
9
|
+
export * from "./providers/BlocksAppProviders";
|
|
7
10
|
// UI primitives
|
|
8
11
|
export * from "./ui/alert-dialog";
|
|
9
12
|
export * from "./ui/brand-node";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ThemeVariant } from "../lib/themes";
|
|
3
|
+
export type BlocksAppProvidersProps = {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
defaultThemeVariant?: ThemeVariant;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Client-safe provider wrapper for Nextworks blocks.
|
|
9
|
+
*
|
|
10
|
+
* This file intentionally contains no next/* imports.
|
|
11
|
+
*/
|
|
12
|
+
export declare function BlocksAppProviders({ children, defaultThemeVariant, }: BlocksAppProvidersProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=BlocksAppProviders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlocksAppProviders.d.ts","sourceRoot":"","sources":["../../src/providers/BlocksAppProviders.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,mBAAmB,CAAC,EAAE,YAAY,CAAC;CACpC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,mBAAkC,GACnC,EAAE,uBAAuB,2CAMzB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { EnhancedThemeProvider } from "../components/enhanced-theme-provider";
|
|
4
|
+
/**
|
|
5
|
+
* Client-safe provider wrapper for Nextworks blocks.
|
|
6
|
+
*
|
|
7
|
+
* This file intentionally contains no next/* imports.
|
|
8
|
+
*/
|
|
9
|
+
export function BlocksAppProviders({ children, defaultThemeVariant = "monochrome", }) {
|
|
10
|
+
return (_jsx(EnhancedThemeProvider, { defaultThemeVariant: defaultThemeVariant, children: children }));
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type ThemeVariant } from "../lib/themes";
|
|
3
|
+
/**
|
|
4
|
+
* Server-only: reads cookies and returns initial theme variant + a <style> tag
|
|
5
|
+
* that sets CSS variables for :root and .dark.
|
|
6
|
+
*
|
|
7
|
+
* No next/font usage here (Turbopack-safe).
|
|
8
|
+
*/
|
|
9
|
+
export declare function getInitialThemeFromCookies(): Promise<{
|
|
10
|
+
variant: ThemeVariant;
|
|
11
|
+
styleTag: React.ReactElement;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=theme-vars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-vars.d.ts","sourceRoot":"","sources":["../../src/server/theme-vars.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,eAAe,CAAC;AAsBvB;;;;;GAKG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC;IAC1D,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;CAC9B,CAAC,CAiCD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cookies } from "next/headers";
|
|
3
|
+
import { themes, darkThemes, } from "../lib/themes";
|
|
4
|
+
function toCssVars(colors) {
|
|
5
|
+
return Object.entries(colors)
|
|
6
|
+
.map(([key, value]) => `--${key.replace(/([A-Z])/g, "-$1").toLowerCase()}: ${value};`)
|
|
7
|
+
.join("");
|
|
8
|
+
}
|
|
9
|
+
function safeParseCustomTokens(value) {
|
|
10
|
+
if (!value)
|
|
11
|
+
return null;
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(decodeURIComponent(value));
|
|
14
|
+
}
|
|
15
|
+
catch (_a) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Server-only: reads cookies and returns initial theme variant + a <style> tag
|
|
21
|
+
* that sets CSS variables for :root and .dark.
|
|
22
|
+
*
|
|
23
|
+
* No next/font usage here (Turbopack-safe).
|
|
24
|
+
*/
|
|
25
|
+
export async function getInitialThemeFromCookies() {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
const cookieStore = await cookies();
|
|
28
|
+
const cookieVariant = (_a = cookieStore.get("theme-variant")) === null || _a === void 0 ? void 0 : _a.value;
|
|
29
|
+
const variant = cookieVariant && cookieVariant in themes ? cookieVariant : "default";
|
|
30
|
+
const cookieCustom = variant === "custom"
|
|
31
|
+
? safeParseCustomTokens((_b = cookieStore.get("theme-custom")) === null || _b === void 0 ? void 0 : _b.value)
|
|
32
|
+
: null;
|
|
33
|
+
const baseLight = themes[variant].colors;
|
|
34
|
+
const baseDark = darkThemes[variant].colors;
|
|
35
|
+
const lightMerged = cookieCustom ? Object.assign(Object.assign({}, baseLight), cookieCustom) : baseLight;
|
|
36
|
+
const darkMerged = cookieCustom ? Object.assign(Object.assign({}, baseDark), cookieCustom) : baseDark;
|
|
37
|
+
const lightVars = toCssVars(lightMerged);
|
|
38
|
+
const darkVars = toCssVars(darkMerged);
|
|
39
|
+
const inlineThemeCss = `:root{${lightVars}}.dark{${darkVars}}`;
|
|
40
|
+
return {
|
|
41
|
+
variant,
|
|
42
|
+
styleTag: (_jsx("style", { id: "theme-variant-vars", dangerouslySetInnerHTML: { __html: inlineThemeCss } })),
|
|
43
|
+
};
|
|
44
|
+
}
|
package/dist/server.d.ts
CHANGED
package/dist/ui/button.js
CHANGED
|
@@ -57,7 +57,7 @@ const Button = React.forwardRef((_a, ref) => {
|
|
|
57
57
|
"bg-[var(--btn-bg)]",
|
|
58
58
|
"hover:bg-[var(--btn-hover-bg)]",
|
|
59
59
|
"hover:text-[var(--btn-hover-fg)]",
|
|
60
|
-
//
|
|
60
|
+
// Explicit dark variants to compete with dark: utilities from variants like outline
|
|
61
61
|
"dark:bg-[var(--btn-bg)]",
|
|
62
62
|
"dark:hover:bg-[var(--btn-hover-bg)]",
|
|
63
63
|
"dark:hover:text-[var(--btn-hover-fg)]",
|
|
@@ -14,7 +14,7 @@ function getInitials(from) {
|
|
|
14
14
|
export function TestimonialCard({ id, className,
|
|
15
15
|
// legacy defaults
|
|
16
16
|
testimonialText = "Lorem ipsum dolor sit amet! Consectetur adipiscing elit.", testimonialAuthor = " - Cillum Dolore", testimonialAuthorInitials = "JD",
|
|
17
|
-
//
|
|
17
|
+
// New props (no defaults, we derive below)
|
|
18
18
|
quote, name, role, card = {
|
|
19
19
|
className: "bg-card text-card-foreground p-6 rounded-lg border border-border shadow-md transition-transform duration-200 hover:-translate-y-1 bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)] shadow-[var(--card-shadow)]",
|
|
20
20
|
}, content = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-selector.d.ts","sourceRoot":"","sources":["../../src/ui/theme-selector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAUtC,KAAK,kBAAkB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,MAAM,CAAC,GAAG;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,SAA+B,EAC/B,KAAe,EACf,SAAS,EACT,GAAG,WAAW,EACf,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"theme-selector.d.ts","sourceRoot":"","sources":["../../src/ui/theme-selector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAUtC,KAAK,kBAAkB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,MAAM,CAAC,GAAG;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,SAA+B,EAC/B,KAAe,EACf,SAAS,EACT,GAAG,WAAW,EACf,EAAE,kBAAkB,2CAiNpB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.default = AppProvidersClient;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const BlocksAppProviders_1 = require("../providers/BlocksAppProviders");
|
|
7
|
+
/**
|
|
8
|
+
* Client-safe AppProviders for Pages Router.
|
|
9
|
+
*
|
|
10
|
+
* Unlike the App Router server variant, this version does not read cookies
|
|
11
|
+
* or inject server-rendered theme CSS.
|
|
12
|
+
*/
|
|
13
|
+
function AppProvidersClient({ children, }) {
|
|
14
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "antialiased", children: (0, jsx_runtime_1.jsx)(BlocksAppProviders_1.BlocksAppProviders, { children: children }) }));
|
|
15
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = AppProviders;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const BlocksAppProviders_1 = require("../providers/BlocksAppProviders");
|
|
6
|
+
const theme_vars_1 = require("../server/theme-vars");
|
|
7
|
+
async function AppProviders({ children, }) {
|
|
8
|
+
const { variant, styleTag } = await (0, theme_vars_1.getInitialThemeFromCookies)();
|
|
9
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [styleTag, (0, jsx_runtime_1.jsx)("div", { className: "antialiased", children: (0, jsx_runtime_1.jsx)(BlocksAppProviders_1.BlocksAppProviders, { defaultThemeVariant: variant, children: children }) })] }));
|
|
10
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.useThemeVariant = useThemeVariant;
|
|
38
|
+
exports.EnhancedThemeProvider = EnhancedThemeProvider;
|
|
39
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
40
|
+
const React = __importStar(require("react"));
|
|
41
|
+
const next_themes_1 = require("next-themes");
|
|
42
|
+
const themes_1 = require("../lib/themes");
|
|
43
|
+
const CUSTOM_STORAGE_KEY = "nxw-theme-custom";
|
|
44
|
+
const ThemeContext = React.createContext(undefined);
|
|
45
|
+
function useThemeVariant() {
|
|
46
|
+
const context = React.useContext(ThemeContext);
|
|
47
|
+
if (context === undefined) {
|
|
48
|
+
throw new Error("useThemeVariant must be used within an EnhancedThemeProvider");
|
|
49
|
+
}
|
|
50
|
+
return context;
|
|
51
|
+
}
|
|
52
|
+
function EnhancedThemeProvider({ children, attribute = "class", defaultTheme = "system", enableSystem = true, disableTransitionOnChange = false, defaultThemeVariant = "monochrome", defaultCustomTokens = null, }) {
|
|
53
|
+
const [themeVariant, setThemeVariant] = React.useState(defaultThemeVariant);
|
|
54
|
+
const [customTheme, setCustomThemeState] = React.useState(defaultCustomTokens);
|
|
55
|
+
const writeCustomCookies = React.useCallback((tokens) => {
|
|
56
|
+
if (tokens) {
|
|
57
|
+
document.cookie = `theme-variant=custom; Path=/; Max-Age=31536000; SameSite=Lax`;
|
|
58
|
+
document.cookie = `theme-custom=${encodeURIComponent(JSON.stringify(tokens))}; Path=/; Max-Age=31536000; SameSite=Lax`;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
document.cookie = `theme-custom=; Path=/; Max-Age=0; SameSite=Lax`;
|
|
62
|
+
}
|
|
63
|
+
}, []);
|
|
64
|
+
const setCustomTheme = React.useCallback((tokens) => {
|
|
65
|
+
setCustomThemeState(tokens);
|
|
66
|
+
try {
|
|
67
|
+
if (tokens) {
|
|
68
|
+
localStorage.setItem(CUSTOM_STORAGE_KEY, JSON.stringify(tokens));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
localStorage.removeItem(CUSTOM_STORAGE_KEY);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (_a) { }
|
|
75
|
+
writeCustomCookies(tokens !== null && tokens !== void 0 ? tokens : null);
|
|
76
|
+
}, [writeCustomCookies]);
|
|
77
|
+
const setCustomBrandColors = React.useCallback((tokens) => {
|
|
78
|
+
setThemeVariant("custom");
|
|
79
|
+
setCustomTheme(tokens);
|
|
80
|
+
}, [setCustomTheme]);
|
|
81
|
+
const applyTheme = React.useCallback((variant, isDark = false) => {
|
|
82
|
+
const base = isDark ? themes_1.darkThemes[variant].colors : themes_1.themes[variant].colors;
|
|
83
|
+
const merged = variant === "custom" && customTheme
|
|
84
|
+
? Object.assign(Object.assign({}, base), customTheme) : base;
|
|
85
|
+
// Apply CSS custom properties to the document root
|
|
86
|
+
const root = document.documentElement;
|
|
87
|
+
// Reflect the current variant for CSS selectors
|
|
88
|
+
root.setAttribute("data-theme-variant", variant);
|
|
89
|
+
Object.entries(merged).forEach(([key, value]) => {
|
|
90
|
+
const cssVar = `--${key.replace(/([A-Z])/g, "-$1").toLowerCase()}`;
|
|
91
|
+
root.style.setProperty(cssVar, value);
|
|
92
|
+
});
|
|
93
|
+
}, [customTheme]);
|
|
94
|
+
// Apply theme when variant or custom tokens change
|
|
95
|
+
React.useEffect(() => {
|
|
96
|
+
const isDark = document.documentElement.classList.contains("dark");
|
|
97
|
+
applyTheme(themeVariant, isDark);
|
|
98
|
+
}, [themeVariant, customTheme, applyTheme]);
|
|
99
|
+
// Load custom tokens from localStorage on mount (overrides defaultCustomTokens if present)
|
|
100
|
+
React.useEffect(() => {
|
|
101
|
+
try {
|
|
102
|
+
const raw = localStorage.getItem(CUSTOM_STORAGE_KEY);
|
|
103
|
+
if (raw) {
|
|
104
|
+
const parsed = JSON.parse(raw);
|
|
105
|
+
setCustomThemeState(parsed);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (_a) { }
|
|
109
|
+
}, []);
|
|
110
|
+
// Listen for theme changes from next-themes
|
|
111
|
+
React.useEffect(() => {
|
|
112
|
+
const observer = new MutationObserver((mutations) => {
|
|
113
|
+
mutations.forEach((mutation) => {
|
|
114
|
+
if (mutation.type === "attributes" &&
|
|
115
|
+
mutation.attributeName === "class") {
|
|
116
|
+
const isDark = document.documentElement.classList.contains("dark");
|
|
117
|
+
applyTheme(themeVariant, isDark);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
observer.observe(document.documentElement, {
|
|
122
|
+
attributes: true,
|
|
123
|
+
attributeFilter: ["class"],
|
|
124
|
+
});
|
|
125
|
+
return () => observer.disconnect();
|
|
126
|
+
}, [themeVariant, applyTheme]);
|
|
127
|
+
const contextValue = React.useMemo(() => ({
|
|
128
|
+
themeVariant,
|
|
129
|
+
setThemeVariant,
|
|
130
|
+
customTheme,
|
|
131
|
+
setCustomTheme,
|
|
132
|
+
setCustomBrandColors,
|
|
133
|
+
applyTheme,
|
|
134
|
+
}), [
|
|
135
|
+
themeVariant,
|
|
136
|
+
customTheme,
|
|
137
|
+
setCustomTheme,
|
|
138
|
+
setCustomBrandColors,
|
|
139
|
+
applyTheme,
|
|
140
|
+
]);
|
|
141
|
+
return ((0, jsx_runtime_1.jsx)(next_themes_1.ThemeProvider, { attribute: attribute, defaultTheme: defaultTheme, enableSystem: enableSystem, disableTransitionOnChange: disableTransitionOnChange, children: (0, jsx_runtime_1.jsx)(ThemeContext.Provider, { value: contextValue, children: children }) }));
|
|
142
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ThemeProvider = ThemeProvider;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const next_themes_1 = require("next-themes");
|
|
7
|
+
function ThemeProvider({ children, attribute = "class", defaultTheme = "system", enableSystem = true, disableTransitionOnChange = false, }) {
|
|
8
|
+
return ((0, jsx_runtime_1.jsx)(next_themes_1.ThemeProvider, { attribute: attribute, defaultTheme: defaultTheme, enableSystem: enableSystem, disableTransitionOnChange: disableTransitionOnChange, children: children }));
|
|
9
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.AppProvidersClient = void 0;
|
|
21
|
+
// Theme data & utilities
|
|
22
|
+
__exportStar(require("./lib/themes.cjs"), exports);
|
|
23
|
+
__exportStar(require("./lib/utils.cjs"), exports);
|
|
24
|
+
// Client-safe providers/hooks
|
|
25
|
+
__exportStar(require("./components/enhanced-theme-provider.cjs"), exports);
|
|
26
|
+
__exportStar(require("./components/theme-provider.cjs"), exports);
|
|
27
|
+
var AppProviders_client_1 = require("./components/AppProviders.client.cjs");
|
|
28
|
+
Object.defineProperty(exports, "AppProvidersClient", { enumerable: true, get: function () { return __importDefault(AppProviders_client_1).default; } });
|
|
29
|
+
// Provider composition (no next/* imports)
|
|
30
|
+
__exportStar(require("./providers/BlocksAppProviders.cjs"), exports);
|
|
31
|
+
// UI primitives
|
|
32
|
+
__exportStar(require("./ui/alert-dialog.cjs"), exports);
|
|
33
|
+
__exportStar(require("./ui/brand-node.cjs"), exports);
|
|
34
|
+
__exportStar(require("./ui/button.cjs"), exports);
|
|
35
|
+
__exportStar(require("./ui/card.cjs"), exports);
|
|
36
|
+
__exportStar(require("./ui/checkbox.cjs"), exports);
|
|
37
|
+
__exportStar(require("./ui/cta-button.cjs"), exports);
|
|
38
|
+
__exportStar(require("./ui/dropdown-menu.cjs"), exports);
|
|
39
|
+
__exportStar(require("./ui/feature-card.cjs"), exports);
|
|
40
|
+
__exportStar(require("./ui/input.cjs"), exports);
|
|
41
|
+
__exportStar(require("./ui/label.cjs"), exports);
|
|
42
|
+
__exportStar(require("./ui/pricing-card.cjs"), exports);
|
|
43
|
+
__exportStar(require("./ui/select.cjs"), exports);
|
|
44
|
+
__exportStar(require("./ui/skeleton.cjs"), exports);
|
|
45
|
+
__exportStar(require("./ui/switch.cjs"), exports);
|
|
46
|
+
__exportStar(require("./ui/table.cjs"), exports);
|
|
47
|
+
__exportStar(require("./ui/testimonial-card.cjs"), exports);
|
|
48
|
+
__exportStar(require("./ui/textarea.cjs"), exports);
|
|
49
|
+
__exportStar(require("./ui/theme-selector.cjs"), exports);
|
|
50
|
+
__exportStar(require("./ui/theme-toggle.cjs"), exports);
|
|
51
|
+
__exportStar(require("./ui/toaster.cjs"), exports);
|