info-site-generator 1.0.6 → 1.0.8

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/lib/App.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { UserProvidedSiteData } from "../declarations";
2
+ import "./index.css";
3
+ import React from "react";
4
+ /**
5
+ * The info site generator main component
6
+ * @returns A ready app based on the data provided
7
+ */
8
+ declare function SiteGen({ data_provided, children, }: {
9
+ data_provided: UserProvidedSiteData;
10
+ children: React.ReactNode;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ export default SiteGen;
package/lib/App.js CHANGED
@@ -1,84 +1,81 @@
1
- import { HashRouter, Routes, Route } from "react-router-dom";
2
- import Home from "info-site-generator/src/pages/Home.tsx";
3
- import defaults from "info-site-generator/src/contentDefaults.json";
4
- import { ThemeContext } from "info-site-generator/src/theme.ts";
5
- import Wrapper from "info-site-generator/src/components/Wrapper.tsx";
6
- import {
7
- UserProvidedSiteData,
8
- ValidSiteData,
9
- } from "info-site-generator/declarations";
10
- import "./index.css";
11
- import Content from "info-site-generator/src/pages/Content.tsx";
12
- import PageGen from "info-site-generator/src/pages/Page.tsx";
13
- import Search from "info-site-generator/src/pages/Search.tsx";
14
- import React from "react";
15
-
1
+ import { HashRouter, Routes, Route } from "react-router-dom";
2
+ import Home from "./pages/Home";
3
+ import defaults from "./contentDefaults.json";
4
+ import { ThemeContext } from "./theme";
5
+ import Wrapper from "./components/Wrapper";
6
+ import "./index.css";
7
+ import Content from "./pages/Content";
8
+ import PageGen from "./pages/Page";
9
+ import Search from "./pages/Search";
10
+ import React from "react";
11
+
16
12
  /**
17
- * The info site generator
18
- * @param {UserProvidedSiteData} data The data of the site in SiteData format
19
- * @param {React.ReactNode[]} children The children
13
+ * The info site generator main component
20
14
  * @returns A ready app based on the data provided
21
- */
22
- function SiteGen({ data, children }) {
23
- // loop through the possible site data and set defaults
24
- let dataSecond = data;
25
- Object.keys(defaults).forEach((key) => {
26
- dataSecond[key] = data[key] || defaults[key];
27
- });
28
- /**
29
- * @type {ValidSiteData}
30
- */
31
- let validData = dataSecond;
32
- validData.pages?.forEach((page) => {
33
- page.withLink = page.withLink ?? true;
34
- // page.withLink = page.withLink === undefined ? false : page.withLink;
35
- });
36
- return (
37
- <ThemeContext.Provider value={localStorage.getItem("theme") || "light"}>
38
- <HashRouter>
39
- <Routes>
40
- <Route
41
- index
42
- element={
43
- <Wrapper
44
- data={validData}
45
- component={<Home data={validData} />}
46
- />
47
- }
48
- />
49
- <Route
50
- path="all-content"
51
- element={
52
- <Wrapper
53
- data={validData}
54
- component={<Content data={validData} />}
55
- />
56
- }
57
- />
58
- <Route
59
- path="search"
60
- element={
61
- <Wrapper
62
- data={validData}
63
- component={<Search data={validData} />}
64
- />
65
- }
66
- />
67
- {children.map((page) => (
68
- <Route
69
- element={
70
- <Wrapper
71
- data={validData}
72
- component={<PageGen page={page} />}
73
- />
74
- }
75
- path={page.slug}
76
- />
77
- ))}
78
- </Routes>
79
- </HashRouter>
80
- </ThemeContext.Provider>
81
- );
82
- }
83
-
84
- export default SiteGen;
15
+ */
16
+ function SiteGen({
17
+ data_provided,
18
+ children
19
+ }) {
20
+ const validData = {
21
+ ...defaults,
22
+ ...data_provided
23
+ };
24
+ Object.values(validData.pages).forEach(page => {
25
+ page.withLink = page.withLink ?? true;
26
+ // page.withLink = page.withLink === undefined ? false : page.withLink;
27
+ });
28
+ return /*#__PURE__*/React.createElement(ThemeContext.Provider, {
29
+ value: localStorage.getItem("theme") || "light"
30
+ }, /*#__PURE__*/React.createElement(HashRouter, null, /*#__PURE__*/React.createElement(Routes, null, /*#__PURE__*/React.createElement(Route, {
31
+ index: true,
32
+ element: /*#__PURE__*/React.createElement(Wrapper, {
33
+ data: validData,
34
+ component: /*#__PURE__*/React.createElement(Home, {
35
+ data: validData
36
+ })
37
+ })
38
+ }), /*#__PURE__*/React.createElement(Route, {
39
+ path: "all-content",
40
+ element: /*#__PURE__*/React.createElement(Wrapper, {
41
+ data: validData,
42
+ component: /*#__PURE__*/React.createElement(Content, {
43
+ data: validData
44
+ })
45
+ })
46
+ }), /*#__PURE__*/React.createElement(Route, {
47
+ path: "search",
48
+ element: /*#__PURE__*/React.createElement(Wrapper, {
49
+ data: validData,
50
+ component: /*#__PURE__*/React.createElement(Search, {
51
+ data: validData
52
+ })
53
+ })
54
+ }), React.Children.map(children, child => {
55
+ // Check if it's a valid React element (not a string or null)
56
+ if (! /*#__PURE__*/React.isValidElement(child)) return null;
57
+
58
+ // Tell TS this element has props with an 'id'
59
+ const pageElement = child;
60
+ const pageId = pageElement.props.id;
61
+
62
+ // Get the metadata from our data object
63
+ const pageMetadata = validData.pages[pageId];
64
+ if (!pageMetadata) {
65
+ console.warn(`No metadata found in data object for page ID: ${pageId}`);
66
+ return null;
67
+ }
68
+ return /*#__PURE__*/React.createElement(Route, {
69
+ key: pageId,
70
+ path: pageMetadata.slug,
71
+ element: /*#__PURE__*/React.createElement(Wrapper, {
72
+ data: validData,
73
+ component: /*#__PURE__*/React.createElement(PageGen, {
74
+ page: pageElement,
75
+ data: pageMetadata
76
+ })
77
+ })
78
+ });
79
+ }))));
80
+ }
81
+ export default SiteGen;
package/lib/App.tsx ADDED
@@ -0,0 +1,95 @@
1
+ import { HashRouter, Routes, Route } from "react-router-dom";
2
+ import Home from "./pages/Home";
3
+ import defaults from "./contentDefaults.json";
4
+ import { ThemeContext } from "./theme";
5
+ import Wrapper from "./components/Wrapper";
6
+ import { UserProvidedSiteData, ValidSiteData, Theme } from "../declarations";
7
+ import "./index.css";
8
+ import Content from "./pages/Content";
9
+ import PageGen from "./pages/Page";
10
+ import Search from "./pages/Search";
11
+ import React from "react";
12
+
13
+ /**
14
+ * The info site generator main component
15
+ * @returns A ready app based on the data provided
16
+ */
17
+ function SiteGen({
18
+ data_provided: data,
19
+ children,
20
+ }: {
21
+ data_provided: UserProvidedSiteData;
22
+ children: React.ReactNode;
23
+ }) {
24
+ // loop through the possible site data and set defaults
25
+ let dataSecond = data;
26
+ const typed_defaults = defaults as unknown as ValidSiteData;
27
+ Object.keys(defaults).forEach((key) => {
28
+ dataSecond[key as keyof ValidSiteData] =
29
+ data[key as keyof UserProvidedSiteData] ||
30
+ typed_defaults[key as keyof ValidSiteData];
31
+ });
32
+ /**
33
+ * @type {ValidSiteData}
34
+ */
35
+ let validData = dataSecond as ValidSiteData;
36
+ validData.pages?.forEach((page) => {
37
+ page.withLink = page.withLink ?? true;
38
+ // page.withLink = page.withLink === undefined ? false : page.withLink;
39
+ });
40
+ return (
41
+ <ThemeContext.Provider
42
+ value={(localStorage.getItem("theme") as Theme) || "light"}
43
+ >
44
+ <HashRouter>
45
+ <Routes>
46
+ <Route
47
+ index
48
+ element={
49
+ <Wrapper
50
+ data={validData}
51
+ component={<Home data={validData} />}
52
+ />
53
+ }
54
+ />
55
+ <Route
56
+ path="all-content"
57
+ element={
58
+ <Wrapper
59
+ data={validData}
60
+ component={<Content data={validData} />}
61
+ />
62
+ }
63
+ />
64
+ <Route
65
+ path="search"
66
+ element={
67
+ <Wrapper
68
+ data={validData}
69
+ component={<Search data={validData} />}
70
+ />
71
+ }
72
+ />
73
+ {React.Children.map(children, (page: React.ReactNode) => (
74
+ <Route
75
+ element={
76
+ <Wrapper
77
+ data={validData}
78
+ component={
79
+ <PageGen
80
+ page={page}
81
+ data={validData.pages[page.id]}
82
+ />
83
+ }
84
+ />
85
+ }
86
+ path={validData.pages[page?.id].slug}
87
+ />
88
+ ))}
89
+ </Routes>
90
+ </HashRouter>
91
+ </ThemeContext.Provider>
92
+ );
93
+ }
94
+
95
+ export default SiteGen;
@@ -52,7 +52,7 @@ export default function Navbar({
52
52
  id: "navbarSupportedContent"
53
53
  }, /*#__PURE__*/React.createElement("ul", {
54
54
  className: "navbar-nav me-auto mb-2 mb-lg-0"
55
- }, data.pages?.map(page => /*#__PURE__*/React.createElement("li", {
55
+ }, Object.values(data.pages).map(page => /*#__PURE__*/React.createElement("li", {
56
56
  className: "nav-item",
57
57
  key: page.slug
58
58
  }, /*#__PURE__*/React.createElement(Link, {
package/lib/index.js CHANGED
@@ -1,2 +1,3 @@
1
- import SiteGen from "./src/App.js";
1
+ import SiteGen from "./App.js";
2
+
2
3
  export default SiteGen;
@@ -6,7 +6,7 @@ export default function Content({
6
6
  className: "container"
7
7
  }, /*#__PURE__*/React.createElement("h2", null, data.siteTitle, " content"), /*#__PURE__*/React.createElement("div", {
8
8
  className: "row"
9
- }, data.pages.map((page, index) => /*#__PURE__*/React.createElement("div", {
9
+ }, Object.values(data.pages).map((page, index) => /*#__PURE__*/React.createElement("div", {
10
10
  key: index,
11
11
  className: "col-md-4 mb-4 mx-2"
12
12
  }, /*#__PURE__*/React.createElement("div", {
package/lib/pages/Home.js CHANGED
@@ -41,7 +41,7 @@ export default function Home({
41
41
  className: "btn btn-primary p-2"
42
42
  }, "Search")), /*#__PURE__*/React.createElement("datalist", {
43
43
  id: "searchdata"
44
- }, data.pages?.map((page, index) => /*#__PURE__*/React.createElement("option", {
44
+ }, Object.values(data.pages).map((page, index) => /*#__PURE__*/React.createElement("option", {
45
45
  key: index,
46
46
  value: page.title
47
47
  }, page.title)))), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement("h2", null, "We answer these questions and more: "), /*#__PURE__*/React.createElement("ul", null, data.answeredQuestions?.map((question, index) => /*#__PURE__*/React.createElement("li", {
@@ -49,7 +49,7 @@ export default function Home({
49
49
  }, question))), /*#__PURE__*/React.createElement(Link, {
50
50
  to: "all-content"
51
51
  }, "Descover more content")), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement("h2", null, "Dive in with those pages:"), /*#__PURE__*/React.createElement("ul", null, data.startUpPages?.map((page, index) => {
52
- const pageData = data.pages.find(p => p.title === page);
52
+ const pageData = Object.values(data.pages).find(p => p.title === page);
53
53
  if (!pageData) {
54
54
  console.warn(`Page with title "${page}" not found in data.pages`);
55
55
  return null;
@@ -1,4 +1,6 @@
1
- import { Page } from "../../declarations";
2
- export default function PageGen({ page }: {
3
- page: Page;
1
+ /// <reference types="react" />
2
+ import { PageData } from "../../declarations";
3
+ export default function PageGen({ page, data, }: {
4
+ page: React.ReactElement;
5
+ data: PageData;
4
6
  }): import("react/jsx-runtime").JSX.Element;
package/lib/pages/Page.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import ArrowBack from "../components/ArrowBack";
2
2
  export default function PageGen({
3
- page
3
+ page,
4
+ data
4
5
  }) {
5
6
  return /*#__PURE__*/React.createElement("div", {
6
7
  className: "container mt-3"
7
- }, /*#__PURE__*/React.createElement(ArrowBack, null), /*#__PURE__*/React.createElement("h2", null, page.title), /*#__PURE__*/React.createElement("blockquote", null, page.shortTitle || page.title, " - ", page.description), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("br", null), page.content || page);
8
+ }, /*#__PURE__*/React.createElement(ArrowBack, null), /*#__PURE__*/React.createElement("h2", null, data.title), /*#__PURE__*/React.createElement("blockquote", null, data.shortTitle || data.title, " - ", data.description), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("br", null), page || data.content);
8
9
  }
@@ -26,10 +26,10 @@ export default function Search({
26
26
  className: "btn btn-primary p-2"
27
27
  }, "Search")), /*#__PURE__*/React.createElement("datalist", {
28
28
  id: "search-data"
29
- }, data.pages?.map((page, index) => /*#__PURE__*/React.createElement("option", {
29
+ }, Object.values(data.pages).map((page, index) => /*#__PURE__*/React.createElement("option", {
30
30
  key: index,
31
31
  value: page.title
32
- }, page.title))), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("h2", null, "Results for \"", query, "\""), data.pages?.map((page, index) => {
32
+ }, page.title))), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("h2", null, "Results for \"", query, "\""), Object.values(data.pages).map((page, index) => {
33
33
  if (page.title.toLowerCase().includes(searchQuery.toLowerCase())) return /*#__PURE__*/React.createElement("div", {
34
34
  key: index,
35
35
  className: "mb-3"
@@ -0,0 +1,4 @@
1
+ declare module "*.css" {
2
+ const styles: CSSStyleDeclaration;
3
+ export default styles;
4
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "info-site-generator",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "main": "lib/index.js",
5
5
  "author": "Enderfarmer",
6
6
  "license": "MIT",