portosaurus 1.16.5 → 1.16.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "portosaurus",
3
- "version": "1.16.5",
3
+ "version": "1.16.7",
4
4
  "author": "soymadip",
5
5
  "license": "GPL-3.0-only",
6
6
  "description": "Complete portfolio cum personal website solution for your digital personality.",
@@ -25,6 +25,14 @@
25
25
  "#config/*": "./src/config/*",
26
26
  "#internal/*": "./src/internal/src/*"
27
27
  },
28
+ "exports": {
29
+ "./utils": {
30
+ "browser": "./src/utils/.exports.client.js",
31
+ "node": "./src/utils/.exports.js",
32
+ "default": "./src/utils/.exports.js"
33
+ },
34
+ "./config": "./src/config/.exports.js"
35
+ },
28
36
  "bin": {
29
37
  "portosaurus": "bin/portosaurus.js"
30
38
  },
@@ -0,0 +1,4 @@
1
+ export * from "./iconMappings.js";
2
+
3
+ export * from "./prism.js";
4
+ export { default as sidebars } from "./sidebars.js";
@@ -1,4 +1,4 @@
1
- import { getCssVar } from "../internal/src/utils/cssUtils.js";
1
+ import { getCssVar } from "../utils/cssUtils.js";
2
2
 
3
3
  const backgroundColor = getCssVar("--ifm-background-color");
4
4
 
@@ -3,7 +3,7 @@
3
3
  * This file is auto-generated and copied to user projects
4
4
  */
5
5
 
6
- module.exports = {
6
+ export default {
7
7
  notes: [
8
8
  {
9
9
  type: "category",
@@ -1,5 +1,6 @@
1
- import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
2
1
  import { FaQuestionCircle } from "react-icons/fa";
2
+ import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
3
+ import { iconMap as defaultIconMap } from "portosaurus/config";
3
4
  import styles from "./styles.module.css";
4
5
 
5
6
  const sortEmail = (links) => {
@@ -24,7 +25,7 @@ const sortEmail = (links) => {
24
25
  export default function ContactSection({ id, className, title, subtitle }) {
25
26
  const { siteConfig } = useDocusaurusContext();
26
27
  const { customFields } = siteConfig;
27
- const { iconMap } = customFields.iconMap;
28
+ const userIconMap = customFields.iconMap || {};
28
29
 
29
30
  let socialLinks = customFields.socialLinks.links || [];
30
31
 
@@ -54,7 +55,15 @@ export default function ContactSection({ id, className, title, subtitle }) {
54
55
  aria-label="Social media and contact links"
55
56
  >
56
57
  {socialLinks.map((social, index) => {
57
- const iconData = iconMap[social.icon] || {};
58
+ const defaultIconData = defaultIconMap[social.icon] || {};
59
+ const userIconData = userIconMap[social.icon] || {};
60
+
61
+ // User can override color, but component must come from default (due to serialization)
62
+ const iconData = {
63
+ ...defaultIconData,
64
+ ...userIconData,
65
+ icon: defaultIconData.icon, // Enforce default component
66
+ };
58
67
 
59
68
  const name = social.name || "?";
60
69
  const Icon = iconData.icon || FaQuestionCircle;
@@ -4,7 +4,7 @@ import { usePluginData } from "@docusaurus/useGlobalData";
4
4
  import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
5
5
  import DocCardList from "@theme/DocCardList";
6
6
 
7
- const { iconMap } = useDocusaurusContext().siteConfig.customFields.iconMap;
7
+ import { iconMap } from "portosaurus/config";
8
8
 
9
9
  import { FaBook } from "react-icons/fa";
10
10
  import styles from "./styles.module.css";
@@ -11,11 +11,11 @@ import Tooltip from "@site/src/components/Tooltip";
11
11
  const DEFAULT_ICON = FaQuestionCircle;
12
12
  const DEFAULT_COLOR = "var(--ifm-color-primary)";
13
13
 
14
+ import { iconMap } from "portosaurus/config";
15
+
14
16
  export default function SocialIcons({ showAll = false }) {
15
17
  const { siteConfig } = useDocusaurusContext();
16
18
  const { customFields } = siteConfig;
17
- const { iconMap } = customFields.iconMap;
18
-
19
19
  const isBrowser = useIsBrowser();
20
20
 
21
21
  const [animationDelays, setAnimationDelays] = useState({});
@@ -1,6 +1,6 @@
1
1
  import Layout from "@theme/Layout";
2
2
  import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
3
- import UpdateTitle from '@site/src/utils/updateTitle';
3
+ import { UpdateTitle } from "portosaurus/utils";
4
4
 
5
5
  // Import components
6
6
  import HeroSection from "@site/src/components/HeroSection";
@@ -10,7 +10,6 @@ import ContactSection from "@site/src/components/ContactSection";
10
10
  import ExperienceSection from "@site/src/components/ExperienceSection";
11
11
  import ScrollToTop from "@site/src/components/ScrollToTop";
12
12
 
13
-
14
13
  export default function Home() {
15
14
  const { siteConfig } = useDocusaurusContext();
16
15
  const { customFields } = siteConfig;
@@ -21,48 +20,35 @@ export default function Home() {
21
20
  const experience = customFields.experience || {};
22
21
 
23
22
  const sectionTitles = {
24
- 'me': `Home | ${siteConfig.title}`,
25
- 'about': `About Me | ${siteConfig.title}`,
26
- 'projects': `Projects | ${siteConfig.title}`,
27
- 'experience': `Experience | ${siteConfig.title}`,
28
- 'contact': `Contact | ${siteConfig.title}`
23
+ me: `Home | ${siteConfig.title}`,
24
+ about: `About Me | ${siteConfig.title}`,
25
+ projects: `Projects | ${siteConfig.title}`,
26
+ experience: `Experience | ${siteConfig.title}`,
27
+ contact: `Contact | ${siteConfig.title}`,
29
28
  };
30
-
29
+
31
30
  const customStyles = `
32
31
  /* For future */
33
32
  `;
34
33
 
35
-
36
34
  return (
37
- <Layout
38
- title="Me"
39
- description="My portfolio website"
40
- >
35
+ <Layout title="Me" description="My portfolio website">
41
36
  {/* Custom styles */}
42
37
  <style>{customStyles}</style>
43
-
44
- <UpdateTitle
45
- sections={sectionTitles}
46
- defaultTitle={siteConfig.title}
47
- />
48
38
 
49
- <main>
39
+ <UpdateTitle sections={sectionTitles} defaultTitle={siteConfig.title} />
50
40
 
41
+ <main>
51
42
  {/* Hero Section */}
52
- <HeroSection
53
- id="me"
54
- />
43
+ <HeroSection id="me" />
55
44
 
56
45
  {/* About Section */}
57
- {(aboutMe.enable !== false) && (
58
- <AboutSection
59
- id="about"
60
- title="About Me"
61
- />
46
+ {aboutMe.enable !== false && (
47
+ <AboutSection id="about" title="About Me" />
62
48
  )}
63
49
 
64
50
  {/* Projects Section */}
65
- {(projects.enable !== false) && (
51
+ {projects.enable !== false && (
66
52
  <ProjectsSection
67
53
  id="projects"
68
54
  title="My Projects"
@@ -71,7 +57,7 @@ export default function Home() {
71
57
  )}
72
58
 
73
59
  {/* Experience Section */}
74
- {(experience.enable !== false) && (
60
+ {experience.enable !== false && (
75
61
  <ExperienceSection
76
62
  id="experience"
77
63
  title="Experience"
@@ -80,7 +66,7 @@ export default function Home() {
80
66
  )}
81
67
 
82
68
  {/* Contact Section */}
83
- {(socialLinks.enable !== false) && (
69
+ {socialLinks.enable !== false && (
84
70
  <ContactSection
85
71
  id="contact"
86
72
  title="Get In Touch"
@@ -89,9 +75,7 @@ export default function Home() {
89
75
  )}
90
76
 
91
77
  {/* Scroll to top button */}
92
- <ScrollToTop
93
- hideDelay={3500}
94
- />
78
+ <ScrollToTop hideDelay={3500} />
95
79
  </main>
96
80
  </Layout>
97
81
  );
@@ -1,82 +1,78 @@
1
- import React from 'react';
2
- import Layout from '@theme/Layout';
3
- import NoteCards from '@site/src/components/NoteIndex';
4
- import { usePluginData } from '@docusaurus/useGlobalData';
5
- import ScrollToTop from '../components/ScrollToTop';
6
- import HashNavigation from '../utils/HashNavigation';
1
+ import React from "react";
2
+ import Layout from "@theme/Layout";
3
+ import NoteCards from "@site/src/components/NoteIndex";
4
+ import { usePluginData } from "@docusaurus/useGlobalData";
5
+ import ScrollToTop from "../components/ScrollToTop";
6
+ import { HashNavigation } from "portosaurus/utils";
7
7
 
8
8
  const style = {
9
-
10
9
  notesContainer: {
11
- padding: '2rem 0',
12
- maxWidth: '1200px',
13
- margin: '0 auto'
10
+ padding: "2rem 0",
11
+ maxWidth: "1200px",
12
+ margin: "0 auto",
14
13
  },
15
14
 
16
15
  pageTitle: {
17
- fontSize: '2.5rem',
18
- textAlign: 'center',
19
- marginBottom: '0.5rem',
20
- color: 'var(--ifm-color-primary)',
21
- animation: 'slideUp 0.5s ease-out forwards'
16
+ fontSize: "2.5rem",
17
+ textAlign: "center",
18
+ marginBottom: "0.5rem",
19
+ color: "var(--ifm-color-primary)",
20
+ animation: "slideUp 0.5s ease-out forwards",
22
21
  },
23
22
 
24
23
  pageDescription: {
25
- fontSize: '0.9rem',
26
- textAlign: 'center',
27
- color: 'var(--ifm-font-color-tertiary)',
28
- marginBottom: '2rem',
29
- animation: 'slideUp 0.5s ease-out 0.2s forwards',
24
+ fontSize: "0.9rem",
25
+ textAlign: "center",
26
+ color: "var(--ifm-font-color-tertiary)",
27
+ marginBottom: "2rem",
28
+ animation: "slideUp 0.5s ease-out 0.2s forwards",
30
29
  },
31
30
 
32
- '@keyframes slideUp': {
31
+ "@keyframes slideUp": {
33
32
  from: {
34
33
  opacity: 0,
35
- transform: 'translateY(20px)'
34
+ transform: "translateY(20px)",
36
35
  },
37
36
  to: {
38
37
  opacity: 1,
39
- transform: 'translateY(0)'
40
- }
38
+ transform: "translateY(0)",
39
+ },
41
40
  },
42
41
 
43
- '@media (prefers-reduced-motion: reduce)': {
42
+ "@media (prefers-reduced-motion: reduce)": {
44
43
  notesContainer: {
45
- animation: 'none !important'
44
+ animation: "none !important",
46
45
  },
47
46
  pageTitle: {
48
- animation: 'none !important'
47
+ animation: "none !important",
49
48
  },
50
49
  pageDescription: {
51
- animation: 'none !important',
52
- opacity: 1
53
- }
54
- }
50
+ animation: "none !important",
51
+ opacity: 1,
52
+ },
53
+ },
55
54
  };
56
55
 
57
56
  export default function Notes() {
58
- const { path: docsBasePath } = usePluginData('docusaurus-plugin-content-docs');
59
- const pathName = docsBasePath.replace('/', '');
57
+ const { path: docsBasePath } = usePluginData(
58
+ "docusaurus-plugin-content-docs",
59
+ );
60
+ const pathName = docsBasePath.replace("/", "");
60
61
  const pageTitle = pathName.charAt(0).toUpperCase() + pathName.slice(1);
61
62
 
62
63
  return (
63
- <Layout
64
- title={pageTitle}
65
- description={`My ${pageTitle}`}
66
- >
64
+ <Layout title={pageTitle} description={`My ${pageTitle}`}>
67
65
  <main style={style.notesContainer}>
68
66
  <div className="container">
69
67
  <header className="text-center mb-4">
70
- <h1 style={style.pageTitle}>
71
- My Notes
72
- </h1>
68
+ <h1 style={style.pageTitle}>My Notes</h1>
73
69
  <p style={style.pageDescription}>
74
70
  A collection of my self written notes & reference guides
75
71
  </p>
76
72
  </header>
77
- <NoteCards/>
78
- <ScrollToTop/>
79
- <HashNavigation
73
+ <NoteCards />
74
+ <ScrollToTop />
75
+ <HashNavigation
80
76
  elementPrefix="note-"
81
77
  elementSelector=".note-card"
82
78
  effectDuration={6000}
@@ -0,0 +1,3 @@
1
+ export { default as HashNavigation } from "./HashNavigation.js";
2
+ export * from "./filterEnabledItems.js";
3
+ export { default as UpdateTitle } from "./updateTitle.js";
@@ -0,0 +1,14 @@
1
+ export * from "./appVersion.js";
2
+ export * from "./createDocuConf.js";
3
+ export * from "./logger.js";
4
+ export * from "./packageManager.js";
5
+ export { default as HashNavigation } from "./HashNavigation.js";
6
+ export * from "./cssUtils.js";
7
+ export * from "./filterEnabledItems.js";
8
+ export * from "./generateFavicon.js";
9
+ export * from "./generateRobotsTxt.js";
10
+ export * from "./iconExtractor.js";
11
+ export * from "./imageDownloader.js";
12
+ export * from "./imageProcessor.js";
13
+ export * from "./linkShortner.js";
14
+ export { default as UpdateTitle } from "./updateTitle.js";
@@ -12,7 +12,7 @@ function appVersion() {
12
12
  }
13
13
 
14
14
  try {
15
- const pkgPath = path.resolve(__dirname, "../../../../package.json");
15
+ const pkgPath = path.resolve(__dirname, "../../package.json");
16
16
  const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
17
17
 
18
18
  cachedVersion = pkg.version || "0.0.0";
@@ -11,10 +11,10 @@ const packageCss = path.resolve(packagePath, "src/internal/src/css");
11
11
 
12
12
  import { catppuccinMocha, catppuccinLatte } from "#config/prism.js";
13
13
  import { appVersion } from "./appVersion.js";
14
- import { iconMap } from "#config/iconMappings.js";
14
+
15
15
  import { metaTags } from "#config/metaTags.js";
16
- import { useEnabled } from "#internal/utils/filterEnabledItems.js";
17
- import { downloadImage } from "#internal/utils/imageDownloader.js";
16
+ import { useEnabled } from "./filterEnabledItems.js";
17
+ import { downloadImage } from "./imageDownloader.js";
18
18
 
19
19
  /**
20
20
  * Resolves the site URL based on config value and environment.
@@ -179,7 +179,6 @@ export function createDocuConf(userConfig, projectRoot = process.cwd()) {
179
179
  ],
180
180
  },
181
181
 
182
- iconMap: iconMap,
183
182
  metaTags: metaTags,
184
183
  },
185
184
 
@@ -292,7 +291,7 @@ export function createDocuConf(userConfig, projectRoot = process.cwd()) {
292
291
 
293
292
  plugins: [
294
293
  // path.resolve(internalUtils, "generateFavicon.js"),
295
- path.resolve(internalUtils, "generateRobotsTxt.js"),
294
+ path.resolve(__dirname, "./generateRobotsTxt.js"),
296
295
  [
297
296
  "@easyops-cn/docusaurus-search-local",
298
297
  {
@@ -27,8 +27,8 @@ function getCssVar(varName) {
27
27
 
28
28
  // Try to find variable in CSS files
29
29
  const cssFiles = [
30
- path.resolve(__dirname, "../css/custom.css"),
31
- path.resolve(__dirname, "../css/catppuccin.css"),
30
+ path.resolve(__dirname, "../internal/src/css/custom.css"),
31
+ path.resolve(__dirname, "../internal/src/css/catppuccin.css"),
32
32
  ];
33
33
 
34
34
  for (const cssPath of cssFiles) {