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.
Files changed (136) hide show
  1. package/{Changelog.md → CHANGELOG.md} +84 -0
  2. package/{License.md → LICENSE.md} +1 -1
  3. package/README.md +760 -801
  4. package/RECIPES.md +975 -0
  5. package/components.json +20 -20
  6. package/config/docs/foundations/colors/guidelines.md +0 -1
  7. package/config/docs/foundations/colors.md +0 -1
  8. package/config/docs/foundations/effects/guidelines.md +0 -1
  9. package/config/docs/foundations/effects/resources.md +0 -1
  10. package/config/docs/foundations/effects.md +0 -1
  11. package/config/docs/foundations/fonts.md +0 -1
  12. package/config/docs/foundations/grid.md +0 -1
  13. package/config/docs/foundations/icon.md +0 -1
  14. package/config/docs/foundations/icons/guidelines.md +0 -1
  15. package/config/docs/foundations/icons.md +0 -1
  16. package/config/docs/foundations/images/guidelines.md +0 -1
  17. package/config/docs/foundations/images/resources.md +0 -1
  18. package/config/docs/foundations/images.md +0 -1
  19. package/config/docs/foundations/logo/resources.md +0 -1
  20. package/config/docs/foundations/logo.md +0 -1
  21. package/config/docs/foundations/typography/guidelines.md +0 -1
  22. package/config/docs/foundations/typography/resources.md +0 -1
  23. package/config/docs/foundations/typography.md +0 -1
  24. package/config/docs/foundations.md +0 -1
  25. package/config/docs/guidelines.md +0 -1
  26. package/config/docs/index.md +0 -1
  27. package/config/docs/system/tokens/foundations/colors.md +0 -4
  28. package/config/docs/system/tokens/foundations/effects.md +0 -4
  29. package/config/docs/system/tokens/foundations/typography.md +0 -2
  30. package/config/docs/system.md +0 -2
  31. package/config/templates/page.md +2 -1
  32. package/config/templates/page.mdx +2 -1
  33. package/dist/ai/define.d.ts +1 -1
  34. package/dist/ai/define.js +1 -1
  35. package/dist/ai/types.d.ts +1 -1
  36. package/dist/ai/types.js +1 -1
  37. package/dist/app-builder/build.js +14 -14
  38. package/dist/app-builder/client-config.js +1 -1
  39. package/dist/config/loader.js +1 -2
  40. package/dist/index.d.ts +2 -2
  41. package/dist/index.js +2 -2
  42. package/dist/nav/index.d.ts +2 -2
  43. package/dist/nav/registry.d.ts +3 -3
  44. package/dist/nav/registry.js +1 -1
  45. package/dist/nav/workspace.d.ts +3 -3
  46. package/dist/nav/workspace.js +1 -1
  47. package/dist/providers.d.ts +10 -0
  48. package/dist/{define.js → providers.js} +4 -4
  49. package/dist/registry/asset-storage/define.d.ts +5 -5
  50. package/dist/registry/asset-storage/define.js +4 -4
  51. package/dist/registry/asset-storage/resolve.d.ts +8 -11
  52. package/dist/registry/asset-storage/resolve.js +12 -13
  53. package/dist/registry/asset-storage/types.d.ts +12 -12
  54. package/dist/registry/asset-storage/types.js +2 -2
  55. package/dist/registry/db/schema.d.ts +2 -2
  56. package/dist/registry/db/schema.js +2 -2
  57. package/dist/registry/email/define.d.ts +1 -1
  58. package/dist/registry/email/define.js +1 -1
  59. package/dist/registry/email/resolve.d.ts +7 -8
  60. package/dist/registry/email/resolve.js +21 -23
  61. package/dist/registry/email/types.d.ts +1 -1
  62. package/dist/registry/email/types.js +1 -1
  63. package/dist/store/registry.d.ts +3 -3
  64. package/dist/store/registry.js +4 -4
  65. package/dist/types/config.d.ts +4 -13
  66. package/docs/cli.md +275 -54
  67. package/package.json +7 -7
  68. package/src/ai/define.ts +1 -1
  69. package/src/ai/types.ts +1 -1
  70. package/src/app/components/Auth/AccountLayout.tsx +1 -1
  71. package/src/app/components/Auth/AuthShell.tsx +10 -4
  72. package/src/app/components/Foundations/ColorGrid.tsx +13 -14
  73. package/src/app/components/Layout/Main.tsx +2 -2
  74. package/src/app/components/McpIntegration/McpConfigDialog.tsx +12 -51
  75. package/src/app/components/Navigation/MobileNav.tsx +0 -2
  76. package/src/app/components/util/index.ts +0 -11
  77. package/src/app/lib/asset-storage.ts +25 -25
  78. package/src/app/lib/auth/email.ts +4 -5
  79. package/src/app/lib/docs-api/page-rendering.ts +1 -1
  80. package/src/app/lib/docs-api/registry.ts +2 -3
  81. package/src/app/lib/docs-api/runtime-config.ts +8 -8
  82. package/src/app/lib/registry-api/asset-transfer.ts +25 -25
  83. package/src/app/lib/server-module.ts +1 -1
  84. package/src/app/lib/utils.ts +7 -0
  85. package/src/app/next.config.mjs +2 -2
  86. package/src/app/pages/[...slug]/index.tsx +2 -1
  87. package/src/app/pages/account/ai.tsx +1 -1
  88. package/src/app/pages/account/index.tsx +1 -1
  89. package/src/app/pages/account/tokens.tsx +1 -1
  90. package/src/app/pages/account/users.tsx +1 -1
  91. package/src/app/pages/api/docs/nav.json.ts +1 -1
  92. package/src/app/pages/api/mcp.ts +6 -0
  93. package/src/app/pages/api/registry/transfer/assets/blobs/[hash].ts +1 -1
  94. package/src/app/pages/cli/device.tsx +1 -1
  95. package/src/app/pages/foundations/colors.tsx +9 -8
  96. package/src/app/pages/foundations/index.tsx +3 -3
  97. package/src/app/pages/index.tsx +2 -2
  98. package/src/app/pages/login.tsx +10 -5
  99. package/src/app/pages/reset-password.tsx +7 -2
  100. package/src/app/pages/system/component/[component]/index.tsx +2 -5
  101. package/src/app/pages/system/index.tsx +11 -11
  102. package/src/app/pages/system/pattern/[pattern]/index.tsx +2 -2
  103. package/src/app/pages/system/tokens/components/[component]/index.tsx +0 -4
  104. package/src/app-builder/build.ts +10 -10
  105. package/src/app-builder/client-config.ts +1 -1
  106. package/src/config/loader.ts +1 -2
  107. package/src/index.ts +6 -6
  108. package/src/nav/index.ts +2 -2
  109. package/src/nav/registry.ts +3 -3
  110. package/src/nav/workspace.ts +3 -3
  111. package/src/{define.ts → providers.ts} +8 -8
  112. package/src/registry/asset-storage/define.ts +6 -6
  113. package/src/registry/asset-storage/resolve.ts +16 -20
  114. package/src/registry/asset-storage/types.ts +12 -12
  115. package/src/registry/db/schema.ts +3 -3
  116. package/src/registry/email/define.ts +1 -1
  117. package/src/registry/email/resolve.ts +23 -23
  118. package/src/registry/email/types.ts +1 -1
  119. package/src/store/registry.ts +7 -7
  120. package/src/types/config.ts +4 -14
  121. package/.editorconfig +0 -19
  122. package/.eslintrc.json +0 -4
  123. package/.prettierignore +0 -0
  124. package/.prettierrc.json +0 -8
  125. package/.vscode/settings.json +0 -17
  126. package/dist/define.d.ts +0 -10
  127. package/dist/registry/email/adapters/resend.d.ts +0 -7
  128. package/dist/registry/email/adapters/resend.js +0 -35
  129. package/src/app/components/old/Header.tsx +0 -89
  130. package/src/app/pages/assets/fonts.tsx +0 -129
  131. package/src/app/pages/assets/index.tsx +0 -91
  132. package/src/app/pages/assets/logos.tsx +0 -75
  133. package/src/registry/email/adapters/resend.ts +0 -22
  134. /package/dist/registry/email/{adapters → providers}/smtp.d.ts +0 -0
  135. /package/dist/registry/email/{adapters → providers}/smtp.js +0 -0
  136. /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
- });