@frontmcp/ui 0.12.2 → 1.0.0-beta.1
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/README.md +279 -72
- package/bridge/adapters/claude.adapter.d.ts.map +1 -1
- package/bridge/adapters/gemini.adapter.d.ts.map +1 -1
- package/bridge/index.js +2 -36
- package/components/Alert/Alert.d.ts +11 -0
- package/components/Alert/Alert.d.ts.map +1 -0
- package/components/Alert/index.d.ts +4 -0
- package/components/Alert/index.d.ts.map +1 -0
- package/components/Alert/index.js +61 -0
- package/components/Avatar/Avatar.d.ts +10 -0
- package/components/Avatar/Avatar.d.ts.map +1 -0
- package/components/Avatar/index.d.ts +4 -0
- package/components/Avatar/index.d.ts.map +1 -0
- package/components/Avatar/index.js +43 -0
- package/components/Badge/Badge.d.ts +13 -0
- package/components/Badge/Badge.d.ts.map +1 -0
- package/components/Badge/index.d.ts +4 -0
- package/components/Badge/index.d.ts.map +1 -0
- package/{render → components/Badge}/index.js +54 -42
- package/components/Button/Button.d.ts +16 -0
- package/components/Button/Button.d.ts.map +1 -0
- package/components/Button/index.d.ts +4 -0
- package/components/Button/index.d.ts.map +1 -0
- package/components/Button/index.js +91 -0
- package/components/Card/Card.d.ts +25 -0
- package/components/Card/Card.d.ts.map +1 -0
- package/components/Card/index.d.ts +4 -0
- package/components/Card/index.d.ts.map +1 -0
- package/components/Card/index.js +110 -0
- package/components/List/List.d.ts +15 -0
- package/components/List/List.d.ts.map +1 -0
- package/components/List/index.d.ts +4 -0
- package/components/List/index.d.ts.map +1 -0
- package/components/List/index.js +58 -0
- package/components/Loader/Loader.d.ts +28 -0
- package/components/Loader/Loader.d.ts.map +1 -0
- package/components/Loader/LoaderContext.d.ts +20 -0
- package/components/Loader/LoaderContext.d.ts.map +1 -0
- package/components/Loader/index.d.ts +6 -0
- package/components/Loader/index.d.ts.map +1 -0
- package/components/Loader/index.js +174 -0
- package/components/Modal/Modal.d.ts +22 -0
- package/components/Modal/Modal.d.ts.map +1 -0
- package/components/Modal/index.d.ts +4 -0
- package/components/Modal/index.d.ts.map +1 -0
- package/components/Modal/index.js +80 -0
- package/components/Select/Select.d.ts +21 -0
- package/components/Select/Select.d.ts.map +1 -0
- package/components/Select/index.d.ts +4 -0
- package/components/Select/index.d.ts.map +1 -0
- package/components/Select/index.js +78 -0
- package/components/Table/Table.d.ts +15 -0
- package/components/Table/Table.d.ts.map +1 -0
- package/components/Table/index.d.ts +4 -0
- package/components/Table/index.d.ts.map +1 -0
- package/components/Table/index.js +70 -0
- package/components/TextField/TextField.d.ts +19 -0
- package/components/TextField/TextField.d.ts.map +1 -0
- package/components/TextField/index.d.ts +4 -0
- package/components/TextField/index.d.ts.map +1 -0
- package/components/TextField/index.js +77 -0
- package/components/index.d.ts +22 -28
- package/components/index.d.ts.map +1 -1
- package/components/index.js +523 -2521
- package/esm/bridge/index.mjs +2 -6
- package/esm/components/Alert/index.mjs +28 -0
- package/esm/components/Avatar/index.mjs +10 -0
- package/esm/components/Badge/index.mjs +56 -0
- package/esm/components/Button/index.mjs +58 -0
- package/esm/components/Card/index.mjs +77 -0
- package/esm/components/List/index.mjs +25 -0
- package/esm/components/Loader/index.mjs +141 -0
- package/esm/components/Modal/index.mjs +47 -0
- package/esm/components/Select/index.mjs +45 -0
- package/esm/components/Table/index.mjs +37 -0
- package/esm/components/TextField/index.mjs +44 -0
- package/esm/components/index.mjs +513 -2415
- package/esm/index.mjs +62 -4652
- package/esm/package.json +372 -16
- package/esm/react/index.mjs +2 -285
- package/esm/renderer/charts/index.mjs +336 -0
- package/esm/renderer/common/index.mjs +135 -0
- package/esm/renderer/csv/index.mjs +193 -0
- package/esm/renderer/flow/index.mjs +259 -0
- package/esm/renderer/html/index.mjs +99 -0
- package/esm/renderer/image/index.mjs +125 -0
- package/esm/renderer/index.mjs +2173 -0
- package/esm/renderer/maps/index.mjs +217 -0
- package/esm/renderer/math/index.mjs +229 -0
- package/esm/renderer/mdx/index.mjs +261 -0
- package/esm/renderer/media/index.mjs +235 -0
- package/esm/renderer/mermaid/index.mjs +220 -0
- package/esm/renderer/pdf/index.mjs +229 -0
- package/esm/renderer/react/index.mjs +230 -0
- package/esm/runtime/index.mjs +194 -0
- package/esm/theme/index.mjs +93 -0
- package/index.d.ts +10 -18
- package/index.d.ts.map +1 -1
- package/index.js +63 -4806
- package/package.json +372 -16
- package/react/index.d.ts +8 -54
- package/react/index.d.ts.map +1 -1
- package/react/index.js +2 -295
- package/renderer/auto-detect.d.ts +39 -0
- package/renderer/auto-detect.d.ts.map +1 -0
- package/renderer/charts/index.d.ts +22 -0
- package/renderer/charts/index.d.ts.map +1 -0
- package/renderer/charts/index.js +367 -0
- package/renderer/common/index.d.ts +5 -0
- package/renderer/common/index.d.ts.map +1 -0
- package/renderer/common/index.js +158 -0
- package/renderer/common/inject-stylesheet.d.ts +9 -0
- package/renderer/common/inject-stylesheet.d.ts.map +1 -0
- package/renderer/common/lazy-import.d.ts +85 -0
- package/renderer/common/lazy-import.d.ts.map +1 -0
- package/renderer/common/use-lazy-module.d.ts +13 -0
- package/renderer/common/use-lazy-module.d.ts.map +1 -0
- package/renderer/common/use-renderer-theme.d.ts +35 -0
- package/renderer/common/use-renderer-theme.d.ts.map +1 -0
- package/renderer/csv/index.d.ts +12 -0
- package/renderer/csv/index.d.ts.map +1 -0
- package/renderer/csv/index.js +224 -0
- package/renderer/flow/index.d.ts +40 -0
- package/renderer/flow/index.d.ts.map +1 -0
- package/renderer/flow/index.js +290 -0
- package/renderer/html/index.d.ts +12 -0
- package/renderer/html/index.d.ts.map +1 -0
- package/renderer/html/index.js +130 -0
- package/renderer/image/index.d.ts +11 -0
- package/renderer/image/index.d.ts.map +1 -0
- package/renderer/image/index.js +156 -0
- package/renderer/index.d.ts +32 -0
- package/renderer/index.d.ts.map +1 -0
- package/renderer/index.js +2206 -0
- package/renderer/maps/index.d.ts +27 -0
- package/renderer/maps/index.d.ts.map +1 -0
- package/renderer/maps/index.js +248 -0
- package/renderer/math/index.d.ts +11 -0
- package/renderer/math/index.d.ts.map +1 -0
- package/renderer/math/index.js +260 -0
- package/renderer/mdx/index.d.ts +10 -0
- package/renderer/mdx/index.d.ts.map +1 -0
- package/renderer/mdx/index.js +292 -0
- package/renderer/media/index.d.ts +20 -0
- package/renderer/media/index.d.ts.map +1 -0
- package/renderer/media/index.js +266 -0
- package/renderer/mermaid/index.d.ts +11 -0
- package/renderer/mermaid/index.d.ts.map +1 -0
- package/renderer/mermaid/index.js +251 -0
- package/renderer/pdf/index.d.ts +10 -0
- package/renderer/pdf/index.d.ts.map +1 -0
- package/renderer/pdf/index.js +260 -0
- package/renderer/react/index.d.ts +45 -0
- package/renderer/react/index.d.ts.map +1 -0
- package/renderer/react/index.js +261 -0
- package/renderer/types.d.ts +24 -0
- package/renderer/types.d.ts.map +1 -0
- package/runtime/babel-runtime.d.ts +70 -0
- package/runtime/babel-runtime.d.ts.map +1 -0
- package/runtime/content-detector.d.ts +43 -0
- package/runtime/content-detector.d.ts.map +1 -0
- package/runtime/index.d.ts +10 -0
- package/runtime/index.d.ts.map +1 -0
- package/runtime/index.js +217 -0
- package/theme/FrontMcpThemeProvider.d.ts +4 -0
- package/theme/FrontMcpThemeProvider.d.ts.map +1 -0
- package/theme/create-theme.d.ts +9 -0
- package/theme/create-theme.d.ts.map +1 -0
- package/theme/index.d.ts +5 -0
- package/theme/index.d.ts.map +1 -0
- package/theme/index.js +126 -0
- package/theme/types.d.ts +28 -0
- package/theme/types.d.ts.map +1 -0
- package/theme/use-theme.d.ts +3 -0
- package/theme/use-theme.d.ts.map +1 -0
- package/bundler/browser-components.d.ts +0 -42
- package/bundler/browser-components.d.ts.map +0 -1
- package/bundler/bundler.d.ts +0 -282
- package/bundler/bundler.d.ts.map +0 -1
- package/bundler/index.d.ts +0 -43
- package/bundler/index.d.ts.map +0 -1
- package/bundler/index.js +0 -3168
- package/bundler/types.d.ts +0 -883
- package/bundler/types.d.ts.map +0 -1
- package/components/alert.d.ts +0 -83
- package/components/alert.d.ts.map +0 -1
- package/components/alert.schema.d.ts +0 -98
- package/components/alert.schema.d.ts.map +0 -1
- package/components/avatar.d.ts +0 -77
- package/components/avatar.d.ts.map +0 -1
- package/components/avatar.schema.d.ts +0 -170
- package/components/avatar.schema.d.ts.map +0 -1
- package/components/badge.d.ts +0 -78
- package/components/badge.d.ts.map +0 -1
- package/components/badge.schema.d.ts +0 -91
- package/components/badge.schema.d.ts.map +0 -1
- package/components/button.d.ts +0 -100
- package/components/button.d.ts.map +0 -1
- package/components/button.schema.d.ts +0 -120
- package/components/button.schema.d.ts.map +0 -1
- package/components/card.d.ts +0 -76
- package/components/card.d.ts.map +0 -1
- package/components/card.schema.d.ts +0 -93
- package/components/card.schema.d.ts.map +0 -1
- package/components/form.d.ts +0 -227
- package/components/form.d.ts.map +0 -1
- package/components/form.schema.d.ts +0 -365
- package/components/form.schema.d.ts.map +0 -1
- package/components/list.d.ts +0 -121
- package/components/list.d.ts.map +0 -1
- package/components/list.schema.d.ts +0 -129
- package/components/list.schema.d.ts.map +0 -1
- package/components/modal.d.ts +0 -100
- package/components/modal.d.ts.map +0 -1
- package/components/modal.schema.d.ts +0 -151
- package/components/modal.schema.d.ts.map +0 -1
- package/components/table.d.ts +0 -91
- package/components/table.d.ts.map +0 -1
- package/components/table.schema.d.ts +0 -123
- package/components/table.schema.d.ts.map +0 -1
- package/esm/bundler/index.mjs +0 -3136
- package/esm/layouts/index.mjs +0 -409
- package/esm/render/index.mjs +0 -45
- package/esm/renderers/index.mjs +0 -621
- package/esm/universal/index.mjs +0 -1946
- package/esm/web-components/index.mjs +0 -2023
- package/layouts/base.d.ts +0 -86
- package/layouts/base.d.ts.map +0 -1
- package/layouts/index.d.ts +0 -8
- package/layouts/index.d.ts.map +0 -1
- package/layouts/index.js +0 -437
- package/layouts/presets.d.ts +0 -134
- package/layouts/presets.d.ts.map +0 -1
- package/react/Alert.d.ts +0 -101
- package/react/Alert.d.ts.map +0 -1
- package/react/Badge.d.ts +0 -100
- package/react/Badge.d.ts.map +0 -1
- package/react/Button.d.ts +0 -108
- package/react/Button.d.ts.map +0 -1
- package/react/Card.d.ts +0 -103
- package/react/Card.d.ts.map +0 -1
- package/react/types.d.ts +0 -105
- package/react/types.d.ts.map +0 -1
- package/render/index.d.ts +0 -8
- package/render/index.d.ts.map +0 -1
- package/render/prerender.d.ts +0 -57
- package/render/prerender.d.ts.map +0 -1
- package/renderers/index.d.ts +0 -26
- package/renderers/index.d.ts.map +0 -1
- package/renderers/index.js +0 -666
- package/renderers/mdx.renderer.d.ts +0 -99
- package/renderers/mdx.renderer.d.ts.map +0 -1
- package/renderers/react.adapter.d.ts +0 -70
- package/renderers/react.adapter.d.ts.map +0 -1
- package/renderers/react.renderer.d.ts +0 -105
- package/renderers/react.renderer.d.ts.map +0 -1
- package/renderers/transpiler.d.ts +0 -49
- package/renderers/transpiler.d.ts.map +0 -1
- package/universal/UniversalApp.d.ts +0 -108
- package/universal/UniversalApp.d.ts.map +0 -1
- package/universal/cached-runtime.d.ts +0 -139
- package/universal/cached-runtime.d.ts.map +0 -1
- package/universal/context.d.ts +0 -122
- package/universal/context.d.ts.map +0 -1
- package/universal/index.d.ts +0 -57
- package/universal/index.d.ts.map +0 -1
- package/universal/index.js +0 -2032
- package/universal/renderers/html.renderer.d.ts +0 -36
- package/universal/renderers/html.renderer.d.ts.map +0 -1
- package/universal/renderers/index.d.ts +0 -112
- package/universal/renderers/index.d.ts.map +0 -1
- package/universal/renderers/markdown.renderer.d.ts +0 -33
- package/universal/renderers/markdown.renderer.d.ts.map +0 -1
- package/universal/renderers/mdx.renderer.d.ts +0 -38
- package/universal/renderers/mdx.renderer.d.ts.map +0 -1
- package/universal/renderers/react.renderer.d.ts +0 -46
- package/universal/renderers/react.renderer.d.ts.map +0 -1
- package/universal/runtime-builder.d.ts +0 -33
- package/universal/runtime-builder.d.ts.map +0 -1
- package/universal/store.d.ts +0 -135
- package/universal/store.d.ts.map +0 -1
- package/universal/types.d.ts +0 -199
- package/universal/types.d.ts.map +0 -1
- package/web-components/core/attribute-parser.d.ts +0 -82
- package/web-components/core/attribute-parser.d.ts.map +0 -1
- package/web-components/core/base-element.d.ts +0 -197
- package/web-components/core/base-element.d.ts.map +0 -1
- package/web-components/core/index.d.ts +0 -9
- package/web-components/core/index.d.ts.map +0 -1
- package/web-components/elements/fmcp-alert.d.ts +0 -46
- package/web-components/elements/fmcp-alert.d.ts.map +0 -1
- package/web-components/elements/fmcp-badge.d.ts +0 -47
- package/web-components/elements/fmcp-badge.d.ts.map +0 -1
- package/web-components/elements/fmcp-button.d.ts +0 -117
- package/web-components/elements/fmcp-button.d.ts.map +0 -1
- package/web-components/elements/fmcp-card.d.ts +0 -53
- package/web-components/elements/fmcp-card.d.ts.map +0 -1
- package/web-components/elements/fmcp-input.d.ts +0 -96
- package/web-components/elements/fmcp-input.d.ts.map +0 -1
- package/web-components/elements/fmcp-select.d.ts +0 -100
- package/web-components/elements/fmcp-select.d.ts.map +0 -1
- package/web-components/elements/index.d.ts +0 -13
- package/web-components/elements/index.d.ts.map +0 -1
- package/web-components/index.d.ts +0 -49
- package/web-components/index.d.ts.map +0 -1
- package/web-components/index.js +0 -2058
- package/web-components/register.d.ts +0 -57
- package/web-components/register.d.ts.map +0 -1
- package/web-components/types.d.ts +0 -122
- package/web-components/types.d.ts.map +0 -1
package/esm/layouts/index.mjs
DELETED
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
// libs/ui/src/layouts/base.ts
|
|
2
|
-
import {
|
|
3
|
-
OPENAI_PLATFORM,
|
|
4
|
-
canUseCdn,
|
|
5
|
-
needsInlineScripts,
|
|
6
|
-
DEFAULT_THEME,
|
|
7
|
-
buildThemeCss,
|
|
8
|
-
mergeThemes,
|
|
9
|
-
buildFontPreconnect,
|
|
10
|
-
buildFontStylesheets,
|
|
11
|
-
buildCdnScripts
|
|
12
|
-
} from "@frontmcp/uipack/theme";
|
|
13
|
-
import { escapeHtml } from "@frontmcp/uipack/utils";
|
|
14
|
-
import { escapeHtml as escapeHtml2 } from "@frontmcp/uipack/utils";
|
|
15
|
-
function getSizeClass(size) {
|
|
16
|
-
const sizeMap = {
|
|
17
|
-
xs: "max-w-sm",
|
|
18
|
-
sm: "max-w-md",
|
|
19
|
-
md: "max-w-lg",
|
|
20
|
-
lg: "max-w-xl",
|
|
21
|
-
xl: "max-w-2xl",
|
|
22
|
-
"2xl": "max-w-3xl",
|
|
23
|
-
"3xl": "max-w-4xl",
|
|
24
|
-
full: "max-w-full"
|
|
25
|
-
};
|
|
26
|
-
return sizeMap[size];
|
|
27
|
-
}
|
|
28
|
-
function getAlignmentClasses(alignment) {
|
|
29
|
-
const alignMap = {
|
|
30
|
-
center: "min-h-screen flex items-center justify-center",
|
|
31
|
-
top: "min-h-screen flex flex-col items-center pt-12",
|
|
32
|
-
start: "min-h-screen"
|
|
33
|
-
};
|
|
34
|
-
return alignMap[alignment];
|
|
35
|
-
}
|
|
36
|
-
function getBackgroundClasses(background) {
|
|
37
|
-
switch (background) {
|
|
38
|
-
case "gradient":
|
|
39
|
-
return "bg-gradient-to-br from-primary to-secondary";
|
|
40
|
-
case "pattern":
|
|
41
|
-
return 'bg-surface bg-[url("data:image/svg+xml,...")]';
|
|
42
|
-
// Pattern would be defined
|
|
43
|
-
case "solid":
|
|
44
|
-
return "bg-background";
|
|
45
|
-
case "none":
|
|
46
|
-
default:
|
|
47
|
-
return "";
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
function buildMetaTags(options) {
|
|
51
|
-
const tags = [];
|
|
52
|
-
if (options.description) {
|
|
53
|
-
tags.push(`<meta name="description" content="${escapeHtml(options.description)}">`);
|
|
54
|
-
}
|
|
55
|
-
if (options.og) {
|
|
56
|
-
if (options.og.title) {
|
|
57
|
-
tags.push(`<meta property="og:title" content="${escapeHtml(options.og.title)}">`);
|
|
58
|
-
}
|
|
59
|
-
if (options.og.description) {
|
|
60
|
-
tags.push(`<meta property="og:description" content="${escapeHtml(options.og.description)}">`);
|
|
61
|
-
}
|
|
62
|
-
if (options.og.image) {
|
|
63
|
-
tags.push(`<meta property="og:image" content="${escapeHtml(options.og.image)}">`);
|
|
64
|
-
}
|
|
65
|
-
if (options.og.type) {
|
|
66
|
-
tags.push(`<meta property="og:type" content="${escapeHtml(options.og.type)}">`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (options.favicon) {
|
|
70
|
-
tags.push(`<link rel="icon" href="${escapeHtml(options.favicon)}">`);
|
|
71
|
-
}
|
|
72
|
-
return tags.join("\n ");
|
|
73
|
-
}
|
|
74
|
-
function buildBodyAttrs(attrs) {
|
|
75
|
-
if (!attrs) return "";
|
|
76
|
-
return Object.entries(attrs).map(([key, value]) => `${key}="${escapeHtml(value)}"`).join(" ");
|
|
77
|
-
}
|
|
78
|
-
function baseLayout(content, options) {
|
|
79
|
-
const {
|
|
80
|
-
title,
|
|
81
|
-
pageType: _pageType = "custom",
|
|
82
|
-
size = "md",
|
|
83
|
-
alignment = "center",
|
|
84
|
-
background = "solid",
|
|
85
|
-
platform = OPENAI_PLATFORM,
|
|
86
|
-
theme: themeOverrides,
|
|
87
|
-
includeHtmx,
|
|
88
|
-
includeAlpine = false,
|
|
89
|
-
includeIcons = false,
|
|
90
|
-
headExtra = "",
|
|
91
|
-
bodyAttrs,
|
|
92
|
-
bodyClass = "",
|
|
93
|
-
titleSuffix = "FrontMCP"
|
|
94
|
-
} = options;
|
|
95
|
-
const theme = themeOverrides ? mergeThemes(DEFAULT_THEME, themeOverrides) : DEFAULT_THEME;
|
|
96
|
-
const shouldIncludeHtmx = includeHtmx ?? platform.supportsHtmx;
|
|
97
|
-
const useCdn = canUseCdn(platform);
|
|
98
|
-
const useInline = needsInlineScripts(platform);
|
|
99
|
-
const fontPreconnect = useCdn ? buildFontPreconnect() : "";
|
|
100
|
-
const fontStylesheets = useCdn ? buildFontStylesheets({ inter: true }) : "";
|
|
101
|
-
const scripts = buildCdnScripts({
|
|
102
|
-
tailwind: platform.supportsTailwind,
|
|
103
|
-
htmx: shouldIncludeHtmx,
|
|
104
|
-
alpine: includeAlpine,
|
|
105
|
-
icons: includeIcons,
|
|
106
|
-
inline: useInline
|
|
107
|
-
});
|
|
108
|
-
const themeCss = buildThemeCss(theme);
|
|
109
|
-
const customCss = theme.customCss || "";
|
|
110
|
-
const styleBlock = platform.supportsTailwind ? `<style type="text/tailwindcss">
|
|
111
|
-
@theme {
|
|
112
|
-
${themeCss}
|
|
113
|
-
}
|
|
114
|
-
${customCss}
|
|
115
|
-
</style>` : "";
|
|
116
|
-
const sizeClass = getSizeClass(size);
|
|
117
|
-
const alignmentClasses = getAlignmentClasses(alignment);
|
|
118
|
-
const backgroundClasses = getBackgroundClasses(background);
|
|
119
|
-
const allBodyClasses = [backgroundClasses, "font-sans antialiased", bodyClass].filter(Boolean).join(" ");
|
|
120
|
-
const metaTags = buildMetaTags(options);
|
|
121
|
-
const bodyAttrStr = buildBodyAttrs(bodyAttrs);
|
|
122
|
-
const wrappedContent = alignment === "center" ? `<div class="${alignmentClasses} p-4">
|
|
123
|
-
<div class="w-full ${sizeClass}">
|
|
124
|
-
${content}
|
|
125
|
-
</div>
|
|
126
|
-
</div>` : `<div class="${alignmentClasses}">
|
|
127
|
-
<div class="w-full ${sizeClass} mx-auto px-4 py-8">
|
|
128
|
-
${content}
|
|
129
|
-
</div>
|
|
130
|
-
</div>`;
|
|
131
|
-
return `<!DOCTYPE html>
|
|
132
|
-
<html lang="en">
|
|
133
|
-
<head>
|
|
134
|
-
<meta charset="UTF-8">
|
|
135
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
136
|
-
<title>${escapeHtml(title)}${titleSuffix ? ` - ${escapeHtml(titleSuffix)}` : ""}</title>
|
|
137
|
-
${metaTags}
|
|
138
|
-
|
|
139
|
-
<!-- Fonts -->
|
|
140
|
-
${fontPreconnect}
|
|
141
|
-
${fontStylesheets}
|
|
142
|
-
|
|
143
|
-
<!-- Tailwind CSS -->
|
|
144
|
-
${scripts}
|
|
145
|
-
${styleBlock}
|
|
146
|
-
|
|
147
|
-
${headExtra}
|
|
148
|
-
</head>
|
|
149
|
-
<body class="${escapeHtml(allBodyClasses)}"${bodyAttrStr ? ` ${bodyAttrStr}` : ""}>
|
|
150
|
-
${wrappedContent}
|
|
151
|
-
</body>
|
|
152
|
-
</html>`;
|
|
153
|
-
}
|
|
154
|
-
function createLayoutBuilder(defaults) {
|
|
155
|
-
return (content, options = {}) => {
|
|
156
|
-
let mergedTheme = DEFAULT_THEME;
|
|
157
|
-
if (defaults.theme) {
|
|
158
|
-
mergedTheme = mergeThemes(mergedTheme, defaults.theme);
|
|
159
|
-
}
|
|
160
|
-
if (options.theme) {
|
|
161
|
-
mergedTheme = mergeThemes(mergedTheme, options.theme);
|
|
162
|
-
}
|
|
163
|
-
const merged = {
|
|
164
|
-
...defaults,
|
|
165
|
-
...options,
|
|
166
|
-
theme: mergedTheme
|
|
167
|
-
};
|
|
168
|
-
if (!merged.title) {
|
|
169
|
-
throw new Error("createLayoutBuilder: title is required either in defaults or options");
|
|
170
|
-
}
|
|
171
|
-
return baseLayout(content, merged);
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// libs/ui/src/layouts/presets.ts
|
|
176
|
-
function authLayout(content, options) {
|
|
177
|
-
const { showBranding = true, logo, footer, ...baseOptions } = options;
|
|
178
|
-
const brandingHtml = showBranding && logo ? `<div class="text-center mb-8">${logo}</div>` : showBranding ? `<div class="text-center mb-8">
|
|
179
|
-
<div class="inline-flex items-center justify-center w-16 h-16 rounded-xl bg-gradient-to-br from-primary to-secondary mb-4">
|
|
180
|
-
<svg class="w-8 h-8 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
181
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
|
|
182
|
-
</svg>
|
|
183
|
-
</div>
|
|
184
|
-
</div>` : "";
|
|
185
|
-
const footerHtml = footer ? `<div class="mt-8 text-center text-sm text-text-secondary">${footer}</div>` : "";
|
|
186
|
-
const wrappedContent = `
|
|
187
|
-
<div class="bg-white rounded-2xl shadow-xl p-8">
|
|
188
|
-
${brandingHtml}
|
|
189
|
-
${content}
|
|
190
|
-
</div>
|
|
191
|
-
${footerHtml}
|
|
192
|
-
`;
|
|
193
|
-
return baseLayout(wrappedContent, {
|
|
194
|
-
...baseOptions,
|
|
195
|
-
pageType: "auth",
|
|
196
|
-
size: baseOptions.size ?? "sm",
|
|
197
|
-
alignment: "center",
|
|
198
|
-
background: "gradient"
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
function consentLayout(content, options) {
|
|
202
|
-
const { clientName, clientIcon, userInfo, ...baseOptions } = options;
|
|
203
|
-
const headerHtml = clientName ? `<div class="text-center mb-6">
|
|
204
|
-
${clientIcon ? `<img src="${escapeHtml2(clientIcon)}" alt="${escapeHtml2(
|
|
205
|
-
clientName
|
|
206
|
-
)}" class="w-16 h-16 rounded-xl mx-auto mb-4">` : `<div class="inline-flex items-center justify-center w-16 h-16 rounded-xl bg-gradient-to-br from-primary to-secondary text-white font-bold text-2xl mx-auto mb-4">
|
|
207
|
-
${escapeHtml2(clientName.charAt(0).toUpperCase())}
|
|
208
|
-
</div>`}
|
|
209
|
-
<h1 class="text-2xl font-bold text-text-primary">${escapeHtml2(clientName)}</h1>
|
|
210
|
-
</div>` : "";
|
|
211
|
-
const userInfoHtml = userInfo ? `<div class="flex items-center gap-3 p-3 bg-gray-50 rounded-lg mb-6">
|
|
212
|
-
${userInfo.avatar ? `<img src="${escapeHtml2(userInfo.avatar)}" class="w-10 h-10 rounded-full">` : `<div class="w-10 h-10 rounded-full bg-primary text-white flex items-center justify-center font-medium">
|
|
213
|
-
${escapeHtml2((userInfo.name || userInfo.email || "U").charAt(0).toUpperCase())}
|
|
214
|
-
</div>`}
|
|
215
|
-
<div>
|
|
216
|
-
${userInfo.name ? `<div class="font-medium text-text-primary">${escapeHtml2(userInfo.name)}</div>` : ""}
|
|
217
|
-
${userInfo.email ? `<div class="text-sm text-text-secondary">${escapeHtml2(userInfo.email)}</div>` : ""}
|
|
218
|
-
</div>
|
|
219
|
-
</div>` : "";
|
|
220
|
-
const wrappedContent = `
|
|
221
|
-
${headerHtml}
|
|
222
|
-
${userInfoHtml}
|
|
223
|
-
${content}
|
|
224
|
-
`;
|
|
225
|
-
return baseLayout(wrappedContent, {
|
|
226
|
-
...baseOptions,
|
|
227
|
-
pageType: "consent",
|
|
228
|
-
size: baseOptions.size ?? "lg",
|
|
229
|
-
alignment: "top",
|
|
230
|
-
background: "solid"
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
function errorLayout(content, options) {
|
|
234
|
-
const {
|
|
235
|
-
errorCode,
|
|
236
|
-
errorTitle = "Something went wrong",
|
|
237
|
-
errorMessage,
|
|
238
|
-
showRetry = true,
|
|
239
|
-
retryUrl,
|
|
240
|
-
showHome = true,
|
|
241
|
-
homeUrl = "/",
|
|
242
|
-
...baseOptions
|
|
243
|
-
} = options;
|
|
244
|
-
const errorHtml = `
|
|
245
|
-
<div class="text-center">
|
|
246
|
-
<!-- Error icon -->
|
|
247
|
-
<div class="inline-flex items-center justify-center w-20 h-20 rounded-full bg-danger/10 mb-6">
|
|
248
|
-
<svg class="w-10 h-10 text-danger" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
249
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
|
|
250
|
-
</svg>
|
|
251
|
-
</div>
|
|
252
|
-
|
|
253
|
-
${errorCode ? `<p class="text-6xl font-bold text-danger mb-2">${escapeHtml2(errorCode)}</p>` : ""}
|
|
254
|
-
<h1 class="text-2xl font-bold text-text-primary mb-4">${escapeHtml2(errorTitle)}</h1>
|
|
255
|
-
${errorMessage ? `<p class="text-text-secondary mb-8">${escapeHtml2(errorMessage)}</p>` : ""}
|
|
256
|
-
|
|
257
|
-
${content}
|
|
258
|
-
|
|
259
|
-
<div class="flex gap-4 justify-center mt-8">
|
|
260
|
-
${showRetry ? `<button onclick="${retryUrl ? `window.location.href='${escapeHtml2(retryUrl)}'` : "window.location.reload()"}" class="px-6 py-3 bg-primary hover:bg-primary/90 text-white font-medium rounded-lg transition-colors">Try Again</button>` : ""}
|
|
261
|
-
${showHome ? `<a href="${escapeHtml2(
|
|
262
|
-
homeUrl
|
|
263
|
-
)}" class="px-6 py-3 bg-gray-100 hover:bg-gray-200 text-text-primary font-medium rounded-lg transition-colors">Go Home</a>` : ""}
|
|
264
|
-
</div>
|
|
265
|
-
</div>
|
|
266
|
-
`;
|
|
267
|
-
return baseLayout(errorHtml, {
|
|
268
|
-
...baseOptions,
|
|
269
|
-
pageType: "error",
|
|
270
|
-
size: "sm",
|
|
271
|
-
alignment: "center",
|
|
272
|
-
background: "solid",
|
|
273
|
-
title: baseOptions.title ?? errorTitle
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
function loadingLayout(content, options) {
|
|
277
|
-
const { message = "Loading...", showSpinner = true, showProgress = false, progress = 0, ...baseOptions } = options;
|
|
278
|
-
const spinnerHtml = showSpinner ? `<div class="inline-flex items-center justify-center w-16 h-16 mb-6">
|
|
279
|
-
<svg class="animate-spin w-12 h-12 text-primary" fill="none" viewBox="0 0 24 24">
|
|
280
|
-
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
281
|
-
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
282
|
-
</svg>
|
|
283
|
-
</div>` : "";
|
|
284
|
-
const progressHtml = showProgress ? `<div class="w-full bg-gray-200 rounded-full h-2 mb-4">
|
|
285
|
-
<div class="bg-primary h-2 rounded-full transition-all duration-300" style="width: ${progress}%"></div>
|
|
286
|
-
</div>` : "";
|
|
287
|
-
const loadingHtml = `
|
|
288
|
-
<div class="text-center">
|
|
289
|
-
${spinnerHtml}
|
|
290
|
-
<h2 class="text-xl font-medium text-text-primary mb-2">${escapeHtml2(message)}</h2>
|
|
291
|
-
${progressHtml}
|
|
292
|
-
${content}
|
|
293
|
-
</div>
|
|
294
|
-
`;
|
|
295
|
-
return baseLayout(loadingHtml, {
|
|
296
|
-
...baseOptions,
|
|
297
|
-
pageType: "loading",
|
|
298
|
-
size: "sm",
|
|
299
|
-
alignment: "center",
|
|
300
|
-
background: "solid",
|
|
301
|
-
title: baseOptions.title ?? "Loading"
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
function successLayout(content, options) {
|
|
305
|
-
const {
|
|
306
|
-
successTitle = "Success!",
|
|
307
|
-
successMessage,
|
|
308
|
-
continueText = "Continue",
|
|
309
|
-
continueUrl,
|
|
310
|
-
autoClose,
|
|
311
|
-
...baseOptions
|
|
312
|
-
} = options;
|
|
313
|
-
const autoCloseScript = autoClose ? `<script>
|
|
314
|
-
let countdown = ${autoClose};
|
|
315
|
-
const countdownEl = document.getElementById('countdown');
|
|
316
|
-
const interval = setInterval(() => {
|
|
317
|
-
countdown--;
|
|
318
|
-
if (countdownEl) countdownEl.textContent = countdown;
|
|
319
|
-
if (countdown <= 0) {
|
|
320
|
-
clearInterval(interval);
|
|
321
|
-
${continueUrl ? `window.location.href = '${escapeHtml2(continueUrl)}';` : "window.close();"}
|
|
322
|
-
}
|
|
323
|
-
}, 1000);
|
|
324
|
-
</script>` : "";
|
|
325
|
-
const successHtml = `
|
|
326
|
-
<div class="text-center">
|
|
327
|
-
<!-- Success icon -->
|
|
328
|
-
<div class="inline-flex items-center justify-center w-20 h-20 rounded-full bg-success/10 mb-6">
|
|
329
|
-
<svg class="w-10 h-10 text-success" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
330
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
|
331
|
-
</svg>
|
|
332
|
-
</div>
|
|
333
|
-
|
|
334
|
-
<h1 class="text-2xl font-bold text-text-primary mb-4">${escapeHtml2(successTitle)}</h1>
|
|
335
|
-
${successMessage ? `<p class="text-text-secondary mb-8">${escapeHtml2(successMessage)}</p>` : ""}
|
|
336
|
-
|
|
337
|
-
${content}
|
|
338
|
-
|
|
339
|
-
${continueUrl ? `<a href="${escapeHtml2(
|
|
340
|
-
continueUrl
|
|
341
|
-
)}" class="inline-block mt-6 px-6 py-3 bg-primary hover:bg-primary/90 text-white font-medium rounded-lg transition-colors">${escapeHtml2(
|
|
342
|
-
continueText
|
|
343
|
-
)}</a>` : ""}
|
|
344
|
-
|
|
345
|
-
${autoClose ? `<p class="mt-4 text-sm text-text-secondary">Closing in <span id="countdown">${autoClose}</span> seconds...</p>` : ""}
|
|
346
|
-
</div>
|
|
347
|
-
${autoCloseScript}
|
|
348
|
-
`;
|
|
349
|
-
return baseLayout(successHtml, {
|
|
350
|
-
...baseOptions,
|
|
351
|
-
pageType: "success",
|
|
352
|
-
size: "sm",
|
|
353
|
-
alignment: "center",
|
|
354
|
-
background: "solid",
|
|
355
|
-
title: baseOptions.title ?? successTitle
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
function widgetLayout(content, options) {
|
|
359
|
-
const { maxWidth = "100%", showBorder = false, transparent = true, ...baseOptions } = options;
|
|
360
|
-
const containerClasses = [
|
|
361
|
-
"widget-container",
|
|
362
|
-
showBorder ? "border border-border rounded-lg" : "",
|
|
363
|
-
transparent ? "" : "bg-surface"
|
|
364
|
-
].filter(Boolean).join(" ");
|
|
365
|
-
const wrappedContent = `
|
|
366
|
-
<div class="${containerClasses}" style="max-width: ${escapeHtml2(maxWidth)}">
|
|
367
|
-
${content}
|
|
368
|
-
</div>
|
|
369
|
-
`;
|
|
370
|
-
return baseLayout(wrappedContent, {
|
|
371
|
-
...baseOptions,
|
|
372
|
-
pageType: "widget",
|
|
373
|
-
size: "full",
|
|
374
|
-
alignment: "start",
|
|
375
|
-
background: "none"
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
var authLayoutBuilder = createLayoutBuilder({
|
|
379
|
-
pageType: "auth",
|
|
380
|
-
size: "sm",
|
|
381
|
-
alignment: "center",
|
|
382
|
-
background: "gradient"
|
|
383
|
-
});
|
|
384
|
-
var consentLayoutBuilder = createLayoutBuilder({
|
|
385
|
-
pageType: "consent",
|
|
386
|
-
size: "lg",
|
|
387
|
-
alignment: "top",
|
|
388
|
-
background: "solid"
|
|
389
|
-
});
|
|
390
|
-
var errorLayoutBuilder = createLayoutBuilder({
|
|
391
|
-
pageType: "error",
|
|
392
|
-
size: "sm",
|
|
393
|
-
alignment: "center",
|
|
394
|
-
background: "solid"
|
|
395
|
-
});
|
|
396
|
-
export {
|
|
397
|
-
authLayout,
|
|
398
|
-
authLayoutBuilder,
|
|
399
|
-
baseLayout,
|
|
400
|
-
consentLayout,
|
|
401
|
-
consentLayoutBuilder,
|
|
402
|
-
createLayoutBuilder,
|
|
403
|
-
errorLayout,
|
|
404
|
-
errorLayoutBuilder,
|
|
405
|
-
escapeHtml2 as escapeHtml,
|
|
406
|
-
loadingLayout,
|
|
407
|
-
successLayout,
|
|
408
|
-
widgetLayout
|
|
409
|
-
};
|
package/esm/render/index.mjs
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
-
}) : x)(function(x) {
|
|
4
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
// libs/ui/src/render/prerender.ts
|
|
9
|
-
async function renderToString(element) {
|
|
10
|
-
const { prerender } = await import("react-dom/static");
|
|
11
|
-
const { prelude } = await prerender(element);
|
|
12
|
-
const reader = prelude.getReader();
|
|
13
|
-
const chunks = [];
|
|
14
|
-
while (true) {
|
|
15
|
-
const { done, value } = await reader.read();
|
|
16
|
-
if (done) break;
|
|
17
|
-
if (value) chunks.push(value);
|
|
18
|
-
}
|
|
19
|
-
const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
|
|
20
|
-
const combined = new Uint8Array(totalLength);
|
|
21
|
-
let offset = 0;
|
|
22
|
-
for (const chunk of chunks) {
|
|
23
|
-
combined.set(chunk, offset);
|
|
24
|
-
offset += chunk.length;
|
|
25
|
-
}
|
|
26
|
-
return new TextDecoder().decode(combined);
|
|
27
|
-
}
|
|
28
|
-
function renderToStringSync(element) {
|
|
29
|
-
const ReactDOMServer = __require("react-dom/server");
|
|
30
|
-
return ReactDOMServer.renderToStaticMarkup(element);
|
|
31
|
-
}
|
|
32
|
-
function isReactAvailable() {
|
|
33
|
-
try {
|
|
34
|
-
__require("react");
|
|
35
|
-
__require("react-dom/server");
|
|
36
|
-
return true;
|
|
37
|
-
} catch {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
export {
|
|
42
|
-
isReactAvailable,
|
|
43
|
-
renderToString,
|
|
44
|
-
renderToStringSync
|
|
45
|
-
};
|