@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.
- package/dist/index.d.mts +103 -0
- package/dist/index.d.ts +103 -0
- package/dist/index.js +198 -0
- package/dist/index.mjs +168 -0
- package/package.json +42 -0
package/dist/index.d.mts
ADDED
|
@@ -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.d.ts
ADDED
|
@@ -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
|
+
}
|