@alpaca-headless/alpaca-headless-nextjs 1.0.27 → 1.0.129

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 (238) hide show
  1. package/dist/cjs/client-components/ClientLink.js +36 -0
  2. package/dist/cjs/client-components/MultiComponentEditor.js +26 -0
  3. package/dist/cjs/client-components/index.js +19 -0
  4. package/dist/cjs/components/Link.js +1 -1
  5. package/dist/cjs/components/LinkEditor.js +47 -1
  6. package/dist/cjs/components/Picture.js +14 -12
  7. package/dist/cjs/components/PictureEditor.js +20 -39
  8. package/dist/cjs/components/Placeholder.js +51 -9
  9. package/dist/cjs/components/RichText.js +1 -1
  10. package/dist/cjs/components/RichTextEditor.js +17 -2
  11. package/dist/cjs/components/TextEditor.js +15 -3
  12. package/dist/cjs/components/Translate.js +1 -1
  13. package/dist/cjs/{editor → components}/TranslateEditor.js +5 -2
  14. package/dist/cjs/editor/AiPopup.js +33 -0
  15. package/dist/cjs/editor/AiTerminal.js +42 -18
  16. package/dist/cjs/editor/ComponentInfo.js +4 -3
  17. package/dist/cjs/editor/ComponentPalette.js +12 -68
  18. package/dist/cjs/editor/ComponentTree.js +76 -59
  19. package/dist/cjs/editor/ConfirmationDialog.js +31 -0
  20. package/dist/cjs/editor/ContentTree.js +144 -49
  21. package/dist/cjs/editor/Debug.js +12 -2
  22. package/dist/cjs/editor/DialogButtons.js +7 -0
  23. package/dist/cjs/editor/DictionaryEditor.js +14 -8
  24. package/dist/cjs/editor/EditFrame.js +88 -20
  25. package/dist/cjs/editor/EditHistory.js +17 -4
  26. package/dist/cjs/editor/Editor.js +1 -1
  27. package/dist/cjs/editor/EditorClient.js +506 -237
  28. package/dist/cjs/editor/EditorClientHost.js +2 -2
  29. package/dist/cjs/editor/FieldList.js +30 -43
  30. package/dist/cjs/editor/FieldListField.js +75 -0
  31. package/dist/cjs/editor/FloatingToolbar.js +92 -0
  32. package/dist/cjs/editor/GraphQL.js +4 -6
  33. package/dist/cjs/editor/ItemEditor.js +9 -0
  34. package/dist/cjs/editor/ItemInfo.js +17 -0
  35. package/dist/cjs/editor/ItemNameDialog.js +37 -0
  36. package/dist/cjs/editor/LanguageSelector.js +1 -1
  37. package/dist/cjs/editor/LinkEditorDialog.js +67 -0
  38. package/dist/cjs/editor/MainLayout.js +24 -0
  39. package/dist/cjs/editor/MediaSelector.js +35 -10
  40. package/dist/cjs/editor/PictureEditorDialog.js +93 -0
  41. package/dist/cjs/editor/PlaceholderDropZone.js +48 -9
  42. package/dist/cjs/editor/SidebarTabs.js +47 -0
  43. package/dist/cjs/editor/Terminal.js +21 -11
  44. package/dist/cjs/editor/Utils.js +43 -0
  45. package/dist/cjs/editor/VersionSelector.js +1 -1
  46. package/dist/cjs/editor/Workbox.js +41 -0
  47. package/dist/cjs/editor/componentCommands.js +141 -0
  48. package/dist/cjs/editor/contentService.js +45 -3
  49. package/dist/cjs/editor/editContext.js +9 -4
  50. package/dist/cjs/editor/editService.js +187 -3
  51. package/dist/cjs/editor/fieldTypes/CheckboxEditor.js +21 -0
  52. package/dist/cjs/editor/fieldTypes/InternalLinkFieldEditor.js +46 -0
  53. package/dist/cjs/editor/fieldTypes/LinkFieldEditor.js +55 -0
  54. package/dist/cjs/editor/fieldTypes/MultiLineText.js +25 -0
  55. package/dist/cjs/editor/fieldTypes/PictureFieldEditor.js +19 -0
  56. package/dist/cjs/editor/fieldTypes/RichTextEditor.js +9 -4
  57. package/dist/cjs/editor/fieldTypes/SingleLineText.js +12 -4
  58. package/dist/cjs/editor/fieldTypes/TreeListEditor.js +59 -0
  59. package/dist/cjs/editor/ui/Section.js +8 -0
  60. package/dist/cjs/loadRouteData.js +24 -14
  61. package/dist/cjs/middleware/authorization.js +52 -0
  62. package/dist/cjs/middleware/index.js +17 -0
  63. package/dist/editor.css +530 -72
  64. package/dist/primereact/resources/themes/arya-blue/theme.css +103 -91
  65. package/dist/primereact/resources/themes/arya-green/theme.css +103 -91
  66. package/dist/primereact/resources/themes/arya-orange/theme.css +103 -91
  67. package/dist/primereact/resources/themes/arya-purple/theme.css +103 -91
  68. package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +103 -91
  69. package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +103 -91
  70. package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +102 -90
  71. package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +102 -90
  72. package/dist/primereact/resources/themes/fluent-light/theme.css +103 -91
  73. package/dist/primereact/resources/themes/lara-dark-amber/fonts/Inter-italic.var.woff2 +0 -0
  74. package/dist/primereact/resources/themes/lara-dark-amber/fonts/Inter-roman.var.woff2 +0 -0
  75. package/dist/primereact/resources/themes/lara-dark-amber/theme.css +6049 -0
  76. package/dist/primereact/resources/themes/lara-dark-blue/theme.css +1006 -955
  77. package/dist/primereact/resources/themes/lara-dark-cyan/fonts/Inter-italic.var.woff2 +0 -0
  78. package/dist/primereact/resources/themes/lara-dark-cyan/fonts/Inter-roman.var.woff2 +0 -0
  79. package/dist/primereact/resources/themes/lara-dark-cyan/theme.css +6049 -0
  80. package/dist/primereact/resources/themes/lara-dark-green/fonts/Inter-italic.var.woff2 +0 -0
  81. package/dist/primereact/resources/themes/lara-dark-green/fonts/Inter-roman.var.woff2 +0 -0
  82. package/dist/primereact/resources/themes/lara-dark-green/theme.css +6049 -0
  83. package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +1006 -955
  84. package/dist/primereact/resources/themes/lara-dark-pink/fonts/Inter-italic.var.woff2 +0 -0
  85. package/dist/primereact/resources/themes/lara-dark-pink/fonts/Inter-roman.var.woff2 +0 -0
  86. package/dist/primereact/resources/themes/lara-dark-pink/theme.css +6049 -0
  87. package/dist/primereact/resources/themes/lara-dark-purple/theme.css +1006 -955
  88. package/dist/primereact/resources/themes/lara-dark-teal/theme.css +1006 -955
  89. package/dist/primereact/resources/themes/lara-light-amber/fonts/Inter-italic.var.woff2 +0 -0
  90. package/dist/primereact/resources/themes/lara-light-amber/fonts/Inter-roman.var.woff2 +0 -0
  91. package/dist/primereact/resources/themes/lara-light-amber/theme.css +6041 -0
  92. package/dist/primereact/resources/themes/lara-light-blue/theme.css +842 -799
  93. package/dist/primereact/resources/themes/lara-light-cyan/fonts/Inter-italic.var.woff2 +0 -0
  94. package/dist/primereact/resources/themes/lara-light-cyan/fonts/Inter-roman.var.woff2 +0 -0
  95. package/dist/primereact/resources/themes/lara-light-cyan/theme.css +6041 -0
  96. package/dist/primereact/resources/themes/lara-light-green/fonts/Inter-italic.var.woff2 +0 -0
  97. package/dist/primereact/resources/themes/lara-light-green/fonts/Inter-roman.var.woff2 +0 -0
  98. package/dist/primereact/resources/themes/lara-light-green/theme.css +6041 -0
  99. package/dist/primereact/resources/themes/lara-light-indigo/theme.css +842 -799
  100. package/dist/primereact/resources/themes/lara-light-pink/fonts/Inter-italic.var.woff2 +0 -0
  101. package/dist/primereact/resources/themes/lara-light-pink/fonts/Inter-roman.var.woff2 +0 -0
  102. package/dist/primereact/resources/themes/lara-light-pink/theme.css +6041 -0
  103. package/dist/primereact/resources/themes/lara-light-purple/theme.css +842 -799
  104. package/dist/primereact/resources/themes/lara-light-teal/theme.css +1115 -1072
  105. package/dist/primereact/resources/themes/luna-amber/theme.css +103 -91
  106. package/dist/primereact/resources/themes/luna-blue/theme.css +103 -91
  107. package/dist/primereact/resources/themes/luna-green/theme.css +103 -91
  108. package/dist/primereact/resources/themes/luna-pink/theme.css +103 -91
  109. package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +147 -135
  110. package/dist/primereact/resources/themes/md-dark-indigo/theme.css +147 -135
  111. package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +147 -135
  112. package/dist/primereact/resources/themes/md-light-indigo/theme.css +147 -135
  113. package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +147 -135
  114. package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +147 -135
  115. package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +147 -135
  116. package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +147 -135
  117. package/dist/primereact/resources/themes/mira/theme.css +108 -91
  118. package/dist/primereact/resources/themes/nano/theme.css +107 -91
  119. package/dist/primereact/resources/themes/nova/theme.css +103 -91
  120. package/dist/primereact/resources/themes/nova-accent/theme.css +103 -91
  121. package/dist/primereact/resources/themes/nova-alt/theme.css +103 -91
  122. package/dist/primereact/resources/themes/rhea/theme.css +103 -91
  123. package/dist/primereact/resources/themes/saga-blue/theme.css +103 -91
  124. package/dist/primereact/resources/themes/saga-green/theme.css +103 -91
  125. package/dist/primereact/resources/themes/saga-orange/theme.css +103 -91
  126. package/dist/primereact/resources/themes/saga-purple/theme.css +103 -91
  127. package/dist/primereact/resources/themes/soho-dark/theme.css +108 -91
  128. package/dist/primereact/resources/themes/soho-light/theme.css +108 -91
  129. package/dist/primereact/resources/themes/vela-blue/theme.css +103 -91
  130. package/dist/primereact/resources/themes/vela-green/theme.css +103 -91
  131. package/dist/primereact/resources/themes/vela-orange/theme.css +103 -91
  132. package/dist/primereact/resources/themes/vela-purple/theme.css +103 -91
  133. package/dist/primereact/resources/themes/viva-dark/theme.css +103 -91
  134. package/dist/primereact/resources/themes/viva-light/theme.css +103 -91
  135. package/package.json +29 -16
  136. package/tailwind.config.js +9 -2
  137. package/types/client-components/ClientLink.d.ts +6 -0
  138. package/types/client-components/MultiComponentEditor.d.ts +10 -0
  139. package/types/client-components/index.d.ts +2 -0
  140. package/types/components/Picture.d.ts +1 -0
  141. package/types/components/Placeholder.d.ts +16 -2
  142. package/types/components/RichTextEditor.d.ts +55 -55
  143. package/types/components/TextEditor.d.ts +54 -54
  144. package/types/editor/AiPopup.d.ts +10 -0
  145. package/types/editor/AiTerminal.d.ts +4 -3
  146. package/types/editor/ComponentPalette.d.ts +3 -4
  147. package/types/editor/ComponentTree.d.ts +1 -1
  148. package/types/editor/ConfirmationDialog.d.ts +19 -0
  149. package/types/editor/ContentTree.d.ts +7 -3
  150. package/types/editor/Debug.d.ts +1 -1
  151. package/types/editor/DialogButtons.d.ts +4 -0
  152. package/types/editor/DictionaryEditor.d.ts +3 -2
  153. package/types/editor/EditFrame.d.ts +4 -3
  154. package/types/editor/EditorClient.d.ts +4 -4
  155. package/types/editor/EditorClientHost.d.ts +4 -3
  156. package/types/editor/FieldListField.d.ts +4 -0
  157. package/types/editor/FloatingToolbar.d.ts +7 -0
  158. package/types/editor/ItemEditor.d.ts +4 -0
  159. package/types/editor/ItemInfo.d.ts +4 -0
  160. package/types/editor/ItemNameDialog.d.ts +10 -0
  161. package/types/editor/LinkEditorDialog.d.ts +15 -0
  162. package/types/editor/MainLayout.d.ts +6 -0
  163. package/types/editor/MediaSelector.d.ts +2 -1
  164. package/types/editor/PictureEditorDialog.d.ts +6 -0
  165. package/types/editor/SidebarTabs.d.ts +8 -0
  166. package/types/editor/Terminal.d.ts +3 -1
  167. package/types/editor/Utils.d.ts +3 -0
  168. package/types/editor/Workbox.d.ts +6 -0
  169. package/types/editor/componentCommands.d.ts +4 -0
  170. package/types/editor/contentService.d.ts +7 -1
  171. package/types/editor/editContext.d.ts +90 -19
  172. package/types/editor/editService.d.ts +9 -1
  173. package/types/editor/fieldTypes/CheckboxEditor.d.ts +4 -0
  174. package/types/editor/fieldTypes/InternalLinkFieldEditor.d.ts +4 -0
  175. package/types/editor/fieldTypes/LinkFieldEditor.d.ts +4 -0
  176. package/types/editor/fieldTypes/MultiLineText.d.ts +4 -0
  177. package/types/editor/fieldTypes/PictureFieldEditor.d.ts +4 -0
  178. package/types/editor/fieldTypes/TreeListEditor.d.ts +4 -0
  179. package/types/editor/ui/Section.d.ts +5 -0
  180. package/types/fieldTypes.d.ts +30 -15
  181. package/types/layoutData.d.ts +34 -9
  182. package/types/loadRouteData.d.ts +34 -5
  183. package/types/mediaProtection.d.ts +1 -0
  184. package/types/middleware/authorization.d.ts +2 -0
  185. package/types/middleware/index.d.ts +1 -0
  186. package/dist/cjs/editor/PageInfo.js +0 -12
  187. package/dist/esm/alpacaContext.js +0 -8
  188. package/dist/esm/components/Error.js +0 -10
  189. package/dist/esm/components/Image.js +0 -32
  190. package/dist/esm/components/Link.js +0 -29
  191. package/dist/esm/components/LinkEditor.js +0 -19
  192. package/dist/esm/components/Picture.js +0 -118
  193. package/dist/esm/components/PictureEditor.js +0 -64
  194. package/dist/esm/components/Placeholder.js +0 -69
  195. package/dist/esm/components/RichText.js +0 -40
  196. package/dist/esm/components/RichTextEditor.js +0 -52
  197. package/dist/esm/components/Slot.js +0 -5
  198. package/dist/esm/components/Text.js +0 -39
  199. package/dist/esm/components/TextEditor.js +0 -38
  200. package/dist/esm/components/Translate.js +0 -10
  201. package/dist/esm/components/index.js +0 -7
  202. package/dist/esm/editor/AiTerminal.js +0 -157
  203. package/dist/esm/editor/ComponentInfo.js +0 -10
  204. package/dist/esm/editor/ComponentPalette.js +0 -72
  205. package/dist/esm/editor/ComponentTree.js +0 -196
  206. package/dist/esm/editor/ContentTree.js +0 -117
  207. package/dist/esm/editor/Debug.js +0 -9
  208. package/dist/esm/editor/DictionaryEditor.js +0 -31
  209. package/dist/esm/editor/EditFrame.js +0 -57
  210. package/dist/esm/editor/EditHistory.js +0 -26
  211. package/dist/esm/editor/Editor.js +0 -23
  212. package/dist/esm/editor/EditorClient.js +0 -477
  213. package/dist/esm/editor/EditorClientHost.js +0 -7
  214. package/dist/esm/editor/FieldList.js +0 -60
  215. package/dist/esm/editor/GraphQL.js +0 -82
  216. package/dist/esm/editor/LanguageSelector.js +0 -17
  217. package/dist/esm/editor/MediaSelector.js +0 -60
  218. package/dist/esm/editor/PageInfo.js +0 -8
  219. package/dist/esm/editor/PlaceholderDropZone.js +0 -50
  220. package/dist/esm/editor/PlaceholderDropZoneHost.js +0 -7
  221. package/dist/esm/editor/Terminal.js +0 -47
  222. package/dist/esm/editor/TranslateEditor.js +0 -21
  223. package/dist/esm/editor/VersionSelector.js +0 -17
  224. package/dist/esm/editor/componentTreeHelper.js +0 -14
  225. package/dist/esm/editor/contentService.js +0 -31
  226. package/dist/esm/editor/editContext.js +0 -5
  227. package/dist/esm/editor/editService.js +0 -139
  228. package/dist/esm/editor/fieldTypes/RichTextEditor.js +0 -15
  229. package/dist/esm/editor/fieldTypes/SingleLineText.js +0 -13
  230. package/dist/esm/editor/index.js +0 -2
  231. package/dist/esm/fieldTypes.js +0 -1
  232. package/dist/esm/graphQLTypes.js +0 -1
  233. package/dist/esm/index.js +0 -7
  234. package/dist/esm/layoutData.js +0 -1
  235. package/dist/esm/loadRouteData.js +0 -123
  236. package/dist/esm/mediaProtection.js +0 -49
  237. package/types/editor/PageInfo.d.ts +0 -4
  238. /package/types/{editor → components}/TranslateEditor.d.ts +0 -0
@@ -1,123 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { useAlpacaContext } from "./alpacaContext";
11
- import { cookies } from "next/headers";
12
- import { cache } from "react";
13
- const fetchRouteData = cache((path, host, mode, itemId, language, session, version) => __awaiter(void 0, void 0, void 0, function* () {
14
- const request = {
15
- Path: path,
16
- Host: host,
17
- Mode: mode,
18
- ItemId: itemId,
19
- Language: language,
20
- SessionId: session,
21
- Version: version,
22
- };
23
- const url = process.env.LAYOUT_SERVICE_URL +
24
- "/alpaca/headless/layout?session=" +
25
- session;
26
- console.log(`Fetching page layout from ${url}. Host:${request.Host} Path: ${request.Path}`);
27
- const response = yield fetch(url, {
28
- method: "POST",
29
- body: JSON.stringify(request),
30
- credentials: "include",
31
- headers: {
32
- "Content-Type": "application/json",
33
- Cookie: cookies().toString(),
34
- "x-api-key": getApiKey(),
35
- },
36
- next: {
37
- tags: ["pages"],
38
- revalidate: mode === "preview" || mode == "edit" ? 0 : 30,
39
- },
40
- });
41
- console.log("STATUS: " + response.status + " mode: " + mode);
42
- if (response.status === 404) {
43
- return {
44
- type: "notfound",
45
- };
46
- }
47
- if (response.status === 301) {
48
- return {
49
- type: "redirect",
50
- location: response.url,
51
- };
52
- }
53
- if (!response.ok) {
54
- const message = yield response.text();
55
- return {
56
- type: "error",
57
- errorCode: response.status,
58
- message: message,
59
- };
60
- }
61
- const data = yield response.json();
62
- //console.log(JSON.stringify(data, null, 2));
63
- const context = useAlpacaContext();
64
- context.pageContext = {
65
- itemId: data.page.id,
66
- language: data.page.language,
67
- site: data.site,
68
- pageEditing: data.page.editing,
69
- pageState: "",
70
- database: data.page.database,
71
- };
72
- context.fields = data.page.fields;
73
- context.edit = data.edit;
74
- const dictionary = yield loadDictionary(context.pageContext.site.name, context.pageContext.language, mode);
75
- context.dictionary = dictionary;
76
- context.translate = (text) => {
77
- return context.dictionary[text] || text;
78
- };
79
- return Object.assign(Object.assign({}, data.page), { type: "page" });
80
- }));
81
- export function loadRouteData(params, searchParams, host) {
82
- var _a, _b;
83
- return __awaiter(this, void 0, void 0, function* () {
84
- const result = yield fetchRouteData((_b = (_a = params.path) === null || _a === void 0 ? void 0 : _a.join("/")) !== null && _b !== void 0 ? _b : "/", host, searchParams["mode"] || "normal", searchParams["itemid"], searchParams["language"], searchParams["session"], searchParams["version"]);
85
- return result;
86
- });
87
- }
88
- function loadDictionary(siteName, language, mode) {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- const url = process.env.LAYOUT_SERVICE_URL +
91
- "/alpaca/headless/dictionary?siteName=" +
92
- siteName +
93
- "&language=" +
94
- language;
95
- console.log(`Fetching dictionary from ${url}.`);
96
- const response = yield fetch(url, {
97
- method: "GET",
98
- credentials: "include",
99
- headers: {
100
- "Content-Type": "application/json",
101
- Cookie: cookies().toString(),
102
- "x-api-key": getApiKey(),
103
- },
104
- next: {
105
- tags: ["dictionary"],
106
- revalidate: mode === "preview" || mode == "edit" ? 15 : 600,
107
- },
108
- });
109
- if (!response.ok) {
110
- console.log("Could not load dictionary: Response code: " + response.status);
111
- return {};
112
- }
113
- const data = yield response.json();
114
- console.log(data);
115
- return data;
116
- });
117
- }
118
- function getApiKey() {
119
- const apiKey = process.env.ALPACA_HEADLESS_API_KEY || process.env.API_KEY;
120
- if (!apiKey)
121
- console.log("ERROR: Could not find API key environment variable: ALPACA_HEADLESS_API_KEY");
122
- return apiKey;
123
- }
@@ -1,49 +0,0 @@
1
- import crypto from "crypto";
2
- import "url";
3
- const protectedParams = [
4
- "w",
5
- "h",
6
- "mw",
7
- "mh",
8
- "sc",
9
- "as",
10
- "bc",
11
- "db",
12
- "iar",
13
- "la",
14
- "thn",
15
- "vs",
16
- "sc_content",
17
- "sc_lang",
18
- "sc_site",
19
- "gray",
20
- "rev",
21
- "devicepixelratio",
22
- "encodequality",
23
- "rx",
24
- "ry",
25
- "rw",
26
- "rh",
27
- "crop",
28
- ];
29
- export function hashImageUrl(url) {
30
- if (!process.env.MEDIA_REQUESTPROTECTION_SHAREDSECRET)
31
- return url;
32
- if (!url)
33
- return url;
34
- const baseURL = 'http://temp-base-url.com'; // This will serve as a placeholder.
35
- const uri = new URL(url.toLowerCase(), baseURL);
36
- uri.searchParams.delete("hash");
37
- const searchParams = protectedParams
38
- .map((x) => ({ name: x, val: uri.searchParams.get(x) }))
39
- .filter((x) => x.val)
40
- .map((x) => x.name + "=" + x.val)
41
- .join("&");
42
- const stringToProtect = uri.pathname.substring(1) + "?" + searchParams;
43
- const hash = crypto
44
- .createHash("md5")
45
- .update(stringToProtect + process.env.MEDIA_REQUESTPROTECTION_SHAREDSECRET, "utf16le")
46
- .digest("hex");
47
- uri.searchParams.set("hash", hash);
48
- return url.startsWith('http') ? uri.toString() : uri.pathname + uri.search;
49
- }
@@ -1,4 +0,0 @@
1
- import { Page } from "..";
2
- export declare function PageInfo({ page }: {
3
- page: Page | null;
4
- }): import("react/jsx-runtime").JSX.Element | undefined;