@tekki-forge/runtime-admin 0.2.0 → 0.3.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 (136) hide show
  1. package/dist/admin-dashboard.d.ts +16 -0
  2. package/dist/admin-dashboard.js +60 -0
  3. package/dist/admin-dashboard.js.map +1 -0
  4. package/dist/admin-orgs.d.ts +14 -0
  5. package/dist/admin-orgs.js +75 -0
  6. package/dist/admin-orgs.js.map +1 -0
  7. package/dist/admin-shell.d.ts +55 -0
  8. package/dist/admin-shell.js +141 -0
  9. package/dist/admin-shell.js.map +1 -0
  10. package/dist/admin.js +35 -4
  11. package/dist/admin.js.map +1 -1
  12. package/dist/app-pages.d.ts +19 -0
  13. package/dist/app-pages.js +109 -0
  14. package/dist/app-pages.js.map +1 -0
  15. package/dist/auth-pages.js +7 -2
  16. package/dist/auth-pages.js.map +1 -1
  17. package/dist/charts.d.ts +98 -2
  18. package/dist/charts.js +264 -24
  19. package/dist/charts.js.map +1 -1
  20. package/dist/context.js +32 -1
  21. package/dist/context.js.map +1 -1
  22. package/dist/dashboard.d.ts +63 -8
  23. package/dist/dashboard.js +180 -36
  24. package/dist/dashboard.js.map +1 -1
  25. package/dist/i18n/messages/de.js +751 -0
  26. package/dist/i18n/messages/de.js.map +1 -1
  27. package/dist/i18n/messages/en.js +751 -0
  28. package/dist/i18n/messages/en.js.map +1 -1
  29. package/dist/i18n/messages/es.js +751 -0
  30. package/dist/i18n/messages/es.js.map +1 -1
  31. package/dist/i18n/messages/fr.js +751 -0
  32. package/dist/i18n/messages/fr.js.map +1 -1
  33. package/dist/i18n/messages/pt.js +751 -0
  34. package/dist/i18n/messages/pt.js.map +1 -1
  35. package/dist/index.d.ts +9 -0
  36. package/dist/index.js +9 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/shell.js +37 -34
  39. package/dist/shell.js.map +1 -1
  40. package/dist/site/editor/api.d.ts +74 -0
  41. package/dist/site/editor/api.js +93 -0
  42. package/dist/site/editor/api.js.map +1 -0
  43. package/dist/site/editor/content-page.d.ts +4 -0
  44. package/dist/site/editor/content-page.js +65 -0
  45. package/dist/site/editor/content-page.js.map +1 -0
  46. package/dist/site/editor/inbox-tab.d.ts +4 -0
  47. package/dist/site/editor/inbox-tab.js +88 -0
  48. package/dist/site/editor/inbox-tab.js.map +1 -0
  49. package/dist/site/editor/index.d.ts +1 -0
  50. package/dist/site/editor/index.js +3 -0
  51. package/dist/site/editor/index.js.map +1 -0
  52. package/dist/site/editor/model.d.ts +145 -0
  53. package/dist/site/editor/model.js +408 -0
  54. package/dist/site/editor/model.js.map +1 -0
  55. package/dist/site/editor/page-editor.d.ts +10 -0
  56. package/dist/site/editor/page-editor.js +257 -0
  57. package/dist/site/editor/page-editor.js.map +1 -0
  58. package/dist/site/editor/page-settings.d.ts +9 -0
  59. package/dist/site/editor/page-settings.js +105 -0
  60. package/dist/site/editor/page-settings.js.map +1 -0
  61. package/dist/site/editor/pages-tab.d.ts +5 -0
  62. package/dist/site/editor/pages-tab.js +108 -0
  63. package/dist/site/editor/pages-tab.js.map +1 -0
  64. package/dist/site/editor/posts-tab.d.ts +6 -0
  65. package/dist/site/editor/posts-tab.js +139 -0
  66. package/dist/site/editor/posts-tab.js.map +1 -0
  67. package/dist/site/editor/preview.d.ts +32 -0
  68. package/dist/site/editor/preview.js +104 -0
  69. package/dist/site/editor/preview.js.map +1 -0
  70. package/dist/site/editor/prop-fields.d.ts +53 -0
  71. package/dist/site/editor/prop-fields.js +233 -0
  72. package/dist/site/editor/prop-fields.js.map +1 -0
  73. package/dist/site/editor/section-list.d.ts +14 -0
  74. package/dist/site/editor/section-list.js +110 -0
  75. package/dist/site/editor/section-list.js.map +1 -0
  76. package/dist/site/editor/section-picker.d.ts +12 -0
  77. package/dist/site/editor/section-picker.js +44 -0
  78. package/dist/site/editor/section-picker.js.map +1 -0
  79. package/dist/site/editor/widgets.d.ts +84 -0
  80. package/dist/site/editor/widgets.js +130 -0
  81. package/dist/site/editor/widgets.js.map +1 -0
  82. package/dist/site/format.d.ts +31 -0
  83. package/dist/site/format.js +106 -0
  84. package/dist/site/format.js.map +1 -0
  85. package/dist/site/forms.d.ts +43 -0
  86. package/dist/site/forms.js +155 -0
  87. package/dist/site/forms.js.map +1 -0
  88. package/dist/site/header.d.ts +32 -0
  89. package/dist/site/header.js +76 -0
  90. package/dist/site/header.js.map +1 -0
  91. package/dist/site/icons.d.ts +10 -0
  92. package/dist/site/icons.js +28 -0
  93. package/dist/site/icons.js.map +1 -0
  94. package/dist/site/index.d.ts +11 -0
  95. package/dist/site/index.js +13 -0
  96. package/dist/site/index.js.map +1 -0
  97. package/dist/site/markdown.d.ts +14 -0
  98. package/dist/site/markdown.js +457 -0
  99. package/dist/site/markdown.js.map +1 -0
  100. package/dist/site/page.d.ts +16 -0
  101. package/dist/site/page.js +65 -0
  102. package/dist/site/page.js.map +1 -0
  103. package/dist/site/proxy.d.ts +13 -0
  104. package/dist/site/proxy.js +43 -0
  105. package/dist/site/proxy.js.map +1 -0
  106. package/dist/site/sections.d.ts +43 -0
  107. package/dist/site/sections.js +560 -0
  108. package/dist/site/sections.js.map +1 -0
  109. package/dist/site/server.d.ts +73 -0
  110. package/dist/site/server.js +235 -0
  111. package/dist/site/server.js.map +1 -0
  112. package/dist/site/types.d.ts +137 -0
  113. package/dist/site/types.js +2 -0
  114. package/dist/site/types.js.map +1 -0
  115. package/dist/support.d.ts +29 -0
  116. package/dist/support.js +165 -0
  117. package/dist/support.js.map +1 -0
  118. package/dist/system-config.d.ts +24 -0
  119. package/dist/system-config.js +37 -0
  120. package/dist/system-config.js.map +1 -0
  121. package/dist/system-settings.d.ts +9 -0
  122. package/dist/system-settings.js +60 -0
  123. package/dist/system-settings.js.map +1 -0
  124. package/dist/theme-catalog.d.ts +72 -2
  125. package/dist/theme-catalog.js +47 -0
  126. package/dist/theme-catalog.js.map +1 -1
  127. package/dist/theme-switcher.d.ts +8 -0
  128. package/dist/theme-switcher.js +39 -4
  129. package/dist/theme-switcher.js.map +1 -1
  130. package/dist/theme.js +8 -0
  131. package/dist/theme.js.map +1 -1
  132. package/dist/transactions.d.ts +4 -0
  133. package/dist/transactions.js +60 -0
  134. package/dist/transactions.js.map +1 -0
  135. package/package.json +9 -5
  136. package/styles.css +1089 -0
@@ -0,0 +1,32 @@
1
+ import { type ReactNode } from "react";
2
+ export interface SiteHeaderLink {
3
+ label: string;
4
+ href: string;
5
+ description?: string;
6
+ }
7
+ export interface SiteHeaderEntry {
8
+ label: string;
9
+ href?: string;
10
+ description?: string;
11
+ items?: SiteHeaderLink[];
12
+ }
13
+ export interface SiteHeaderAction {
14
+ href: string;
15
+ label: string;
16
+ primary: boolean;
17
+ }
18
+ export interface SiteHeaderProps {
19
+ /** The logo link (server-rendered). */
20
+ brand: ReactNode;
21
+ nav: SiteHeaderEntry[];
22
+ actions: SiteHeaderAction[];
23
+ labels: {
24
+ navigation: string;
25
+ openMenu: string;
26
+ closeMenu: string;
27
+ menu: string;
28
+ };
29
+ /** Path of the page shown (marks its menu link as current). */
30
+ currentPath?: string;
31
+ }
32
+ export declare function SiteHeader({ brand, nav, actions, labels, currentPath }: SiteHeaderProps): import("react").JSX.Element;
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronDown, Menu, X } from "lucide-react";
4
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
5
+ const external = (href) => /^https?:\/\//i.test(href);
6
+ const linkProps = (href, currentPath) => ({ href, ...(external(href) ? { rel: "noopener" } : {}), ...(currentPath !== undefined && href === currentPath ? { "aria-current": "page" } : {}) });
7
+ const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])';
8
+ /** One dropdown: a disclosure button and its panel. Escape and clicks outside close it; focus returns to the button. */
9
+ function NavGroup({ entry, currentPath, open, onToggle, onClose }) {
10
+ const id = useId();
11
+ const root = useRef(null);
12
+ const button = useRef(null);
13
+ useEffect(() => {
14
+ if (!open)
15
+ return;
16
+ const onPointer = (e) => {
17
+ if (!root.current?.contains(e.target))
18
+ onClose(false);
19
+ };
20
+ const onKey = (e) => {
21
+ if (e.key === "Escape") {
22
+ onClose(false);
23
+ button.current?.focus();
24
+ }
25
+ };
26
+ document.addEventListener("pointerdown", onPointer);
27
+ document.addEventListener("keydown", onKey);
28
+ return () => {
29
+ document.removeEventListener("pointerdown", onPointer);
30
+ document.removeEventListener("keydown", onKey);
31
+ };
32
+ }, [open, onClose]);
33
+ const active = entry.items.some((l) => l.href === currentPath);
34
+ return (_jsxs("li", { ref: root, className: "relative", onBlur: (e) => {
35
+ // Keyboard users tabbing out of the group close it.
36
+ if (open && e.relatedTarget && !root.current?.contains(e.relatedTarget))
37
+ onClose(false);
38
+ }, children: [_jsxs("button", { ref: button, type: "button", className: "forge-site-navlink forge-focusable inline-flex items-center gap-1", "aria-expanded": open, "aria-controls": id, onClick: onToggle, "data-active": active || undefined, children: [entry.label, _jsx(ChevronDown, { className: "forge-site-chevron size-3.5 opacity-70", "aria-hidden": true })] }), _jsx("div", { id: id, hidden: !open, className: "forge-popover forge-site-dropdown absolute top-full left-0 z-50 mt-2 w-80 p-2", children: _jsx("ul", { className: "grid gap-0.5", children: entry.items.map((l) => (_jsx("li", { children: _jsxs("a", { ...linkProps(l.href, currentPath), className: "forge-site-dropdown-link forge-focusable block px-3 py-2.5", onClick: () => onClose(false), children: [_jsx("span", { className: "block text-sm font-medium text-ink", children: l.label }), l.description && _jsx("span", { className: "mt-0.5 block text-[0.8125rem] leading-snug text-ink-muted", children: l.description })] }) }, l.href + l.label))) }) })] }));
39
+ }
40
+ export function SiteHeader({ brand, nav, actions, labels, currentPath }) {
41
+ const [openGroup, setOpenGroup] = useState(null);
42
+ const [mobile, setMobile] = useState(false);
43
+ const panelId = useId();
44
+ const toggle = useRef(null);
45
+ const panel = useRef(null);
46
+ const closeGroup = useCallback(() => setOpenGroup(null), []);
47
+ const closeMobile = useCallback((refocus) => {
48
+ setMobile(false);
49
+ if (refocus)
50
+ toggle.current?.focus();
51
+ }, []);
52
+ // Small-screen menu: focus moves into the panel, Tab cycles between the toggle and the panel, Escape closes.
53
+ useEffect(() => {
54
+ if (!mobile)
55
+ return;
56
+ panel.current?.querySelector(FOCUSABLE)?.focus();
57
+ const onKey = (e) => {
58
+ if (e.key === "Escape") {
59
+ e.preventDefault();
60
+ closeMobile(true);
61
+ return;
62
+ }
63
+ if (e.key !== "Tab" || !panel.current || !toggle.current)
64
+ return;
65
+ const items = [toggle.current, ...panel.current.querySelectorAll(FOCUSABLE)];
66
+ const at = items.indexOf(document.activeElement);
67
+ const next = at === -1 ? 0 : (at + (e.shiftKey ? -1 : 1) + items.length) % items.length;
68
+ e.preventDefault();
69
+ items[next].focus();
70
+ };
71
+ document.addEventListener("keydown", onKey);
72
+ return () => document.removeEventListener("keydown", onKey);
73
+ }, [mobile, closeMobile]);
74
+ return (_jsxs("header", { className: "forge-site-header sticky top-0 z-40", children: [_jsxs("div", { className: "mx-auto flex h-16 max-w-6xl items-center gap-6 px-4 @3xl:px-8", children: [brand, nav.length > 0 && (_jsx("nav", { "aria-label": labels.navigation, className: "hidden flex-1 @5xl:block", children: _jsx("ul", { className: "flex items-center gap-1", children: nav.map((entry, i) => entry.items ? (_jsx(NavGroup, { entry: entry, currentPath: currentPath, open: openGroup === i, onToggle: () => setOpenGroup(openGroup === i ? null : i), onClose: closeGroup }, `g${i}`)) : (_jsx("li", { children: _jsx("a", { ...linkProps(entry.href, currentPath), className: "forge-site-navlink forge-focusable inline-flex items-center", children: entry.label }) }, `l${i}`))) }) })), _jsx("div", { className: "ml-auto hidden shrink-0 items-center gap-2 @5xl:flex", children: actions.map((a) => (_jsx("a", { ...linkProps(a.href), className: `forge-btn ${a.primary ? "forge-btn-primary" : "forge-btn-ghost"} inline-flex h-[var(--forge-control-h)] items-center px-3.5 text-sm font-medium`, children: a.label }, a.href + a.label))) }), (nav.length > 0 || actions.length > 0) && (_jsx("button", { ref: toggle, type: "button", className: "forge-btn forge-btn-ghost ml-auto inline-flex size-10 items-center justify-center @5xl:hidden", "aria-expanded": mobile, "aria-controls": panelId, "aria-label": mobile ? labels.closeMenu : labels.openMenu, onClick: () => (mobile ? closeMobile(false) : setMobile(true)), children: mobile ? _jsx(X, { className: "size-5", "aria-hidden": true }) : _jsx(Menu, { className: "size-5", "aria-hidden": true }) }))] }), _jsx("div", { ref: panel, id: panelId, role: "dialog", "aria-label": labels.menu, hidden: !mobile, className: "forge-site-mobile absolute inset-x-0 top-full max-h-[calc(100dvh-4rem)] overflow-y-auto @5xl:hidden", children: _jsxs("nav", { "aria-label": labels.navigation, className: "mx-auto max-w-6xl px-4 py-4 @3xl:px-8", children: [_jsx("ul", { className: "grid gap-1", children: nav.map((entry, i) => entry.items ? (_jsxs("li", { className: "pt-3 first:pt-0", children: [_jsx("p", { className: "px-3 pb-1 text-xs font-semibold tracking-wide text-ink-muted uppercase", children: entry.label }), _jsx("ul", { className: "grid gap-0.5", children: entry.items.map((l) => (_jsx("li", { children: _jsx("a", { ...linkProps(l.href, currentPath), className: "forge-site-dropdown-link forge-focusable block px-3 py-2.5 text-base text-ink", onClick: () => closeMobile(false), children: l.label }) }, l.href + l.label))) })] }, `g${i}`)) : (_jsx("li", { children: _jsx("a", { ...linkProps(entry.href, currentPath), className: "forge-site-dropdown-link forge-focusable block px-3 py-2.5 text-base font-medium text-ink", onClick: () => closeMobile(false), children: entry.label }) }, `l${i}`))) }), actions.length > 0 && (_jsx("div", { className: "mt-4 grid gap-2 border-t border-line pt-4 @md:grid-cols-2", children: actions.map((a) => (_jsx("a", { ...linkProps(a.href), className: `forge-btn ${a.primary ? "forge-btn-primary" : "forge-btn-secondary"} inline-flex h-11 items-center justify-center px-4 text-base font-medium`, children: a.label }, a.href + a.label))) }))] }) })] }));
75
+ }
76
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/site/header.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function SiteIcon({ name, className }: {
2
+ name: unknown;
3
+ className?: string;
4
+ }): import("react").JSX.Element;
5
+ /** Display names of the social networks of `site.footer.social` (brand names: not translated). */
6
+ export declare const SOCIAL_NAMES: Record<string, string>;
7
+ export declare function SocialIcon({ network, className }: {
8
+ network: string;
9
+ className?: string;
10
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Sparkles } from "lucide-react";
3
+ import { LANDING_ICON_COMPONENTS } from "../landing.js";
4
+ /* Icons of the website: feature icons (the landing page's set, same names as SITE_ICONS) and social networks. */
5
+ export function SiteIcon({ name, className = "size-5" }) {
6
+ const Icon = (typeof name === "string" && LANDING_ICON_COMPONENTS[name]) || Sparkles;
7
+ return _jsx(Icon, { className: className, "aria-hidden": true });
8
+ }
9
+ /** Display names of the social networks of `site.footer.social` (brand names: not translated). */
10
+ export const SOCIAL_NAMES = { x: "X", github: "GitHub", linkedin: "LinkedIn", youtube: "YouTube", instagram: "Instagram", facebook: "Facebook", mastodon: "Mastodon", discord: "Discord" };
11
+ // Simplified brand glyphs on a 24×24 grid (filled), lucide has no brand icons.
12
+ const SOCIAL_PATHS = {
13
+ x: "M17.75 3h3.07l-6.7 7.66L22 21h-6.17l-4.83-6.32L5.47 21H2.4l7.17-8.2L2 3h6.33l4.37 5.78L17.75 3Zm-1.08 16.2h1.7L7.4 4.73H5.58l11.09 14.47Z",
14
+ github: "M12 .3a12 12 0 0 0-3.8 23.38c.6.11.82-.26.82-.58v-2.03c-3.34.73-4.04-1.61-4.04-1.61-.55-1.39-1.33-1.76-1.33-1.76-1.09-.74.08-.73.08-.73 1.2.09 1.84 1.24 1.84 1.24 1.07 1.83 2.8 1.3 3.49 1 .11-.78.42-1.3.76-1.6-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18.77.84 1.23 1.91 1.23 3.22 0 4.61-2.8 5.63-5.48 5.92.43.37.81 1.1.81 2.22v3.29c0 .32.21.7.82.58A12 12 0 0 0 12 .3",
15
+ linkedin: "M20.45 20.45h-3.56v-5.57c0-1.33-.02-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.35V9h3.41v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46v6.28ZM5.34 7.43a2.06 2.06 0 1 1 0-4.12 2.06 2.06 0 0 1 0 4.12ZM7.12 20.45H3.56V9h3.56v11.45ZM22.22 0H1.77C.79 0 0 .77 0 1.73v20.54C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.73V1.73C24 .77 23.2 0 22.22 0Z",
16
+ youtube: "M23.5 6.19a3.02 3.02 0 0 0-2.12-2.14C19.5 3.55 12 3.55 12 3.55s-7.5 0-9.38.5A3.02 3.02 0 0 0 .5 6.19C0 8.07 0 12 0 12s0 3.93.5 5.81a3.02 3.02 0 0 0 2.12 2.14c1.88.5 9.38.5 9.38.5s7.5 0 9.38-.5a3.02 3.02 0 0 0 2.12-2.14C24 15.93 24 12 24 12s0-3.93-.5-5.81ZM9.55 15.57V8.43L15.82 12l-6.27 3.57Z",
17
+ instagram: "M12 2.16c3.2 0 3.58.01 4.85.07 3.25.15 4.77 1.69 4.92 4.92.06 1.27.07 1.65.07 4.85s-.01 3.58-.07 4.85c-.15 3.23-1.66 4.77-4.92 4.92-1.27.06-1.65.07-4.85.07s-3.58-.01-4.85-.07c-3.26-.15-4.77-1.7-4.92-4.92C2.17 15.58 2.16 15.2 2.16 12s.01-3.58.07-4.85C2.38 3.92 3.9 2.38 7.15 2.23 8.42 2.17 8.8 2.16 12 2.16ZM12 0C8.74 0 8.33.01 7.05.07 2.7.27.27 2.69.07 7.05.01 8.33 0 8.74 0 12s.01 3.67.07 4.95c.2 4.36 2.62 6.78 6.98 6.98 1.28.06 1.69.07 4.95.07s3.67-.01 4.95-.07c4.35-.2 6.78-2.62 6.98-6.98.06-1.28.07-1.69.07-4.95s-.01-3.67-.07-4.95c-.2-4.35-2.62-6.78-6.98-6.98C15.67.01 15.26 0 12 0Zm0 5.84a6.16 6.16 0 1 0 0 12.32 6.16 6.16 0 0 0 0-12.32ZM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm6.4-11.85a1.44 1.44 0 1 0 0 2.88 1.44 1.44 0 0 0 0-2.88Z",
18
+ facebook: "M24 12.07C24 5.4 18.63 0 12 0S0 5.4 0 12.07C0 18.1 4.39 23.09 10.13 24v-8.44H7.08v-3.49h3.05V9.41c0-3.02 1.79-4.69 4.53-4.69 1.31 0 2.69.23 2.69.23v2.97h-1.51c-1.49 0-1.96.93-1.96 1.89v2.26h3.33l-.53 3.49h-2.8V24C19.61 23.09 24 18.1 24 12.07Z",
19
+ mastodon: "M21.33 13.6c-.3 1.52-2.64 3.18-5.33 3.5-1.4.17-2.78.32-4.25.25-2.4-.1-4.3-.57-4.3-.57 0 .23.02.46.05.67.31 2.37 2.35 2.5 4.28 2.57 1.95.07 3.68-.48 3.68-.48l.08 1.76s-1.36.73-3.79.87c-1.34.07-3-.04-4.94-.55C2.6 20.5 1.88 16.03 1.77 11.5c-.03-1.35-.01-2.62-.01-3.68 0-4.64 3.04-6 3.04-6C6.33 1.11 8.97.81 11.7.79h.07c2.74.02 5.38.32 6.91 1.03 0 0 3.04 1.36 3.04 6 0 0 .04 3.42-.39 5.79Zm-3.17-5.44c0-1.15-.3-2.06-.88-2.73-.6-.67-1.39-1.02-2.37-1.02-1.13 0-1.99.44-2.55 1.31l-.55.92-.55-.92c-.57-.87-1.42-1.31-2.55-1.31-.98 0-1.77.35-2.37 1.02-.58.67-.88 1.58-.88 2.73v5.6h2.22V8.32c0-1.15.48-1.73 1.45-1.73 1.07 0 1.6.69 1.6 2.05v2.97h2.2V8.64c0-1.36.54-2.05 1.61-2.05.97 0 1.45.58 1.45 1.73v5.44h2.22V8.16Z",
20
+ discord: "M20.32 4.37A19.8 19.8 0 0 0 15.4 2.84l-.62 1.27a18.3 18.3 0 0 0-5.56 0L8.6 2.84a19.7 19.7 0 0 0-4.93 1.53C.53 9.05-.32 13.6.1 18.1a19.9 19.9 0 0 0 6.04 3.05l1.3-2.1a12.9 12.9 0 0 1-2.05-.98l.5-.38a14.2 14.2 0 0 0 12.2 0l.5.38c-.65.38-1.34.71-2.05.98l1.3 2.1a19.8 19.8 0 0 0 6.04-3.05c.5-5.2-.84-9.72-3.56-13.73ZM8.02 15.33c-1.18 0-2.16-1.08-2.16-2.42s.96-2.42 2.16-2.42c1.21 0 2.18 1.09 2.16 2.42 0 1.34-.96 2.42-2.16 2.42Zm7.97 0c-1.18 0-2.16-1.08-2.16-2.42s.96-2.42 2.16-2.42c1.21 0 2.18 1.09 2.16 2.42 0 1.34-.95 2.42-2.16 2.42Z",
21
+ };
22
+ export function SocialIcon({ network, className = "size-[1.125rem]" }) {
23
+ const d = SOCIAL_PATHS[network];
24
+ if (!d)
25
+ return null;
26
+ return (_jsx("svg", { viewBox: "0 0 24 24", className: className, fill: "currentColor", "aria-hidden": true, focusable: "false", children: _jsx("path", { d: d }) }));
27
+ }
28
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/site/icons.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,iHAAiH;AAEjH,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,EAAyC;IAC5F,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC;IACrF,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,wBAAgB,CAAC;AACpD,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,YAAY,GAA2B,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAEnN,+EAA+E;AAC/E,MAAM,YAAY,GAA2B;IAC3C,CAAC,EAAE,2IAA2I;IAC9I,MAAM,EACJ,6eAA6e;IAC/e,QAAQ,EACN,kXAAkX;IACpX,OAAO,EACL,sSAAsS;IACxS,SAAS,EACP,iuBAAiuB;IACnuB,QAAQ,EACN,oPAAoP;IACtP,QAAQ,EACN,osBAAosB;IACtsB,OAAO,EACL,qhBAAqhB;CACxhB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,GAAG,iBAAiB,EAA2C;IAC5G,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,CACL,cAAK,OAAO,EAAC,WAAW,EAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,cAAc,uBAAa,SAAS,EAAC,OAAO,YAC9F,eAAM,CAAC,EAAE,CAAC,GAAI,GACV,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from "./types.js";
2
+ export * from "./markdown.js";
3
+ export * from "./format.js";
4
+ export * from "./icons.js";
5
+ export * from "./sections.js";
6
+ export * from "./page.js";
7
+ export * from "./header.js";
8
+ export * from "./forms.js";
9
+ export * from "./server.js";
10
+ export * from "./proxy.js";
11
+ export * from "./editor/index.js";
@@ -0,0 +1,13 @@
1
+ // The public website (`site` in forge.config.ts): sections, pages, posts, safe markdown and the server helpers.
2
+ export * from "./types.js";
3
+ export * from "./markdown.js";
4
+ export * from "./format.js";
5
+ export * from "./icons.js";
6
+ export * from "./sections.js";
7
+ export * from "./page.js";
8
+ export * from "./header.js";
9
+ export * from "./forms.js";
10
+ export * from "./server.js";
11
+ export * from "./proxy.js";
12
+ export * from "./editor/index.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/site/index.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Markdown as React elements inside a `.forge-site-prose` block (typography from the theme tokens). */
2
+ export declare function Markdown({ source, className, minHeading }: {
3
+ source: string;
4
+ className?: string;
5
+ minHeading?: number;
6
+ }): import("react").JSX.Element | null;
7
+ export declare const escapeHtml: (s: string) => string;
8
+ /** Markdown as an escaped HTML string (RSS item bodies). `baseUrl` makes relative links and images absolute. */
9
+ export declare function markdownToHtml(source: string, options?: {
10
+ baseUrl?: string;
11
+ minHeading?: number;
12
+ }): string;
13
+ /** Plain text of markdown (excerpts, meta descriptions, reading time). */
14
+ export declare function markdownToText(source: string): string;