postfolio 1.0.6 → 1.0.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.
@@ -1,7 +1,7 @@
1
1
  // src/client.tsx
2
2
  import * as React from "react";
3
3
  import { useEffect, useState } from "react";
4
- import { getMDXComponent } from "mdx-bundler/client/index.js";
4
+ import { getMDXComponent } from "mdx-bundler/client";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  function useActiveHeading() {
7
7
  const [activeId, setActiveId] = useState("");
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import { getMDXComponent } from "mdx-bundler/client";
3
+ import { generateSlug } from "./utils.js";
4
+ export { generateSlug };
5
+ export declare function useActiveHeading(): string;
6
+ export declare function Content({ code, components, }: {
7
+ code: string;
8
+ components?: React.ComponentProps<ReturnType<typeof getMDXComponent>>["components"];
9
+ }): React.JSX.Element;
10
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,wBAAgB,gBAAgB,WAmC/B;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GACX,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAC/B,UAAU,CAAC,OAAO,eAAe,CAAC,CACnC,CAAC,YAAY,CAAC,CAAC;CACjB,qBAKA"}
package/dist/client.js ADDED
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { useEffect, useState } from "react";
5
+ import { getMDXComponent } from "mdx-bundler/client";
6
+ import { generateSlug } from "./utils.js";
7
+ export { generateSlug };
8
+ export function useActiveHeading() {
9
+ const [activeId, setActiveId] = useState("");
10
+ useEffect(() => {
11
+ const headings = document.querySelectorAll("h1[id], h2[id], h3[id], h4[id]");
12
+ const observer = new IntersectionObserver((entries) => {
13
+ const visible = entries
14
+ .filter((entry) => entry.isIntersecting)
15
+ .sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);
16
+ if (visible.length > 0) {
17
+ setActiveId(visible[0].target.getAttribute("id") || "");
18
+ }
19
+ }, {
20
+ rootMargin: "0px 0px -70% 0px",
21
+ threshold: 0,
22
+ });
23
+ headings.forEach((heading) => observer.observe(heading));
24
+ return () => observer.disconnect();
25
+ }, []);
26
+ return activeId;
27
+ }
28
+ export function Content({ code, components, }) {
29
+ const Render = React.useMemo(() => getMDXComponent(code), [code]);
30
+ // eslint-disable-next-line react-hooks/static-components -- mdx-bundler creates a component from compiled MDX at runtime.
31
+ return _jsx(Render, { components: components });
32
+ }
33
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,MAAM,UAAU,gBAAgB;IAC9B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CACxC,gCAAgC,CACjC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,CAAC,OAAO,EAAE,EAAE;YACV,MAAM,OAAO,GAAG,OAAO;iBACpB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;iBACvC,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,kBAAkB,CAAC,GAAG,CACtD,CAAC;YAEJ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,WAAW,CACT,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAC3C,CAAC;YACJ,CAAC;QACH,CAAC,EACD;YACE,UAAU,EAAE,kBAAkB;YAC9B,SAAS,EAAE,CAAC;SACb,CACF,CAAC;QAEF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GAMX;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,0HAA0H;IAC1H,OAAO,KAAC,MAAM,IAAC,UAAU,EAAE,UAAU,GAAI,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "server-only";
2
+ export { Slugs, Post, allPosts, MDXPost, generateSlug, generateTOC } from "./server.js";
3
+ export { Content, useActiveHeading } from "./client.js";
4
+ export type { BlogFrontmatter, BlogPostSource } from "./server.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // index.ts
2
+ import "server-only";
3
+ export { Slugs, Post, allPosts, MDXPost, generateSlug, generateTOC } from "./server.js";
4
+ export { Content, useActiveHeading } from "./client.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import { getMDXComponent } from "mdx-bundler/client";
3
+ export declare function Content({ code, components, }: {
4
+ code: string;
5
+ components?: React.ComponentProps<ReturnType<typeof getMDXComponent>>["components"];
6
+ }): React.JSX.Element;
7
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GACX,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAC/B,UAAU,CAAC,OAAO,eAAe,CAAC,CACnC,CAAC,YAAY,CAAC,CAAC;CACjB,qBAKA"}
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { getMDXComponent } from "mdx-bundler/client";
5
+ export function Content({ code, components, }) {
6
+ const Render = React.useMemo(() => getMDXComponent(code), [code]);
7
+ // eslint-disable-next-line react-hooks/static-components -- mdx-bundler creates a component from compiled MDX at runtime.
8
+ return _jsx(Render, { components: components });
9
+ }
10
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,EACJ,UAAU,GAMX;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,0HAA0H;IAC1H,OAAO,KAAC,MAAM,IAAC,UAAU,EAAE,UAAU,GAAI,CAAC;AAC5C,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,10 +1,6 @@
1
- export { Content, useActiveHeading } from './src/client.js';
2
- export { generateSlug } from './src/utils.js';
3
- import 'react';
4
- import 'mdx-bundler/client/index.js';
5
-
6
- declare function setContentDirectory(newPath: string): void;
7
- type BlogFrontmatter = {
1
+ import "server-only";
2
+ import { generateSlug } from "./utils.js";
3
+ export type BlogFrontmatter = {
8
4
  title?: string;
9
5
  description?: string;
10
6
  date?: string;
@@ -13,28 +9,27 @@ type BlogFrontmatter = {
13
9
  draft?: boolean;
14
10
  [key: string]: string | string[] | boolean | undefined;
15
11
  };
16
- type BlogPostSource = {
12
+ export type BlogPostSource = {
17
13
  slug: string;
18
14
  filename: string;
19
15
  filePath: string;
20
16
  mdx: string;
21
- frontmatter?: any;
17
+ frontmatter?: BlogFrontmatter;
22
18
  };
23
19
  type TOCItem = {
24
20
  level: number;
25
21
  text: string;
26
22
  slug: string;
27
23
  };
28
-
29
- declare function generateTOC(content: string): TOCItem[];
30
- declare function Slugs(): string[];
31
- declare function Post(slug: string): BlogPostSource | undefined;
32
- declare function allPosts(): Promise<BlogPostSource[]>;
33
- declare function MDXPost(slug: string): Promise<{
24
+ export { generateSlug };
25
+ export declare function generateTOC(content: string): TOCItem[];
26
+ export declare function Slugs(contentDir: string): string[];
27
+ export declare function Post(slug: string, contentDir: string): BlogPostSource | undefined;
28
+ export declare function allPosts(contentDir: string): Promise<BlogPostSource[]>;
29
+ export declare function MDXPost(slug: string, contentDir: string): Promise<{
34
30
  slug: string;
35
31
  code: string;
36
- frontmatter: any;
32
+ frontmatter: BlogFrontmatter;
37
33
  raw: string;
38
34
  } | undefined>;
39
-
40
- export { type BlogFrontmatter, type BlogPostSource, MDXPost, Post, Slugs, allPosts, generateTOC, setContentDirectory };
35
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAMrB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC;AA+CxB,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAQtD;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAElD;AAED,wBAAgB,IAAI,CAClB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,cAAc,GAAG,SAAS,CAE5B;AAED,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,EAAE,CAAC,CAY3B;AAED,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM;;;;;eAqBnB"}
package/dist/server.js CHANGED
@@ -1,98 +1,83 @@
1
- import {
2
- Content,
3
- useActiveHeading
4
- } from "./chunk-4KA42OXK.js";
5
- import {
6
- generateSlug
7
- } from "./chunk-6PC5ONQ5.js";
8
-
9
- // src/server.ts
10
1
  import "server-only";
11
- import fs from "fs";
12
- import path from "path";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import matter from "gray-matter";
13
5
  import { bundleMDX } from "mdx-bundler";
14
- var BLOG_DIR_PATH = path.join(process.cwd(), "content", "blogs");
15
- function setContentDirectory(newPath) {
16
- BLOG_DIR_PATH = newPath;
17
- }
6
+ import { generateSlug } from "./utils.js";
7
+ export { generateSlug };
18
8
  function transformFilenameToSlug(filename) {
19
- return filename.replace(/\.mdx$/, "").toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
20
- }
21
- function getMdxFileNames() {
22
- if (!fs.existsSync(BLOG_DIR_PATH)) {
23
- return [];
24
- }
25
- return fs.readdirSync(BLOG_DIR_PATH).filter((file) => file.endsWith(".mdx"));
9
+ return filename
10
+ .replace(/\.mdx$/, "")
11
+ .toLowerCase()
12
+ .trim()
13
+ .replace(/[^a-z0-9\s-]/g, "")
14
+ .replace(/\s+/g, "-")
15
+ .replace(/-+/g, "-")
16
+ .replace(/^-+|-+$/g, "");
26
17
  }
27
- function getPostSourceBySlug(slug) {
28
- const filename = getMdxFileNames().find(
29
- (file) => transformFilenameToSlug(file) === slug
30
- );
31
- if (!filename) {
32
- return void 0;
33
- }
34
- const filePath = path.join(BLOG_DIR_PATH, filename);
35
- return {
36
- slug,
37
- filename,
38
- filePath,
39
- mdx: fs.readFileSync(filePath, "utf8")
40
- };
18
+ function getMdxFileNames(contentDir) {
19
+ if (!fs.existsSync(contentDir)) {
20
+ return [];
21
+ }
22
+ return fs
23
+ .readdirSync(contentDir)
24
+ .filter((file) => file.endsWith(".mdx"));
41
25
  }
42
- function generateTOC(content) {
43
- const headingRegex = /^(#{1,6})\s+(.+)$/gm;
44
- return [...content.matchAll(headingRegex)].map((match) => {
45
- const level = match[1].length;
46
- const text = match[2].trim();
26
+ function getPostSourceBySlug(slug, contentDir) {
27
+ const resolvedDir = path.resolve(contentDir);
28
+ const filename = getMdxFileNames(resolvedDir).find((file) => transformFilenameToSlug(file) === slug);
29
+ if (!filename) {
30
+ return undefined;
31
+ }
32
+ const filePath = path.resolve(resolvedDir, filename);
47
33
  return {
48
- level,
49
- text,
50
- slug: generateSlug(text)
34
+ slug,
35
+ filename,
36
+ filePath,
37
+ mdx: fs.readFileSync(filePath, "utf8"),
51
38
  };
52
- });
53
39
  }
54
- function Slugs() {
55
- return getMdxFileNames().map(transformFilenameToSlug);
40
+ export function generateTOC(content) {
41
+ const headingRegex = /^(#{1,6})\s+(.+)$/gm;
42
+ return [...content.matchAll(headingRegex)].map(([_, hashes, text]) => ({
43
+ level: hashes.length,
44
+ text: text.trim(),
45
+ slug: generateSlug(text.trim()),
46
+ }));
56
47
  }
57
- function Post(slug) {
58
- return getPostSourceBySlug(slug);
48
+ export function Slugs(contentDir) {
49
+ return getMdxFileNames(contentDir).map(transformFilenameToSlug);
59
50
  }
60
- async function allPosts() {
61
- const posts = Slugs().map(getPostSourceBySlug).filter((post) => Boolean(post));
62
- return Promise.all(
63
- posts.map(async (post) => {
64
- const { frontmatter } = await bundleMDX({
65
- file: post.filePath,
66
- cwd: BLOG_DIR_PATH
67
- });
68
- return { ...post, frontmatter };
69
- })
70
- );
51
+ export function Post(slug, contentDir) {
52
+ return getPostSourceBySlug(slug, contentDir);
53
+ }
54
+ export async function allPosts(contentDir) {
55
+ return Slugs(contentDir)
56
+ .map((slug) => getPostSourceBySlug(slug, contentDir))
57
+ .filter((post) => Boolean(post))
58
+ .map((post) => {
59
+ const { data: frontmatter } = matter(post.mdx);
60
+ return {
61
+ ...post,
62
+ frontmatter,
63
+ };
64
+ });
71
65
  }
72
- async function MDXPost(slug) {
73
- const post = Post(slug);
74
- if (!post) {
75
- return void 0;
76
- }
77
- const { code, frontmatter } = await bundleMDX({
78
- file: post.filePath,
79
- cwd: BLOG_DIR_PATH
80
- });
81
- return {
82
- slug: post.slug,
83
- code,
84
- frontmatter,
85
- raw: post.mdx
86
- };
66
+ export async function MDXPost(slug, contentDir) {
67
+ const resolvedDir = path.resolve(contentDir);
68
+ const post = getPostSourceBySlug(slug, resolvedDir);
69
+ if (!post) {
70
+ return undefined;
71
+ }
72
+ const { code, frontmatter } = await bundleMDX({
73
+ file: post.filePath,
74
+ cwd: resolvedDir,
75
+ });
76
+ return {
77
+ slug: post.slug,
78
+ code,
79
+ frontmatter,
80
+ raw: post.mdx,
81
+ };
87
82
  }
88
- export {
89
- Content,
90
- MDXPost,
91
- Post,
92
- Slugs,
93
- allPosts,
94
- generateSlug,
95
- generateTOC,
96
- setContentDirectory,
97
- useActiveHeading
98
- };
83
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  Content,
4
4
  useActiveHeading
5
- } from "../chunk-4KA42OXK.js";
5
+ } from "../chunk-JIP5R5U4.js";
6
6
  import {
7
7
  generateSlug
8
8
  } from "../chunk-6PC5ONQ5.js";
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Generates a URL-friendly slug from a string or React node.
4
+ */
5
+ export declare function generateSlug(text: string | ReactNode | undefined): string;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAezE"}
package/dist/utils.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Generates a URL-friendly slug from a string or React node.
3
+ */
4
+ export function generateSlug(text) {
5
+ if (text === undefined) {
6
+ return "";
7
+ }
8
+ const textString = typeof text === "string"
9
+ ? text
10
+ : String(text);
11
+ return textString
12
+ .toLowerCase()
13
+ .replace(/[^\w\s-]/g, "")
14
+ .replace(/\s+/g, "-")
15
+ .replace(/-+/g, "-")
16
+ .replace(/^-+|-+$/g, "");
17
+ }
18
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoC;IAC/D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ;QACzC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEjB,OAAO,UAAU;SACd,WAAW,EAAE;SACb,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postfolio",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "type": "module",
5
5
  "main": "./dist/server.js",
6
6
  "types": "./dist/server.d.ts",
@@ -11,33 +11,33 @@
11
11
  "import": "./dist/server.js"
12
12
  },
13
13
  "default": {
14
- "types": "./dist/src/client.d.ts",
15
- "import": "./dist/src/client.js"
14
+ "types": "./dist/client.d.ts",
15
+ "import": "./dist/client.js"
16
16
  }
17
17
  },
18
18
  "./server": {
19
19
  "types": "./dist/server.d.ts",
20
20
  "import": "./dist/server.js"
21
21
  },
22
- "./renderer": {
23
- "types": "./dist/src/client.d.ts",
24
- "import": "./dist/src/client.js"
25
- },
26
22
  "./client": {
27
- "types": "./dist/src/client.d.ts",
28
- "import": "./dist/src/client.js"
23
+ "types": "./dist/client.d.ts",
24
+ "import": "./dist/client.js"
25
+ },
26
+ "./renderer": {
27
+ "types": "./dist/renderer.d.ts",
28
+ "import": "./dist/renderer.js"
29
29
  },
30
30
  "./utils": {
31
- "types": "./dist/src/utils.d.ts",
32
- "import": "./dist/src/utils.js"
31
+ "types": "./dist/utils.d.ts",
32
+ "import": "./dist/utils.js"
33
33
  }
34
34
  },
35
35
  "files": [
36
36
  "dist"
37
37
  ],
38
38
  "scripts": {
39
- "build": "tsup",
40
- "dev": "tsup --watch"
39
+ "build": "tsc",
40
+ "dev": "tsc --watch"
41
41
  },
42
42
  "dependencies": {
43
43
  "esbuild": "^0.28.0",
@@ -51,10 +51,9 @@
51
51
  "devDependencies": {
52
52
  "@types/node": "^20",
53
53
  "@types/react": "^19",
54
- "tsup": "^8.5.1",
55
54
  "typescript": "^5"
56
55
  },
57
56
  "allowScripts": {
58
- "esbuild@0.27.7": true
57
+ "esbuild@0.28.0": true
59
58
  }
60
59
  }
@@ -1,11 +0,0 @@
1
- import * as React from 'react';
2
- import { getMDXComponent } from 'mdx-bundler/client/index.js';
3
- export { generateSlug } from './utils.js';
4
-
5
- declare function useActiveHeading(): string;
6
- declare function Content({ code, components, }: {
7
- code: string;
8
- components?: React.ComponentProps<ReturnType<typeof getMDXComponent>>["components"];
9
- }): React.JSX.Element;
10
-
11
- export { Content, useActiveHeading };
@@ -1,8 +0,0 @@
1
- import { ReactNode } from 'react';
2
-
3
- /**
4
- * Generates a URL-friendly slug from a string or React node.
5
- */
6
- declare function generateSlug(text: string | ReactNode | undefined): string;
7
-
8
- export { generateSlug };