@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.
Files changed (52) hide show
  1. package/README.md +10 -10
  2. package/dist/components/AppProviders.client.d.ts +12 -0
  3. package/dist/components/AppProviders.client.d.ts.map +1 -0
  4. package/dist/components/AppProviders.client.js +12 -0
  5. package/dist/components/AppProviders.server.d.ts +1 -0
  6. package/dist/components/AppProviders.server.d.ts.map +1 -1
  7. package/dist/components/AppProviders.server.js +4 -57
  8. package/dist/components/enhanced-theme-provider.d.ts.map +1 -1
  9. package/dist/index.d.ts +3 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -0
  12. package/dist/providers/BlocksAppProviders.d.ts +13 -0
  13. package/dist/providers/BlocksAppProviders.d.ts.map +1 -0
  14. package/dist/providers/BlocksAppProviders.js +11 -0
  15. package/dist/server/theme-vars.d.ts +13 -0
  16. package/dist/server/theme-vars.d.ts.map +1 -0
  17. package/dist/server/theme-vars.js +44 -0
  18. package/dist/server.d.ts +2 -1
  19. package/dist/ui/button.js +1 -1
  20. package/dist/ui/testimonial-card.js +1 -1
  21. package/dist/ui/theme-selector.d.ts.map +1 -1
  22. package/dist-cjs/components/AppProviders.client.cjs +15 -0
  23. package/dist-cjs/components/AppProviders.server.cjs +10 -0
  24. package/dist-cjs/components/enhanced-theme-provider.cjs +142 -0
  25. package/dist-cjs/components/theme-provider.cjs +9 -0
  26. package/dist-cjs/index.cjs +51 -0
  27. package/dist-cjs/lib/themes.cjs +399 -0
  28. package/dist-cjs/lib/utils.cjs +8 -0
  29. package/dist-cjs/providers/BlocksAppProviders.cjs +14 -0
  30. package/dist-cjs/server/theme-vars.cjs +47 -0
  31. package/dist-cjs/server.cjs +10 -0
  32. package/dist-cjs/ui/alert-dialog.cjs +105 -0
  33. package/dist-cjs/ui/brand-node.cjs +46 -0
  34. package/dist-cjs/ui/button.cjs +108 -0
  35. package/dist-cjs/ui/card.cjs +54 -0
  36. package/dist-cjs/ui/checkbox.cjs +60 -0
  37. package/dist-cjs/ui/cta-button.cjs +53 -0
  38. package/dist-cjs/ui/dropdown-menu.cjs +122 -0
  39. package/dist-cjs/ui/feature-card.cjs +20 -0
  40. package/dist-cjs/ui/input.cjs +60 -0
  41. package/dist-cjs/ui/label.cjs +61 -0
  42. package/dist-cjs/ui/pricing-card.cjs +28 -0
  43. package/dist-cjs/ui/select.cjs +56 -0
  44. package/dist-cjs/ui/skeleton.cjs +20 -0
  45. package/dist-cjs/ui/switch.cjs +60 -0
  46. package/dist-cjs/ui/table.cjs +48 -0
  47. package/dist-cjs/ui/testimonial-card.cjs +39 -0
  48. package/dist-cjs/ui/textarea.cjs +60 -0
  49. package/dist-cjs/ui/theme-selector.cjs +92 -0
  50. package/dist-cjs/ui/theme-toggle.cjs +22 -0
  51. package/dist-cjs/ui/toaster.cjs +9 -0
  52. 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
- ## Installation
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
- npm install @nextworks/blocks-core
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
- 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`.
19
+ - npm (CLI): https://www.npmjs.com/package/nextworks
22
20
 
23
- For a higher-level experience with copyable files and Next.js app wiring, consider using the `nextworks` CLI:
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
- npx nextworks add blocks
26
+ npm install @nextworks/blocks-core
27
27
  ```
28
28
 
29
- which copies a curated set of components and templates into your app.
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,3 +1,4 @@
1
+ import React from "react";
1
2
  export default function AppProviders({ children, }: Readonly<{
2
3
  children: React.ReactNode;
3
4
  }>): Promise<import("react/jsx-runtime").JSX.Element>;
@@ -1 +1 @@
1
- {"version":3,"file":"AppProviders.server.d.ts","sourceRoot":"","sources":["../../src/components/AppProviders.server.tsx"],"names":[],"mappings":"AAwDA,wBAA8B,YAAY,CAAC,EACzC,QAAQ,GACT,EAAE,QAAQ,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAAC,oDA0CzC"}
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 { Geist, Geist_Mono, Outfit, Inter, Poppins } from "next/font/google";
3
- import { EnhancedThemeProvider } from "./enhanced-theme-provider";
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
- var _a, _b;
44
- // Read cookies for SSR: chosen variant and optional custom tokens
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,2CAqI5B"}
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
@@ -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;AAG5C,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"}
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
@@ -1,3 +1,4 @@
1
1
 
2
2
  // Auto-generated by scripts/postbuild.js
3
- export * from "./components/AppProviders.server";
3
+ // Keep this file in sync with src/server.ts runtime exports.
4
+ export { default as AppProviders } from "./components/AppProviders.server";
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
- // explicit dark variants to compete with dark: utilities from variants like outline
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
- // new props (no defaults, we derive below)
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,2CAqNpB"}
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);