@windrun-huaiin/third-ui 21.0.0 → 22.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.
Files changed (107) hide show
  1. package/dist/ai/ai-markdown.js +1 -1
  2. package/dist/ai/ai-markdown.mjs +1 -1
  3. package/dist/clerk/clerk-page-context-generator.js +3 -2
  4. package/dist/clerk/clerk-page-context-generator.mjs +3 -2
  5. package/dist/clerk/clerk-page-generator.js +4 -3
  6. package/dist/clerk/clerk-page-generator.mjs +4 -3
  7. package/dist/fuma/base/custom-header.d.ts +1 -1
  8. package/dist/fuma/base/custom-header.js +38 -36
  9. package/dist/fuma/base/custom-header.mjs +25 -23
  10. package/dist/fuma/base/custom-home-layout.d.ts +1 -1
  11. package/dist/fuma/base/custom-home-layout.js +1 -1
  12. package/dist/fuma/base/custom-home-layout.mjs +1 -1
  13. package/dist/fuma/base/header-theme-switch.d.ts +5 -0
  14. package/dist/fuma/base/header-theme-switch.js +42 -0
  15. package/dist/fuma/base/header-theme-switch.mjs +40 -0
  16. package/dist/fuma/base/index.d.ts +1 -0
  17. package/dist/fuma/base/index.js +7 -0
  18. package/dist/fuma/base/index.mjs +1 -0
  19. package/dist/fuma/base/site-layout.d.ts +116 -0
  20. package/dist/fuma/base/site-layout.js +72 -0
  21. package/dist/fuma/base/site-layout.mjs +65 -0
  22. package/dist/fuma/fuma-banner-suit.js +9 -6
  23. package/dist/fuma/fuma-banner-suit.mjs +10 -7
  24. package/dist/fuma/fuma-page-genarator.js +1 -1
  25. package/dist/fuma/fuma-page-genarator.mjs +1 -1
  26. package/dist/fuma/heavy/image-grid.d.ts +6 -0
  27. package/dist/fuma/heavy/image-grid.js +17 -0
  28. package/dist/fuma/heavy/image-grid.mjs +15 -0
  29. package/dist/fuma/heavy/image-zoom.d.ts +22 -0
  30. package/dist/fuma/heavy/image-zoom.js +39 -0
  31. package/dist/fuma/heavy/image-zoom.mjs +37 -0
  32. package/dist/fuma/heavy/index.d.ts +4 -0
  33. package/dist/fuma/heavy/index.js +15 -0
  34. package/dist/fuma/heavy/index.mjs +5 -0
  35. package/dist/fuma/heavy/math.d.ts +17 -0
  36. package/dist/fuma/heavy/math.js +60 -0
  37. package/dist/fuma/heavy/math.mjs +57 -0
  38. package/dist/fuma/heavy/mermaid.d.ts +13 -0
  39. package/dist/fuma/heavy/mermaid.js +360 -0
  40. package/dist/fuma/heavy/mermaid.mjs +358 -0
  41. package/dist/fuma/mdx/features.d.ts +8 -0
  42. package/dist/fuma/mdx/features.js +92 -0
  43. package/dist/fuma/mdx/features.mjs +85 -0
  44. package/dist/fuma/mdx/index.d.ts +0 -5
  45. package/dist/fuma/mdx/index.js +0 -11
  46. package/dist/fuma/mdx/index.mjs +0 -5
  47. package/dist/fuma/mdx/markdown-component-map.js +7 -1
  48. package/dist/fuma/mdx/markdown-component-map.mjs +7 -1
  49. package/dist/fuma/mdx/site-mdx-components.d.ts +13 -0
  50. package/dist/fuma/mdx/site-mdx-components.js +19 -0
  51. package/dist/fuma/mdx/site-mdx-components.mjs +17 -0
  52. package/dist/fuma/mdx/site-mdx-presets.d.ts +13 -0
  53. package/dist/fuma/mdx/site-mdx-presets.js +49 -0
  54. package/dist/fuma/mdx/site-mdx-presets.mjs +45 -0
  55. package/dist/fuma/mdx/toc-clerk-portable.js +9 -5
  56. package/dist/fuma/mdx/toc-clerk-portable.mjs +8 -4
  57. package/dist/fuma/mdx/zia-file.js +1 -0
  58. package/dist/fuma/mdx/zia-file.mjs +1 -0
  59. package/dist/fuma/server/optional-features.d.ts +8 -0
  60. package/dist/fuma/server/optional-features.js +111 -0
  61. package/dist/fuma/server/optional-features.mjs +104 -0
  62. package/dist/fuma/server/site-mdx-components.d.ts +13 -0
  63. package/dist/fuma/server/site-mdx-components.js +19 -0
  64. package/dist/fuma/server/site-mdx-components.mjs +17 -0
  65. package/dist/fuma/server/site-mdx-presets.d.ts +194 -0
  66. package/dist/fuma/server/site-mdx-presets.js +46 -0
  67. package/dist/fuma/server/site-mdx-presets.mjs +42 -0
  68. package/dist/fuma/share/index.d.ts +1 -0
  69. package/dist/fuma/share/index.js +7 -0
  70. package/dist/fuma/share/index.mjs +1 -0
  71. package/dist/fuma/share/markdown-component-map.d.ts +3 -0
  72. package/dist/fuma/share/markdown-component-map.js +79 -0
  73. package/dist/fuma/share/markdown-component-map.mjs +77 -0
  74. package/dist/lib/fuma-schema-check-util.js +19 -5
  75. package/dist/lib/fuma-schema-check-util.mjs +19 -5
  76. package/dist/lib/seo-metadata.d.ts +10 -0
  77. package/dist/main/x-button.js +2 -2
  78. package/dist/main/x-button.mjs +2 -2
  79. package/package.json +31 -8
  80. package/src/ai/ai-markdown.tsx +1 -1
  81. package/src/clerk/clerk-page-context-generator.tsx +6 -3
  82. package/src/clerk/clerk-page-generator.tsx +7 -4
  83. package/src/fuma/base/custom-header.tsx +32 -35
  84. package/src/fuma/base/custom-home-layout.tsx +2 -2
  85. package/src/fuma/base/header-theme-switch.tsx +88 -0
  86. package/src/fuma/base/index.ts +1 -0
  87. package/src/fuma/base/site-layout.tsx +289 -0
  88. package/src/fuma/fuma-banner-suit.tsx +30 -28
  89. package/src/fuma/fuma-page-genarator.tsx +1 -1
  90. package/src/fuma/{mdx → heavy}/image-grid.tsx +1 -1
  91. package/src/fuma/heavy/index.ts +7 -0
  92. package/src/fuma/mdx/index.ts +0 -5
  93. package/src/fuma/mdx/toc-clerk-portable.tsx +27 -24
  94. package/src/fuma/mdx/zia-file.tsx +3 -1
  95. package/src/fuma/server/optional-features.tsx +168 -0
  96. package/src/fuma/server/site-mdx-components.tsx +48 -0
  97. package/src/fuma/server/site-mdx-presets.ts +80 -0
  98. package/src/fuma/share/index.ts +1 -0
  99. package/src/fuma/{mdx → share}/markdown-component-map.tsx +1 -1
  100. package/src/lib/fuma-schema-check-util.ts +22 -6
  101. package/src/lib/seo-metadata.ts +47 -0
  102. package/src/main/x-button.tsx +2 -2
  103. package/src/styles/fuma.css +3 -7
  104. package/src/styles/third-ui.css +0 -4
  105. /package/src/fuma/{mdx → heavy}/image-zoom.tsx +0 -0
  106. /package/src/fuma/{mdx → heavy}/math.tsx +0 -0
  107. /package/src/fuma/{mdx → heavy}/mermaid.tsx +0 -0
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var defaultMdxComponents = require('fumadocs-ui/mdx');
4
+ var tabs = require('fumadocs-ui/components/tabs');
5
+ var callout = require('fumadocs-ui/components/callout');
6
+ var files = require('fumadocs-ui/components/files');
7
+ var accordion = require('fumadocs-ui/components/accordion');
8
+ var optionalFeatures = require('./optional-features.js');
9
+ var siteX = require('../site-x.js');
10
+
11
+ const defaultFumaUiComponents = {
12
+ Callout: callout.Callout,
13
+ File: files.File,
14
+ Folder: files.Folder,
15
+ Files: files.Files,
16
+ Accordion: accordion.Accordion,
17
+ Accordions: accordion.Accordions,
18
+ Tab: tabs.Tab,
19
+ Tabs: tabs.Tabs,
20
+ };
21
+ const DEFAULT_SITE_MDX_FEATURES = [
22
+ 'base',
23
+ 'code',
24
+ 'math',
25
+ 'mermaid',
26
+ 'type-table',
27
+ ];
28
+ function createSiteFeatureComponentMap(options) {
29
+ const { cdnBaseUrl, iconMap = {}, imageFallbackSrc, watermarkEnabled, watermarkText, } = options;
30
+ return {
31
+ base: Object.assign(Object.assign(Object.assign(Object.assign({}, defaultFumaUiComponents), { SiteX: siteX.SiteX }), optionalFeatures.createBaseMdxComponents(imageFallbackSrc)), optionalFeatures.createWidgetMdxComponents(cdnBaseUrl, imageFallbackSrc)),
32
+ code: optionalFeatures.createCodeMdxComponents(iconMap),
33
+ math: optionalFeatures.createMathMdxComponents(),
34
+ mermaid: optionalFeatures.createMermaidMdxComponents(watermarkEnabled, watermarkText),
35
+ 'type-table': optionalFeatures.createTypeTableMdxComponents(),
36
+ };
37
+ }
38
+ function composeSiteMdxComponents(features, featureMap, additionalComponents, components) {
39
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, defaultMdxComponents), features.reduce((acc, feature) => {
40
+ return Object.assign(Object.assign({}, acc), featureMap[feature]);
41
+ }, {})), additionalComponents), components);
42
+ }
43
+
44
+ exports.DEFAULT_SITE_MDX_FEATURES = DEFAULT_SITE_MDX_FEATURES;
45
+ exports.composeSiteMdxComponents = composeSiteMdxComponents;
46
+ exports.createSiteFeatureComponentMap = createSiteFeatureComponentMap;
@@ -0,0 +1,42 @@
1
+ import defaultMdxComponents from 'fumadocs-ui/mdx';
2
+ import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
3
+ import { Callout } from 'fumadocs-ui/components/callout';
4
+ import { Files, Folder, File } from 'fumadocs-ui/components/files';
5
+ import { Accordions, Accordion } from 'fumadocs-ui/components/accordion';
6
+ import { createTypeTableMdxComponents, createMermaidMdxComponents, createMathMdxComponents, createCodeMdxComponents, createBaseMdxComponents, createWidgetMdxComponents } from './optional-features.mjs';
7
+ import { SiteX } from '../site-x.mjs';
8
+
9
+ const defaultFumaUiComponents = {
10
+ Callout,
11
+ File,
12
+ Folder,
13
+ Files,
14
+ Accordion,
15
+ Accordions,
16
+ Tab,
17
+ Tabs,
18
+ };
19
+ const DEFAULT_SITE_MDX_FEATURES = [
20
+ 'base',
21
+ 'code',
22
+ 'math',
23
+ 'mermaid',
24
+ 'type-table',
25
+ ];
26
+ function createSiteFeatureComponentMap(options) {
27
+ const { cdnBaseUrl, iconMap = {}, imageFallbackSrc, watermarkEnabled, watermarkText, } = options;
28
+ return {
29
+ base: Object.assign(Object.assign(Object.assign(Object.assign({}, defaultFumaUiComponents), { SiteX }), createBaseMdxComponents(imageFallbackSrc)), createWidgetMdxComponents(cdnBaseUrl, imageFallbackSrc)),
30
+ code: createCodeMdxComponents(iconMap),
31
+ math: createMathMdxComponents(),
32
+ mermaid: createMermaidMdxComponents(watermarkEnabled, watermarkText),
33
+ 'type-table': createTypeTableMdxComponents(),
34
+ };
35
+ }
36
+ function composeSiteMdxComponents(features, featureMap, additionalComponents, components) {
37
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, defaultMdxComponents), features.reduce((acc, feature) => {
38
+ return Object.assign(Object.assign({}, acc), featureMap[feature]);
39
+ }, {})), additionalComponents), components);
40
+ }
41
+
42
+ export { DEFAULT_SITE_MDX_FEATURES, composeSiteMdxComponents, createSiteFeatureComponentMap };
@@ -0,0 +1 @@
1
+ export * from './markdown-component-map';
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var markdownComponentMap = require('./markdown-component-map.js');
4
+
5
+
6
+
7
+ exports.baseMarkdownComponents = markdownComponentMap.baseMarkdownComponents;
@@ -0,0 +1 @@
1
+ export { baseMarkdownComponents } from './markdown-component-map.mjs';
@@ -0,0 +1,3 @@
1
+ import { type ComponentType } from 'react';
2
+ export type MarkdownComponentMap = Record<string, ComponentType<any>>;
3
+ export declare const baseMarkdownComponents: MarkdownComponentMap;
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var utils = require('@windrun-huaiin/lib/utils');
6
+ var defaultMdxComponents = require('fumadocs-ui/mdx');
7
+ var imageZoom = require('../heavy/image-zoom.js');
8
+ require('katex');
9
+ require('@windrun-huaiin/base-ui/icons');
10
+ require('next-themes');
11
+ require('roughjs');
12
+ require('react');
13
+ require('@windrun-huaiin/base-ui/lib');
14
+
15
+ function normalizeMarkdownProps(props) {
16
+ const { class: legacyClassName, className } = props, restProps = tslib.__rest(props, ["class", "className"]);
17
+ return Object.assign(Object.assign({}, restProps), { className: utils.cn(typeof legacyClassName === 'string' ? legacyClassName : undefined, className) });
18
+ }
19
+ const baseMarkdownComponents = Object.assign(Object.assign({}, defaultMdxComponents), { a: (_a) => {
20
+ var _b, _c;
21
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
22
+ return (jsxRuntime.jsx("a", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('underline underline-offset-4 transition hover:opacity-80', normalizeMarkdownProps(props).className, className), target: (_b = props.target) !== null && _b !== void 0 ? _b : '_blank', rel: (_c = props.rel) !== null && _c !== void 0 ? _c : 'noreferrer noopener' })));
23
+ }, blockquote: (_a) => {
24
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
25
+ return (jsxRuntime.jsx("blockquote", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('border-l-2 border-border pl-4 text-muted-foreground', normalizeMarkdownProps(props).className, className) })));
26
+ }, code: (_a) => {
27
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
28
+ return (jsxRuntime.jsx("code", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('rounded-md bg-muted px-1.5 py-0.5 font-mono text-[0.9em]', normalizeMarkdownProps(props).className, className) })));
29
+ }, h1: (_a) => {
30
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
31
+ return (jsxRuntime.jsx("h1", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('text-2xl font-semibold tracking-tight', normalizeMarkdownProps(props).className, className) })));
32
+ }, h2: (_a) => {
33
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
34
+ return (jsxRuntime.jsx("h2", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('text-xl font-semibold tracking-tight', normalizeMarkdownProps(props).className, className) })));
35
+ }, h3: (_a) => {
36
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
37
+ return (jsxRuntime.jsx("h3", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('text-lg font-semibold', normalizeMarkdownProps(props).className, className) })));
38
+ }, h4: (_a) => {
39
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
40
+ return (jsxRuntime.jsx("h4", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('text-base font-semibold', normalizeMarkdownProps(props).className, className) })));
41
+ }, h5: (_a) => {
42
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
43
+ return (jsxRuntime.jsx("h5", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('text-sm font-semibold', normalizeMarkdownProps(props).className, className) })));
44
+ }, h6: (_a) => {
45
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
46
+ return (jsxRuntime.jsx("h6", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('text-sm font-semibold', normalizeMarkdownProps(props).className, className) })));
47
+ }, hr: (_a) => {
48
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
49
+ return (jsxRuntime.jsx("hr", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('border-border', normalizeMarkdownProps(props).className, className) })));
50
+ }, img: (_a) => {
51
+ var { className, alt, src } = _a, props = tslib.__rest(_a, ["className", "alt", "src"]);
52
+ return (jsxRuntime.jsx(imageZoom.ImageZoom, Object.assign({}, normalizeMarkdownProps(props), { alt: typeof alt === 'string' ? alt : '', src: typeof src === 'string' ? src : '', className: utils.cn('overflow-hidden rounded-2xl', normalizeMarkdownProps(props).className, className) })));
53
+ }, li: (_a) => {
54
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
55
+ return (jsxRuntime.jsx("li", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('leading-7', normalizeMarkdownProps(props).className, className) })));
56
+ }, ol: (_a) => {
57
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
58
+ return (jsxRuntime.jsx("ol", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('list-decimal space-y-2 pl-6', normalizeMarkdownProps(props).className, className) })));
59
+ }, p: (_a) => {
60
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
61
+ return (jsxRuntime.jsx("p", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('leading-7', normalizeMarkdownProps(props).className, className) })));
62
+ }, pre: (_a) => {
63
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
64
+ return (jsxRuntime.jsx("pre", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('overflow-x-auto rounded-2xl border border-border bg-muted px-4 py-3 text-sm', normalizeMarkdownProps(props).className, className) })));
65
+ }, table: (_a) => {
66
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
67
+ return (jsxRuntime.jsx("div", { className: "overflow-x-auto", children: jsxRuntime.jsx("table", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('w-full border-collapse text-sm', normalizeMarkdownProps(props).className, className) })) }));
68
+ }, td: (_a) => {
69
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
70
+ return (jsxRuntime.jsx("td", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('border border-border px-3 py-2 align-top', normalizeMarkdownProps(props).className, className) })));
71
+ }, th: (_a) => {
72
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
73
+ return (jsxRuntime.jsx("th", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('border border-border px-3 py-2 text-left font-medium', normalizeMarkdownProps(props).className, className) })));
74
+ }, ul: (_a) => {
75
+ var { className } = _a, props = tslib.__rest(_a, ["className"]);
76
+ return (jsxRuntime.jsx("ul", Object.assign({}, normalizeMarkdownProps(props), { className: utils.cn('list-disc space-y-2 pl-6', normalizeMarkdownProps(props).className, className) })));
77
+ } });
78
+
79
+ exports.baseMarkdownComponents = baseMarkdownComponents;
@@ -0,0 +1,77 @@
1
+ import { __rest } from 'tslib';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { cn } from '@windrun-huaiin/lib/utils';
4
+ import defaultMdxComponents from 'fumadocs-ui/mdx';
5
+ import { ImageZoom } from '../heavy/image-zoom.mjs';
6
+ import 'katex';
7
+ import '@windrun-huaiin/base-ui/icons';
8
+ import 'next-themes';
9
+ import 'roughjs';
10
+ import 'react';
11
+ import '@windrun-huaiin/base-ui/lib';
12
+
13
+ function normalizeMarkdownProps(props) {
14
+ const { class: legacyClassName, className } = props, restProps = __rest(props, ["class", "className"]);
15
+ return Object.assign(Object.assign({}, restProps), { className: cn(typeof legacyClassName === 'string' ? legacyClassName : undefined, className) });
16
+ }
17
+ const baseMarkdownComponents = Object.assign(Object.assign({}, defaultMdxComponents), { a: (_a) => {
18
+ var _b, _c;
19
+ var { className } = _a, props = __rest(_a, ["className"]);
20
+ return (jsx("a", Object.assign({}, normalizeMarkdownProps(props), { className: cn('underline underline-offset-4 transition hover:opacity-80', normalizeMarkdownProps(props).className, className), target: (_b = props.target) !== null && _b !== void 0 ? _b : '_blank', rel: (_c = props.rel) !== null && _c !== void 0 ? _c : 'noreferrer noopener' })));
21
+ }, blockquote: (_a) => {
22
+ var { className } = _a, props = __rest(_a, ["className"]);
23
+ return (jsx("blockquote", Object.assign({}, normalizeMarkdownProps(props), { className: cn('border-l-2 border-border pl-4 text-muted-foreground', normalizeMarkdownProps(props).className, className) })));
24
+ }, code: (_a) => {
25
+ var { className } = _a, props = __rest(_a, ["className"]);
26
+ return (jsx("code", Object.assign({}, normalizeMarkdownProps(props), { className: cn('rounded-md bg-muted px-1.5 py-0.5 font-mono text-[0.9em]', normalizeMarkdownProps(props).className, className) })));
27
+ }, h1: (_a) => {
28
+ var { className } = _a, props = __rest(_a, ["className"]);
29
+ return (jsx("h1", Object.assign({}, normalizeMarkdownProps(props), { className: cn('text-2xl font-semibold tracking-tight', normalizeMarkdownProps(props).className, className) })));
30
+ }, h2: (_a) => {
31
+ var { className } = _a, props = __rest(_a, ["className"]);
32
+ return (jsx("h2", Object.assign({}, normalizeMarkdownProps(props), { className: cn('text-xl font-semibold tracking-tight', normalizeMarkdownProps(props).className, className) })));
33
+ }, h3: (_a) => {
34
+ var { className } = _a, props = __rest(_a, ["className"]);
35
+ return (jsx("h3", Object.assign({}, normalizeMarkdownProps(props), { className: cn('text-lg font-semibold', normalizeMarkdownProps(props).className, className) })));
36
+ }, h4: (_a) => {
37
+ var { className } = _a, props = __rest(_a, ["className"]);
38
+ return (jsx("h4", Object.assign({}, normalizeMarkdownProps(props), { className: cn('text-base font-semibold', normalizeMarkdownProps(props).className, className) })));
39
+ }, h5: (_a) => {
40
+ var { className } = _a, props = __rest(_a, ["className"]);
41
+ return (jsx("h5", Object.assign({}, normalizeMarkdownProps(props), { className: cn('text-sm font-semibold', normalizeMarkdownProps(props).className, className) })));
42
+ }, h6: (_a) => {
43
+ var { className } = _a, props = __rest(_a, ["className"]);
44
+ return (jsx("h6", Object.assign({}, normalizeMarkdownProps(props), { className: cn('text-sm font-semibold', normalizeMarkdownProps(props).className, className) })));
45
+ }, hr: (_a) => {
46
+ var { className } = _a, props = __rest(_a, ["className"]);
47
+ return (jsx("hr", Object.assign({}, normalizeMarkdownProps(props), { className: cn('border-border', normalizeMarkdownProps(props).className, className) })));
48
+ }, img: (_a) => {
49
+ var { className, alt, src } = _a, props = __rest(_a, ["className", "alt", "src"]);
50
+ return (jsx(ImageZoom, Object.assign({}, normalizeMarkdownProps(props), { alt: typeof alt === 'string' ? alt : '', src: typeof src === 'string' ? src : '', className: cn('overflow-hidden rounded-2xl', normalizeMarkdownProps(props).className, className) })));
51
+ }, li: (_a) => {
52
+ var { className } = _a, props = __rest(_a, ["className"]);
53
+ return (jsx("li", Object.assign({}, normalizeMarkdownProps(props), { className: cn('leading-7', normalizeMarkdownProps(props).className, className) })));
54
+ }, ol: (_a) => {
55
+ var { className } = _a, props = __rest(_a, ["className"]);
56
+ return (jsx("ol", Object.assign({}, normalizeMarkdownProps(props), { className: cn('list-decimal space-y-2 pl-6', normalizeMarkdownProps(props).className, className) })));
57
+ }, p: (_a) => {
58
+ var { className } = _a, props = __rest(_a, ["className"]);
59
+ return (jsx("p", Object.assign({}, normalizeMarkdownProps(props), { className: cn('leading-7', normalizeMarkdownProps(props).className, className) })));
60
+ }, pre: (_a) => {
61
+ var { className } = _a, props = __rest(_a, ["className"]);
62
+ return (jsx("pre", Object.assign({}, normalizeMarkdownProps(props), { className: cn('overflow-x-auto rounded-2xl border border-border bg-muted px-4 py-3 text-sm', normalizeMarkdownProps(props).className, className) })));
63
+ }, table: (_a) => {
64
+ var { className } = _a, props = __rest(_a, ["className"]);
65
+ return (jsx("div", { className: "overflow-x-auto", children: jsx("table", Object.assign({}, normalizeMarkdownProps(props), { className: cn('w-full border-collapse text-sm', normalizeMarkdownProps(props).className, className) })) }));
66
+ }, td: (_a) => {
67
+ var { className } = _a, props = __rest(_a, ["className"]);
68
+ return (jsx("td", Object.assign({}, normalizeMarkdownProps(props), { className: cn('border border-border px-3 py-2 align-top', normalizeMarkdownProps(props).className, className) })));
69
+ }, th: (_a) => {
70
+ var { className } = _a, props = __rest(_a, ["className"]);
71
+ return (jsx("th", Object.assign({}, normalizeMarkdownProps(props), { className: cn('border border-border px-3 py-2 text-left font-medium', normalizeMarkdownProps(props).className, className) })));
72
+ }, ul: (_a) => {
73
+ var { className } = _a, props = __rest(_a, ["className"]);
74
+ return (jsx("ul", Object.assign({}, normalizeMarkdownProps(props), { className: cn('list-disc space-y-2 pl-6', normalizeMarkdownProps(props).className, className) })));
75
+ } });
76
+
77
+ export { baseMarkdownComponents };
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var zod = require('zod');
4
- var config = require('fumadocs-mdx/config');
5
4
 
6
5
  // Reusable schema for date
7
6
  const createDateSchema = () => zod.z.preprocess((arg) => {
@@ -20,17 +19,32 @@ const createDateSchema = () => zod.z.preprocess((arg) => {
20
19
  }, zod.z.string()
21
20
  .regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format or a valid Date object")
22
21
  .refine((val) => !isNaN(new Date(val).getTime()), 'Invalid date!'));
22
+ const baseFrontmatterSchema = zod.z
23
+ .object({
24
+ title: zod.z.string().optional(),
25
+ description: zod.z.string().optional(),
26
+ icon: zod.z.string().optional(),
27
+ })
28
+ .loose();
29
+ const baseMetaSchema = zod.z
30
+ .object({
31
+ title: zod.z.string().optional(),
32
+ pages: zod.z.array(zod.z.string()).optional(),
33
+ description: zod.z.string().optional(),
34
+ root: zod.z.boolean().optional(),
35
+ defaultOpen: zod.z.boolean().optional(),
36
+ icon: zod.z.string().optional(),
37
+ })
38
+ .loose();
23
39
  // common docs frontmatter schema
24
- // @ts-ignore
25
- const createCommonDocsSchema = () => config.frontmatterSchema
40
+ const createCommonDocsSchema = () => baseFrontmatterSchema
26
41
  .extend({
27
42
  date: createDateSchema(),
28
43
  author: zod.z.string().optional(),
29
44
  keywords: zod.z.array(zod.z.string()).optional(),
30
45
  });
31
46
  // common meta schema
32
- // @ts-ignore
33
- const createCommonMetaSchema = () => config.metaSchema.extend({});
47
+ const createCommonMetaSchema = () => baseMetaSchema.extend({});
34
48
  const remarkInstallOptions = {
35
49
  persist: {
36
50
  id: 'package-manager',
@@ -1,5 +1,4 @@
1
1
  import { z } from 'zod';
2
- import { frontmatterSchema, metaSchema } from 'fumadocs-mdx/config';
3
2
 
4
3
  // Reusable schema for date
5
4
  const createDateSchema = () => z.preprocess((arg) => {
@@ -18,17 +17,32 @@ const createDateSchema = () => z.preprocess((arg) => {
18
17
  }, z.string()
19
18
  .regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format or a valid Date object")
20
19
  .refine((val) => !isNaN(new Date(val).getTime()), 'Invalid date!'));
20
+ const baseFrontmatterSchema = z
21
+ .object({
22
+ title: z.string().optional(),
23
+ description: z.string().optional(),
24
+ icon: z.string().optional(),
25
+ })
26
+ .loose();
27
+ const baseMetaSchema = z
28
+ .object({
29
+ title: z.string().optional(),
30
+ pages: z.array(z.string()).optional(),
31
+ description: z.string().optional(),
32
+ root: z.boolean().optional(),
33
+ defaultOpen: z.boolean().optional(),
34
+ icon: z.string().optional(),
35
+ })
36
+ .loose();
21
37
  // common docs frontmatter schema
22
- // @ts-ignore
23
- const createCommonDocsSchema = () => frontmatterSchema
38
+ const createCommonDocsSchema = () => baseFrontmatterSchema
24
39
  .extend({
25
40
  date: createDateSchema(),
26
41
  author: z.string().optional(),
27
42
  keywords: z.array(z.string()).optional(),
28
43
  });
29
44
  // common meta schema
30
- // @ts-ignore
31
- const createCommonMetaSchema = () => metaSchema.extend({});
45
+ const createCommonMetaSchema = () => baseMetaSchema.extend({});
32
46
  const remarkInstallOptions = {
33
47
  persist: {
34
48
  id: 'package-manager',
@@ -0,0 +1,10 @@
1
+ import type { Metadata } from 'next';
2
+ export interface CreateLocalizedSiteMetadataOptions {
3
+ locale: string;
4
+ baseUrl: string;
5
+ locales: readonly string[];
6
+ defaultLocale: string;
7
+ localePrefixAsNeeded: boolean;
8
+ }
9
+ export type LocalizedSiteMetadata = Pick<Metadata, 'title' | 'description' | 'keywords' | 'alternates' | 'icons'>;
10
+ export declare function createLocalizedSiteMetadata(options: CreateLocalizedSiteMetadataOptions): Promise<LocalizedSiteMetadata>;
@@ -88,12 +88,12 @@ function XButton(props) {
88
88
  const isMainDisabled = mainButton.disabled || isLoading;
89
89
  // loadingText prioty:props.loadingText > mainButton.text > 'Loading...'
90
90
  const actualLoadingText = loadingText || ((_c = mainButton.text) === null || _c === void 0 ? void 0 : _c.trim()) || 'Loading...';
91
- return (jsxRuntime.jsxs("div", { className: utils.cn("relative flex flex-row items-stretch w-full sm:w-auto rounded-full gap-0", menuOpen && "z-[90]", variant === 'soft'
91
+ return (jsxRuntime.jsxs("div", { className: utils.cn("relative flex flex-row items-stretch w-full sm:w-auto rounded-full gap-0", menuOpen && "z-90", variant === 'soft'
92
92
  ? utils.cn(lib.themeBgColor, lib.themeBorderColor, "border")
93
93
  : variant === 'subtle'
94
94
  ? utils.cn(lib.themeMainBgColor, "border border-neutral-200 dark:border-neutral-800")
95
95
  : "bg-neutral-200 dark:bg-neutral-800", className), children: [jsxRuntime.jsx("button", { onClick: () => handleButtonClick(mainButton.onClick), disabled: isMainDisabled, className: utils.cn("min-w-0 flex-1", baseButtonClass, splitMainButtonVariantClass, "rounded-l-full rounded-r-none", isMainDisabled && disabledClass, mainButtonClassName), onMouseDown: e => { if (e.button === 2)
96
- e.preventDefault(); }, children: isLoading ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(icons.Loader2Icon, { className: loadingIconClass }), jsxRuntime.jsx("span", { children: actualLoadingText })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [renderIcon(mainButton.icon), jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: mainButton.text })] })) }), jsxRuntime.jsx("button", { type: "button", className: utils.cn("flex h-full w-9 shrink-0 items-center justify-center px-0 py-1.5 cursor-pointer transition rounded-r-full rounded-l-none border-l sm:w-10", splitDropdownVariantClass, dropdownButtonClassName), onClick: e => { e.stopPropagation(); setMenuOpen(v => !v); }, "aria-label": "More actions", "aria-expanded": menuOpen, children: jsxRuntime.jsx(icons.ChevronDownIcon, { className: chevronIconClass }) }), menuOpen && (jsxRuntime.jsx("div", { ref: menuRef, className: `absolute right-0 top-full ${menuWidth} bg-white dark:bg-neutral-800 text-neutral-800 dark:text-white text-sm rounded-xl shadow-lg z-[100] border border-neutral-200 dark:border-neutral-700 overflow-hidden animate-fade-in`, children: menuItems.map((item, index) => (jsxRuntime.jsxs("button", { onClick: () => {
96
+ e.preventDefault(); }, children: isLoading ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(icons.Loader2Icon, { className: loadingIconClass }), jsxRuntime.jsx("span", { children: actualLoadingText })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [renderIcon(mainButton.icon), jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: mainButton.text })] })) }), jsxRuntime.jsx("button", { type: "button", className: utils.cn("flex h-full w-9 shrink-0 items-center justify-center px-0 py-1.5 cursor-pointer transition rounded-r-full rounded-l-none border-l sm:w-10", splitDropdownVariantClass, dropdownButtonClassName), onClick: e => { e.stopPropagation(); setMenuOpen(v => !v); }, "aria-label": "More actions", "aria-expanded": menuOpen, children: jsxRuntime.jsx(icons.ChevronDownIcon, { className: chevronIconClass }) }), menuOpen && (jsxRuntime.jsx("div", { ref: menuRef, className: `absolute right-0 top-full ${menuWidth} bg-white dark:bg-neutral-800 text-neutral-800 dark:text-white text-sm rounded-xl shadow-lg z-100 border border-neutral-200 dark:border-neutral-700 overflow-hidden animate-fade-in`, children: menuItems.map((item, index) => (jsxRuntime.jsxs("button", { onClick: () => {
97
97
  handleButtonClick(item.onClick);
98
98
  setMenuOpen(false);
99
99
  }, disabled: item.disabled, className: `flex items-center w-full px-4 py-3 transition hover:bg-neutral-300 dark:hover:bg-neutral-600 text-left relative ${item.disabled ? disabledClass : ''}`, style: item.splitTopBorder ? { borderTop: '1px solid #AC62FD' } : undefined, children: [jsxRuntime.jsxs("span", { className: "flex items-center", children: [item.icon, jsxRuntime.jsx("span", { children: item.text })] }), item.tag && (jsxRuntime.jsx("span", { className: "absolute right-3 top-1 text-[10px] font-semibold", style: { color: item.tag.color || '#A855F7', pointerEvents: 'none' }, children: item.tag.text }))] }, index))) }))] }));
@@ -86,12 +86,12 @@ function XButton(props) {
86
86
  const isMainDisabled = mainButton.disabled || isLoading;
87
87
  // loadingText prioty:props.loadingText > mainButton.text > 'Loading...'
88
88
  const actualLoadingText = loadingText || ((_c = mainButton.text) === null || _c === void 0 ? void 0 : _c.trim()) || 'Loading...';
89
- return (jsxs("div", { className: cn("relative flex flex-row items-stretch w-full sm:w-auto rounded-full gap-0", menuOpen && "z-[90]", variant === 'soft'
89
+ return (jsxs("div", { className: cn("relative flex flex-row items-stretch w-full sm:w-auto rounded-full gap-0", menuOpen && "z-90", variant === 'soft'
90
90
  ? cn(themeBgColor, themeBorderColor, "border")
91
91
  : variant === 'subtle'
92
92
  ? cn(themeMainBgColor, "border border-neutral-200 dark:border-neutral-800")
93
93
  : "bg-neutral-200 dark:bg-neutral-800", className), children: [jsx("button", { onClick: () => handleButtonClick(mainButton.onClick), disabled: isMainDisabled, className: cn("min-w-0 flex-1", baseButtonClass, splitMainButtonVariantClass, "rounded-l-full rounded-r-none", isMainDisabled && disabledClass, mainButtonClassName), onMouseDown: e => { if (e.button === 2)
94
- e.preventDefault(); }, children: isLoading ? (jsxs(Fragment, { children: [jsx(Loader2Icon, { className: loadingIconClass }), jsx("span", { children: actualLoadingText })] })) : (jsxs(Fragment, { children: [renderIcon(mainButton.icon), jsx("span", { className: "min-w-0 truncate", children: mainButton.text })] })) }), jsx("button", { type: "button", className: cn("flex h-full w-9 shrink-0 items-center justify-center px-0 py-1.5 cursor-pointer transition rounded-r-full rounded-l-none border-l sm:w-10", splitDropdownVariantClass, dropdownButtonClassName), onClick: e => { e.stopPropagation(); setMenuOpen(v => !v); }, "aria-label": "More actions", "aria-expanded": menuOpen, children: jsx(ChevronDownIcon, { className: chevronIconClass }) }), menuOpen && (jsx("div", { ref: menuRef, className: `absolute right-0 top-full ${menuWidth} bg-white dark:bg-neutral-800 text-neutral-800 dark:text-white text-sm rounded-xl shadow-lg z-[100] border border-neutral-200 dark:border-neutral-700 overflow-hidden animate-fade-in`, children: menuItems.map((item, index) => (jsxs("button", { onClick: () => {
94
+ e.preventDefault(); }, children: isLoading ? (jsxs(Fragment, { children: [jsx(Loader2Icon, { className: loadingIconClass }), jsx("span", { children: actualLoadingText })] })) : (jsxs(Fragment, { children: [renderIcon(mainButton.icon), jsx("span", { className: "min-w-0 truncate", children: mainButton.text })] })) }), jsx("button", { type: "button", className: cn("flex h-full w-9 shrink-0 items-center justify-center px-0 py-1.5 cursor-pointer transition rounded-r-full rounded-l-none border-l sm:w-10", splitDropdownVariantClass, dropdownButtonClassName), onClick: e => { e.stopPropagation(); setMenuOpen(v => !v); }, "aria-label": "More actions", "aria-expanded": menuOpen, children: jsx(ChevronDownIcon, { className: chevronIconClass }) }), menuOpen && (jsx("div", { ref: menuRef, className: `absolute right-0 top-full ${menuWidth} bg-white dark:bg-neutral-800 text-neutral-800 dark:text-white text-sm rounded-xl shadow-lg z-100 border border-neutral-200 dark:border-neutral-700 overflow-hidden animate-fade-in`, children: menuItems.map((item, index) => (jsxs("button", { onClick: () => {
95
95
  handleButtonClick(item.onClick);
96
96
  setMenuOpen(false);
97
97
  }, disabled: item.disabled, className: `flex items-center w-full px-4 py-3 transition hover:bg-neutral-300 dark:hover:bg-neutral-600 text-left relative ${item.disabled ? disabledClass : ''}`, style: item.splitTopBorder ? { borderTop: '1px solid #AC62FD' } : undefined, children: [jsxs("span", { className: "flex items-center", children: [item.icon, jsx("span", { children: item.text })] }), item.tag && (jsx("span", { className: "absolute right-3 top-1 text-[10px] font-semibold", style: { color: item.tag.color || '#A855F7', pointerEvents: 'none' }, children: item.tag.text }))] }, index))) }))] }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/third-ui",
3
- "version": "21.0.0",
3
+ "version": "22.0.0",
4
4
  "description": "Third-party integrated UI components for windrun-huaiin projects",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -51,11 +51,31 @@
51
51
  "import": "./dist/fuma/server.mjs",
52
52
  "require": "./dist/fuma/server.js"
53
53
  },
54
+ "./fuma/server/site-mdx-components": {
55
+ "types": "./dist/fuma/server/site-mdx-components.d.ts",
56
+ "import": "./dist/fuma/server/site-mdx-components.mjs",
57
+ "require": "./dist/fuma/server/site-mdx-components.js"
58
+ },
59
+ "./fuma/share": {
60
+ "types": "./dist/fuma/share/index.d.ts",
61
+ "import": "./dist/fuma/share/index.mjs",
62
+ "require": "./dist/fuma/share/index.js"
63
+ },
64
+ "./fuma/heavy": {
65
+ "types": "./dist/fuma/heavy/index.d.ts",
66
+ "import": "./dist/fuma/heavy/index.mjs",
67
+ "require": "./dist/fuma/heavy/index.js"
68
+ },
54
69
  "./fuma/mdx": {
55
70
  "types": "./dist/fuma/mdx/index.d.ts",
56
71
  "import": "./dist/fuma/mdx/index.mjs",
57
72
  "require": "./dist/fuma/mdx/index.js"
58
73
  },
74
+ "./fuma/server/optional-features": {
75
+ "types": "./dist/fuma/server/optional-features.d.ts",
76
+ "import": "./dist/fuma/server/optional-features.mjs",
77
+ "require": "./dist/fuma/server/optional-features.js"
78
+ },
59
79
  "./fuma/base": {
60
80
  "types": "./dist/fuma/base/index.d.ts",
61
81
  "import": "./dist/fuma/base/index.mjs",
@@ -66,6 +86,11 @@
66
86
  "import": "./dist/lib/server.mjs",
67
87
  "require": "./dist/lib/server.js"
68
88
  },
89
+ "./lib/seo-metadata": {
90
+ "types": "./dist/lib/seo-metadata.d.ts",
91
+ "import": "./dist/lib/seo-metadata.mjs",
92
+ "require": "./dist/lib/seo-metadata.js"
93
+ },
69
94
  "./styles/third-ui.css": "./src/styles/third-ui.css",
70
95
  "./package.json": "./package.json"
71
96
  },
@@ -85,10 +110,8 @@
85
110
  "@fingerprintjs/fingerprintjs": "^5.1.0",
86
111
  "class-variance-authority": "^0.7.1",
87
112
  "framer-motion": "^12.23.24",
88
- "fumadocs-core": "16.0.9",
89
- "fumadocs-mdx": "13.0.6",
90
- "fumadocs-typescript": "4.0.13",
91
- "fumadocs-ui": "16.0.9",
113
+ "fumadocs-core": "16.8.2",
114
+ "fumadocs-ui": "16.8.2",
92
115
  "hast-util-to-jsx-runtime": "^2.3.6",
93
116
  "katex": "^0.16.33",
94
117
  "mermaid": "11.12.1",
@@ -102,9 +125,9 @@
102
125
  "tslib": "^2.8.1",
103
126
  "unified": "^11.0.5",
104
127
  "zod": "^4.3.6",
105
- "@windrun-huaiin/lib": "^21.0.0",
106
- "@windrun-huaiin/base-ui": "^21.0.0",
107
- "@windrun-huaiin/contracts": "^21.0.0"
128
+ "@windrun-huaiin/base-ui": "^22.0.0",
129
+ "@windrun-huaiin/contracts": "^22.0.0",
130
+ "@windrun-huaiin/lib": "^22.0.0"
108
131
  },
109
132
  "peerDependencies": {
110
133
  "clsx": "^2.1.1",
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { cn } from '@windrun-huaiin/lib/utils';
4
4
  import { toJsxRuntime } from 'hast-util-to-jsx-runtime';
5
- import { baseMarkdownComponents } from '../fuma/mdx/markdown-component-map';
5
+ import { baseMarkdownComponents } from '../fuma/share/markdown-component-map';
6
6
  import { useMemo } from 'react';
7
7
  import { Fragment, jsx, jsxs } from 'react/jsx-runtime';
8
8
  import remarkGfm from 'remark-gfm';
@@ -8,6 +8,9 @@
8
8
  import { SignUpWithFingerprint } from './signup-with-fingerprint-client';
9
9
  import { SignInWithFingerprint } from './signin-with-fingerprint-client';
10
10
 
11
+ const clerkPageContainerClassName =
12
+ 'flex min-h-dvh w-full items-start justify-center px-6 pt-[calc(var(--fd-banner-height,0px)+var(--fd-header-height,3.5rem)+1rem)] pb-6 md:px-8 md:pt-[calc(var(--fd-banner-height,0px)+var(--fd-header-height,3.5rem)+1.5rem)] md:pb-8';
13
+
11
14
  /**
12
15
  * Create a SignUp page with fingerprint support
13
16
  * Note: This must be used within a FingerprintProvider
@@ -15,7 +18,7 @@ import { SignInWithFingerprint } from './signin-with-fingerprint-client';
15
18
  export function createSignUpPageWithFingerprint() {
16
19
  return function SignUpPage() {
17
20
  return (
18
- <div className="flex-1 flex justify-center m-16">
21
+ <div className={clerkPageContainerClassName}>
19
22
  <SignUpWithFingerprint />
20
23
  </div>
21
24
  );
@@ -29,9 +32,9 @@ export function createSignUpPageWithFingerprint() {
29
32
  export function createSignInPageWithFingerprint() {
30
33
  return function SignInPage() {
31
34
  return (
32
- <div className="flex-1 flex justify-center m-16">
35
+ <div className={clerkPageContainerClassName}>
33
36
  <SignInWithFingerprint />
34
37
  </div>
35
38
  );
36
39
  };
37
- }
40
+ }
@@ -1,10 +1,13 @@
1
1
  import { SignIn, SignUp, Waitlist } from '@clerk/nextjs';
2
2
 
3
+ const clerkPageContainerClassName =
4
+ 'flex min-h-dvh w-full items-start justify-center px-6 pt-[calc(var(--fd-banner-height,0px)+var(--fd-header-height,3.5rem)+1rem)] pb-6 md:px-8 md:pt-[calc(var(--fd-banner-height,0px)+var(--fd-header-height,3.5rem)+1.5rem)] md:pb-8';
5
+
3
6
  // Legacy page generators (for backward compatibility)
4
7
  export function createSignInPage() {
5
8
  return function SignInPage() {
6
9
  return (
7
- <div className="flex-1 flex justify-center m-16">
10
+ <div className={clerkPageContainerClassName}>
8
11
  <SignIn />
9
12
  </div>
10
13
  );
@@ -14,7 +17,7 @@ export function createSignInPage() {
14
17
  export function createSignUpPage() {
15
18
  return function SignUpPage() {
16
19
  return (
17
- <div className="flex-1 flex justify-center m-16">
20
+ <div className={clerkPageContainerClassName}>
18
21
  <SignUp />
19
22
  </div>
20
23
  );
@@ -24,7 +27,7 @@ export function createSignUpPage() {
24
27
  export function createWaitlistPage() {
25
28
  return function WaitlistPage() {
26
29
  return (
27
- <div className="flex-1 flex justify-center m-16">
30
+ <div className={clerkPageContainerClassName}>
28
31
  <Waitlist />
29
32
  </div>
30
33
  );
@@ -32,4 +35,4 @@ export function createWaitlistPage() {
32
35
  }
33
36
 
34
37
  // Note: Fingerprint-aware page generators moved to client-side only
35
- // Use the fingerprint components directly in your client-side code
38
+ // Use the fingerprint components directly in your client-side code