@noxion/renderer 0.0.1

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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -0
  3. package/dist/components/EmptyState.d.ts +6 -0
  4. package/dist/components/EmptyState.d.ts.map +1 -0
  5. package/dist/components/EmptyState.js +20 -0
  6. package/dist/components/EmptyState.js.map +1 -0
  7. package/dist/components/Footer.d.ts +3 -0
  8. package/dist/components/Footer.d.ts.map +1 -0
  9. package/dist/components/Footer.js +14 -0
  10. package/dist/components/Footer.js.map +1 -0
  11. package/dist/components/Header.d.ts +3 -0
  12. package/dist/components/Header.d.ts.map +1 -0
  13. package/dist/components/Header.js +21 -0
  14. package/dist/components/Header.js.map +1 -0
  15. package/dist/components/NotionPage.d.ts +15 -0
  16. package/dist/components/NotionPage.d.ts.map +1 -0
  17. package/dist/components/NotionPage.js +20 -0
  18. package/dist/components/NotionPage.js.map +1 -0
  19. package/dist/components/PostCard.d.ts +3 -0
  20. package/dist/components/PostCard.d.ts.map +1 -0
  21. package/dist/components/PostCard.js +44 -0
  22. package/dist/components/PostCard.js.map +1 -0
  23. package/dist/components/PostList.d.ts +3 -0
  24. package/dist/components/PostList.d.ts.map +1 -0
  25. package/dist/components/PostList.js +25 -0
  26. package/dist/components/PostList.js.map +1 -0
  27. package/dist/components/Search.d.ts +3 -0
  28. package/dist/components/Search.d.ts.map +1 -0
  29. package/dist/components/Search.js +45 -0
  30. package/dist/components/Search.js.map +1 -0
  31. package/dist/components/TOC.d.ts +3 -0
  32. package/dist/components/TOC.d.ts.map +1 -0
  33. package/dist/components/TOC.js +24 -0
  34. package/dist/components/TOC.js.map +1 -0
  35. package/dist/components/TagFilter.d.ts +3 -0
  36. package/dist/components/TagFilter.d.ts.map +1 -0
  37. package/dist/components/TagFilter.js +23 -0
  38. package/dist/components/TagFilter.js.map +1 -0
  39. package/dist/components/ThemeToggle.d.ts +2 -0
  40. package/dist/components/ThemeToggle.d.ts.map +1 -0
  41. package/dist/components/ThemeToggle.js +35 -0
  42. package/dist/components/ThemeToggle.js.map +1 -0
  43. package/dist/hooks/useSearch.d.ts +7 -0
  44. package/dist/hooks/useSearch.d.ts.map +1 -0
  45. package/dist/hooks/useSearch.js +21 -0
  46. package/dist/hooks/useSearch.js.map +1 -0
  47. package/dist/hooks/useTheme.d.ts +7 -0
  48. package/dist/hooks/useTheme.d.ts.map +1 -0
  49. package/dist/hooks/useTheme.js +40 -0
  50. package/dist/hooks/useTheme.js.map +1 -0
  51. package/dist/index.d.ts +22 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +17 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/theme/ThemeProvider.d.ts +14 -0
  56. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  57. package/dist/theme/ThemeProvider.js +31 -0
  58. package/dist/theme/ThemeProvider.js.map +1 -0
  59. package/dist/theme/component-resolver.d.ts +3 -0
  60. package/dist/theme/component-resolver.d.ts.map +1 -0
  61. package/dist/theme/component-resolver.js +16 -0
  62. package/dist/theme/component-resolver.js.map +1 -0
  63. package/dist/theme/css-generator.d.ts +3 -0
  64. package/dist/theme/css-generator.d.ts.map +1 -0
  65. package/dist/theme/css-generator.js +36 -0
  66. package/dist/theme/css-generator.js.map +1 -0
  67. package/dist/theme/define-theme.d.ts +4 -0
  68. package/dist/theme/define-theme.d.ts.map +1 -0
  69. package/dist/theme/define-theme.js +45 -0
  70. package/dist/theme/define-theme.js.map +1 -0
  71. package/dist/theme/types.d.ts +91 -0
  72. package/dist/theme/types.d.ts.map +1 -0
  73. package/dist/theme/types.js +2 -0
  74. package/dist/theme/types.js.map +1 -0
  75. package/package.json +70 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jiwon
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # @noxion/renderer
2
+
3
+ React rendering components and theme system for [Noxion](https://github.com/jiwonme/noxion) — a Notion-powered blog builder.
4
+
5
+ ## Features
6
+
7
+ - Notion page renderer (via `react-notion-x`)
8
+ - Pre-built blog components: `PostCard`, `PostList`, `Header`, `Footer`, `TOC`, `Search`, `TagFilter`
9
+ - CSS variable-based theme system with dark/light/system mode support
10
+ - Fully customizable via component overrides
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install @noxion/renderer react react-dom
16
+ ```
17
+
18
+ ## Peer Dependencies
19
+
20
+ - `react >= 18.0.0`
21
+ - `react-dom >= 18.0.0`
22
+
23
+ ## Usage
24
+
25
+ ```tsx
26
+ import { NoxionThemeProvider, PostList } from "@noxion/renderer";
27
+
28
+ export default function BlogPage({ posts }) {
29
+ return (
30
+ <NoxionThemeProvider>
31
+ <PostList posts={posts} />
32
+ </NoxionThemeProvider>
33
+ );
34
+ }
35
+ ```
36
+
37
+ ## Documentation
38
+
39
+ See the [full documentation](https://github.com/jiwonme/noxion) for complete usage guides.
40
+
41
+ ## License
42
+
43
+ MIT
@@ -0,0 +1,6 @@
1
+ export interface EmptyStateProps {
2
+ title?: string;
3
+ message?: string;
4
+ }
5
+ export declare function EmptyState({ title, message, }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=EmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../src/components/EmptyState.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAA0B,EAC1B,OAA6C,GAC9C,EAAE,eAAe,2CAiCjB"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function EmptyState({ title = "Nothing here yet", message = "Check back later for new content.", }) {
3
+ return (_jsxs("div", { className: "noxion-empty-state", style: {
4
+ display: "flex",
5
+ flexDirection: "column",
6
+ alignItems: "center",
7
+ justifyContent: "center",
8
+ padding: "4rem 1rem",
9
+ textAlign: "center",
10
+ }, children: [_jsx("h2", { style: {
11
+ fontSize: "1.5rem",
12
+ fontWeight: 600,
13
+ color: "var(--noxion-foreground, #000)",
14
+ marginBottom: "0.5rem",
15
+ }, children: title }), _jsx("p", { style: {
16
+ fontSize: "1rem",
17
+ color: "var(--noxion-mutedForeground, #737373)",
18
+ }, children: message })] }));
19
+ }
20
+ //# sourceMappingURL=EmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.js","sourceRoot":"","sources":["../../src/components/EmptyState.tsx"],"names":[],"mappings":";AAKA,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,GAAG,kBAAkB,EAC1B,OAAO,GAAG,mCAAmC,GAC7B;IAChB,OAAO,CACL,eACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,QAAQ;SACpB,aAED,aACE,KAAK,EAAE;oBACL,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,GAAG;oBACf,KAAK,EAAE,gCAAgC;oBACvC,YAAY,EAAE,QAAQ;iBACvB,YAEA,KAAK,GACH,EACL,YACE,KAAK,EAAE;oBACL,QAAQ,EAAE,MAAM;oBAChB,KAAK,EAAE,wCAAwC;iBAChD,YAEA,OAAO,GACN,IACA,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FooterProps } from "../theme/types";
2
+ export declare function Footer({ siteName, author }: FooterProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,2CA6BvD"}
@@ -0,0 +1,14 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ export function Footer({ siteName, author }) {
3
+ const year = new Date().getFullYear();
4
+ return (_jsxs("footer", { className: "noxion-footer", style: {
5
+ display: "flex",
6
+ alignItems: "center",
7
+ justifyContent: "space-between",
8
+ padding: "1.5rem",
9
+ borderTop: "1px solid var(--noxion-border, #e5e5e5)",
10
+ fontSize: "0.875rem",
11
+ color: "var(--noxion-mutedForeground, #737373)",
12
+ }, children: [_jsxs("span", { children: ["\u00A9 ", year, " ", author ?? siteName] }), _jsx("a", { href: "https://github.com/jiwonme/noxion", target: "_blank", rel: "noopener noreferrer", style: { color: "var(--noxion-mutedForeground, #737373)", textDecoration: "none" }, children: "Powered by Noxion" })] }));
13
+ }
14
+ //# sourceMappingURL=Footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAe;IACtD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEtC,OAAO,CACL,kBACE,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,eAAe;YAC/B,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,yCAAyC;YACpD,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,wCAAwC;SAChD,aAED,sCACU,IAAI,OAAG,MAAM,IAAI,QAAQ,IAC5B,EACP,YACE,IAAI,EAAC,mCAAmC,EACxC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,cAAc,EAAE,MAAM,EAAE,kCAGhF,IACG,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { HeaderProps } from "../theme/types";
2
+ export declare function Header({ siteName, navigation }: HeaderProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAe,EAAE,EAAE,WAAW,2CA4ChE"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function Header({ siteName, navigation = [] }) {
3
+ return (_jsxs("header", { className: "noxion-header", style: {
4
+ display: "flex",
5
+ alignItems: "center",
6
+ justifyContent: "space-between",
7
+ padding: "1rem 1.5rem",
8
+ borderBottom: "1px solid var(--noxion-border, #e5e5e5)",
9
+ backgroundColor: "var(--noxion-background, #fff)",
10
+ }, children: [_jsx("a", { href: "/", style: {
11
+ fontSize: "1.25rem",
12
+ fontWeight: 700,
13
+ color: "var(--noxion-foreground, #000)",
14
+ textDecoration: "none",
15
+ }, children: siteName }), navigation.length > 0 && (_jsx("nav", { style: { display: "flex", gap: "1.5rem" }, children: navigation.map((item) => (_jsx("a", { href: item.href, style: {
16
+ fontSize: "0.875rem",
17
+ color: "var(--noxion-mutedForeground, #737373)",
18
+ textDecoration: "none",
19
+ }, children: item.label }, item.href))) }))] }));
20
+ }
21
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,GAAG,EAAE,EAAe;IAC/D,OAAO,CACL,kBACE,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,eAAe;YAC/B,OAAO,EAAE,aAAa;YACtB,YAAY,EAAE,yCAAyC;YACvD,eAAe,EAAE,gCAAgC;SAClD,aAED,YACE,IAAI,EAAC,GAAG,EACR,KAAK,EAAE;oBACL,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,GAAG;oBACf,KAAK,EAAE,gCAAgC;oBACvC,cAAc,EAAE,MAAM;iBACvB,YAEA,QAAQ,GACP,EAEH,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CACxB,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,YAC3C,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,YAEE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE;wBACL,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE,wCAAwC;wBAC/C,cAAc,EAAE,MAAM;qBACvB,YAEA,IAAI,CAAC,KAAK,IARN,IAAI,CAAC,IAAI,CASZ,CACL,CAAC,GACE,CACP,IACM,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ExtendedRecordMap } from "notion-types";
2
+ export interface NotionPageProps {
3
+ recordMap: ExtendedRecordMap;
4
+ rootPageId?: string;
5
+ fullPage?: boolean;
6
+ darkMode?: boolean;
7
+ previewImages?: boolean;
8
+ showTableOfContents?: boolean;
9
+ minTableOfContentsItems?: number;
10
+ pageUrlPrefix?: string;
11
+ nextImage?: unknown;
12
+ className?: string;
13
+ }
14
+ export declare function NotionPage({ recordMap, rootPageId, fullPage, darkMode, previewImages, showTableOfContents, minTableOfContentsItems, pageUrlPrefix, nextImage, className, }: NotionPageProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=NotionPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotionPage.d.ts","sourceRoot":"","sources":["../../src/components/NotionPage.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,UAAU,EACV,QAAe,EACf,QAAQ,EACR,aAAqB,EACrB,mBAA2B,EAC3B,uBAA2B,EAC3B,aAAmB,EACnB,SAAS,EACT,SAAS,GACV,EAAE,eAAe,2CAgCjB"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { NotionRenderer } from "react-notion-x";
4
+ import { useNoxionComponents, useNoxionTheme } from "../theme/ThemeProvider";
5
+ export function NotionPage({ recordMap, rootPageId, fullPage = true, darkMode, previewImages = false, showTableOfContents = false, minTableOfContentsItems = 3, pageUrlPrefix = "/", nextImage, className, }) {
6
+ const theme = useNoxionTheme();
7
+ const overrides = useNoxionComponents();
8
+ const resolvedDarkMode = darkMode ?? theme.name === "dark";
9
+ const notionComponents = {};
10
+ if (nextImage) {
11
+ notionComponents.nextImage = nextImage;
12
+ }
13
+ if (overrides.NotionBlock) {
14
+ for (const [blockType, component] of Object.entries(overrides.NotionBlock)) {
15
+ notionComponents[blockType] = component;
16
+ }
17
+ }
18
+ return (_jsx("div", { className: className, children: _jsx(NotionRenderer, { recordMap: recordMap, rootPageId: rootPageId, fullPage: fullPage, darkMode: resolvedDarkMode, previewImages: previewImages, showTableOfContents: showTableOfContents, minTableOfContentsItems: minTableOfContentsItems, mapPageUrl: (pageId) => `${pageUrlPrefix}${pageId}`, components: notionComponents }) }));
19
+ }
20
+ //# sourceMappingURL=NotionPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotionPage.js","sourceRoot":"","sources":["../../src/components/NotionPage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAe7E,MAAM,UAAU,UAAU,CAAC,EACzB,SAAS,EACT,UAAU,EACV,QAAQ,GAAG,IAAI,EACf,QAAQ,EACR,aAAa,GAAG,KAAK,EACrB,mBAAmB,GAAG,KAAK,EAC3B,uBAAuB,GAAG,CAAC,EAC3B,aAAa,GAAG,GAAG,EACnB,SAAS,EACT,SAAS,GACO;IAChB,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IAExC,MAAM,gBAAgB,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;IAE3D,MAAM,gBAAgB,GAA4B,EAAE,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;IACzC,CAAC;IACD,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3E,gBAAgB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,YACvB,KAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,uBAAuB,EAAE,uBAAuB,EAChD,UAAU,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,EAE3D,UAAU,EAAE,gBAAgB,GAC5B,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PostCardProps } from "../theme/types";
2
+ export declare function PostCard({ title, slug, date, tags, coverImage, category, }: PostCardProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=PostCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostCard.d.ts","sourceRoot":"","sources":["../../src/components/PostCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,QAAQ,GACT,EAAE,aAAa,2CAmGf"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function PostCard({ title, slug, date, tags, coverImage, category, }) {
3
+ return (_jsxs("a", { href: `/${slug}`, className: "noxion-post-card", style: {
4
+ display: "block",
5
+ textDecoration: "none",
6
+ color: "inherit",
7
+ borderRadius: "var(--noxion-border-radius, 0.5rem)",
8
+ border: "1px solid var(--noxion-border, #e5e5e5)",
9
+ overflow: "hidden",
10
+ backgroundColor: "var(--noxion-card, #fff)",
11
+ transition: "box-shadow 0.2s ease",
12
+ }, children: [_jsx("div", { style: { position: "relative", width: "100%", height: "200px", overflow: "hidden" }, children: coverImage ? (_jsx("img", { src: coverImage, alt: title, loading: "lazy", decoding: "async", style: {
13
+ width: "100%",
14
+ height: "100%",
15
+ objectFit: "cover",
16
+ objectPosition: "center",
17
+ } })) : (_jsx("div", { style: {
18
+ width: "100%",
19
+ height: "100%",
20
+ background: "linear-gradient(135deg, var(--noxion-primary, #2563eb), var(--noxion-accent, #f5f5f5))",
21
+ } })) }), _jsxs("div", { style: { padding: "1rem" }, children: [category && (_jsx("span", { style: {
22
+ fontSize: "0.75rem",
23
+ fontWeight: 500,
24
+ color: "var(--noxion-primary, #2563eb)",
25
+ textTransform: "uppercase",
26
+ letterSpacing: "0.05em",
27
+ }, children: category })), _jsx("h3", { style: {
28
+ margin: "0.25rem 0",
29
+ fontSize: "1.125rem",
30
+ fontWeight: 600,
31
+ color: "var(--noxion-cardForeground, #000)",
32
+ lineHeight: 1.4,
33
+ }, children: title }), _jsx("time", { dateTime: date, style: {
34
+ fontSize: "0.875rem",
35
+ color: "var(--noxion-mutedForeground, #737373)",
36
+ }, children: date }), tags.length > 0 && (_jsx("div", { style: { marginTop: "0.5rem", display: "flex", flexWrap: "wrap", gap: "0.25rem" }, children: tags.map((tag) => (_jsx("span", { style: {
37
+ fontSize: "0.75rem",
38
+ padding: "0.125rem 0.5rem",
39
+ borderRadius: "9999px",
40
+ backgroundColor: "var(--noxion-muted, #f5f5f5)",
41
+ color: "var(--noxion-mutedForeground, #737373)",
42
+ }, children: tag }, tag))) }))] })] }));
43
+ }
44
+ //# sourceMappingURL=PostCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostCard.js","sourceRoot":"","sources":["../../src/components/PostCard.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,QAAQ,GACM;IACd,OAAO,CACL,aACE,IAAI,EAAE,IAAI,IAAI,EAAE,EAChB,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE;YACL,OAAO,EAAE,OAAO;YAChB,cAAc,EAAE,MAAM;YACtB,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,qCAAqC;YACnD,MAAM,EAAE,yCAAyC;YACjD,QAAQ,EAAE,QAAQ;YAClB,eAAe,EAAE,0BAA0B;YAC3C,UAAU,EAAE,sBAAsB;SACnC,aAED,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YACrF,UAAU,CAAC,CAAC,CAAC,CACZ,cACE,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,KAAK,EACV,OAAO,EAAC,MAAM,EACd,QAAQ,EAAC,OAAO,EAChB,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,OAAO;wBAClB,cAAc,EAAE,QAAQ;qBACzB,GACD,CACH,CAAC,CAAC,CAAC,CACF,cACE,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,wFAAwF;qBACrG,GACD,CACH,GACG,EAEN,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAC5B,QAAQ,IAAI,CACX,eACE,KAAK,EAAE;4BACL,QAAQ,EAAE,SAAS;4BACnB,UAAU,EAAE,GAAG;4BACf,KAAK,EAAE,gCAAgC;4BACvC,aAAa,EAAE,WAAW;4BAC1B,aAAa,EAAE,QAAQ;yBACxB,YAEA,QAAQ,GACJ,CACR,EAED,aACE,KAAK,EAAE;4BACL,MAAM,EAAE,WAAW;4BACnB,QAAQ,EAAE,UAAU;4BACpB,UAAU,EAAE,GAAG;4BACf,KAAK,EAAE,oCAAoC;4BAC3C,UAAU,EAAE,GAAG;yBAChB,YAEA,KAAK,GACH,EAEL,eACE,QAAQ,EAAE,IAAI,EACd,KAAK,EAAE;4BACL,QAAQ,EAAE,UAAU;4BACpB,KAAK,EAAE,wCAAwC;yBAChD,YAEA,IAAI,GACA,EAEN,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAClB,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,YACnF,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,eAEE,KAAK,EAAE;gCACL,QAAQ,EAAE,SAAS;gCACnB,OAAO,EAAE,iBAAiB;gCAC1B,YAAY,EAAE,QAAQ;gCACtB,eAAe,EAAE,8BAA8B;gCAC/C,KAAK,EAAE,wCAAwC;6BAChD,YAEA,GAAG,IATC,GAAG,CAUH,CACR,CAAC,GACE,CACP,IACG,IACJ,CACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PostListProps } from "../theme/types";
2
+ export declare function PostList({ posts }: PostListProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=PostList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostList.d.ts","sourceRoot":"","sources":["../../src/components/PostList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AAInE,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,2CAuBhD"}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useNoxionComponents } from "../theme/ThemeProvider";
4
+ import { PostCard as DefaultPostCard } from "./PostCard";
5
+ export function PostList({ posts }) {
6
+ const overrides = useNoxionComponents();
7
+ const Card = (overrides.PostCard ?? DefaultPostCard);
8
+ if (posts.length === 0) {
9
+ return _jsx(EmptyState, { message: "No posts found." });
10
+ }
11
+ return (_jsx("div", { className: "noxion-post-list", style: {
12
+ display: "grid",
13
+ gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
14
+ gap: "1.5rem",
15
+ width: "100%",
16
+ }, children: posts.map((post) => (_jsx(Card, { ...post }, post.id))) }));
17
+ }
18
+ function EmptyState({ message }) {
19
+ return (_jsx("div", { style: {
20
+ textAlign: "center",
21
+ padding: "3rem 1rem",
22
+ color: "var(--noxion-mutedForeground, #737373)",
23
+ }, children: _jsx("p", { style: { fontSize: "1.125rem" }, children: message }) }));
24
+ }
25
+ //# sourceMappingURL=PostList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostList.js","sourceRoot":"","sources":["../../src/components/PostList.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAiB;IAC/C,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,eAAe,CAAiC,CAAC;IAErF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAC,UAAU,IAAC,OAAO,EAAC,iBAAiB,GAAG,CAAC;IAClD,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,mBAAmB,EAAE,uCAAuC;YAC5D,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,MAAM;SACd,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,IAAI,OAAmB,IAAI,IAAjB,IAAI,CAAC,EAAE,CAAc,CACjC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,OAAO,EAAuB;IAClD,OAAO,CACL,cACE,KAAK,EAAE;YACL,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,wCAAwC;SAChD,YAED,YAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAG,OAAO,GAAK,GAC7C,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SearchProps } from "../theme/types";
2
+ export declare function Search({ onSearch, placeholder, }: SearchProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../src/components/Search.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,WAA+B,GAChC,EAAE,WAAW,2CA4Db"}
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRef, useEffect, useCallback } from "react";
4
+ export function Search({ onSearch, placeholder = "Search posts...", }) {
5
+ const inputRef = useRef(null);
6
+ const debounceRef = useRef(null);
7
+ const handleInput = useCallback((value) => {
8
+ if (debounceRef.current)
9
+ clearTimeout(debounceRef.current);
10
+ debounceRef.current = setTimeout(() => onSearch(value), 200);
11
+ }, [onSearch]);
12
+ useEffect(() => {
13
+ const handler = (e) => {
14
+ if ((e.metaKey || e.ctrlKey) && e.key === "k") {
15
+ e.preventDefault();
16
+ inputRef.current?.focus();
17
+ }
18
+ };
19
+ document.addEventListener("keydown", handler);
20
+ return () => document.removeEventListener("keydown", handler);
21
+ }, []);
22
+ return (_jsxs("div", { className: "noxion-search", style: { position: "relative", width: "100%" }, children: [_jsx("input", { ref: inputRef, type: "text", placeholder: placeholder, onChange: (e) => handleInput(e.target.value), style: {
23
+ width: "100%",
24
+ padding: "0.5rem 0.75rem",
25
+ paddingRight: "3rem",
26
+ borderRadius: "var(--noxion-border-radius, 0.5rem)",
27
+ border: "1px solid var(--noxion-border, #e5e5e5)",
28
+ backgroundColor: "var(--noxion-background, #fff)",
29
+ color: "var(--noxion-foreground, #000)",
30
+ fontSize: "0.875rem",
31
+ outline: "none",
32
+ } }), _jsx("kbd", { style: {
33
+ position: "absolute",
34
+ right: "0.5rem",
35
+ top: "50%",
36
+ transform: "translateY(-50%)",
37
+ fontSize: "0.75rem",
38
+ padding: "0.125rem 0.375rem",
39
+ borderRadius: "0.25rem",
40
+ border: "1px solid var(--noxion-border, #e5e5e5)",
41
+ color: "var(--noxion-mutedForeground, #737373)",
42
+ pointerEvents: "none",
43
+ }, children: "\u2318K" })] }));
44
+ }
45
+ //# sourceMappingURL=Search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.js","sourceRoot":"","sources":["../../src/components/Search.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,WAAW,GAAG,iBAAiB,GACnB;IACZ,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAEvE,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,KAAa,EAAE,EAAE;QAChB,IAAI,WAAW,CAAC,OAAO;YAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3D,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC9C,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,aAC3E,gBACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,KAAK,EAAE;oBACL,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,gBAAgB;oBACzB,YAAY,EAAE,MAAM;oBACpB,YAAY,EAAE,qCAAqC;oBACnD,MAAM,EAAE,yCAAyC;oBACjD,eAAe,EAAE,gCAAgC;oBACjD,KAAK,EAAE,gCAAgC;oBACvC,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,MAAM;iBAChB,GACD,EACF,cACE,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,QAAQ;oBACf,GAAG,EAAE,KAAK;oBACV,SAAS,EAAE,kBAAkB;oBAC7B,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,mBAAmB;oBAC5B,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAE,yCAAyC;oBACjD,KAAK,EAAE,wCAAwC;oBAC/C,aAAa,EAAE,MAAM;iBACtB,wBAGG,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TOCProps } from "../theme/types";
2
+ export declare function TOC({ headings }: TOCProps): import("react/jsx-runtime").JSX.Element | null;
3
+ //# sourceMappingURL=TOC.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TOC.d.ts","sourceRoot":"","sources":["../../src/components/TOC.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,kDAgDzC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function TOC({ headings }) {
3
+ if (headings.length === 0)
4
+ return null;
5
+ return (_jsxs("nav", { className: "noxion-toc", "aria-label": "Table of Contents", style: {
6
+ padding: "1rem 0",
7
+ fontSize: "0.875rem",
8
+ }, children: [_jsx("h4", { style: {
9
+ fontSize: "0.75rem",
10
+ fontWeight: 600,
11
+ textTransform: "uppercase",
12
+ letterSpacing: "0.05em",
13
+ color: "var(--noxion-mutedForeground, #737373)",
14
+ marginBottom: "0.75rem",
15
+ }, children: "On this page" }), _jsx("ul", { style: { listStyle: "none", padding: 0, margin: 0 }, children: headings.map((heading) => (_jsx("li", { style: {
16
+ paddingLeft: `${(heading.level - 1) * 0.75}rem`,
17
+ marginBottom: "0.375rem",
18
+ }, children: _jsx("a", { href: `#${heading.id}`, style: {
19
+ color: "var(--noxion-mutedForeground, #737373)",
20
+ textDecoration: "none",
21
+ lineHeight: 1.5,
22
+ }, children: heading.text }) }, heading.id))) })] }));
23
+ }
24
+ //# sourceMappingURL=TOC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TOC.js","sourceRoot":"","sources":["../../src/components/TOC.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAY;IACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,OAAO,CACL,eACE,SAAS,EAAC,YAAY,gBACX,mBAAmB,EAC9B,KAAK,EAAE;YACL,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,UAAU;SACrB,aAED,aACE,KAAK,EAAE;oBACL,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,GAAG;oBACf,aAAa,EAAE,WAAW;oBAC1B,aAAa,EAAE,QAAQ;oBACvB,KAAK,EAAE,wCAAwC;oBAC/C,YAAY,EAAE,SAAS;iBACxB,6BAGE,EACL,aAAI,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YACpD,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,aAEE,KAAK,EAAE;wBACL,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK;wBAC/C,YAAY,EAAE,UAAU;qBACzB,YAED,YACE,IAAI,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE,EACtB,KAAK,EAAE;4BACL,KAAK,EAAE,wCAAwC;4BAC/C,cAAc,EAAE,MAAM;4BACtB,UAAU,EAAE,GAAG;yBAChB,YAEA,OAAO,CAAC,IAAI,GACX,IAfC,OAAO,CAAC,EAAE,CAgBZ,CACN,CAAC,GACC,IACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TagFilterProps } from "../theme/types";
2
+ export declare function TagFilter({ tags, selectedTags, onToggle }: TagFilterProps): import("react/jsx-runtime").JSX.Element | null;
3
+ //# sourceMappingURL=TagFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagFilter.d.ts","sourceRoot":"","sources":["../../src/components/TagFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,cAAc,kDAoCzE"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function TagFilter({ tags, selectedTags, onToggle }) {
3
+ if (tags.length === 0)
4
+ return null;
5
+ return (_jsx("div", { className: "noxion-tag-filter", style: { display: "flex", flexWrap: "wrap", gap: "0.5rem" }, children: tags.map((tag) => {
6
+ const isSelected = selectedTags.includes(tag);
7
+ return (_jsx("button", { onClick: () => onToggle(tag), type: "button", style: {
8
+ padding: "0.25rem 0.75rem",
9
+ borderRadius: "9999px",
10
+ border: "1px solid var(--noxion-border, #e5e5e5)",
11
+ backgroundColor: isSelected
12
+ ? "var(--noxion-primary, #2563eb)"
13
+ : "transparent",
14
+ color: isSelected
15
+ ? "var(--noxion-primaryForeground, #fff)"
16
+ : "var(--noxion-foreground, #000)",
17
+ fontSize: "0.875rem",
18
+ cursor: "pointer",
19
+ transition: "all 0.15s ease",
20
+ }, children: tag }, tag));
21
+ }) }));
22
+ }
23
+ //# sourceMappingURL=TagFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagFilter.js","sourceRoot":"","sources":["../../src/components/TagFilter.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAkB;IACxE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,CACL,cACE,SAAS,EAAC,mBAAmB,EAC7B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,YAE1D,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAChB,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,OAAO,CACL,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5B,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;oBACL,OAAO,EAAE,iBAAiB;oBAC1B,YAAY,EAAE,QAAQ;oBACtB,MAAM,EAAE,yCAAyC;oBACjD,eAAe,EAAE,UAAU;wBACzB,CAAC,CAAC,gCAAgC;wBAClC,CAAC,CAAC,aAAa;oBACjB,KAAK,EAAE,UAAU;wBACf,CAAC,CAAC,uCAAuC;wBACzC,CAAC,CAAC,gCAAgC;oBACpC,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,SAAS;oBACjB,UAAU,EAAE,gBAAgB;iBAC7B,YAEA,GAAG,IAlBC,GAAG,CAmBD,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function ThemeToggle(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ThemeToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeToggle.d.ts","sourceRoot":"","sources":["../../src/components/ThemeToggle.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,WAAW,4CAgC1B"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useThemePreference } from "../hooks/useTheme";
4
+ const ICONS = {
5
+ light: "\u2600\uFE0F",
6
+ dark: "\uD83C\uDF19",
7
+ system: "\uD83D\uDCBB",
8
+ };
9
+ const LABELS = {
10
+ light: "Light",
11
+ dark: "Dark",
12
+ system: "System",
13
+ };
14
+ const CYCLE = ["system", "light", "dark"];
15
+ export function ThemeToggle() {
16
+ const { preference, setPreference } = useThemePreference();
17
+ const nextPreference = () => {
18
+ const currentIndex = CYCLE.indexOf(preference);
19
+ const next = CYCLE[(currentIndex + 1) % CYCLE.length];
20
+ setPreference(next);
21
+ };
22
+ return (_jsx("button", { onClick: nextPreference, type: "button", "aria-label": `Theme: ${LABELS[preference]}. Click to change.`, title: LABELS[preference], className: "noxion-theme-toggle", style: {
23
+ display: "inline-flex",
24
+ alignItems: "center",
25
+ justifyContent: "center",
26
+ width: "2rem",
27
+ height: "2rem",
28
+ borderRadius: "var(--noxion-border-radius, 0.5rem)",
29
+ border: "1px solid var(--noxion-border, #e5e5e5)",
30
+ backgroundColor: "transparent",
31
+ cursor: "pointer",
32
+ fontSize: "1rem",
33
+ }, children: ICONS[preference] }));
34
+ }
35
+ //# sourceMappingURL=ThemeToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeToggle.js","sourceRoot":"","sources":["../../src/components/ThemeToggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAE7E,MAAM,KAAK,GAAoC;IAC7C,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,cAAc;CACvB,CAAC;AAEF,MAAM,MAAM,GAAoC;IAC9C,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,KAAK,GAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAE7D,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAE3D,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,aAAa,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO,CACL,iBACE,OAAO,EAAE,cAAc,EACvB,IAAI,EAAC,QAAQ,gBACD,UAAU,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAC5D,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,EACzB,SAAS,EAAC,qBAAqB,EAC/B,KAAK,EAAE;YACL,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,qCAAqC;YACnD,MAAM,EAAE,yCAAyC;YACjD,eAAe,EAAE,aAAa;YAC9B,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,MAAM;SACjB,YAEA,KAAK,CAAC,UAAU,CAAC,GACX,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { PostCardProps } from "../theme/types";
2
+ export declare function useSearch(posts: PostCardProps[]): {
3
+ readonly query: string;
4
+ readonly setQuery: import("react").Dispatch<import("react").SetStateAction<string>>;
5
+ readonly filtered: PostCardProps[];
6
+ };
7
+ //# sourceMappingURL=useSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearch.d.ts","sourceRoot":"","sources":["../../src/hooks/useSearch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE;;;;EAgB/C"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { useState, useMemo } from "react";
3
+ export function useSearch(posts) {
4
+ const [query, setQuery] = useState("");
5
+ const filtered = useMemo(() => {
6
+ if (!query.trim())
7
+ return posts;
8
+ const lower = query.toLowerCase();
9
+ return posts.filter((post) => {
10
+ if (post.title.toLowerCase().includes(lower))
11
+ return true;
12
+ if (post.tags.some((tag) => tag.toLowerCase().includes(lower)))
13
+ return true;
14
+ if (post.category?.toLowerCase().includes(lower))
15
+ return true;
16
+ return false;
17
+ });
18
+ }, [posts, query]);
19
+ return { query, setQuery, filtered };
20
+ }
21
+ //# sourceMappingURL=useSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearch.js","sourceRoot":"","sources":["../../src/hooks/useSearch.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG1C,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;QAEhC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1D,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC5E,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEnB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAW,CAAC;AAChD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type ThemePreference = "system" | "light" | "dark";
2
+ export declare function useThemePreference(): {
3
+ readonly preference: ThemePreference;
4
+ readonly resolved: "dark" | "light";
5
+ readonly setPreference: (next: ThemePreference) => void;
6
+ };
7
+ //# sourceMappingURL=useTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAc1D,wBAAgB,kBAAkB;;;mCAQS,eAAe;EAqBzD"}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { useState, useEffect, useCallback } from "react";
3
+ const STORAGE_KEY = "noxion-theme";
4
+ function getSystemTheme() {
5
+ if (typeof window === "undefined")
6
+ return "light";
7
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
8
+ }
9
+ function applyTheme(resolved) {
10
+ if (typeof document === "undefined")
11
+ return;
12
+ document.documentElement.dataset.theme = resolved;
13
+ }
14
+ export function useThemePreference() {
15
+ const [preference, setPreferenceState] = useState(() => {
16
+ if (typeof window === "undefined")
17
+ return "system";
18
+ return localStorage.getItem(STORAGE_KEY) ?? "system";
19
+ });
20
+ const resolved = preference === "system" ? getSystemTheme() : preference;
21
+ const setPreference = useCallback((next) => {
22
+ setPreferenceState(next);
23
+ if (typeof window !== "undefined") {
24
+ localStorage.setItem(STORAGE_KEY, next);
25
+ }
26
+ }, []);
27
+ useEffect(() => {
28
+ applyTheme(resolved);
29
+ }, [resolved]);
30
+ useEffect(() => {
31
+ if (preference !== "system")
32
+ return;
33
+ const mq = window.matchMedia("(prefers-color-scheme: dark)");
34
+ const handler = () => applyTheme(getSystemTheme());
35
+ mq.addEventListener("change", handler);
36
+ return () => mq.removeEventListener("change", handler);
37
+ }, [preference]);
38
+ return { preference, resolved, setPreference };
39
+ }
40
+ //# sourceMappingURL=useTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.js","sourceRoot":"","sources":["../../src/hooks/useTheme.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIzD,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC,SAAS,cAAc;IACrB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IAClD,OAAO,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACtF,CAAC;AAED,SAAS,UAAU,CAAC,QAA0B;IAC5C,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE;QACtE,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,QAAQ,CAAC;QACnD,OAAQ,YAAY,CAAC,OAAO,CAAC,WAAW,CAAqB,IAAI,QAAQ,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IAEzE,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,IAAqB,EAAE,EAAE;QAC1D,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO;QAEpC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;QACnD,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAW,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,22 @@
1
+ export { defineTheme, defaultTheme } from "./theme/define-theme";
2
+ export { generateCSSVariables } from "./theme/css-generator";
3
+ export { resolveComponents } from "./theme/component-resolver";
4
+ export { NoxionThemeProvider, useNoxionTheme, useNoxionComponents, useNoxionLayout, } from "./theme/ThemeProvider";
5
+ export type { NoxionThemeProviderProps } from "./theme/ThemeProvider";
6
+ export type { NoxionTheme, NoxionThemeColors, NoxionThemeFonts, NoxionThemeSpacing, NoxionLayout, ComponentOverrides, HeaderProps, FooterProps, PostCardProps, PostListProps, TOCProps, SearchProps, TagFilterProps, } from "./theme/types";
7
+ export { NotionPage } from "./components/NotionPage";
8
+ export type { NotionPageProps } from "./components/NotionPage";
9
+ export { PostCard } from "./components/PostCard";
10
+ export { PostList } from "./components/PostList";
11
+ export { Header } from "./components/Header";
12
+ export { Footer } from "./components/Footer";
13
+ export { TagFilter } from "./components/TagFilter";
14
+ export { EmptyState } from "./components/EmptyState";
15
+ export type { EmptyStateProps } from "./components/EmptyState";
16
+ export { ThemeToggle } from "./components/ThemeToggle";
17
+ export { TOC } from "./components/TOC";
18
+ export { Search } from "./components/Search";
19
+ export { useThemePreference } from "./hooks/useTheme";
20
+ export type { ThemePreference } from "./hooks/useTheme";
21
+ export { useSearch } from "./hooks/useSearch";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ export { defineTheme, defaultTheme } from "./theme/define-theme";
2
+ export { generateCSSVariables } from "./theme/css-generator";
3
+ export { resolveComponents } from "./theme/component-resolver";
4
+ export { NoxionThemeProvider, useNoxionTheme, useNoxionComponents, useNoxionLayout, } from "./theme/ThemeProvider";
5
+ export { NotionPage } from "./components/NotionPage";
6
+ export { PostCard } from "./components/PostCard";
7
+ export { PostList } from "./components/PostList";
8
+ export { Header } from "./components/Header";
9
+ export { Footer } from "./components/Footer";
10
+ export { TagFilter } from "./components/TagFilter";
11
+ export { EmptyState } from "./components/EmptyState";
12
+ export { ThemeToggle } from "./components/ThemeToggle";
13
+ export { TOC } from "./components/TOC";
14
+ export { Search } from "./components/Search";
15
+ export { useThemePreference } from "./hooks/useTheme";
16
+ export { useSearch } from "./hooks/useSearch";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAkB/B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import type { NoxionTheme, ComponentOverrides, NoxionLayout } from "./types";
3
+ export interface NoxionThemeProviderProps {
4
+ theme?: NoxionTheme;
5
+ components?: ComponentOverrides;
6
+ defaultComponents?: ComponentOverrides;
7
+ layout?: NoxionLayout;
8
+ children: React.ReactNode;
9
+ }
10
+ export declare function NoxionThemeProvider({ theme, components: overrides, defaultComponents, layout, children, }: NoxionThemeProviderProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function useNoxionTheme(): NoxionTheme;
12
+ export declare function useNoxionComponents(): ComponentOverrides;
13
+ export declare function useNoxionLayout(): NoxionLayout;
14
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAiB7E,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IACvC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,KAAoB,EACpB,UAAU,EAAE,SAAc,EAC1B,iBAAsB,EACtB,MAAwB,EACxB,QAAQ,GACT,EAAE,wBAAwB,2CAsB1B;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED,wBAAgB,mBAAmB,IAAI,kBAAkB,CAExD;AAED,wBAAgB,eAAe,IAAI,YAAY,CAE9C"}
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { createContext, useContext, useMemo } from "react";
4
+ import { defaultTheme } from "./define-theme";
5
+ import { generateCSSVariables } from "./css-generator";
6
+ import { resolveComponents } from "./component-resolver";
7
+ const ThemeContext = createContext({
8
+ theme: defaultTheme,
9
+ components: {},
10
+ layout: "single-column",
11
+ });
12
+ export function NoxionThemeProvider({ theme = defaultTheme, components: overrides = {}, defaultComponents = {}, layout = "single-column", children, }) {
13
+ const cssVariables = useMemo(() => generateCSSVariables(theme), [theme]);
14
+ const resolvedComponents = useMemo(() => resolveComponents(defaultComponents, overrides), [defaultComponents, overrides]);
15
+ const contextValue = useMemo(() => ({
16
+ theme,
17
+ components: resolvedComponents,
18
+ layout,
19
+ }), [theme, resolvedComponents, layout]);
20
+ return (_jsxs(ThemeContext.Provider, { value: contextValue, children: [_jsx("style", { dangerouslySetInnerHTML: { __html: cssVariables } }), children] }));
21
+ }
22
+ export function useNoxionTheme() {
23
+ return useContext(ThemeContext).theme;
24
+ }
25
+ export function useNoxionComponents() {
26
+ return useContext(ThemeContext).components;
27
+ }
28
+ export function useNoxionLayout() {
29
+ return useContext(ThemeContext).layout;
30
+ }
31
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD,MAAM,YAAY,GAAG,aAAa,CAAoB;IACpD,KAAK,EAAE,YAAY;IACnB,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,eAAe;CACxB,CAAC,CAAC;AAUH,MAAM,UAAU,mBAAmB,CAAC,EAClC,KAAK,GAAG,YAAY,EACpB,UAAU,EAAE,SAAS,GAAG,EAAE,EAC1B,iBAAiB,GAAG,EAAE,EACtB,MAAM,GAAG,eAAe,EACxB,QAAQ,GACiB;IACzB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,MAAM,kBAAkB,GAAG,OAAO,CAChC,GAAG,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,CAAC,EACrD,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAC/B,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC;QACL,KAAK;QACL,UAAU,EAAE,kBAAkB;QAC9B,MAAM;KACP,CAAC,EACF,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,CAAC,CACpC,CAAC;IAEF,OAAO,CACL,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,aACxC,gBAAO,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAI,EAC3D,QAAQ,IACa,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentOverrides } from "./types";
2
+ export declare function resolveComponents(defaults: ComponentOverrides, overrides: ComponentOverrides): ComponentOverrides;
3
+ //# sourceMappingURL=component-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-resolver.d.ts","sourceRoot":"","sources":["../../src/theme/component-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,kBAAkB,GAC5B,kBAAkB,CAepB"}
@@ -0,0 +1,16 @@
1
+ export function resolveComponents(defaults, overrides) {
2
+ const resolved = { ...defaults };
3
+ for (const key of Object.keys(overrides)) {
4
+ if (key === "NotionBlock") {
5
+ resolved.NotionBlock = {
6
+ ...defaults.NotionBlock,
7
+ ...overrides.NotionBlock,
8
+ };
9
+ }
10
+ else {
11
+ resolved[key] = overrides[key];
12
+ }
13
+ }
14
+ return resolved;
15
+ }
16
+ //# sourceMappingURL=component-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-resolver.js","sourceRoot":"","sources":["../../src/theme/component-resolver.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,QAA4B,EAC5B,SAA6B;IAE7B,MAAM,QAAQ,GAAuB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAErD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAiC,EAAE,CAAC;QACzE,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,QAAQ,CAAC,WAAW,GAAG;gBACrB,GAAG,QAAQ,CAAC,WAAW;gBACvB,GAAG,SAAS,CAAC,WAAW;aACzB,CAAC;QACJ,CAAC;aAAM,CAAC;YACL,QAAoC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { NoxionTheme } from "./types";
2
+ export declare function generateCSSVariables(theme: NoxionTheme): string;
3
+ //# sourceMappingURL=css-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-generator.d.ts","sourceRoot":"","sources":["../../src/theme/css-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAc/D"}
@@ -0,0 +1,36 @@
1
+ export function generateCSSVariables(theme) {
2
+ const lightVars = buildVariables(theme);
3
+ let css = `:root {\n${lightVars}}\n`;
4
+ if (theme.dark) {
5
+ const darkVars = buildVariables({
6
+ ...theme,
7
+ ...theme.dark,
8
+ name: theme.name,
9
+ });
10
+ css += `\n[data-theme="dark"] {\n${darkVars}}\n`;
11
+ }
12
+ return css;
13
+ }
14
+ function buildVariables(theme) {
15
+ const lines = [];
16
+ for (const [key, value] of Object.entries(theme.colors)) {
17
+ lines.push(` --noxion-${key}: ${value};`);
18
+ }
19
+ if (theme.fonts) {
20
+ for (const [key, value] of Object.entries(theme.fonts)) {
21
+ if (value) {
22
+ lines.push(` --noxion-font-${key}: ${value};`);
23
+ }
24
+ }
25
+ }
26
+ if (theme.spacing) {
27
+ for (const [key, value] of Object.entries(theme.spacing)) {
28
+ lines.push(` --noxion-spacing-${key}: ${value};`);
29
+ }
30
+ }
31
+ if (theme.borderRadius) {
32
+ lines.push(` --noxion-border-radius: ${theme.borderRadius};`);
33
+ }
34
+ return lines.join("\n") + "\n";
35
+ }
36
+ //# sourceMappingURL=css-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-generator.js","sourceRoot":"","sources":["../../src/theme/css-generator.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,KAAkB;IACrD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,GAAG,GAAG,YAAY,SAAS,KAAK,CAAC;IAErC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,GAAG,KAAK;YACR,GAAG,KAAK,CAAC,IAAI;YACb,IAAI,EAAE,KAAK,CAAC,IAAI;SACF,CAAC,CAAC;QAClB,GAAG,IAAI,4BAA4B,QAAQ,KAAK,CAAC;IACnD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,KAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,sBAAsB,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { NoxionTheme } from "./types";
2
+ export declare function defineTheme<T extends NoxionTheme>(theme: T): T;
3
+ export declare const defaultTheme: NoxionTheme;
4
+ //# sourceMappingURL=define-theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-theme.d.ts","sourceRoot":"","sources":["../../src/theme/define-theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAE9D;AAED,eAAO,MAAM,YAAY,EAAE,WAwCzB,CAAC"}
@@ -0,0 +1,45 @@
1
+ export function defineTheme(theme) {
2
+ return theme;
3
+ }
4
+ export const defaultTheme = defineTheme({
5
+ name: "default",
6
+ colors: {
7
+ primary: "#2563eb",
8
+ primaryForeground: "#ffffff",
9
+ background: "#ffffff",
10
+ foreground: "#0a0a0a",
11
+ muted: "#f5f5f5",
12
+ mutedForeground: "#737373",
13
+ border: "#e5e5e5",
14
+ accent: "#f5f5f5",
15
+ accentForeground: "#171717",
16
+ card: "#ffffff",
17
+ cardForeground: "#0a0a0a",
18
+ },
19
+ fonts: {
20
+ sans: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
21
+ serif: "Georgia, 'Times New Roman', serif",
22
+ mono: "ui-monospace, SFMono-Regular, Menlo, Monaco, monospace",
23
+ },
24
+ spacing: {
25
+ content: "720px",
26
+ sidebar: "280px",
27
+ },
28
+ borderRadius: "0.5rem",
29
+ dark: {
30
+ colors: {
31
+ primary: "#3b82f6",
32
+ primaryForeground: "#ffffff",
33
+ background: "#0a0a0a",
34
+ foreground: "#fafafa",
35
+ muted: "#262626",
36
+ mutedForeground: "#a3a3a3",
37
+ border: "#262626",
38
+ accent: "#262626",
39
+ accentForeground: "#fafafa",
40
+ card: "#0a0a0a",
41
+ cardForeground: "#fafafa",
42
+ },
43
+ },
44
+ });
45
+ //# sourceMappingURL=define-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-theme.js","sourceRoot":"","sources":["../../src/theme/define-theme.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAwB,KAAQ;IACzD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAgB,WAAW,CAAC;IACnD,IAAI,EAAE,SAAS;IACf,MAAM,EAAE;QACN,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,SAAS;QAC1B,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,gBAAgB,EAAE,SAAS;QAC3B,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,SAAS;KAC1B;IACD,KAAK,EAAE;QACL,IAAI,EAAE,8EAA8E;QACpF,KAAK,EAAE,mCAAmC;QAC1C,IAAI,EAAE,wDAAwD;KAC/D;IACD,OAAO,EAAE;QACP,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO;KACjB;IACD,YAAY,EAAE,QAAQ;IACtB,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,OAAO,EAAE,SAAS;YAClB,iBAAiB,EAAE,SAAS;YAC5B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,SAAS;YAChB,eAAe,EAAE,SAAS;YAC1B,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,gBAAgB,EAAE,SAAS;YAC3B,IAAI,EAAE,SAAS;YACf,cAAc,EAAE,SAAS;SAC1B;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,91 @@
1
+ import type { ComponentType } from "react";
2
+ export interface NoxionThemeColors {
3
+ primary: string;
4
+ primaryForeground: string;
5
+ background: string;
6
+ foreground: string;
7
+ muted: string;
8
+ mutedForeground: string;
9
+ border: string;
10
+ accent: string;
11
+ accentForeground: string;
12
+ card: string;
13
+ cardForeground: string;
14
+ [key: string]: string;
15
+ }
16
+ export interface NoxionThemeFonts {
17
+ sans?: string;
18
+ serif?: string;
19
+ mono?: string;
20
+ display?: string;
21
+ }
22
+ export interface NoxionThemeSpacing {
23
+ content: string;
24
+ sidebar: string;
25
+ }
26
+ export interface NoxionTheme {
27
+ name: string;
28
+ colors: NoxionThemeColors;
29
+ fonts?: NoxionThemeFonts;
30
+ spacing?: NoxionThemeSpacing;
31
+ borderRadius?: string;
32
+ dark?: Partial<Omit<NoxionTheme, "name" | "dark">>;
33
+ }
34
+ export interface HeaderProps {
35
+ siteName: string;
36
+ navigation?: {
37
+ label: string;
38
+ href: string;
39
+ }[];
40
+ }
41
+ export interface FooterProps {
42
+ siteName: string;
43
+ author?: string;
44
+ }
45
+ export interface PostCardProps {
46
+ id: string;
47
+ title: string;
48
+ slug: string;
49
+ date: string;
50
+ tags: string[];
51
+ coverImage?: string;
52
+ category?: string;
53
+ description?: string;
54
+ author?: string;
55
+ }
56
+ export interface PostListProps {
57
+ posts: PostCardProps[];
58
+ }
59
+ export interface NotionPageProps {
60
+ recordMap: unknown;
61
+ rootPageId?: string;
62
+ }
63
+ export interface TOCProps {
64
+ headings: {
65
+ id: string;
66
+ text: string;
67
+ level: number;
68
+ }[];
69
+ }
70
+ export interface SearchProps {
71
+ onSearch: (query: string) => void;
72
+ placeholder?: string;
73
+ }
74
+ export interface TagFilterProps {
75
+ tags: string[];
76
+ selectedTags: string[];
77
+ onToggle: (tag: string) => void;
78
+ }
79
+ export interface ComponentOverrides {
80
+ Header?: ComponentType<HeaderProps>;
81
+ Footer?: ComponentType<FooterProps>;
82
+ PostCard?: ComponentType<PostCardProps>;
83
+ PostList?: ComponentType<PostListProps>;
84
+ NotionPage?: ComponentType<NotionPageProps>;
85
+ TOC?: ComponentType<TOCProps>;
86
+ Search?: ComponentType<SearchProps>;
87
+ TagFilter?: ComponentType<TagFilterProps>;
88
+ NotionBlock?: Record<string, ComponentType<unknown>>;
89
+ }
90
+ export type NoxionLayout = "single-column" | "sidebar-left" | "sidebar-right";
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5C,GAAG,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@noxion/renderer",
3
+ "version": "0.0.1",
4
+ "description": "React rendering components and theme system for Noxion",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "sideEffects": false,
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "release": "npm publish",
24
+ "test": "bun test",
25
+ "lint": "echo 'lint ok'",
26
+ "clean": "rm -rf dist"
27
+ },
28
+ "keywords": [
29
+ "notion",
30
+ "blog",
31
+ "react",
32
+ "components",
33
+ "noxion"
34
+ ],
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/jiwonme/noxion.git",
38
+ "directory": "packages/renderer"
39
+ },
40
+ "homepage": "https://github.com/jiwonme/noxion#readme",
41
+ "bugs": {
42
+ "url": "https://github.com/jiwonme/noxion/issues"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "engines": {
48
+ "node": ">=18.0.0"
49
+ },
50
+ "peerDependencies": {
51
+ "react": ">=18.0.0",
52
+ "react-dom": ">=18.0.0"
53
+ },
54
+ "dependencies": {
55
+ "katex": "^0.16.28",
56
+ "notion-types": "^7.8.2",
57
+ "prismjs": "^1.30.0",
58
+ "react-notion-x": "^7.8.2"
59
+ },
60
+ "devDependencies": {
61
+ "@types/bun": "^1.2.0",
62
+ "@types/katex": "^0.16.8",
63
+ "@types/prismjs": "^1.26.6",
64
+ "@types/react": "^19.2.14",
65
+ "@types/react-dom": "^19.2.3",
66
+ "react": "^19.2.4",
67
+ "react-dom": "^19.2.4",
68
+ "typescript": "^5.7.0"
69
+ }
70
+ }