mordoc 0.1.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.
- package/README.md +240 -0
- package/bin/cli.js +81 -0
- package/dist/build/Builder.d.ts +91 -0
- package/dist/build/Builder.d.ts.map +1 -0
- package/dist/build/Builder.js +391 -0
- package/dist/build/Builder.js.map +1 -0
- package/dist/build/ClientBundler.d.ts +36 -0
- package/dist/build/ClientBundler.d.ts.map +1 -0
- package/dist/build/ClientBundler.js +132 -0
- package/dist/build/ClientBundler.js.map +1 -0
- package/dist/build/HtmlGenerator.d.ts +46 -0
- package/dist/build/HtmlGenerator.d.ts.map +1 -0
- package/dist/build/HtmlGenerator.js +200 -0
- package/dist/build/HtmlGenerator.js.map +1 -0
- package/dist/build/SearchIndexer.d.ts +31 -0
- package/dist/build/SearchIndexer.d.ts.map +1 -0
- package/dist/build/SearchIndexer.js +116 -0
- package/dist/build/SearchIndexer.js.map +1 -0
- package/dist/cli/build.d.ts +20 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +111 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/create-app.d.ts +14 -0
- package/dist/cli/create-app.d.ts.map +1 -0
- package/dist/cli/create-app.js +216 -0
- package/dist/cli/create-app.js.map +1 -0
- package/dist/cli/dev.d.ts +20 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +169 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/client/App.d.ts +17 -0
- package/dist/client/App.d.ts.map +1 -0
- package/dist/client/App.js +94 -0
- package/dist/client/App.js.map +1 -0
- package/dist/client/contexts/ConfigContext.d.ts +22 -0
- package/dist/client/contexts/ConfigContext.d.ts.map +1 -0
- package/dist/client/contexts/ConfigContext.js +27 -0
- package/dist/client/contexts/ConfigContext.js.map +1 -0
- package/dist/client/contexts/ContentContext.d.ts +31 -0
- package/dist/client/contexts/ContentContext.d.ts.map +1 -0
- package/dist/client/contexts/ContentContext.js +46 -0
- package/dist/client/contexts/ContentContext.js.map +1 -0
- package/dist/client/contexts/SearchContext.d.ts +38 -0
- package/dist/client/contexts/SearchContext.d.ts.map +1 -0
- package/dist/client/contexts/SearchContext.js +207 -0
- package/dist/client/contexts/SearchContext.js.map +1 -0
- package/dist/client/contexts/ThemeContext.d.ts +23 -0
- package/dist/client/contexts/ThemeContext.d.ts.map +1 -0
- package/dist/client/contexts/ThemeContext.js +62 -0
- package/dist/client/contexts/ThemeContext.js.map +1 -0
- package/dist/client/hooks/useContent.d.ts +12 -0
- package/dist/client/hooks/useContent.d.ts.map +1 -0
- package/dist/client/hooks/useContent.js +74 -0
- package/dist/client/hooks/useContent.js.map +1 -0
- package/dist/client/hooks/useNavigation.d.ts +15 -0
- package/dist/client/hooks/useNavigation.d.ts.map +1 -0
- package/dist/client/hooks/useNavigation.js +101 -0
- package/dist/client/hooks/useNavigation.js.map +1 -0
- package/dist/client/hooks/useSearch.d.ts +22 -0
- package/dist/client/hooks/useSearch.d.ts.map +1 -0
- package/dist/client/hooks/useSearch.js +64 -0
- package/dist/client/hooks/useSearch.js.map +1 -0
- package/dist/client/main.d.ts +5 -0
- package/dist/client/main.d.ts.map +1 -0
- package/dist/client/main.js +66 -0
- package/dist/client/main.js.map +1 -0
- package/dist/components/Callout.d.ts +9 -0
- package/dist/components/Callout.d.ts.map +1 -0
- package/dist/components/Callout.js +24 -0
- package/dist/components/Callout.js.map +1 -0
- package/dist/components/Card.d.ts +10 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +15 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/CardGrid.d.ts +8 -0
- package/dist/components/CardGrid.d.ts.map +1 -0
- package/dist/components/CardGrid.js +9 -0
- package/dist/components/CardGrid.js.map +1 -0
- package/dist/components/CodeBlock.d.ts +24 -0
- package/dist/components/CodeBlock.d.ts.map +1 -0
- package/dist/components/CodeBlock.js +76 -0
- package/dist/components/CodeBlock.js.map +1 -0
- package/dist/components/ContentPage.d.ts +9 -0
- package/dist/components/ContentPage.d.ts.map +1 -0
- package/dist/components/ContentPage.js +36 -0
- package/dist/components/ContentPage.js.map +1 -0
- package/dist/components/Header.d.ts +14 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +30 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/Heading.d.ts +16 -0
- package/dist/components/Heading.d.ts.map +1 -0
- package/dist/components/Heading.js +31 -0
- package/dist/components/Heading.js.map +1 -0
- package/dist/components/Image.d.ts +8 -0
- package/dist/components/Image.d.ts.map +1 -0
- package/dist/components/Image.js +24 -0
- package/dist/components/Image.js.map +1 -0
- package/dist/components/Layout.d.ts +14 -0
- package/dist/components/Layout.d.ts.map +1 -0
- package/dist/components/Layout.js +32 -0
- package/dist/components/Layout.js.map +1 -0
- package/dist/components/MarkdocRenderer.d.ts +15 -0
- package/dist/components/MarkdocRenderer.d.ts.map +1 -0
- package/dist/components/MarkdocRenderer.js +73 -0
- package/dist/components/MarkdocRenderer.js.map +1 -0
- package/dist/components/MobileMenu.d.ts +14 -0
- package/dist/components/MobileMenu.d.ts.map +1 -0
- package/dist/components/MobileMenu.js +45 -0
- package/dist/components/MobileMenu.js.map +1 -0
- package/dist/components/PageNavigation.d.ts +9 -0
- package/dist/components/PageNavigation.d.ts.map +1 -0
- package/dist/components/PageNavigation.js +23 -0
- package/dist/components/PageNavigation.js.map +1 -0
- package/dist/components/SearchModal.d.ts +9 -0
- package/dist/components/SearchModal.d.ts.map +1 -0
- package/dist/components/SearchModal.js +74 -0
- package/dist/components/SearchModal.js.map +1 -0
- package/dist/components/SideNav.d.ts +9 -0
- package/dist/components/SideNav.d.ts.map +1 -0
- package/dist/components/SideNav.js +66 -0
- package/dist/components/SideNav.js.map +1 -0
- package/dist/components/TableOfContents.d.ts +10 -0
- package/dist/components/TableOfContents.d.ts.map +1 -0
- package/dist/components/TableOfContents.js +151 -0
- package/dist/components/TableOfContents.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +50 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +214 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/StyleCompiler.d.ts +17 -0
- package/dist/config/StyleCompiler.d.ts.map +1 -0
- package/dist/config/StyleCompiler.js +116 -0
- package/dist/config/StyleCompiler.js.map +1 -0
- package/dist/config/ThemeGenerator.d.ts +14 -0
- package/dist/config/ThemeGenerator.d.ts.map +1 -0
- package/dist/config/ThemeGenerator.js +129 -0
- package/dist/config/ThemeGenerator.js.map +1 -0
- package/dist/content/ContentLoader.d.ts +70 -0
- package/dist/content/ContentLoader.d.ts.map +1 -0
- package/dist/content/ContentLoader.js +146 -0
- package/dist/content/ContentLoader.js.map +1 -0
- package/dist/content/ContentProcessor.d.ts +84 -0
- package/dist/content/ContentProcessor.d.ts.map +1 -0
- package/dist/content/ContentProcessor.js +380 -0
- package/dist/content/ContentProcessor.js.map +1 -0
- package/dist/content/RouteManager.d.ts +69 -0
- package/dist/content/RouteManager.d.ts.map +1 -0
- package/dist/content/RouteManager.js +143 -0
- package/dist/content/RouteManager.js.map +1 -0
- package/dist/styles/components/callout.d.ts +11 -0
- package/dist/styles/components/callout.d.ts.map +1 -0
- package/dist/styles/components/callout.js +83 -0
- package/dist/styles/components/callout.js.map +1 -0
- package/dist/styles/components/card.d.ts +11 -0
- package/dist/styles/components/card.d.ts.map +1 -0
- package/dist/styles/components/card.js +179 -0
- package/dist/styles/components/card.js.map +1 -0
- package/dist/styles/components/codeblock.d.ts +11 -0
- package/dist/styles/components/codeblock.d.ts.map +1 -0
- package/dist/styles/components/codeblock.js +249 -0
- package/dist/styles/components/codeblock.js.map +1 -0
- package/dist/styles/components/content.d.ts +11 -0
- package/dist/styles/components/content.d.ts.map +1 -0
- package/dist/styles/components/content.js +198 -0
- package/dist/styles/components/content.js.map +1 -0
- package/dist/styles/components/fonts.d.ts +11 -0
- package/dist/styles/components/fonts.d.ts.map +1 -0
- package/dist/styles/components/fonts.js +34 -0
- package/dist/styles/components/fonts.js.map +1 -0
- package/dist/styles/components/header.d.ts +11 -0
- package/dist/styles/components/header.d.ts.map +1 -0
- package/dist/styles/components/header.js +293 -0
- package/dist/styles/components/header.js.map +1 -0
- package/dist/styles/components/heading.d.ts +11 -0
- package/dist/styles/components/heading.d.ts.map +1 -0
- package/dist/styles/components/heading.js +115 -0
- package/dist/styles/components/heading.js.map +1 -0
- package/dist/styles/components/layout.d.ts +11 -0
- package/dist/styles/components/layout.d.ts.map +1 -0
- package/dist/styles/components/layout.js +79 -0
- package/dist/styles/components/layout.js.map +1 -0
- package/dist/styles/components/mobilemenu.d.ts +11 -0
- package/dist/styles/components/mobilemenu.d.ts.map +1 -0
- package/dist/styles/components/mobilemenu.js +112 -0
- package/dist/styles/components/mobilemenu.js.map +1 -0
- package/dist/styles/components/reset.d.ts +11 -0
- package/dist/styles/components/reset.d.ts.map +1 -0
- package/dist/styles/components/reset.js +131 -0
- package/dist/styles/components/reset.js.map +1 -0
- package/dist/styles/components/searchmodal.d.ts +11 -0
- package/dist/styles/components/searchmodal.d.ts.map +1 -0
- package/dist/styles/components/searchmodal.js +333 -0
- package/dist/styles/components/searchmodal.js.map +1 -0
- package/dist/styles/components/sidenav.d.ts +11 -0
- package/dist/styles/components/sidenav.d.ts.map +1 -0
- package/dist/styles/components/sidenav.js +209 -0
- package/dist/styles/components/sidenav.js.map +1 -0
- package/dist/styles/components/toc.d.ts +11 -0
- package/dist/styles/components/toc.d.ts.map +1 -0
- package/dist/styles/components/toc.js +112 -0
- package/dist/styles/components/toc.js.map +1 -0
- package/dist/styles/components/typography.d.ts +11 -0
- package/dist/styles/components/typography.d.ts.map +1 -0
- package/dist/styles/components/typography.js +247 -0
- package/dist/styles/components/typography.js.map +1 -0
- package/dist/styles/components/utility.d.ts +11 -0
- package/dist/styles/components/utility.d.ts.map +1 -0
- package/dist/styles/components/utility.js +231 -0
- package/dist/styles/components/utility.js.map +1 -0
- package/dist/styles/types.d.ts +79 -0
- package/dist/styles/types.d.ts.map +1 -0
- package/dist/styles/types.js +7 -0
- package/dist/styles/types.js.map +1 -0
- package/dist/styles/utils.d.ts +21 -0
- package/dist/styles/utils.d.ts.map +1 -0
- package/dist/styles/utils.js +50 -0
- package/dist/styles/utils.js.map +1 -0
- package/dist/styles/variables/main.d.ts +15 -0
- package/dist/styles/variables/main.d.ts.map +1 -0
- package/dist/styles/variables/main.js +116 -0
- package/dist/styles/variables/main.js.map +1 -0
- package/dist/types/config.d.ts +43 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/content.d.ts +46 -0
- package/dist/types/content.d.ts.map +1 -0
- package/dist/types/content.js +7 -0
- package/dist/types/content.js.map +1 -0
- package/dist/types/navigation.d.ts +45 -0
- package/dist/types/navigation.d.ts.map +1 -0
- package/dist/types/navigation.js +7 -0
- package/dist/types/navigation.js.map +1 -0
- package/dist/utils/language-utils.d.ts +41 -0
- package/dist/utils/language-utils.d.ts.map +1 -0
- package/dist/utils/language-utils.js +79 -0
- package/dist/utils/language-utils.js.map +1 -0
- package/dist/utils/slugify.d.ts +20 -0
- package/dist/utils/slugify.d.ts.map +1 -0
- package/dist/utils/slugify.js +44 -0
- package/dist/utils/slugify.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContentProvider = ContentProvider;
|
|
4
|
+
exports.useContent = useContent;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* ContentContext - Manages current page content and navigation state
|
|
8
|
+
*/
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
const ContentContext = (0, react_1.createContext)(undefined);
|
|
11
|
+
/**
|
|
12
|
+
* ContentProvider - Manages content and navigation state
|
|
13
|
+
*/
|
|
14
|
+
function ContentProvider({ children, initialContent = null, initialNavigationContext = null }) {
|
|
15
|
+
const [currentContent, setCurrentContent] = (0, react_1.useState)(initialContent);
|
|
16
|
+
const [navigationContext, setNavigationContext] = (0, react_1.useState)(initialNavigationContext);
|
|
17
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
18
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
19
|
+
const value = {
|
|
20
|
+
currentContent,
|
|
21
|
+
setCurrentContent: (0, react_1.useCallback)((content) => {
|
|
22
|
+
setCurrentContent(content);
|
|
23
|
+
setError(null);
|
|
24
|
+
}, []),
|
|
25
|
+
navigationContext,
|
|
26
|
+
setNavigationContext: (0, react_1.useCallback)((navContext) => {
|
|
27
|
+
setNavigationContext(navContext);
|
|
28
|
+
}, []),
|
|
29
|
+
isLoading,
|
|
30
|
+
setIsLoading,
|
|
31
|
+
error,
|
|
32
|
+
setError,
|
|
33
|
+
};
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)(ContentContext.Provider, { value: value, children: children }));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* useContent - Hook to access content state
|
|
38
|
+
*/
|
|
39
|
+
function useContent() {
|
|
40
|
+
const context = (0, react_1.useContext)(ContentContext);
|
|
41
|
+
if (context === undefined) {
|
|
42
|
+
throw new Error('useContent must be used within a ContentProvider');
|
|
43
|
+
}
|
|
44
|
+
return context;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ContentContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentContext.js","sourceRoot":"","sources":["../../../src/client/contexts/ContentContext.tsx"],"names":[],"mappings":";;AAqCA,0CAiCC;AAKD,gCAQC;;AAnFD;;GAEG;AAEH,iCAA2F;AAsB3F,MAAM,cAAc,GAAG,IAAA,qBAAa,EAAkC,SAAS,CAAC,CAAC;AAQjF;;GAEG;AACH,SAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,cAAc,GAAG,IAAI,EACrB,wBAAwB,GAAG,IAAI,EACV;IACrB,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAA0B,cAAc,CAAC,CAAC;IAC9F,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,IAAA,gBAAQ,EACxD,wBAAwB,CACzB,CAAC;IACF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAwB;QACjC,cAAc;QACd,iBAAiB,EAAE,IAAA,mBAAW,EAAC,CAAC,OAAyB,EAAE,EAAE;YAC3D,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,EAAE,EAAE,CAAC;QACN,iBAAiB;QACjB,oBAAoB,EAAE,IAAA,mBAAW,EAAC,CAAC,UAA6B,EAAE,EAAE;YAClE,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,EAAE,EAAE,CAAC;QACN,SAAS;QACT,YAAY;QACZ,KAAK;QACL,QAAQ;KACT,CAAC;IAEF,OAAO,CACL,uBAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAClC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,cAAc,CAAC,CAAC;IAE3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SearchContext - Manages search state and functionality
|
|
3
|
+
*/
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
export interface SearchResult {
|
|
6
|
+
id: string;
|
|
7
|
+
url: string;
|
|
8
|
+
title: string;
|
|
9
|
+
excerpt: string;
|
|
10
|
+
score: number;
|
|
11
|
+
}
|
|
12
|
+
interface SearchContextValue {
|
|
13
|
+
query: string;
|
|
14
|
+
setQuery: (query: string) => void;
|
|
15
|
+
results: SearchResult[];
|
|
16
|
+
setResults: (results: SearchResult[]) => void;
|
|
17
|
+
isOpen: boolean;
|
|
18
|
+
openSearch: () => void;
|
|
19
|
+
closeSearch: () => void;
|
|
20
|
+
toggleSearch: () => void;
|
|
21
|
+
isSearching: boolean;
|
|
22
|
+
setIsSearching: (searching: boolean) => void;
|
|
23
|
+
search: (searchQuery: string) => Promise<void>;
|
|
24
|
+
clearSearch: () => void;
|
|
25
|
+
}
|
|
26
|
+
interface SearchProviderProps {
|
|
27
|
+
children: ReactNode;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* SearchProvider - Manages search state and modal
|
|
31
|
+
*/
|
|
32
|
+
export declare function SearchProvider({ children }: SearchProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
/**
|
|
34
|
+
* useSearch - Hook to access search state and functions
|
|
35
|
+
*/
|
|
36
|
+
export declare function useSearch(): SearchContextValue;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=SearchContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchContext.d.ts","sourceRoot":"","sources":["../../../src/client/contexts/SearchContext.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAAuC,SAAS,EAAuB,MAAM,OAAO,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,kBAAkB;IAE1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGlC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAG9C,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,IAAI,CAAC;IAGzB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAG7C,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAG/C,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAID,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AA+DD;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAoL/D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,kBAAkB,CAQ9C"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SearchProvider = SearchProvider;
|
|
37
|
+
exports.useSearch = useSearch;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
/**
|
|
40
|
+
* SearchContext - Manages search state and functionality
|
|
41
|
+
*/
|
|
42
|
+
const react_1 = require("react");
|
|
43
|
+
const SearchContext = (0, react_1.createContext)(undefined);
|
|
44
|
+
/**
|
|
45
|
+
* SearchProvider - Manages search state and modal
|
|
46
|
+
*/
|
|
47
|
+
function SearchProvider({ children }) {
|
|
48
|
+
const [query, setQuery] = (0, react_1.useState)('');
|
|
49
|
+
const [results, setResults] = (0, react_1.useState)([]);
|
|
50
|
+
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
51
|
+
const [isSearching, setIsSearching] = (0, react_1.useState)(false);
|
|
52
|
+
// Cache Pagefind instance to avoid re-importing
|
|
53
|
+
const pagefindRef = (0, react_1.useRef)(null);
|
|
54
|
+
const pagefindLoadingRef = (0, react_1.useRef)(null);
|
|
55
|
+
const openSearch = (0, react_1.useCallback)(() => {
|
|
56
|
+
setIsOpen(true);
|
|
57
|
+
}, []);
|
|
58
|
+
const closeSearch = (0, react_1.useCallback)(() => {
|
|
59
|
+
setIsOpen(false);
|
|
60
|
+
}, []);
|
|
61
|
+
const toggleSearch = (0, react_1.useCallback)(() => {
|
|
62
|
+
setIsOpen(prev => !prev);
|
|
63
|
+
}, []);
|
|
64
|
+
const clearSearch = (0, react_1.useCallback)(() => {
|
|
65
|
+
setQuery('');
|
|
66
|
+
setResults([]);
|
|
67
|
+
}, []);
|
|
68
|
+
/**
|
|
69
|
+
* Load Pagefind instance (lazy loading)
|
|
70
|
+
*/
|
|
71
|
+
const loadPagefind = (0, react_1.useCallback)(async () => {
|
|
72
|
+
// Return cached instance if available
|
|
73
|
+
if (pagefindRef.current) {
|
|
74
|
+
return pagefindRef.current;
|
|
75
|
+
}
|
|
76
|
+
// Return existing loading promise if already loading
|
|
77
|
+
if (pagefindLoadingRef.current) {
|
|
78
|
+
return pagefindLoadingRef.current;
|
|
79
|
+
}
|
|
80
|
+
// Start loading Pagefind
|
|
81
|
+
pagefindLoadingRef.current = (async () => {
|
|
82
|
+
try {
|
|
83
|
+
// Dynamically import Pagefind (generated at build time)
|
|
84
|
+
const pagefindPath = '/pagefind/pagefind.js';
|
|
85
|
+
const pagefindModule = await Promise.resolve(`${
|
|
86
|
+
/* webpackIgnore: true */
|
|
87
|
+
/* @vite-ignore */
|
|
88
|
+
pagefindPath}`).then(s => __importStar(require(s)));
|
|
89
|
+
const pagefind = (pagefindModule.default || pagefindModule);
|
|
90
|
+
// Configure Pagefind options (must be called before init)
|
|
91
|
+
if (pagefind.options) {
|
|
92
|
+
pagefind.options({
|
|
93
|
+
excerptLength: 10, // Set your desired excerpt length in words
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Initialize Pagefind (optional, but recommended)
|
|
97
|
+
if (pagefind.init) {
|
|
98
|
+
await pagefind.init();
|
|
99
|
+
}
|
|
100
|
+
// Cache the instance
|
|
101
|
+
pagefindRef.current = pagefind;
|
|
102
|
+
return pagefind;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error('Failed to load Pagefind:', error);
|
|
106
|
+
console.warn('Search functionality is not available. Run "mordoc build" to generate search index.');
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
// Clear loading promise
|
|
111
|
+
pagefindLoadingRef.current = null;
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
return pagefindLoadingRef.current;
|
|
115
|
+
}, []);
|
|
116
|
+
/**
|
|
117
|
+
* Perform search using Pagefind with two-tier approach
|
|
118
|
+
*/
|
|
119
|
+
const search = (0, react_1.useCallback)(async (searchQuery) => {
|
|
120
|
+
if (!searchQuery.trim()) {
|
|
121
|
+
setResults([]);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
setIsSearching(true);
|
|
125
|
+
setQuery(searchQuery);
|
|
126
|
+
try {
|
|
127
|
+
const pagefind = await loadPagefind();
|
|
128
|
+
if (!pagefind) {
|
|
129
|
+
setResults([]);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const trimmedQuery = searchQuery.trim();
|
|
133
|
+
const exactQuery = `"${trimmedQuery}"`;
|
|
134
|
+
const broadQuery = trimmedQuery;
|
|
135
|
+
// Perform both searches in parallel
|
|
136
|
+
const [exactResults, broadResults] = await Promise.all([
|
|
137
|
+
pagefind.search(exactQuery),
|
|
138
|
+
pagefind.search(broadQuery),
|
|
139
|
+
]);
|
|
140
|
+
// Track exact match IDs for deduplication
|
|
141
|
+
const exactIds = new Set(exactResults.results.map(r => r.id));
|
|
142
|
+
// Process exact matches first
|
|
143
|
+
const exactProcessed = await Promise.all(exactResults.results.map(async (result) => {
|
|
144
|
+
const data = await result.data();
|
|
145
|
+
return {
|
|
146
|
+
id: result.id,
|
|
147
|
+
url: data.url,
|
|
148
|
+
title: data.meta.title || 'Untitled',
|
|
149
|
+
excerpt: data.excerpt || '',
|
|
150
|
+
score: result.score,
|
|
151
|
+
};
|
|
152
|
+
}));
|
|
153
|
+
// Process broad matches, excluding those already in exact results
|
|
154
|
+
const broadProcessed = await Promise.all(broadResults.results
|
|
155
|
+
.filter(result => !exactIds.has(result.id))
|
|
156
|
+
.map(async (result) => {
|
|
157
|
+
const data = await result.data();
|
|
158
|
+
return {
|
|
159
|
+
id: result.id,
|
|
160
|
+
url: data.url,
|
|
161
|
+
title: data.meta.title || 'Untitled',
|
|
162
|
+
excerpt: data.excerpt || '',
|
|
163
|
+
score: result.score,
|
|
164
|
+
};
|
|
165
|
+
}));
|
|
166
|
+
// Combine: exact matches first (sorted by score), then broad matches (sorted by score)
|
|
167
|
+
const combinedResults = [
|
|
168
|
+
...exactProcessed.sort((a, b) => b.score - a.score),
|
|
169
|
+
...broadProcessed.sort((a, b) => b.score - a.score),
|
|
170
|
+
];
|
|
171
|
+
setResults(combinedResults);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error('Search error:', error);
|
|
175
|
+
setResults([]);
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
setIsSearching(false);
|
|
179
|
+
}
|
|
180
|
+
}, [loadPagefind]);
|
|
181
|
+
const value = {
|
|
182
|
+
query,
|
|
183
|
+
setQuery,
|
|
184
|
+
results,
|
|
185
|
+
setResults,
|
|
186
|
+
isOpen,
|
|
187
|
+
openSearch,
|
|
188
|
+
closeSearch,
|
|
189
|
+
toggleSearch,
|
|
190
|
+
isSearching,
|
|
191
|
+
setIsSearching,
|
|
192
|
+
search,
|
|
193
|
+
clearSearch,
|
|
194
|
+
};
|
|
195
|
+
return ((0, jsx_runtime_1.jsx)(SearchContext.Provider, { value: value, children: children }));
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* useSearch - Hook to access search state and functions
|
|
199
|
+
*/
|
|
200
|
+
function useSearch() {
|
|
201
|
+
const context = (0, react_1.useContext)(SearchContext);
|
|
202
|
+
if (context === undefined) {
|
|
203
|
+
throw new Error('useSearch must be used within a SearchProvider');
|
|
204
|
+
}
|
|
205
|
+
return context;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=SearchContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchContext.js","sourceRoot":"","sources":["../../../src/client/contexts/SearchContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThemeContext - Manages theme state (light/dark mode)
|
|
3
|
+
*/
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
type Theme = 'light' | 'dark';
|
|
6
|
+
interface ThemeContextValue {
|
|
7
|
+
theme: Theme;
|
|
8
|
+
toggleTheme: () => void;
|
|
9
|
+
setTheme: (theme: Theme) => void;
|
|
10
|
+
}
|
|
11
|
+
interface ThemeProviderProps {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* ThemeProvider - Manages theme state and persistence
|
|
16
|
+
*/
|
|
17
|
+
export declare function ThemeProvider({ children }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
/**
|
|
19
|
+
* useTheme - Hook to access theme state and controls
|
|
20
|
+
*/
|
|
21
|
+
export declare function useTheme(): ThemeContextValue;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=ThemeContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../../src/client/contexts/ThemeContext.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9B,UAAU,iBAAiB;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAID,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAiD7D;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAQ5C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ThemeProvider = ThemeProvider;
|
|
4
|
+
exports.useTheme = useTheme;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* ThemeContext - Manages theme state (light/dark mode)
|
|
8
|
+
*/
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
const ThemeContext = (0, react_1.createContext)(undefined);
|
|
11
|
+
/**
|
|
12
|
+
* ThemeProvider - Manages theme state and persistence
|
|
13
|
+
*/
|
|
14
|
+
function ThemeProvider({ children }) {
|
|
15
|
+
const [theme, setThemeState] = (0, react_1.useState)(() => {
|
|
16
|
+
// Server-side: Always return 'light' (default)
|
|
17
|
+
if (typeof window === 'undefined') {
|
|
18
|
+
return 'light';
|
|
19
|
+
}
|
|
20
|
+
// Client-side: Read from data-theme attribute (set by inline script)
|
|
21
|
+
const currentTheme = document.documentElement.getAttribute('data-theme');
|
|
22
|
+
if (currentTheme === 'light' || currentTheme === 'dark') {
|
|
23
|
+
return currentTheme;
|
|
24
|
+
}
|
|
25
|
+
// Fallback: Check localStorage
|
|
26
|
+
const stored = localStorage.getItem('theme');
|
|
27
|
+
if (stored === 'light' || stored === 'dark') {
|
|
28
|
+
return stored;
|
|
29
|
+
}
|
|
30
|
+
// Fall back to system preference
|
|
31
|
+
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
32
|
+
return 'dark';
|
|
33
|
+
}
|
|
34
|
+
return 'light';
|
|
35
|
+
});
|
|
36
|
+
// Apply theme to document and save to localStorage
|
|
37
|
+
(0, react_1.useEffect)(() => {
|
|
38
|
+
if (typeof window === 'undefined')
|
|
39
|
+
return;
|
|
40
|
+
const root = document.documentElement;
|
|
41
|
+
root.setAttribute('data-theme', theme);
|
|
42
|
+
localStorage.setItem('theme', theme);
|
|
43
|
+
}, [theme]);
|
|
44
|
+
const toggleTheme = () => {
|
|
45
|
+
setThemeState(prev => prev === 'light' ? 'dark' : 'light');
|
|
46
|
+
};
|
|
47
|
+
const setTheme = (newTheme) => {
|
|
48
|
+
setThemeState(newTheme);
|
|
49
|
+
};
|
|
50
|
+
return ((0, jsx_runtime_1.jsx)(ThemeContext.Provider, { value: { theme, toggleTheme, setTheme }, children: children }));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* useTheme - Hook to access theme state and controls
|
|
54
|
+
*/
|
|
55
|
+
function useTheme() {
|
|
56
|
+
const context = (0, react_1.useContext)(ThemeContext);
|
|
57
|
+
if (context === undefined) {
|
|
58
|
+
throw new Error('useTheme must be used within a ThemeProvider');
|
|
59
|
+
}
|
|
60
|
+
return context;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=ThemeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext.js","sourceRoot":"","sources":["../../../src/client/contexts/ThemeContext.tsx"],"names":[],"mappings":";;AAuBA,sCAiDC;AAKD,4BAQC;;AArFD;;GAEG;AAEH,iCAAyF;AAUzF,MAAM,YAAY,GAAG,IAAA,qBAAa,EAAgC,SAAS,CAAC,CAAC;AAM7E;;GAEG;AACH,SAAgB,aAAa,CAAC,EAAE,QAAQ,EAAsB;IAC5D,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAQ,GAAG,EAAE;QAClD,+CAA+C;QAC/C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,qEAAqE;QACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,YAAY,KAAK,OAAO,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YACxD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,+BAA+B;QAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAiB,CAAC;QAC7D,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,iCAAiC;QACjC,IAAI,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACvC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,QAAe,EAAE,EAAE;QACnC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,CACL,uBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,YAC3D,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;IAEzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useContent hook - Fetches and manages content data
|
|
3
|
+
*/
|
|
4
|
+
import { ProcessedContent } from '../../types/content';
|
|
5
|
+
/**
|
|
6
|
+
* Hook for fetching content data for SPA navigation
|
|
7
|
+
*/
|
|
8
|
+
export declare function useContentData(): {
|
|
9
|
+
fetchContent: (path: string) => Promise<ProcessedContent | null>;
|
|
10
|
+
prefetchContent: (path: string) => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useContent.d.ts","sourceRoot":"","sources":["../../../src/client/hooks/useContent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AAExE;;GAEG;AACH,wBAAgB,cAAc;yBAOb,MAAM,KAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;4BA6CP,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;EAqBxE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* useContent hook - Fetches and manages content data
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useContentData = useContentData;
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const ContentContext_1 = require("../contexts/ContentContext");
|
|
9
|
+
/**
|
|
10
|
+
* Hook for fetching content data for SPA navigation
|
|
11
|
+
*/
|
|
12
|
+
function useContentData() {
|
|
13
|
+
const { setCurrentContent, setIsLoading, setError } = (0, ContentContext_1.useContent)();
|
|
14
|
+
/**
|
|
15
|
+
* Fetch content data from JSON file
|
|
16
|
+
*/
|
|
17
|
+
const fetchContent = (0, react_1.useCallback)(async (path) => {
|
|
18
|
+
setIsLoading(true);
|
|
19
|
+
setError(null);
|
|
20
|
+
try {
|
|
21
|
+
// Build content data path
|
|
22
|
+
// For default language pages: /content-data/slug.json
|
|
23
|
+
// For other languages: /content-data/lang/slug.json
|
|
24
|
+
const contentDataPath = path === '/'
|
|
25
|
+
? '/content-data/index.json'
|
|
26
|
+
: `${path.replace(/\/$/, '')}.json`.replace(/^\//, '/content-data/');
|
|
27
|
+
// Fetch content data
|
|
28
|
+
const response = await fetch(contentDataPath);
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new Error(`Failed to fetch content: ${response.status}`);
|
|
31
|
+
}
|
|
32
|
+
const data = await response.json();
|
|
33
|
+
// Convert to ProcessedContent
|
|
34
|
+
const content = {
|
|
35
|
+
metadata: data.metadata,
|
|
36
|
+
renderable: data.renderable,
|
|
37
|
+
};
|
|
38
|
+
setCurrentContent(content);
|
|
39
|
+
setIsLoading(false);
|
|
40
|
+
return content;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const err = error;
|
|
44
|
+
setError(err);
|
|
45
|
+
setIsLoading(false);
|
|
46
|
+
console.error('Failed to fetch content:', err);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}, [setCurrentContent, setIsLoading, setError]);
|
|
50
|
+
/**
|
|
51
|
+
* Prefetch content for a given path (for hover/link preloading)
|
|
52
|
+
*/
|
|
53
|
+
const prefetchContent = (0, react_1.useCallback)(async (path) => {
|
|
54
|
+
try {
|
|
55
|
+
const contentDataPath = path === '/'
|
|
56
|
+
? '/content-data/index.json'
|
|
57
|
+
: `${path.replace(/\/$/, '')}.json`.replace(/^\//, '/content-data/');
|
|
58
|
+
// Use link prefetch
|
|
59
|
+
const link = document.createElement('link');
|
|
60
|
+
link.rel = 'prefetch';
|
|
61
|
+
link.href = contentDataPath;
|
|
62
|
+
document.head.appendChild(link);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
// Silent fail for prefetch
|
|
66
|
+
console.warn('Prefetch failed:', error);
|
|
67
|
+
}
|
|
68
|
+
}, []);
|
|
69
|
+
return {
|
|
70
|
+
fetchContent,
|
|
71
|
+
prefetchContent,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=useContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useContent.js","sourceRoot":"","sources":["../../../src/client/hooks/useContent.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,wCAyEC;AAhFD,iCAA+C;AAC/C,+DAA6E;AAG7E;;GAEG;AACH,SAAgB,cAAc;IAC5B,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAiB,GAAE,CAAC;IAE1E;;OAEG;IACH,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC9B,KAAK,EAAE,IAAY,EAAoC,EAAE;QACvD,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,0BAA0B;YAC1B,sDAAsD;YACtD,oDAAoD;YACpD,MAAM,eAAe,GAAG,IAAI,KAAK,GAAG;gBAClC,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAEvE,qBAAqB;YACrB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqB,CAAC;YAEtD,8BAA8B;YAC9B,MAAM,OAAO,GAAqB;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC;YAEF,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC3B,YAAY,CAAC,KAAK,CAAC,CAAC;YAEpB,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAc,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,EACD,CAAC,iBAAiB,EAAE,YAAY,EAAE,QAAQ,CAAC,CAC5C,CAAC;IAEF;;OAEG;IACH,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,KAAK,EAAE,IAAY,EAAiB,EAAE;QACxE,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,KAAK,GAAG;gBAClC,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAEvE,oBAAoB;YACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2BAA2B;YAC3B,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,YAAY;QACZ,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useNavigation hook - Navigation helpers and utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Hook for handling navigation with SPA content loading
|
|
6
|
+
*/
|
|
7
|
+
export declare function useNavigation(): {
|
|
8
|
+
navigateToPath: (path: string) => Promise<void>;
|
|
9
|
+
handleLinkClick: (event: React.MouseEvent<HTMLAnchorElement>, href: string) => void;
|
|
10
|
+
handleLinkHover: (href: string) => void;
|
|
11
|
+
getCurrentLanguage: () => string;
|
|
12
|
+
buildLanguagePath: (slug: string, language: string, defaultLanguage?: string) => string;
|
|
13
|
+
currentPath: string;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=useNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNavigation.d.ts","sourceRoot":"","sources":["../../../src/client/hooks/useNavigation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,wBAAgB,aAAa;2BAUZ,MAAM;6BAiCX,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,MAAM;4BAyBlD,MAAM;8BAc4B,MAAM;8BAexC,MAAM,YAAY,MAAM,oBAAmB,MAAM,KAAU,MAAM;;EAkB3E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* useNavigation hook - Navigation helpers and utilities
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useNavigation = useNavigation;
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const react_router_dom_1 = require("react-router-dom");
|
|
9
|
+
const useContent_1 = require("./useContent");
|
|
10
|
+
const ContentContext_1 = require("../contexts/ContentContext");
|
|
11
|
+
/**
|
|
12
|
+
* Hook for handling navigation with SPA content loading
|
|
13
|
+
*/
|
|
14
|
+
function useNavigation() {
|
|
15
|
+
const navigate = (0, react_router_dom_1.useNavigate)();
|
|
16
|
+
const location = (0, react_router_dom_1.useLocation)();
|
|
17
|
+
const { fetchContent, prefetchContent } = (0, useContent_1.useContentData)();
|
|
18
|
+
const { setIsLoading, setError } = (0, ContentContext_1.useContent)();
|
|
19
|
+
/**
|
|
20
|
+
* Navigate to a path and load its content
|
|
21
|
+
*/
|
|
22
|
+
const navigateToPath = (0, react_1.useCallback)(async (path) => {
|
|
23
|
+
// Don't navigate if already on this path
|
|
24
|
+
if (location.pathname === path) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
setIsLoading(true);
|
|
28
|
+
setError(null);
|
|
29
|
+
try {
|
|
30
|
+
// Fetch content first
|
|
31
|
+
const content = await fetchContent(path);
|
|
32
|
+
if (content) {
|
|
33
|
+
// Navigate to the NORMALIZED path (same as what fetchContent uses)
|
|
34
|
+
const normalizedPath = path === '/' ? '/' : path.replace(/\/$/, '');
|
|
35
|
+
navigate(normalizedPath);
|
|
36
|
+
// Scroll to top
|
|
37
|
+
window.scrollTo(0, 0);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
setError(error);
|
|
42
|
+
setIsLoading(false);
|
|
43
|
+
}
|
|
44
|
+
}, [location.pathname, navigate, fetchContent, setIsLoading, setError]);
|
|
45
|
+
/**
|
|
46
|
+
* Handle link click for SPA navigation
|
|
47
|
+
*/
|
|
48
|
+
const handleLinkClick = (0, react_1.useCallback)((event, href) => {
|
|
49
|
+
// Check if it's an external link
|
|
50
|
+
const isExternal = href.startsWith('http://') || href.startsWith('https://');
|
|
51
|
+
// Check if it's a hash link (anchor)
|
|
52
|
+
const isHash = href.startsWith('#');
|
|
53
|
+
// Let browser handle external links and hash links
|
|
54
|
+
if (isExternal || isHash) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Prevent default navigation
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
// Use SPA navigation
|
|
60
|
+
navigateToPath(href);
|
|
61
|
+
}, [navigateToPath]);
|
|
62
|
+
/**
|
|
63
|
+
* Prefetch content on link hover
|
|
64
|
+
*/
|
|
65
|
+
const handleLinkHover = (0, react_1.useCallback)((href) => {
|
|
66
|
+
const isExternal = href.startsWith('http://') || href.startsWith('https://');
|
|
67
|
+
const isHash = href.startsWith('#');
|
|
68
|
+
if (!isExternal && !isHash) {
|
|
69
|
+
prefetchContent(href);
|
|
70
|
+
}
|
|
71
|
+
}, [prefetchContent]);
|
|
72
|
+
/**
|
|
73
|
+
* Get current language from path
|
|
74
|
+
*/
|
|
75
|
+
const getCurrentLanguage = (0, react_1.useCallback)(() => {
|
|
76
|
+
const parts = location.pathname.split('/').filter(Boolean);
|
|
77
|
+
// Check if first segment is a language code (2-3 letters)
|
|
78
|
+
if (parts.length > 0 && /^[a-z]{2,3}$/i.test(parts[0])) {
|
|
79
|
+
return parts[0];
|
|
80
|
+
}
|
|
81
|
+
return 'en'; // Default language
|
|
82
|
+
}, [location.pathname]);
|
|
83
|
+
/**
|
|
84
|
+
* Build language-specific path
|
|
85
|
+
*/
|
|
86
|
+
const buildLanguagePath = (0, react_1.useCallback)((slug, language, defaultLanguage = 'en') => {
|
|
87
|
+
if (language === defaultLanguage) {
|
|
88
|
+
return slug === 'index' || slug === '' ? '/' : `/${slug}`;
|
|
89
|
+
}
|
|
90
|
+
return slug === 'index' || slug === '' ? `/${language}` : `/${language}/${slug}`;
|
|
91
|
+
}, []);
|
|
92
|
+
return {
|
|
93
|
+
navigateToPath,
|
|
94
|
+
handleLinkClick,
|
|
95
|
+
handleLinkHover,
|
|
96
|
+
getCurrentLanguage,
|
|
97
|
+
buildLanguagePath,
|
|
98
|
+
currentPath: location.pathname,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=useNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNavigation.js","sourceRoot":"","sources":["../../../src/client/hooks/useNavigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useSearch hook - Re-export and extend search functionality
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Hook for search functionality with keyboard shortcuts
|
|
6
|
+
*/
|
|
7
|
+
export declare function useSearch(): {
|
|
8
|
+
debouncedSearch: (query: string, delay?: number) => void;
|
|
9
|
+
query: string;
|
|
10
|
+
setQuery: (query: string) => void;
|
|
11
|
+
results: import("../contexts/SearchContext").SearchResult[];
|
|
12
|
+
setResults: (results: import("../contexts/SearchContext").SearchResult[]) => void;
|
|
13
|
+
isOpen: boolean;
|
|
14
|
+
openSearch: () => void;
|
|
15
|
+
closeSearch: () => void;
|
|
16
|
+
toggleSearch: () => void;
|
|
17
|
+
isSearching: boolean;
|
|
18
|
+
setIsSearching: (searching: boolean) => void;
|
|
19
|
+
search: (searchQuery: string) => Promise<void>;
|
|
20
|
+
clearSearch: () => void;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=useSearch.d.ts.map
|