@web-my-money/preset-wmm 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,103 @@
1
+ import * as React from 'react';
2
+ import { AppShellProps } from '@web-my-money/blocks/app';
3
+ import { DesignStudioProps } from '@web-my-money/blocks/fx';
4
+
5
+ interface WmmAppShellProps extends Omit<AppShellProps, "logo"> {
6
+ /** Show the "WMM OS" link at the bottom of the sidebar. Default true. */
7
+ showOsLink?: boolean;
8
+ /** Show the light/dark toggle in the header. Default true. */
9
+ showThemeToggle?: boolean;
10
+ /** Show the sidebar⇄top layout toggle in the header. Default false. */
11
+ showLayoutToggle?: boolean;
12
+ osHref?: string;
13
+ }
14
+ /**
15
+ * The WMM-branded mini-app shell — `AppShell` (generic) pre-wired with the WMM
16
+ * mark, a link back to the OS, and the theme toggle. This is the opinionated
17
+ * "preset" layer: generic packages (tokens/blocks/primitives) stay brand-agnostic,
18
+ * `@web-my-money/preset-wmm` is where WMM's specific defaults live. A client brand
19
+ * gets its own `preset-<client>` package following this exact shape.
20
+ *
21
+ * <WmmAppShell appName="Brain" nav={nav}>{children}</WmmAppShell>
22
+ */
23
+ declare function WmmAppShell({ showOsLink, showThemeToggle, showLayoutToggle, osHref, sidebarFooter, headerActions, ...rest }: WmmAppShellProps): React.JSX.Element;
24
+
25
+ interface WmmLandingShellProps {
26
+ children: React.ReactNode;
27
+ /** "wmm" = dark marketing brand (default). "light" = navy-on-white (med-spa / local-service). */
28
+ theme?: "wmm" | "light";
29
+ /** Sticky top nav content (left side, next to the logo). */
30
+ nav?: React.ReactNode;
31
+ /** Override the footer links (defaults to the standard WMM set). */
32
+ footerLinks?: readonly {
33
+ label: string;
34
+ href: string;
35
+ }[];
36
+ className?: string;
37
+ }
38
+ /**
39
+ * The WMM-branded landing/funnel shell — wraps page content with the WMM logo
40
+ * header + standard footer, defaulting to the dark `wmm` marketing theme (or
41
+ * `light` for a med-spa / local-service lead-gen page). Compose page sections
42
+ * from `@web-my-money/blocks/site` + `/funnel` + `/fx` inside `children`.
43
+ *
44
+ * <WmmLandingShell>
45
+ * <HeroSection ... /> ... <OfferStack ... />
46
+ * </WmmLandingShell>
47
+ */
48
+ declare function WmmLandingShell({ children, theme, nav, footerLinks, className, }: WmmLandingShellProps): React.JSX.Element;
49
+
50
+ interface WmmSplashProps {
51
+ /** Optional line under the logo. */
52
+ tagline?: string;
53
+ /** Play the animated logo video (motionUrl("mark")) instead of the static mark. */
54
+ motionSrc?: string;
55
+ /** Fill the viewport (default) or just the parent box. */
56
+ fullscreen?: boolean;
57
+ /** Logo height in px. Default 72. */
58
+ size?: number;
59
+ className?: string;
60
+ }
61
+ /**
62
+ * The WMM branded splash / boot / loading screen — the signature "WMM feel" on app start.
63
+ * Deep-navy field with an aqua glow and the WMM mark (white on dark). Pass `motionSrc`
64
+ * (e.g. `motionUrl("mark")`) to play the animated logo; falls back to the animated static
65
+ * mark, so it always renders. Drop it in while the app authenticates / hydrates.
66
+ */
67
+ declare function WmmSplash({ tagline, motionSrc, fullscreen, size, className, }: WmmSplashProps): React.JSX.Element;
68
+
69
+ interface WmmFxStudioProps extends Pick<DesignStudioProps, "position" | "defaultOpen" | "showThemes" | "showBackgrounds"> {
70
+ children: React.ReactNode;
71
+ /** Render a live DynamicBackground behind children (aurora/mesh/grid/…). Default false —
72
+ * app dashboards usually want a solid surface; landing/marketing pages want this on. */
73
+ withBackground?: boolean;
74
+ className?: string;
75
+ }
76
+ /**
77
+ * Drop-in "WMM feel" layer — the live theme + background + logo picker (DesignStudio),
78
+ * pre-wired with the real WMM marks (mono, full-colour gradient, interactive 3D). Wrap any
79
+ * page or the whole app shell; end users get a floating panel (bottom-right sparkle button)
80
+ * to switch light/dark/wmm, pick a dynamic background, and choose how the logo renders —
81
+ * persisted to localStorage.
82
+ *
83
+ * <WmmFxStudio withBackground>
84
+ * <WmmAppShell appName="Brain" nav={nav}>{children}</WmmAppShell>
85
+ * </WmmFxStudio>
86
+ */
87
+ declare function WmmFxStudio({ children, withBackground, className, ...studioProps }: WmmFxStudioProps): React.JSX.Element;
88
+
89
+ declare const WMM_OS_URL = "https://os.webmymoney.com";
90
+ declare const WMM_WEBSITE_URL = "https://webmymoney.com";
91
+ declare const WMM_LANDING_FOOTER_LINKS: readonly [{
92
+ readonly label: "Case Studies";
93
+ readonly href: "https://webmymoney.com/#work";
94
+ }, {
95
+ readonly label: "Book a Call";
96
+ readonly href: "https://webmymoney.com/#book";
97
+ }, {
98
+ readonly label: "Privacy";
99
+ readonly href: "https://webmymoney.com/privacy";
100
+ }];
101
+ declare const WMM_COPYRIGHT: string;
102
+
103
+ export { WMM_COPYRIGHT, WMM_LANDING_FOOTER_LINKS, WMM_OS_URL, WMM_WEBSITE_URL, WmmAppShell, type WmmAppShellProps, WmmFxStudio, type WmmFxStudioProps, WmmLandingShell, type WmmLandingShellProps, WmmSplash, type WmmSplashProps };
@@ -0,0 +1,103 @@
1
+ import * as React from 'react';
2
+ import { AppShellProps } from '@web-my-money/blocks/app';
3
+ import { DesignStudioProps } from '@web-my-money/blocks/fx';
4
+
5
+ interface WmmAppShellProps extends Omit<AppShellProps, "logo"> {
6
+ /** Show the "WMM OS" link at the bottom of the sidebar. Default true. */
7
+ showOsLink?: boolean;
8
+ /** Show the light/dark toggle in the header. Default true. */
9
+ showThemeToggle?: boolean;
10
+ /** Show the sidebar⇄top layout toggle in the header. Default false. */
11
+ showLayoutToggle?: boolean;
12
+ osHref?: string;
13
+ }
14
+ /**
15
+ * The WMM-branded mini-app shell — `AppShell` (generic) pre-wired with the WMM
16
+ * mark, a link back to the OS, and the theme toggle. This is the opinionated
17
+ * "preset" layer: generic packages (tokens/blocks/primitives) stay brand-agnostic,
18
+ * `@web-my-money/preset-wmm` is where WMM's specific defaults live. A client brand
19
+ * gets its own `preset-<client>` package following this exact shape.
20
+ *
21
+ * <WmmAppShell appName="Brain" nav={nav}>{children}</WmmAppShell>
22
+ */
23
+ declare function WmmAppShell({ showOsLink, showThemeToggle, showLayoutToggle, osHref, sidebarFooter, headerActions, ...rest }: WmmAppShellProps): React.JSX.Element;
24
+
25
+ interface WmmLandingShellProps {
26
+ children: React.ReactNode;
27
+ /** "wmm" = dark marketing brand (default). "light" = navy-on-white (med-spa / local-service). */
28
+ theme?: "wmm" | "light";
29
+ /** Sticky top nav content (left side, next to the logo). */
30
+ nav?: React.ReactNode;
31
+ /** Override the footer links (defaults to the standard WMM set). */
32
+ footerLinks?: readonly {
33
+ label: string;
34
+ href: string;
35
+ }[];
36
+ className?: string;
37
+ }
38
+ /**
39
+ * The WMM-branded landing/funnel shell — wraps page content with the WMM logo
40
+ * header + standard footer, defaulting to the dark `wmm` marketing theme (or
41
+ * `light` for a med-spa / local-service lead-gen page). Compose page sections
42
+ * from `@web-my-money/blocks/site` + `/funnel` + `/fx` inside `children`.
43
+ *
44
+ * <WmmLandingShell>
45
+ * <HeroSection ... /> ... <OfferStack ... />
46
+ * </WmmLandingShell>
47
+ */
48
+ declare function WmmLandingShell({ children, theme, nav, footerLinks, className, }: WmmLandingShellProps): React.JSX.Element;
49
+
50
+ interface WmmSplashProps {
51
+ /** Optional line under the logo. */
52
+ tagline?: string;
53
+ /** Play the animated logo video (motionUrl("mark")) instead of the static mark. */
54
+ motionSrc?: string;
55
+ /** Fill the viewport (default) or just the parent box. */
56
+ fullscreen?: boolean;
57
+ /** Logo height in px. Default 72. */
58
+ size?: number;
59
+ className?: string;
60
+ }
61
+ /**
62
+ * The WMM branded splash / boot / loading screen — the signature "WMM feel" on app start.
63
+ * Deep-navy field with an aqua glow and the WMM mark (white on dark). Pass `motionSrc`
64
+ * (e.g. `motionUrl("mark")`) to play the animated logo; falls back to the animated static
65
+ * mark, so it always renders. Drop it in while the app authenticates / hydrates.
66
+ */
67
+ declare function WmmSplash({ tagline, motionSrc, fullscreen, size, className, }: WmmSplashProps): React.JSX.Element;
68
+
69
+ interface WmmFxStudioProps extends Pick<DesignStudioProps, "position" | "defaultOpen" | "showThemes" | "showBackgrounds"> {
70
+ children: React.ReactNode;
71
+ /** Render a live DynamicBackground behind children (aurora/mesh/grid/…). Default false —
72
+ * app dashboards usually want a solid surface; landing/marketing pages want this on. */
73
+ withBackground?: boolean;
74
+ className?: string;
75
+ }
76
+ /**
77
+ * Drop-in "WMM feel" layer — the live theme + background + logo picker (DesignStudio),
78
+ * pre-wired with the real WMM marks (mono, full-colour gradient, interactive 3D). Wrap any
79
+ * page or the whole app shell; end users get a floating panel (bottom-right sparkle button)
80
+ * to switch light/dark/wmm, pick a dynamic background, and choose how the logo renders —
81
+ * persisted to localStorage.
82
+ *
83
+ * <WmmFxStudio withBackground>
84
+ * <WmmAppShell appName="Brain" nav={nav}>{children}</WmmAppShell>
85
+ * </WmmFxStudio>
86
+ */
87
+ declare function WmmFxStudio({ children, withBackground, className, ...studioProps }: WmmFxStudioProps): React.JSX.Element;
88
+
89
+ declare const WMM_OS_URL = "https://os.webmymoney.com";
90
+ declare const WMM_WEBSITE_URL = "https://webmymoney.com";
91
+ declare const WMM_LANDING_FOOTER_LINKS: readonly [{
92
+ readonly label: "Case Studies";
93
+ readonly href: "https://webmymoney.com/#work";
94
+ }, {
95
+ readonly label: "Book a Call";
96
+ readonly href: "https://webmymoney.com/#book";
97
+ }, {
98
+ readonly label: "Privacy";
99
+ readonly href: "https://webmymoney.com/privacy";
100
+ }];
101
+ declare const WMM_COPYRIGHT: string;
102
+
103
+ export { WMM_COPYRIGHT, WMM_LANDING_FOOTER_LINKS, WMM_OS_URL, WMM_WEBSITE_URL, WmmAppShell, type WmmAppShellProps, WmmFxStudio, type WmmFxStudioProps, WmmLandingShell, type WmmLandingShellProps, WmmSplash, type WmmSplashProps };
package/dist/index.js ADDED
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ WMM_COPYRIGHT: () => WMM_COPYRIGHT,
24
+ WMM_LANDING_FOOTER_LINKS: () => WMM_LANDING_FOOTER_LINKS,
25
+ WMM_OS_URL: () => WMM_OS_URL,
26
+ WMM_WEBSITE_URL: () => WMM_WEBSITE_URL,
27
+ WmmAppShell: () => WmmAppShell,
28
+ WmmFxStudio: () => WmmFxStudio,
29
+ WmmLandingShell: () => WmmLandingShell,
30
+ WmmSplash: () => WmmSplash
31
+ });
32
+ module.exports = __toCommonJS(index_exports);
33
+
34
+ // src/wmm-app-shell.tsx
35
+ var import_app = require("@web-my-money/blocks/app");
36
+ var import_react = require("@web-my-money/tokens/react");
37
+ var import_brand = require("@web-my-money/brand");
38
+
39
+ // src/constants.ts
40
+ var WMM_OS_URL = "https://os.webmymoney.com";
41
+ var WMM_WEBSITE_URL = "https://webmymoney.com";
42
+ var WMM_LANDING_FOOTER_LINKS = [
43
+ { label: "Case Studies", href: `${WMM_WEBSITE_URL}/#work` },
44
+ { label: "Book a Call", href: `${WMM_WEBSITE_URL}/#book` },
45
+ { label: "Privacy", href: `${WMM_WEBSITE_URL}/privacy` }
46
+ ];
47
+ var WMM_COPYRIGHT = `\xA9 ${(/* @__PURE__ */ new Date()).getUTCFullYear()} Web My Money. All rights reserved.`;
48
+
49
+ // src/wmm-app-shell.tsx
50
+ var import_jsx_runtime = require("react/jsx-runtime");
51
+ function WmmAppShell({
52
+ showOsLink = true,
53
+ showThemeToggle = true,
54
+ showLayoutToggle = false,
55
+ osHref = WMM_OS_URL,
56
+ sidebarFooter,
57
+ headerActions,
58
+ ...rest
59
+ }) {
60
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
61
+ import_app.AppShell,
62
+ {
63
+ ...rest,
64
+ logo: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_brand.WmmLogo, { variant: "mark", size: 22 }),
65
+ headerActions: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
66
+ headerActions,
67
+ showLayoutToggle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_app.LayoutToggle, {}),
68
+ showThemeToggle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ThemeToggle, {})
69
+ ] }),
70
+ sidebarFooter: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
71
+ sidebarFooter,
72
+ showOsLink && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
73
+ "a",
74
+ {
75
+ href: osHref,
76
+ className: "flex items-center gap-2 rounded-md px-2.5 py-2 text-[13px] font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
77
+ children: [
78
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_brand.WmmLogo, { variant: "mark", size: 14 }),
79
+ "WMM OS"
80
+ ]
81
+ }
82
+ )
83
+ ] })
84
+ }
85
+ );
86
+ }
87
+
88
+ // src/wmm-landing-shell.tsx
89
+ var import_site = require("@web-my-money/blocks/site");
90
+ var import_brand2 = require("@web-my-money/brand");
91
+ var import_jsx_runtime2 = require("react/jsx-runtime");
92
+ function WmmLandingShell({
93
+ children,
94
+ theme = "wmm",
95
+ nav,
96
+ footerLinks = WMM_LANDING_FOOTER_LINKS,
97
+ className
98
+ }) {
99
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { "data-theme": theme, className, children: [
100
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("header", { className: "sticky top-0 z-40 flex h-16 items-center gap-6 border-b border-border bg-background/80 px-6 backdrop-blur", children: [
101
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("a", { href: "/", "aria-label": "Home", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_brand2.WmmLogo, { variant: "lockup", size: 24 }) }),
102
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("nav", { className: "ml-auto flex items-center gap-6", children: nav })
103
+ ] }),
104
+ children,
105
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_site.Footer, { copyrightText: WMM_COPYRIGHT, links: [...footerLinks], children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_brand2.WmmLogo, { variant: "mark", size: 20, tone: theme === "light" ? "navy" : "white" }) })
106
+ ] });
107
+ }
108
+
109
+ // src/wmm-splash.tsx
110
+ var import_brand3 = require("@web-my-money/brand");
111
+ var import_jsx_runtime3 = require("react/jsx-runtime");
112
+ var KEYFRAMES = `
113
+ @keyframes wmm-splash-in { from { opacity: 0; transform: translateY(8px) scale(0.96); } to { opacity: 1; transform: none; } }
114
+ @keyframes wmm-splash-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
115
+ @keyframes wmm-splash-glow { 0%,100% { opacity: 0.55; transform: scale(1); } 50% { opacity: 0.9; transform: scale(1.08); } }
116
+ `;
117
+ function WmmSplash({
118
+ tagline,
119
+ motionSrc,
120
+ fullscreen = true,
121
+ size = 72,
122
+ className
123
+ }) {
124
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
125
+ "div",
126
+ {
127
+ "data-theme": "wmm",
128
+ className,
129
+ style: {
130
+ position: fullscreen ? "fixed" : "relative",
131
+ inset: fullscreen ? 0 : void 0,
132
+ minHeight: fullscreen ? void 0 : 320,
133
+ zIndex: fullscreen ? 60 : void 0,
134
+ display: "flex",
135
+ flexDirection: "column",
136
+ alignItems: "center",
137
+ justifyContent: "center",
138
+ gap: 20,
139
+ background: "var(--background, #080b14)",
140
+ color: "var(--foreground, #f8fafc)",
141
+ overflow: "hidden"
142
+ },
143
+ children: [
144
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("style", { dangerouslySetInnerHTML: { __html: KEYFRAMES } }),
145
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
146
+ "div",
147
+ {
148
+ "aria-hidden": true,
149
+ style: {
150
+ position: "absolute",
151
+ width: 480,
152
+ height: 480,
153
+ borderRadius: "50%",
154
+ background: "radial-gradient(circle, color-mix(in srgb, var(--primary) 22%, transparent) 0%, transparent 70%)",
155
+ animation: "wmm-splash-glow 3.4s ease-in-out infinite",
156
+ filter: "blur(8px)"
157
+ }
158
+ }
159
+ ),
160
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { position: "relative", animation: "wmm-splash-in 0.5s ease-out both" }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { animation: "wmm-splash-float 4s ease-in-out infinite" }, children: motionSrc ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_brand3.WmmLogoMotion, { src: motionSrc, size }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_brand3.WmmLogo, { variant: "mark", tone: "white", size }) }) }),
161
+ tagline && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { style: { position: "relative", margin: 0, fontSize: 14, color: "var(--muted-foreground, #94a3b8)", animation: "wmm-splash-in 0.6s ease-out 0.1s both" }, children: tagline })
162
+ ]
163
+ }
164
+ );
165
+ }
166
+
167
+ // src/wmm-fx-studio.tsx
168
+ var import_fx = require("@web-my-money/blocks/fx");
169
+ var import_brand4 = require("@web-my-money/brand");
170
+ var import_jsx_runtime4 = require("react/jsx-runtime");
171
+ var WMM_LOGO_OPTIONS = [
172
+ { id: "mono", label: "Mono", node: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_brand4.WmmLogo, { variant: "mark", size: 40 }) },
173
+ { id: "full", label: "Colour", node: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_brand4.WmmLogo, { variant: "mark", tone: "full", size: 40 }) },
174
+ { id: "3d", label: "3D", node: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_brand4.WmmLogo3D, { size: 44 }) }
175
+ ];
176
+ function WmmFxStudio({
177
+ children,
178
+ withBackground = false,
179
+ className,
180
+ ...studioProps
181
+ }) {
182
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_fx.FxPreferencesProvider, { defaultBackground: withBackground ? "aurora" : "none", children: [
183
+ withBackground && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "aria-hidden": true, className: "pointer-events-none fixed inset-0 -z-10", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_fx.DynamicBackground, { noise: true }) }),
184
+ children,
185
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_fx.DesignStudio, { className, logos: WMM_LOGO_OPTIONS, ...studioProps })
186
+ ] });
187
+ }
188
+ // Annotate the CommonJS export names for ESM import in node:
189
+ 0 && (module.exports = {
190
+ WMM_COPYRIGHT,
191
+ WMM_LANDING_FOOTER_LINKS,
192
+ WMM_OS_URL,
193
+ WMM_WEBSITE_URL,
194
+ WmmAppShell,
195
+ WmmFxStudio,
196
+ WmmLandingShell,
197
+ WmmSplash
198
+ });
package/dist/index.mjs ADDED
@@ -0,0 +1,168 @@
1
+ // src/wmm-app-shell.tsx
2
+ import { AppShell, LayoutToggle } from "@web-my-money/blocks/app";
3
+ import { ThemeToggle } from "@web-my-money/tokens/react";
4
+ import { WmmLogo } from "@web-my-money/brand";
5
+
6
+ // src/constants.ts
7
+ var WMM_OS_URL = "https://os.webmymoney.com";
8
+ var WMM_WEBSITE_URL = "https://webmymoney.com";
9
+ var WMM_LANDING_FOOTER_LINKS = [
10
+ { label: "Case Studies", href: `${WMM_WEBSITE_URL}/#work` },
11
+ { label: "Book a Call", href: `${WMM_WEBSITE_URL}/#book` },
12
+ { label: "Privacy", href: `${WMM_WEBSITE_URL}/privacy` }
13
+ ];
14
+ var WMM_COPYRIGHT = `\xA9 ${(/* @__PURE__ */ new Date()).getUTCFullYear()} Web My Money. All rights reserved.`;
15
+
16
+ // src/wmm-app-shell.tsx
17
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
18
+ function WmmAppShell({
19
+ showOsLink = true,
20
+ showThemeToggle = true,
21
+ showLayoutToggle = false,
22
+ osHref = WMM_OS_URL,
23
+ sidebarFooter,
24
+ headerActions,
25
+ ...rest
26
+ }) {
27
+ return /* @__PURE__ */ jsx(
28
+ AppShell,
29
+ {
30
+ ...rest,
31
+ logo: /* @__PURE__ */ jsx(WmmLogo, { variant: "mark", size: 22 }),
32
+ headerActions: /* @__PURE__ */ jsxs(Fragment, { children: [
33
+ headerActions,
34
+ showLayoutToggle && /* @__PURE__ */ jsx(LayoutToggle, {}),
35
+ showThemeToggle && /* @__PURE__ */ jsx(ThemeToggle, {})
36
+ ] }),
37
+ sidebarFooter: /* @__PURE__ */ jsxs(Fragment, { children: [
38
+ sidebarFooter,
39
+ showOsLink && /* @__PURE__ */ jsxs(
40
+ "a",
41
+ {
42
+ href: osHref,
43
+ className: "flex items-center gap-2 rounded-md px-2.5 py-2 text-[13px] font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
44
+ children: [
45
+ /* @__PURE__ */ jsx(WmmLogo, { variant: "mark", size: 14 }),
46
+ "WMM OS"
47
+ ]
48
+ }
49
+ )
50
+ ] })
51
+ }
52
+ );
53
+ }
54
+
55
+ // src/wmm-landing-shell.tsx
56
+ import { Footer } from "@web-my-money/blocks/site";
57
+ import { WmmLogo as WmmLogo2 } from "@web-my-money/brand";
58
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
59
+ function WmmLandingShell({
60
+ children,
61
+ theme = "wmm",
62
+ nav,
63
+ footerLinks = WMM_LANDING_FOOTER_LINKS,
64
+ className
65
+ }) {
66
+ return /* @__PURE__ */ jsxs2("div", { "data-theme": theme, className, children: [
67
+ /* @__PURE__ */ jsxs2("header", { className: "sticky top-0 z-40 flex h-16 items-center gap-6 border-b border-border bg-background/80 px-6 backdrop-blur", children: [
68
+ /* @__PURE__ */ jsx2("a", { href: "/", "aria-label": "Home", children: /* @__PURE__ */ jsx2(WmmLogo2, { variant: "lockup", size: 24 }) }),
69
+ /* @__PURE__ */ jsx2("nav", { className: "ml-auto flex items-center gap-6", children: nav })
70
+ ] }),
71
+ children,
72
+ /* @__PURE__ */ jsx2(Footer, { copyrightText: WMM_COPYRIGHT, links: [...footerLinks], children: /* @__PURE__ */ jsx2(WmmLogo2, { variant: "mark", size: 20, tone: theme === "light" ? "navy" : "white" }) })
73
+ ] });
74
+ }
75
+
76
+ // src/wmm-splash.tsx
77
+ import { WmmLogo as WmmLogo3, WmmLogoMotion } from "@web-my-money/brand";
78
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
79
+ var KEYFRAMES = `
80
+ @keyframes wmm-splash-in { from { opacity: 0; transform: translateY(8px) scale(0.96); } to { opacity: 1; transform: none; } }
81
+ @keyframes wmm-splash-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
82
+ @keyframes wmm-splash-glow { 0%,100% { opacity: 0.55; transform: scale(1); } 50% { opacity: 0.9; transform: scale(1.08); } }
83
+ `;
84
+ function WmmSplash({
85
+ tagline,
86
+ motionSrc,
87
+ fullscreen = true,
88
+ size = 72,
89
+ className
90
+ }) {
91
+ return /* @__PURE__ */ jsxs3(
92
+ "div",
93
+ {
94
+ "data-theme": "wmm",
95
+ className,
96
+ style: {
97
+ position: fullscreen ? "fixed" : "relative",
98
+ inset: fullscreen ? 0 : void 0,
99
+ minHeight: fullscreen ? void 0 : 320,
100
+ zIndex: fullscreen ? 60 : void 0,
101
+ display: "flex",
102
+ flexDirection: "column",
103
+ alignItems: "center",
104
+ justifyContent: "center",
105
+ gap: 20,
106
+ background: "var(--background, #080b14)",
107
+ color: "var(--foreground, #f8fafc)",
108
+ overflow: "hidden"
109
+ },
110
+ children: [
111
+ /* @__PURE__ */ jsx3("style", { dangerouslySetInnerHTML: { __html: KEYFRAMES } }),
112
+ /* @__PURE__ */ jsx3(
113
+ "div",
114
+ {
115
+ "aria-hidden": true,
116
+ style: {
117
+ position: "absolute",
118
+ width: 480,
119
+ height: 480,
120
+ borderRadius: "50%",
121
+ background: "radial-gradient(circle, color-mix(in srgb, var(--primary) 22%, transparent) 0%, transparent 70%)",
122
+ animation: "wmm-splash-glow 3.4s ease-in-out infinite",
123
+ filter: "blur(8px)"
124
+ }
125
+ }
126
+ ),
127
+ /* @__PURE__ */ jsx3("div", { style: { position: "relative", animation: "wmm-splash-in 0.5s ease-out both" }, children: /* @__PURE__ */ jsx3("div", { style: { animation: "wmm-splash-float 4s ease-in-out infinite" }, children: motionSrc ? /* @__PURE__ */ jsx3(WmmLogoMotion, { src: motionSrc, size }) : /* @__PURE__ */ jsx3(WmmLogo3, { variant: "mark", tone: "white", size }) }) }),
128
+ tagline && /* @__PURE__ */ jsx3("p", { style: { position: "relative", margin: 0, fontSize: 14, color: "var(--muted-foreground, #94a3b8)", animation: "wmm-splash-in 0.6s ease-out 0.1s both" }, children: tagline })
129
+ ]
130
+ }
131
+ );
132
+ }
133
+
134
+ // src/wmm-fx-studio.tsx
135
+ import {
136
+ FxPreferencesProvider,
137
+ DynamicBackground,
138
+ DesignStudio
139
+ } from "@web-my-money/blocks/fx";
140
+ import { WmmLogo as WmmLogo4, WmmLogo3D } from "@web-my-money/brand";
141
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
142
+ var WMM_LOGO_OPTIONS = [
143
+ { id: "mono", label: "Mono", node: /* @__PURE__ */ jsx4(WmmLogo4, { variant: "mark", size: 40 }) },
144
+ { id: "full", label: "Colour", node: /* @__PURE__ */ jsx4(WmmLogo4, { variant: "mark", tone: "full", size: 40 }) },
145
+ { id: "3d", label: "3D", node: /* @__PURE__ */ jsx4(WmmLogo3D, { size: 44 }) }
146
+ ];
147
+ function WmmFxStudio({
148
+ children,
149
+ withBackground = false,
150
+ className,
151
+ ...studioProps
152
+ }) {
153
+ return /* @__PURE__ */ jsxs4(FxPreferencesProvider, { defaultBackground: withBackground ? "aurora" : "none", children: [
154
+ withBackground && /* @__PURE__ */ jsx4("div", { "aria-hidden": true, className: "pointer-events-none fixed inset-0 -z-10", children: /* @__PURE__ */ jsx4(DynamicBackground, { noise: true }) }),
155
+ children,
156
+ /* @__PURE__ */ jsx4(DesignStudio, { className, logos: WMM_LOGO_OPTIONS, ...studioProps })
157
+ ] });
158
+ }
159
+ export {
160
+ WMM_COPYRIGHT,
161
+ WMM_LANDING_FOOTER_LINKS,
162
+ WMM_OS_URL,
163
+ WMM_WEBSITE_URL,
164
+ WmmAppShell,
165
+ WmmFxStudio,
166
+ WmmLandingShell,
167
+ WmmSplash
168
+ };
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@web-my-money/preset-wmm",
3
+ "version": "1.0.0",
4
+ "description": "The WMM-branded preset — pre-wires the generic AppShell/landing blocks with the WMM logo, theme, and standard nav/footer. First of a preset family (@web-my-money/preset-<brand>); generic packages (tokens/primitives/blocks) stay brand-agnostic, presets are the opinionated per-brand layer on top.",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsup src/index.ts --format cjs,esm --dts --external react --external react-dom",
20
+ "typecheck": "tsc --noEmit"
21
+ },
22
+ "peerDependencies": {
23
+ "react": "^18.0.0 || ^19.0.0",
24
+ "react-dom": "^18.0.0 || ^19.0.0"
25
+ },
26
+ "dependencies": {
27
+ "@web-my-money/blocks": "*",
28
+ "@web-my-money/brand": "*",
29
+ "@web-my-money/tokens": "*"
30
+ },
31
+ "devDependencies": {
32
+ "@types/react": "^19.0.0",
33
+ "@types/react-dom": "^19.0.0",
34
+ "tsup": "^8.4.0",
35
+ "typescript": "^5.8.0"
36
+ },
37
+ "publishConfig": {
38
+ "registry": "https://registry.npmjs.org",
39
+ "access": "public"
40
+ },
41
+ "license": "UNLICENSED"
42
+ }