handoff-app 2.0.0-12 → 2.0.0-13
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/{Changelog.md → CHANGELOG.md} +84 -0
- package/{License.md → LICENSE.md} +1 -1
- package/README.md +760 -801
- package/RECIPES.md +975 -0
- package/components.json +20 -20
- package/config/docs/foundations/colors/guidelines.md +0 -1
- package/config/docs/foundations/colors.md +0 -1
- package/config/docs/foundations/effects/guidelines.md +0 -1
- package/config/docs/foundations/effects/resources.md +0 -1
- package/config/docs/foundations/effects.md +0 -1
- package/config/docs/foundations/fonts.md +0 -1
- package/config/docs/foundations/grid.md +0 -1
- package/config/docs/foundations/icon.md +0 -1
- package/config/docs/foundations/icons/guidelines.md +0 -1
- package/config/docs/foundations/icons.md +0 -1
- package/config/docs/foundations/images/guidelines.md +0 -1
- package/config/docs/foundations/images/resources.md +0 -1
- package/config/docs/foundations/images.md +0 -1
- package/config/docs/foundations/logo/resources.md +0 -1
- package/config/docs/foundations/logo.md +0 -1
- package/config/docs/foundations/typography/guidelines.md +0 -1
- package/config/docs/foundations/typography/resources.md +0 -1
- package/config/docs/foundations/typography.md +0 -1
- package/config/docs/foundations.md +0 -1
- package/config/docs/guidelines.md +0 -1
- package/config/docs/index.md +0 -1
- package/config/docs/system/tokens/foundations/colors.md +0 -4
- package/config/docs/system/tokens/foundations/effects.md +0 -4
- package/config/docs/system/tokens/foundations/typography.md +0 -2
- package/config/docs/system.md +0 -2
- package/config/templates/page.md +2 -1
- package/config/templates/page.mdx +2 -1
- package/dist/ai/define.d.ts +1 -1
- package/dist/ai/define.js +1 -1
- package/dist/ai/types.d.ts +1 -1
- package/dist/ai/types.js +1 -1
- package/dist/app-builder/build.js +14 -14
- package/dist/app-builder/client-config.js +1 -1
- package/dist/config/loader.js +1 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/nav/index.d.ts +2 -2
- package/dist/nav/registry.d.ts +3 -3
- package/dist/nav/registry.js +1 -1
- package/dist/nav/workspace.d.ts +3 -3
- package/dist/nav/workspace.js +1 -1
- package/dist/providers.d.ts +10 -0
- package/dist/{define.js → providers.js} +4 -4
- package/dist/registry/asset-storage/define.d.ts +5 -5
- package/dist/registry/asset-storage/define.js +4 -4
- package/dist/registry/asset-storage/resolve.d.ts +8 -11
- package/dist/registry/asset-storage/resolve.js +12 -13
- package/dist/registry/asset-storage/types.d.ts +12 -12
- package/dist/registry/asset-storage/types.js +2 -2
- package/dist/registry/db/schema.d.ts +2 -2
- package/dist/registry/db/schema.js +2 -2
- package/dist/registry/email/define.d.ts +1 -1
- package/dist/registry/email/define.js +1 -1
- package/dist/registry/email/resolve.d.ts +7 -8
- package/dist/registry/email/resolve.js +21 -23
- package/dist/registry/email/types.d.ts +1 -1
- package/dist/registry/email/types.js +1 -1
- package/dist/store/registry.d.ts +3 -3
- package/dist/store/registry.js +4 -4
- package/dist/types/config.d.ts +4 -13
- package/docs/cli.md +275 -54
- package/package.json +7 -7
- package/src/ai/define.ts +1 -1
- package/src/ai/types.ts +1 -1
- package/src/app/components/Auth/AccountLayout.tsx +1 -1
- package/src/app/components/Auth/AuthShell.tsx +10 -4
- package/src/app/components/Foundations/ColorGrid.tsx +13 -14
- package/src/app/components/Layout/Main.tsx +2 -2
- package/src/app/components/McpIntegration/McpConfigDialog.tsx +12 -51
- package/src/app/components/Navigation/MobileNav.tsx +0 -2
- package/src/app/components/util/index.ts +0 -11
- package/src/app/lib/asset-storage.ts +25 -25
- package/src/app/lib/auth/email.ts +4 -5
- package/src/app/lib/docs-api/page-rendering.ts +1 -1
- package/src/app/lib/docs-api/registry.ts +2 -3
- package/src/app/lib/docs-api/runtime-config.ts +8 -8
- package/src/app/lib/registry-api/asset-transfer.ts +25 -25
- package/src/app/lib/server-module.ts +1 -1
- package/src/app/lib/utils.ts +7 -0
- package/src/app/next.config.mjs +2 -2
- package/src/app/pages/[...slug]/index.tsx +2 -1
- package/src/app/pages/account/ai.tsx +1 -1
- package/src/app/pages/account/index.tsx +1 -1
- package/src/app/pages/account/tokens.tsx +1 -1
- package/src/app/pages/account/users.tsx +1 -1
- package/src/app/pages/api/docs/nav.json.ts +1 -1
- package/src/app/pages/api/mcp.ts +6 -0
- package/src/app/pages/api/registry/transfer/assets/blobs/[hash].ts +1 -1
- package/src/app/pages/cli/device.tsx +1 -1
- package/src/app/pages/foundations/colors.tsx +9 -8
- package/src/app/pages/foundations/index.tsx +3 -3
- package/src/app/pages/index.tsx +2 -2
- package/src/app/pages/login.tsx +10 -5
- package/src/app/pages/reset-password.tsx +7 -2
- package/src/app/pages/system/component/[component]/index.tsx +2 -5
- package/src/app/pages/system/index.tsx +11 -11
- package/src/app/pages/system/pattern/[pattern]/index.tsx +2 -2
- package/src/app/pages/system/tokens/components/[component]/index.tsx +0 -4
- package/src/app-builder/build.ts +10 -10
- package/src/app-builder/client-config.ts +1 -1
- package/src/config/loader.ts +1 -2
- package/src/index.ts +6 -6
- package/src/nav/index.ts +2 -2
- package/src/nav/registry.ts +3 -3
- package/src/nav/workspace.ts +3 -3
- package/src/{define.ts → providers.ts} +8 -8
- package/src/registry/asset-storage/define.ts +6 -6
- package/src/registry/asset-storage/resolve.ts +16 -20
- package/src/registry/asset-storage/types.ts +12 -12
- package/src/registry/db/schema.ts +3 -3
- package/src/registry/email/define.ts +1 -1
- package/src/registry/email/resolve.ts +23 -23
- package/src/registry/email/types.ts +1 -1
- package/src/store/registry.ts +7 -7
- package/src/types/config.ts +4 -14
- package/.editorconfig +0 -19
- package/.eslintrc.json +0 -4
- package/.prettierignore +0 -0
- package/.prettierrc.json +0 -8
- package/.vscode/settings.json +0 -17
- package/dist/define.d.ts +0 -10
- package/dist/registry/email/adapters/resend.d.ts +0 -7
- package/dist/registry/email/adapters/resend.js +0 -35
- package/src/app/components/old/Header.tsx +0 -89
- package/src/app/pages/assets/fonts.tsx +0 -129
- package/src/app/pages/assets/index.tsx +0 -91
- package/src/app/pages/assets/logos.tsx +0 -75
- package/src/registry/email/adapters/resend.ts +0 -22
- /package/dist/registry/email/{adapters → providers}/smtp.d.ts +0 -0
- /package/dist/registry/email/{adapters → providers}/smtp.js +0 -0
- /package/src/registry/email/{adapters → providers}/smtp.ts +0 -0
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { File, FileArchive } from 'lucide-react';
|
|
2
|
-
import type { GetStaticProps } from 'next';
|
|
3
|
-
import Head from 'next/head';
|
|
4
|
-
import ReactMarkdown from 'react-markdown';
|
|
5
|
-
import rehypeRaw from 'rehype-raw';
|
|
6
|
-
import remarkGfm from 'remark-gfm';
|
|
7
|
-
import Footer from '../../components/Footer';
|
|
8
|
-
import { MarkdownComponents, remarkCodeMeta } from '../../components/Markdown/MarkdownComponents';
|
|
9
|
-
import NavLink from '../../components/NavLink';
|
|
10
|
-
import Header from '../../components/old/Header';
|
|
11
|
-
import { DocumentationProps, fetchDocPageMarkdown, getClientRuntimeConfig } from '../../components/util';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* This statically renders content from the markdown, creating menu and providing
|
|
15
|
-
* metadata
|
|
16
|
-
*
|
|
17
|
-
* This is all done statically at build time
|
|
18
|
-
* @param context GetStaticProps
|
|
19
|
-
* @returns
|
|
20
|
-
*/
|
|
21
|
-
export const getStaticProps: GetStaticProps = async () => {
|
|
22
|
-
return {
|
|
23
|
-
props: {
|
|
24
|
-
...(await fetchDocPageMarkdown('docs/', 'assets', `/assets`)).props,
|
|
25
|
-
config: getClientRuntimeConfig(),
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const AssetsPage = ({ content, menu, metadata, config }: DocumentationProps) => {
|
|
31
|
-
return (
|
|
32
|
-
<div className="c-page">
|
|
33
|
-
<Head>
|
|
34
|
-
<title>{metadata.metaTitle}</title>
|
|
35
|
-
<meta name="description" content={metadata.metaDescription} />
|
|
36
|
-
</Head>
|
|
37
|
-
<Header config={config} />
|
|
38
|
-
<section className="c-content">
|
|
39
|
-
<div className="o-container-fluid">
|
|
40
|
-
<div className="c-hero c-hero--boxed c-hero--bg-red">
|
|
41
|
-
<div>
|
|
42
|
-
<h1 className="c-title--extra-large">{metadata.title}</h1>
|
|
43
|
-
<p>{metadata.description}</p>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<div className="o-row">
|
|
48
|
-
<div className="o-col-6@md">
|
|
49
|
-
<div className="c-card">
|
|
50
|
-
<FileArchive />
|
|
51
|
-
<h4>Logos</h4>
|
|
52
|
-
<p>Official logo used for all digital and offline materials.</p>
|
|
53
|
-
<p>
|
|
54
|
-
<NavLink href="/assets/logos">View Logos</NavLink>
|
|
55
|
-
</p>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
<div className="o-col-6@md">
|
|
59
|
-
<div className="c-card">
|
|
60
|
-
<FileArchive />
|
|
61
|
-
<h4>Fonts</h4>
|
|
62
|
-
<p>Font family and weights for all {config?.app?.client} visuals.</p>
|
|
63
|
-
<p>
|
|
64
|
-
<NavLink href="/assets/fonts">View Fonts</NavLink>
|
|
65
|
-
</p>
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
68
|
-
<div className="o-col-6@md">
|
|
69
|
-
<div className="c-card">
|
|
70
|
-
<File />
|
|
71
|
-
<h4>Iconography</h4>
|
|
72
|
-
<p>Library of approved vector iconography.</p>
|
|
73
|
-
<p>
|
|
74
|
-
<NavLink href="/assets/icons">View Icons</NavLink>
|
|
75
|
-
</p>
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
<div className="prose">
|
|
81
|
-
<ReactMarkdown components={MarkdownComponents} remarkPlugins={[remarkGfm, remarkCodeMeta]} rehypePlugins={[rehypeRaw]}>
|
|
82
|
-
{content}
|
|
83
|
-
</ReactMarkdown>
|
|
84
|
-
</div>
|
|
85
|
-
</div>
|
|
86
|
-
</section>
|
|
87
|
-
<Footer config={config} />
|
|
88
|
-
</div>
|
|
89
|
-
);
|
|
90
|
-
};
|
|
91
|
-
export default AssetsPage;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { FileArchive } from 'lucide-react';
|
|
2
|
-
import type { GetStaticProps } from 'next';
|
|
3
|
-
import Head from 'next/head';
|
|
4
|
-
import ReactMarkdown from 'react-markdown';
|
|
5
|
-
import rehypeRaw from 'rehype-raw';
|
|
6
|
-
import remarkGfm from 'remark-gfm';
|
|
7
|
-
import Footer from '../../components/Footer';
|
|
8
|
-
import { MarkdownComponents, remarkCodeMeta } from '../../components/Markdown/MarkdownComponents';
|
|
9
|
-
import { buildAssetDownloadUrl } from '@handoff/artifacts/url';
|
|
10
|
-
import Header from '../../components/old/Header';
|
|
11
|
-
import { DocumentationProps, fetchDocPageMarkdown, getClientRuntimeConfig } from '../../components/util';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* This statically renders content from the markdown, creating menu and providing
|
|
15
|
-
* metadata
|
|
16
|
-
*
|
|
17
|
-
* This is all done statically at build time
|
|
18
|
-
* @param context GetStaticProps
|
|
19
|
-
* @returns
|
|
20
|
-
*/
|
|
21
|
-
export const getStaticProps: GetStaticProps = async () => {
|
|
22
|
-
return {
|
|
23
|
-
props: {
|
|
24
|
-
...(await fetchDocPageMarkdown('docs/assets/', 'logos', `/assets`)).props,
|
|
25
|
-
config: getClientRuntimeConfig(),
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const AssetsLogosPage = ({ content, menu, metadata, config }: DocumentationProps) => {
|
|
31
|
-
return (
|
|
32
|
-
<div className="c-page">
|
|
33
|
-
<Head>
|
|
34
|
-
<title>{metadata.metaTitle}</title>
|
|
35
|
-
<meta name="description" content={metadata.metaDescription} />
|
|
36
|
-
</Head>
|
|
37
|
-
<Header config={config} />
|
|
38
|
-
<section className="c-content">
|
|
39
|
-
<div className="o-container-fluid">
|
|
40
|
-
<div className="c-hero">
|
|
41
|
-
<div>
|
|
42
|
-
<h1>{metadata.title}</h1>
|
|
43
|
-
<p>{metadata.description}</p>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
<div className="o-row u-justify-between">
|
|
47
|
-
<div className="o-col-5@md">
|
|
48
|
-
<h4>{config?.app?.client} Logo</h4>
|
|
49
|
-
</div>
|
|
50
|
-
<div className="o-col-6@md">
|
|
51
|
-
<div className="c-card">
|
|
52
|
-
<FileArchive />
|
|
53
|
-
<h4>{config?.app?.client} Logo</h4>
|
|
54
|
-
<p>Vector files of approved {config?.app?.client} logos.</p>
|
|
55
|
-
<p>
|
|
56
|
-
<a href={config?.assets_zip_links?.logos ?? buildAssetDownloadUrl('logos', process.env.HANDOFF_APP_BASE_PATH)} download>
|
|
57
|
-
Download Logos
|
|
58
|
-
</a>
|
|
59
|
-
</p>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
</div>
|
|
63
|
-
<div className="prose">
|
|
64
|
-
<ReactMarkdown components={MarkdownComponents} remarkPlugins={[remarkGfm, remarkCodeMeta]} rehypePlugins={[rehypeRaw]}>
|
|
65
|
-
{content}
|
|
66
|
-
</ReactMarkdown>
|
|
67
|
-
</div>
|
|
68
|
-
<hr />
|
|
69
|
-
</div>
|
|
70
|
-
</section>
|
|
71
|
-
<Footer config={config} />
|
|
72
|
-
</div>
|
|
73
|
-
);
|
|
74
|
-
};
|
|
75
|
-
export default AssetsLogosPage;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in Resend provider, selected with `runtime.registry.email.provider: "resend"` (the default).
|
|
3
|
-
* A plain `fetch` to the Resend HTTP API, so it adds no dependency.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { EmailProvider } from '../types';
|
|
7
|
-
|
|
8
|
-
/** Build a Resend provider from options whose references are already resolved. */
|
|
9
|
-
export const createResendProvider = (options: Record<string, unknown>): EmailProvider => ({
|
|
10
|
-
async send({ from, to, subject, html, text }) {
|
|
11
|
-
const apiKey = typeof options.apiKey === 'string' ? options.apiKey : '';
|
|
12
|
-
if (!apiKey) throw new Error('The Resend API key is not set.');
|
|
13
|
-
const response = await fetch('https://api.resend.com/emails', {
|
|
14
|
-
method: 'POST',
|
|
15
|
-
headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
|
|
16
|
-
body: JSON.stringify({ from, to: [to], subject, html, text }),
|
|
17
|
-
});
|
|
18
|
-
if (!response.ok) {
|
|
19
|
-
throw new Error(`Resend rejected the email (HTTP ${response.status}): ${await response.text()}`);
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|