fix: Fix searchbar for production
3
.env.example
Normal file
@ -0,0 +1,3 @@
|
||||
PORT=5500
|
||||
HMR_PORT=5501
|
||||
NODE_ENV=development
|
||||
@ -1,9 +1,13 @@
|
||||
import { buildFlexSearch, type SearchResult } from "@/services/FlexSearchService";
|
||||
import { docsService } from "@/services/DocsService";
|
||||
|
||||
export const onSearch = async (query: string): Promise<SearchResult[]> => {
|
||||
export const onSearch = async (query: string, maxResults?: number): Promise<SearchResult[]> => {
|
||||
const search = buildFlexSearch(await docsService.fetchDocs());
|
||||
const results = search(query);
|
||||
|
||||
if (maxResults) {
|
||||
return results.slice(0, maxResults);
|
||||
}
|
||||
|
||||
return results;
|
||||
};
|
||||
|
||||
@ -1,26 +1,34 @@
|
||||
// import type { SearchResult } from "@/lib/search";
|
||||
import type { SearchResult } from "@/services/FlexSearchService";
|
||||
|
||||
import { forwardRef, Fragment, Suspense, useCallback, useEffect, useId, useRef, useState } from "react";
|
||||
import Highlighter from "react-highlight-words";
|
||||
import { usePageContext } from "vike-react/usePageContext";
|
||||
import { navigate as routerNavigate } from "vike/client/router";
|
||||
// import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
||||
import {
|
||||
type AutocompleteApi,
|
||||
type AutocompleteCollection,
|
||||
type AutocompleteState,
|
||||
createAutocomplete,
|
||||
} from "@algolia/autocomplete-core";
|
||||
import { useId, useState, useEffect, createContext, useContext, Fragment } from "react";
|
||||
import { SearchResult } from "@/services/FlexSearchService";
|
||||
import { Dialog, DialogPanel } from "@headlessui/react";
|
||||
import { useDebounce } from "@/hooks/useDebounce";
|
||||
import Highlighter from "react-highlight-words";
|
||||
import { navigation } from "@/lib/navigation";
|
||||
import { navigate } from "vike/client/router";
|
||||
import { onSearch } from "./Search.telefunc";
|
||||
import clsx from "clsx";
|
||||
|
||||
import { navigation } from "@/lib/navigation";
|
||||
import { onSearch } from "./Search.telefunc";
|
||||
|
||||
type EmptyObject = Record<string, never>;
|
||||
|
||||
type Autocomplete = AutocompleteApi<SearchResult, React.SyntheticEvent, React.MouseEvent, React.KeyboardEvent>;
|
||||
const SearchContext = createContext<{
|
||||
query: string;
|
||||
close: () => void;
|
||||
results: SearchResult[];
|
||||
isLoading: boolean;
|
||||
isOpened: boolean;
|
||||
setQuery: (query: string) => void;
|
||||
setIsOpened: (isOpened: boolean) => void;
|
||||
setIsLoading: (isLoading: boolean) => void;
|
||||
setResults: (results: SearchResult[]) => void;
|
||||
}>({
|
||||
query: "",
|
||||
close: () => {},
|
||||
results: [],
|
||||
isLoading: false,
|
||||
isOpened: false,
|
||||
setQuery: () => {},
|
||||
setIsOpened: () => {},
|
||||
setIsLoading: () => {},
|
||||
setResults: () => {},
|
||||
});
|
||||
|
||||
function SearchIcon(props: React.ComponentPropsWithoutRef<"svg">) {
|
||||
return (
|
||||
@ -30,61 +38,8 @@ function SearchIcon(props: React.ComponentPropsWithoutRef<"svg">) {
|
||||
);
|
||||
}
|
||||
|
||||
function useAutocomplete({ close }: { close: (autocomplete: Autocomplete) => void }) {
|
||||
let id = useId();
|
||||
// let router = useRouter();
|
||||
let [autocompleteState, setAutocompleteState] = useState<AutocompleteState<SearchResult> | EmptyObject>({});
|
||||
|
||||
function navigate({ itemUrl }: { itemUrl?: string }) {
|
||||
if (!itemUrl) {
|
||||
return;
|
||||
}
|
||||
|
||||
routerNavigate(itemUrl);
|
||||
|
||||
if (itemUrl === window.location.pathname + window.location.search + window.location.hash) {
|
||||
close(autocomplete);
|
||||
}
|
||||
}
|
||||
|
||||
let [autocomplete] = useState<Autocomplete>(() =>
|
||||
createAutocomplete<SearchResult, React.SyntheticEvent, React.MouseEvent, React.KeyboardEvent>({
|
||||
id,
|
||||
placeholder: "Find something...",
|
||||
defaultActiveItemId: 0,
|
||||
onStateChange({ state }) {
|
||||
setAutocompleteState(state);
|
||||
},
|
||||
shouldPanelOpen({ state }) {
|
||||
return state.query !== "";
|
||||
},
|
||||
navigator: {
|
||||
navigate,
|
||||
},
|
||||
async getSources({ query }) {
|
||||
return onSearch(query).then((searchResult) => {
|
||||
return [
|
||||
{
|
||||
sourceId: "documentation",
|
||||
getItems() {
|
||||
return searchResult;
|
||||
},
|
||||
getItemUrl({ item }) {
|
||||
return item.url;
|
||||
},
|
||||
onSelect: navigate,
|
||||
},
|
||||
];
|
||||
});
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
return { autocomplete, autocompleteState };
|
||||
}
|
||||
|
||||
function LoadingIcon(props: React.ComponentPropsWithoutRef<"svg">) {
|
||||
let id = useId();
|
||||
const id = useId();
|
||||
|
||||
return (
|
||||
<svg viewBox="0 0 20 20" fill="none" aria-hidden="true" {...props}>
|
||||
@ -100,6 +55,41 @@ function LoadingIcon(props: React.ComponentPropsWithoutRef<"svg">) {
|
||||
);
|
||||
}
|
||||
|
||||
function SearchInput() {
|
||||
const { close, setQuery, query, isLoading } = useContext(SearchContext);
|
||||
|
||||
return (
|
||||
<div className="group relative flex h-12">
|
||||
<SearchIcon className="pointer-events-none absolute top-0 left-4 h-full w-5 fill-slate-400 dark:fill-slate-500" />
|
||||
<input
|
||||
data-autofocus
|
||||
className={clsx(
|
||||
"flex-auto appearance-none bg-transparent pl-12 text-slate-900 outline-hidden placeholder:text-slate-400 focus:w-full focus:flex-none sm:text-sm dark:text-white [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden",
|
||||
isLoading ? "pr-11" : "pr-4",
|
||||
)}
|
||||
onKeyDown={(event) => {
|
||||
if (event.key === "Escape") {
|
||||
// In Safari, closing the dialog with the escape key can sometimes cause the scroll position to jump to the
|
||||
// bottom of the page. This is a workaround for that until we can figure out a proper fix in Headless UI.
|
||||
if (document.activeElement instanceof HTMLElement) {
|
||||
document.activeElement.blur();
|
||||
}
|
||||
|
||||
close();
|
||||
}
|
||||
}}
|
||||
value={query}
|
||||
onChange={(event) => setQuery(event.currentTarget.value)}
|
||||
/>
|
||||
{isLoading && (
|
||||
<div className="absolute inset-y-0 right-3 flex items-center">
|
||||
<LoadingIcon className="h-6 w-6 animate-spin stroke-slate-200 text-slate-400 dark:stroke-slate-700 dark:text-slate-500" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function HighlightQuery({ text, query }: { text: string; query: string }) {
|
||||
return (
|
||||
<Highlighter
|
||||
@ -111,32 +101,26 @@ function HighlightQuery({ text, query }: { text: string; query: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
function SearchResultItem({
|
||||
result,
|
||||
autocomplete,
|
||||
collection,
|
||||
query,
|
||||
}: {
|
||||
result: SearchResult;
|
||||
autocomplete: Autocomplete;
|
||||
collection: AutocompleteCollection<SearchResult>;
|
||||
query: string;
|
||||
}) {
|
||||
let id = useId();
|
||||
function SearchResultItem({ result, query }: { result: SearchResult; query: string }) {
|
||||
const { close } = useContext(SearchContext);
|
||||
const id = useId();
|
||||
|
||||
let sectionTitle = navigation.find((section) =>
|
||||
const sectionTitle = navigation.find((section) =>
|
||||
section.links.find((link) => link.href === result.url.split("#")[0]),
|
||||
)?.title;
|
||||
let hierarchy = [sectionTitle, result.pageTitle].filter((x): x is string => typeof x === "string");
|
||||
|
||||
const hierarchy = [sectionTitle, result.pageTitle].filter((x): x is string => typeof x === "string");
|
||||
|
||||
return (
|
||||
<li
|
||||
className="group block cursor-default rounded-lg px-3 py-2 aria-selected:bg-slate-100 dark:aria-selected:bg-slate-700/30"
|
||||
className="group block cursor-default rounded-lg px-3 py-2 aria-selected:bg-slate-100 dark:aria-selected:bg-slate-700/30 hover:bg-slate-100 dark:hover:bg-slate-700/30"
|
||||
aria-labelledby={`${id}-hierarchy ${id}-title`}
|
||||
{...autocomplete.getItemProps({
|
||||
item: result,
|
||||
source: collection.source,
|
||||
})}
|
||||
role="option"
|
||||
tabIndex={0}
|
||||
onClick={() => {
|
||||
navigate(result.url);
|
||||
close();
|
||||
}}
|
||||
>
|
||||
<div
|
||||
id={`${id}-title`}
|
||||
@ -165,19 +149,13 @@ function SearchResultItem({
|
||||
);
|
||||
}
|
||||
|
||||
function SearchResults({
|
||||
autocomplete,
|
||||
query,
|
||||
collection,
|
||||
}: {
|
||||
autocomplete: Autocomplete;
|
||||
query: string;
|
||||
collection: AutocompleteCollection<SearchResult>;
|
||||
}) {
|
||||
if (collection.items.length === 0) {
|
||||
function SearchResults() {
|
||||
const { results, query } = useContext(SearchContext);
|
||||
|
||||
if (results.length === 0) {
|
||||
return (
|
||||
<p className="px-4 py-8 text-center text-sm text-slate-700 dark:text-slate-400">
|
||||
No results for “
|
||||
Aucun résultat pour “
|
||||
<span className="break-words text-slate-900 dark:text-white">{query}</span>
|
||||
”
|
||||
</p>
|
||||
@ -185,117 +163,24 @@ function SearchResults({
|
||||
}
|
||||
|
||||
return (
|
||||
<ul {...autocomplete.getListProps()}>
|
||||
{collection.items.map((result) => (
|
||||
<SearchResultItem
|
||||
key={result.url}
|
||||
result={result}
|
||||
autocomplete={autocomplete}
|
||||
collection={collection}
|
||||
query={query}
|
||||
/>
|
||||
<ul>
|
||||
{results.map((result) => (
|
||||
<SearchResultItem key={result.url} result={result} query={query} />
|
||||
))}
|
||||
</ul>
|
||||
);
|
||||
}
|
||||
|
||||
const SearchInput = forwardRef<
|
||||
React.ComponentRef<"input">,
|
||||
{
|
||||
autocomplete: Autocomplete;
|
||||
autocompleteState: AutocompleteState<SearchResult> | EmptyObject;
|
||||
onClose: () => void;
|
||||
}
|
||||
>(function SearchInput({ autocomplete, autocompleteState, onClose }, inputRef) {
|
||||
let inputProps = autocomplete.getInputProps({ inputElement: null });
|
||||
|
||||
return (
|
||||
<div className="group relative flex h-12">
|
||||
<SearchIcon className="pointer-events-none absolute top-0 left-4 h-full w-5 fill-slate-400 dark:fill-slate-500" />
|
||||
<input
|
||||
ref={inputRef}
|
||||
data-autofocus
|
||||
className={clsx(
|
||||
"flex-auto appearance-none bg-transparent pl-12 text-slate-900 outline-hidden placeholder:text-slate-400 focus:w-full focus:flex-none sm:text-sm dark:text-white [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden",
|
||||
autocompleteState.status === "stalled" ? "pr-11" : "pr-4",
|
||||
)}
|
||||
{...inputProps}
|
||||
onKeyDown={(event) => {
|
||||
if (event.key === "Escape" && !autocompleteState.isOpen && autocompleteState.query === "") {
|
||||
// In Safari, closing the dialog with the escape key can sometimes cause the scroll position to jump to the
|
||||
// bottom of the page. This is a workaround for that until we can figure out a proper fix in Headless UI.
|
||||
if (document.activeElement instanceof HTMLElement) {
|
||||
document.activeElement.blur();
|
||||
}
|
||||
|
||||
onClose();
|
||||
} else {
|
||||
inputProps.onKeyDown(event);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
{autocompleteState.status === "stalled" && (
|
||||
<div className="absolute inset-y-0 right-3 flex items-center">
|
||||
<LoadingIcon className="h-6 w-6 animate-spin stroke-slate-200 text-slate-400 dark:stroke-slate-700 dark:text-slate-500" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
});
|
||||
|
||||
function CloseOnNavigation({
|
||||
close,
|
||||
autocomplete,
|
||||
}: {
|
||||
close: (autocomplete: Autocomplete) => void;
|
||||
autocomplete: Autocomplete;
|
||||
}) {
|
||||
const { urlParsed } = usePageContext();
|
||||
const { pathname, search } = urlParsed;
|
||||
function SearchDialog({ className }: { className?: string }) {
|
||||
const { close, isOpened, setIsOpened, results } = useContext(SearchContext);
|
||||
|
||||
useEffect(() => {
|
||||
close(autocomplete);
|
||||
}, [pathname, search, close, autocomplete]);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function SearchDialog({
|
||||
open,
|
||||
setOpen,
|
||||
className,
|
||||
}: {
|
||||
open: boolean;
|
||||
setOpen: (open: boolean) => void;
|
||||
className?: string;
|
||||
}) {
|
||||
let formRef = useRef<React.ComponentRef<"form">>(null);
|
||||
let panelRef = useRef<React.ComponentRef<"div">>(null);
|
||||
let inputRef = useRef<React.ComponentRef<typeof SearchInput>>(null);
|
||||
|
||||
let close = useCallback(
|
||||
(autocomplete: Autocomplete) => {
|
||||
setOpen(false);
|
||||
autocomplete.setQuery("");
|
||||
},
|
||||
[setOpen],
|
||||
);
|
||||
|
||||
let { autocomplete, autocompleteState } = useAutocomplete({
|
||||
close() {
|
||||
close(autocomplete);
|
||||
},
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
if (open) {
|
||||
return;
|
||||
}
|
||||
if (isOpened) return;
|
||||
|
||||
function onKeyDown(event: KeyboardEvent) {
|
||||
if (event.key === "k" && (event.metaKey || event.ctrlKey)) {
|
||||
event.preventDefault();
|
||||
setOpen(true);
|
||||
setIsOpened(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -304,46 +189,21 @@ function SearchDialog({
|
||||
return () => {
|
||||
window.removeEventListener("keydown", onKeyDown);
|
||||
};
|
||||
}, [open, setOpen]);
|
||||
}, [isOpened, setIsOpened]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Suspense fallback={null}>
|
||||
<CloseOnNavigation close={close} autocomplete={autocomplete} />
|
||||
</Suspense>
|
||||
<Dialog open={open} onClose={() => close(autocomplete)} className={clsx("fixed inset-0 z-50", className)}>
|
||||
<Dialog open={isOpened} onClose={close} className={clsx("fixed inset-0 z-50", className)}>
|
||||
<div className="fixed inset-0 bg-slate-900/50 backdrop-blur-sm" />
|
||||
|
||||
<div className="fixed inset-0 overflow-y-auto px-4 py-4 sm:px-6 sm:py-20 md:py-32 lg:px-8 lg:py-[15vh]">
|
||||
<DialogPanel className="mx-auto transform-gpu overflow-hidden rounded-xl bg-white shadow-xl sm:max-w-xl dark:bg-slate-800 dark:ring-1 dark:ring-slate-700">
|
||||
<div {...autocomplete.getRootProps({})}>
|
||||
<form
|
||||
ref={formRef}
|
||||
{...autocomplete.getFormProps({
|
||||
inputElement: inputRef.current,
|
||||
})}
|
||||
>
|
||||
<SearchInput
|
||||
ref={inputRef}
|
||||
autocomplete={autocomplete}
|
||||
autocompleteState={autocompleteState}
|
||||
onClose={() => setOpen(false)}
|
||||
/>
|
||||
<div
|
||||
ref={panelRef}
|
||||
className="border-t border-slate-200 bg-white px-2 py-3 empty:hidden dark:border-slate-400/10 dark:bg-slate-800"
|
||||
{...autocomplete.getPanelProps({})}
|
||||
>
|
||||
{autocompleteState.isOpen && (
|
||||
<SearchResults
|
||||
autocomplete={autocomplete}
|
||||
query={autocompleteState.query}
|
||||
collection={autocompleteState.collections[0]}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<form onSubmit={(event) => event.preventDefault()}>
|
||||
<SearchInput />
|
||||
<div className="border-t border-slate-200 bg-white px-2 py-3 empty:hidden dark:border-slate-400/10 dark:bg-slate-800">
|
||||
{results.length > 0 && <SearchResults />}
|
||||
</div>
|
||||
</form>
|
||||
</DialogPanel>
|
||||
</div>
|
||||
</Dialog>
|
||||
@ -351,44 +211,57 @@ function SearchDialog({
|
||||
);
|
||||
}
|
||||
|
||||
function useSearchProps() {
|
||||
let buttonRef = useRef<React.ComponentRef<"button">>(null);
|
||||
let [open, setOpen] = useState(false);
|
||||
|
||||
return {
|
||||
buttonProps: {
|
||||
ref: buttonRef,
|
||||
onClick() {
|
||||
setOpen(true);
|
||||
},
|
||||
},
|
||||
dialogProps: {
|
||||
open,
|
||||
setOpen: useCallback((open: boolean) => {
|
||||
let { width = 0, height = 0 } = buttonRef.current?.getBoundingClientRect() ?? {};
|
||||
if (!open || (width !== 0 && height !== 0)) {
|
||||
setOpen(open);
|
||||
}
|
||||
}, []),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function Search() {
|
||||
let [modifierKey, setModifierKey] = useState<string>();
|
||||
let { buttonProps, dialogProps } = useSearchProps();
|
||||
const [results, setResults] = useState<SearchResult[]>([]);
|
||||
const [debouncedQuery, setDebouncedQuery] = useDebounce();
|
||||
const [modifierKey, setModifierKey] = useState<string>();
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [isOpened, setIsOpened] = useState(false);
|
||||
const [query, setQuery] = useState("");
|
||||
|
||||
useEffect(() => {
|
||||
const platform = navigator.userAgentData?.platform || navigator.platform;
|
||||
setModifierKey(/(Mac|iPhone|iPod|iPad)/i.test(platform) ? "⌘" : "Ctrl ");
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
setDebouncedQuery(query);
|
||||
}, [query]);
|
||||
|
||||
useEffect(() => {
|
||||
if (debouncedQuery.length === 0) {
|
||||
setIsLoading(false);
|
||||
setResults([]);
|
||||
return;
|
||||
}
|
||||
|
||||
setIsLoading(true);
|
||||
|
||||
onSearch(debouncedQuery, 5)
|
||||
.then(setResults)
|
||||
.finally(() => {
|
||||
setIsLoading(false);
|
||||
});
|
||||
}, [debouncedQuery]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<SearchContext.Provider
|
||||
value={{
|
||||
query,
|
||||
close: () => setIsOpened(false),
|
||||
results,
|
||||
isLoading,
|
||||
isOpened,
|
||||
setQuery,
|
||||
setIsOpened,
|
||||
setIsLoading,
|
||||
setResults,
|
||||
}}
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
className="group flex h-6 w-6 items-center justify-center sm:justify-start md:h-auto md:w-80 md:flex-none md:rounded-lg md:py-2.5 md:pr-3.5 md:pl-4 md:text-sm md:ring-1 md:ring-slate-200 md:hover:ring-slate-300 lg:w-96 dark:md:bg-slate-800/75 dark:md:ring-white/5 dark:md:ring-inset dark:md:hover:bg-slate-700/40 dark:md:hover:ring-slate-500"
|
||||
{...buttonProps}
|
||||
onClick={() => setIsOpened(true)}
|
||||
>
|
||||
<SearchIcon className="h-5 w-5 flex-none fill-slate-400 group-hover:fill-slate-500 md:group-hover:fill-slate-400 dark:fill-slate-500" />
|
||||
<span className="sr-only md:not-sr-only md:ml-2 md:text-slate-500 md:dark:text-slate-400">Rechercher...</span>
|
||||
@ -399,7 +272,7 @@ export function Search() {
|
||||
</kbd>
|
||||
)}
|
||||
</button>
|
||||
<SearchDialog {...dialogProps} />
|
||||
</>
|
||||
<SearchDialog />
|
||||
</SearchContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
206
app/dist/assets.json
vendored
Normal file
@ -0,0 +1,206 @@
|
||||
{
|
||||
"_chunk-FoQi8sq6.js": {
|
||||
"file": "assets/chunks/chunk-FoQi8sq6.js",
|
||||
"name": "renderPageClientSide",
|
||||
"dynamicImports": [
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/_error",
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/index",
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/docs"
|
||||
]
|
||||
},
|
||||
"_chunk-YnSR0nZE.js": {
|
||||
"file": "assets/chunks/chunk-YnSR0nZE.js",
|
||||
"name": "Loading",
|
||||
"imports": [
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/blur-indigo.Cbr0CUfr.png",
|
||||
"assets/static/blur-cyan.DJww6-ho.png",
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
},
|
||||
"_layouts_prism-feac250c.B2a_QZIO.css": {
|
||||
"file": "assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"src": "_layouts_prism-feac250c.B2a_QZIO.css"
|
||||
},
|
||||
"_layouts_style-b34a8e57.HyLxvJhb.css": {
|
||||
"file": "assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"src": "_layouts_style-b34a8e57.HyLxvJhb.css"
|
||||
},
|
||||
"_layouts_tailwind-00e65532.kM054_rr.css": {
|
||||
"file": "assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"src": "_layouts_tailwind-00e65532.kM054_rr.css"
|
||||
},
|
||||
"_style-1efdef47.B5Troj4Q.css": {
|
||||
"file": "assets/static/style-1efdef47.B5Troj4Q.css",
|
||||
"src": "_style-1efdef47.B5Troj4Q.css"
|
||||
},
|
||||
"_vike-react-fe70c48a.BcWtY8Ol.css": {
|
||||
"file": "assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"src": "_vike-react-fe70c48a.BcWtY8Ol.css"
|
||||
},
|
||||
"images/blur-cyan.png": {
|
||||
"file": "assets/static/blur-cyan.DJww6-ho.png",
|
||||
"src": "images/blur-cyan.png"
|
||||
},
|
||||
"images/blur-indigo.png": {
|
||||
"file": "assets/static/blur-indigo.Cbr0CUfr.png",
|
||||
"src": "images/blur-indigo.png"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-vietnamese-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-vietnamese-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-wght-normal.woff2": {
|
||||
"file": "assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-vietnamese-wght-normal.woff2": {
|
||||
"file": "assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-vietnamese-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/vike@0.4.228_react-streaming@0.3.50_react-dom@19.1.0_react@19.1.0__react@19.1.0__vite@6_a5d8557c8c03851ef9ff4b1fc2b0d591/node_modules/vike/dist/esm/client/client-routing-runtime/entry.js": {
|
||||
"file": "assets/entries/entry-client-routing.Bc4tBJ4_.js",
|
||||
"name": "entries/entry-client-routing",
|
||||
"src": "node_modules/.pnpm/vike@0.4.228_react-streaming@0.3.50_react-dom@19.1.0_react@19.1.0__react@19.1.0__vite@6_a5d8557c8c03851ef9ff4b1fc2b0d591/node_modules/vike/dist/esm/client/client-routing-runtime/entry.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_chunk-FoQi8sq6.js"
|
||||
]
|
||||
},
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/_error": {
|
||||
"file": "assets/entries/pages_error.DlwLYWej.js",
|
||||
"name": "entries/pages/_error",
|
||||
"src": "virtual:vike:pageConfigValuesAll:client:/pages/_error",
|
||||
"isEntry": true,
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_chunk-YnSR0nZE.js",
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
},
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/docs": {
|
||||
"file": "assets/entries/pages_docs.Gi7h7KmT.js",
|
||||
"name": "entries/pages/docs",
|
||||
"src": "virtual:vike:pageConfigValuesAll:client:/pages/docs",
|
||||
"isEntry": true,
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_chunk-YnSR0nZE.js",
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
},
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/index": {
|
||||
"file": "assets/entries/pages_index.Bb824t1n.js",
|
||||
"name": "entries/pages/index",
|
||||
"src": "virtual:vike:pageConfigValuesAll:client:/pages/index",
|
||||
"isEntry": true,
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_chunk-YnSR0nZE.js",
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
}
|
||||
}
|
||||
4
app/dist/client/assets/chunks/chunk-FoQi8sq6.js
vendored
Normal file
75
app/dist/client/assets/chunks/chunk-YnSR0nZE.js
vendored
Normal file
1
app/dist/client/assets/entries/entry-client-routing.Bc4tBJ4_.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
import{e as c,o as u,s as f,r as s,g,h as d,j as m,k as p,l as S,m as k,n as y,q as P,u as h,v as w,c as N,w as C}from"../chunks/chunk-FoQi8sq6.js";function v(){window.addEventListener("popstate",H)}async function H(){c("onPopState()");const{isHistoryStateEnhanced:t,previous:n,current:i}=u();if(t)await L(n,i);else return}async function L(t,n){const i=n.state.scrollPosition||void 0;if(r(n.url)===r(t.url)&&n.url!==t.url){f(i);return}const o=n.state.triggeredBy==="user"||t.state.triggeredBy==="user",l=!n.state.timestamp||!t.state.timestamp?null:n.state.timestamp<t.state.timestamp;await s({scrollTarget:i,isBackwardNavigation:l,doNotRenderIfSamePage:o})}function r(t){return t.split("#")[0]}function B(){document.addEventListener("click",T)}async function T(t){if(!A(t))return;const n=R(t.target);if(!n)return;const i=n.getAttribute("href");if(i===null)return;if(i.includes("#")&&g(i)){t.preventDefault(),d(i.split("#")[1]);return}if(m(n))return;t.preventDefault();let e;{const a=n.getAttribute("keep-scroll-position");a!==null&&(e={preserveScroll:a!=="false"})}await s({scrollTarget:e,urlOriginal:i,isBackwardNavigation:!1})}function A(t){return t.button===0&&!t.ctrlKey&&!t.shiftKey&&!t.altKey&&!t.metaKey}function R(t){for(;t.tagName!=="A";){const{parentNode:n}=t;if(!n)return null;t=n}return t}async function E(){K();const t=I();B(),p(),await t}async function I(){h(w()===0),await s({scrollTarget:{preserveScroll:!0},isBackwardNavigation:null,isClientSideNavigation:!1})}function K(){S(),k(),y(),P(),v()}N();C();E();
|
||||
65
app/dist/client/assets/entries/pages_docs.Gi7h7KmT.js
vendored
Normal file
1
app/dist/client/assets/entries/pages_error.DlwLYWej.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
import{u as a,j as e,L as i,i as o,a as r,D as l,b as n,c as s,o as d}from"../chunks/chunk-YnSR0nZE.js";/* empty css */import"../chunks/chunk-FoQi8sq6.js";/* empty css *//* empty css *//* empty css *//* empty css */function p(){const{is404:t}=a();return t?e.jsx(e.Fragment,{children:e.jsx("div",{className:"max-w-2xl min-w-0 flex-auto px-4 py-16 lg:max-w-none lg:pr-0 lg:pl-8 xl:px-16",children:e.jsxs("div",{className:"flex h-full flex-col items-center justify-center text-center",children:[e.jsx("p",{className:"font-display text-sm font-medium text-slate-900 dark:text-white",children:"404"}),e.jsx("h1",{className:"mt-3 font-display text-3xl tracking-tight text-slate-900 dark:text-white",children:"Page introuvable"}),e.jsx("p",{className:"mt-2 text-sm text-slate-500 dark:text-slate-400",children:"Désolé, nous ne pouvons pas trouver la page que vous recherchez."}),e.jsx(i,{href:"/",className:"mt-8 text-sm font-medium text-slate-900 dark:text-white",children:"Retour à l'accueil"})]})})}):e.jsxs(e.Fragment,{children:[e.jsx("h1",{children:"500 Internal Server Error"}),e.jsx("p",{children:"Something went wrong."})]})}const u=Object.freeze(Object.defineProperty({__proto__:null,default:p},Symbol.toStringTag,{value:"Module"})),y={isClientRuntimeLoaded:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!0}},onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/onRenderClient",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:d}},onPageTransitionStart:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+onPageTransitionStart.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:s}},onPageTransitionEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+onPageTransitionEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:n}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/_error/+Page.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:u}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/config",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},Layout:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/layouts/LayoutDefault.tsx",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"pointer-import",value:l}]},title:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+title.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:r}},lang:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+config.ts",fileExportPathToShowToUser:["default","lang"]},valueSerialized:{type:"js-serialized",value:"fr"}},Loading:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/Loading",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:o}}};export{y as configValuesSerialized};
|
||||
1
app/dist/client/assets/entries/pages_index.Bb824t1n.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
import{j as e,i as t,a,D as o,b as i,c as l,o as r}from"../chunks/chunk-YnSR0nZE.js";/* empty css */import"../chunks/chunk-FoQi8sq6.js";/* empty css *//* empty css *//* empty css *//* empty css */function n(){return e.jsx("main",{className:"max-w-2xl min-w-0 flex-auto px-4 py-16 lg:max-w-none lg:pr-0 lg:pl-8 xl:px-16",children:e.jsx("h1",{className:"font-bold text-3xl pb-4",children:"My Vike app"})})}const d=Object.freeze(Object.defineProperty({__proto__:null,default:n},Symbol.toStringTag,{value:"Module"})),y={isClientRuntimeLoaded:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!0}},onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/onRenderClient",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:r}},onPageTransitionStart:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+onPageTransitionStart.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:l}},onPageTransitionEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+onPageTransitionEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:i}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/index/+Page.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:d}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/config",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},Layout:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/layouts/LayoutDefault.tsx",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"pointer-import",value:o}]},title:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+title.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:a}},lang:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/+config.ts",fileExportPathToShowToUser:["default","lang"]},valueSerialized:{type:"js-serialized",value:"fr"}},Loading:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/Loading",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:t}}};export{y as configValuesSerialized};
|
||||
BIN
app/dist/client/assets/static/blur-cyan.DJww6-ho.png
vendored
Normal file
|
After Width: | Height: | Size: 214 KiB |
BIN
app/dist/client/assets/static/blur-indigo.Cbr0CUfr.png
vendored
Normal file
|
After Width: | Height: | Size: 219 KiB |
BIN
app/dist/client/assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/inter-greek-wght-normal.CaVNZxsx.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/inter-latin-wght-normal.C2S99t-D.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2
vendored
Normal file
1
app/dist/client/assets/static/layouts_prism-feac250c.B2a_QZIO.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
pre[class*=language-]{color:var(--color-slate-50)}.token.tag,.token.class-name,.token.selector,.token.selector .class,.token.selector.class,.token.function{color:var(--color-pink-400)}.token.attr-name,.token.keyword,.token.rule,.token.pseudo-class,.token.important{color:var(--color-slate-300)}.token.module{color:var(--color-pink-400)}.token.attr-value,.token.class,.token.string,.token.property{color:var(--color-sky-300)}.token.punctuation,.token.attr-equals{color:var(--color-slate-500)}.token.unit,.language-css .token.function{color:var(--color-teal-200)}.token.comment,.token.operator,.token.combinator{color:var(--color-slate-400)}
|
||||
1
app/dist/client/assets/static/layouts_style-b34a8e57.HyLxvJhb.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
a{text-decoration:none}#sidebar a{padding:2px 10px;margin-left:-10px}#sidebar a.is-active{background-color:#eee}body{margin:0;font-family:sans-serif}*{box-sizing:border-box}#page-content{opacity:1;transition:opacity .3s ease-in-out}body.page-is-transitioning #page-content{opacity:0}#root{height:100%;width:100%;display:flex}
|
||||
1
app/dist/client/assets/static/layouts_tailwind-00e65532.kM054_rr.css
vendored
Normal file
BIN
app/dist/client/assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2
vendored
Normal file
BIN
app/dist/client/assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2
vendored
Normal file
1
app/dist/client/assets/static/style-1efdef47.B5Troj4Q.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/inter-greek-wght-normal.CaVNZxsx.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/inter-latin-wght-normal.C2S99t-D.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lexend Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Lexend Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lexend Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
|
||||
1
app/dist/client/assets/static/vike-react-fe70c48a.BcWtY8Ol.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
@keyframes vike-react-shine{to{background-position-x:-200%}}
|
||||
BIN
app/dist/client/merise/mcd-1.webp
vendored
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
app/dist/client/merise/mcd-2.webp
vendored
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
app/dist/client/merise/mcd-3.webp
vendored
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
app/dist/client/merise/mcd-4.webp
vendored
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
app/dist/client/merise/mcd-5.webp
vendored
Normal file
|
After Width: | Height: | Size: 22 KiB |
775
app/dist/server/chunks/chunk-Cog4aWZK.js
vendored
Normal file
@ -0,0 +1,775 @@
|
||||
import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
||||
import { useState, useCallback, Suspense, useEffect, createContext, useContext, useId, Fragment as Fragment$1 } from "react";
|
||||
import { usePageContext } from "vike-react/usePageContext";
|
||||
import { Dialog, DialogPanel, Listbox, Label, ListboxButton, ListboxOptions, ListboxOption } from "@headlessui/react";
|
||||
import { a as navigation, L as Link, T as ThemeContext, u as useTheme, o as onSearch, B as Button } from "./chunk-DhcPoVSR.js";
|
||||
import clsx from "clsx";
|
||||
import { Highlight } from "prism-react-renderer";
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
import "vike-react/config";
|
||||
import Highlighter from "react-highlight-words";
|
||||
import { navigate } from "vike/client/router";
|
||||
/*! assets/logo.svg [vike:pluginModuleBanner] */
|
||||
const logoUrl = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20width='100%25'%20height='100%25'%20viewBox='0%200%2057%2038'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xml:space='preserve'%20xmlns:serif='http://www.serif.com/'%20style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;'%3e%3cg%20transform='matrix(-1.76727,0,0,1.76727,49.1089,-3.53454)'%3e%3cpath%20d='M16.161,18.989L20.49,23.32L21.9,21.91L2.1,2.1L0.69,3.51L2.714,5.535L-4.085,11.253L-4.085,13.054L3.185,19.167L4.629,17.337L-1.61,12.165L4.397,7.219L9.588,12.412L6,16L6.01,16.01L6,16.01L6,22L18,22L18,20.83L16.161,18.989ZM14.417,17.244L16,18.83L16,20L8,20L8,16.5L10.837,13.663L14.417,17.244ZM8,4L16,4L16,7.5L13.16,10.34L14.41,11.59L18,8.01L17.99,8L18,8L18,2L6,2L6,3.17L8,5.17L8,4ZM25.294,12.164L19.071,17.34L20.542,19.164L27.788,13.075L27.788,11.274L20.597,5.22L19.158,7.075L25.294,12.164Z'%20style='fill:url(%23_Linear1);'/%3e%3c/g%3e%3cdefs%3e%3clinearGradient%20id='_Linear1'%20x1='0'%20y1='0'%20x2='1'%20y2='0'%20gradientUnits='userSpaceOnUse'%20gradientTransform='matrix(12.792,-21.32,-21.32,-12.792,5.208,23.32)'%3e%3cstop%20offset='0'%20style='stop-color:rgb(43,127,255);stop-opacity:1'/%3e%3cstop%20offset='1'%20style='stop-color:rgb(142,81,255);stop-opacity:1'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e";
|
||||
/*! pages/+Head.tsx [vike:pluginModuleBanner] */
|
||||
function HeadDefault() {
|
||||
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("link", { rel: "icon", href: logoUrl }) });
|
||||
}
|
||||
const import4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: HeadDefault
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! components/syntax/Navigation.tsx [vike:pluginModuleBanner] */
|
||||
function Navigation({
|
||||
className,
|
||||
onLinkClick
|
||||
}) {
|
||||
const { urlPathname } = usePageContext();
|
||||
return /* @__PURE__ */ jsx("nav", { className: clsx("text-base lg:text-sm", className), children: /* @__PURE__ */ jsx("ul", { role: "list", className: "space-y-9", children: navigation.map((section) => /* @__PURE__ */ jsxs("li", { children: [
|
||||
/* @__PURE__ */ jsx("h2", { className: "font-display font-medium text-slate-900 dark:text-white", children: section.title }),
|
||||
/* @__PURE__ */ jsx(
|
||||
"ul",
|
||||
{
|
||||
role: "list",
|
||||
className: "mt-2 space-y-2 border-l-2 border-slate-100 lg:mt-4 lg:space-y-4 lg:border-slate-200 dark:border-slate-800",
|
||||
children: section.links.map((link) => /* @__PURE__ */ jsx("li", { className: "relative", children: /* @__PURE__ */ jsx(
|
||||
Link,
|
||||
{
|
||||
href: link.href,
|
||||
onClick: onLinkClick,
|
||||
className: clsx(
|
||||
"block w-full pl-3.5 before:pointer-events-none before:absolute before:top-1/2 before:-left-1 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full",
|
||||
link.href === urlPathname ? "font-semibold text-violet-500 before:bg-violet-500" : "text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300"
|
||||
),
|
||||
children: link.title
|
||||
}
|
||||
) }, link.href))
|
||||
}
|
||||
)
|
||||
] }, section.title)) }) });
|
||||
}
|
||||
/*! components/syntax/Logo.tsx [vike:pluginModuleBanner] */
|
||||
function LogomarkPaths() {
|
||||
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
||||
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
|
||||
"linearGradient",
|
||||
{
|
||||
id: "l",
|
||||
x1: "0",
|
||||
y1: "0",
|
||||
x2: "1",
|
||||
y2: "0",
|
||||
gradientUnits: "userSpaceOnUse",
|
||||
gradientTransform: "matrix(12.792,-21.32,-21.32,-12.792,5.208,23.32)",
|
||||
children: [
|
||||
/* @__PURE__ */ jsx("stop", { offset: "0", style: { stopColor: "rgb(43,127,255)" } }),
|
||||
/* @__PURE__ */ jsx("stop", { offset: "1", style: { stopColor: "rgb(142,81,255)" } })
|
||||
]
|
||||
}
|
||||
) }),
|
||||
/* @__PURE__ */ jsx("g", { transform: "matrix(-1.76727,0,0,1.76727,49.1089,-3.53454)", children: /* @__PURE__ */ jsx(
|
||||
"path",
|
||||
{
|
||||
d: "M16.161,18.989L20.49,23.32L21.9,21.91L2.1,2.1L0.69,3.51L2.714,5.535L-4.085,11.253L-4.085,13.054L3.185,19.167L4.629,17.337L-1.61,12.165L4.397,7.219L9.588,12.412L6,16L6.01,16.01L6,16.01L6,22L18,22L18,20.83L16.161,18.989ZM14.417,17.244L16,18.83L16,20L8,20L8,16.5L10.837,13.663L14.417,17.244ZM8,4L16,4L16,7.5L13.16,10.34L14.41,11.59L18,8.01L17.99,8L18,8L18,2L6,2L6,3.17L8,5.17L8,4ZM25.294,12.164L19.071,17.34L20.542,19.164L27.788,13.075L27.788,11.274L20.597,5.22L19.158,7.075L25.294,12.164Z",
|
||||
style: { fill: "url(#l)" }
|
||||
}
|
||||
) })
|
||||
] });
|
||||
}
|
||||
function Logo(props) {
|
||||
return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 231 38", ...props, children: [
|
||||
/* @__PURE__ */ jsx(LogomarkPaths, {}),
|
||||
/* @__PURE__ */ jsx(
|
||||
"text",
|
||||
{
|
||||
className: "hidden lg:block fill-zinc-900 dark:fill-zinc-100",
|
||||
fontFamily: "Inter Variable, sans-serif",
|
||||
fontSize: 24,
|
||||
fontWeight: "bold",
|
||||
letterSpacing: "-.02em",
|
||||
x: 74,
|
||||
y: 26,
|
||||
children: "Memento Dev"
|
||||
}
|
||||
)
|
||||
] });
|
||||
}
|
||||
/*! components/syntax/MobileNavigation.tsx [vike:pluginModuleBanner] */
|
||||
function MenuIcon(props) {
|
||||
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", strokeWidth: "2", strokeLinecap: "round", ...props, children: /* @__PURE__ */ jsx("path", { d: "M4 7h16M4 12h16M4 17h16" }) });
|
||||
}
|
||||
function CloseIcon(props) {
|
||||
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", strokeWidth: "2", strokeLinecap: "round", ...props, children: /* @__PURE__ */ jsx("path", { d: "M5 5l14 14M19 5l-14 14" }) });
|
||||
}
|
||||
function CloseOnNavigation({ close }) {
|
||||
const { urlPathname } = usePageContext();
|
||||
useEffect(() => {
|
||||
close();
|
||||
}, [urlPathname, close]);
|
||||
return null;
|
||||
}
|
||||
function MobileNavigation() {
|
||||
let [isOpen, setIsOpen] = useState(false);
|
||||
let close = useCallback(() => setIsOpen(false), [setIsOpen]);
|
||||
function onLinkClick(event) {
|
||||
let link = event.currentTarget;
|
||||
if (link.pathname + link.search + link.hash === window.location.pathname + window.location.search + window.location.hash) {
|
||||
close();
|
||||
}
|
||||
}
|
||||
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
||||
/* @__PURE__ */ jsx(
|
||||
"button",
|
||||
{
|
||||
type: "button",
|
||||
onClick: () => setIsOpen(true),
|
||||
className: "relative",
|
||||
"aria-label": "Ouvrir le menu de navigation",
|
||||
children: /* @__PURE__ */ jsx(MenuIcon, { className: "h-6 w-6 stroke-slate-500" })
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(CloseOnNavigation, { close }) }),
|
||||
/* @__PURE__ */ jsx(
|
||||
Dialog,
|
||||
{
|
||||
open: isOpen,
|
||||
onClose: () => close(),
|
||||
className: "fixed inset-0 z-50 flex items-start overflow-y-auto bg-slate-900/50 pr-10 backdrop-blur-sm lg:hidden",
|
||||
"aria-label": "Navigation",
|
||||
children: /* @__PURE__ */ jsxs(DialogPanel, { className: "min-h-full w-full max-w-xs bg-white px-4 pt-5 pb-12 sm:px-6 dark:bg-slate-900", children: [
|
||||
/* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
|
||||
/* @__PURE__ */ jsx("button", { type: "button", onClick: () => close(), "aria-label": "Fermer le menu de navigation", children: /* @__PURE__ */ jsx(CloseIcon, { className: "h-6 w-6 stroke-slate-500" }) }),
|
||||
/* @__PURE__ */ jsx(Link, { href: "/", className: "ml-6", "aria-label": "Page d'accueil", children: /* @__PURE__ */ jsx(Logo, { className: "h-9 w-9" }) })
|
||||
] }),
|
||||
/* @__PURE__ */ jsx(Navigation, { className: "mt-5 px-1", onLinkClick })
|
||||
] })
|
||||
}
|
||||
)
|
||||
] });
|
||||
}
|
||||
/*! providers/ThemeProvider.tsx [vike:pluginModuleBanner] */
|
||||
function ThemeProvider(props) {
|
||||
const [theme, setTheme] = useState(props.defaultTheme || "light");
|
||||
useEffect(() => {
|
||||
const rootElement = document.documentElement;
|
||||
rootElement.classList.toggle("dark", theme === "dark");
|
||||
rootElement.classList.toggle("light", theme === "light");
|
||||
}, [theme]);
|
||||
return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: { theme, setTheme }, children: props.children });
|
||||
}
|
||||
/*! components/syntax/ThemeSelector.tsx [vike:pluginModuleBanner] */
|
||||
const themes = [
|
||||
{ name: "Clair", value: "light", icon: LightIcon },
|
||||
{ name: "Sombre", value: "dark", icon: DarkIcon }
|
||||
];
|
||||
function LightIcon(props) {
|
||||
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", ...props, children: /* @__PURE__ */ jsx(
|
||||
"path",
|
||||
{
|
||||
fillRule: "evenodd",
|
||||
clipRule: "evenodd",
|
||||
d: "M7 1a1 1 0 0 1 2 0v1a1 1 0 1 1-2 0V1Zm4 7a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm2.657-5.657a1 1 0 0 0-1.414 0l-.707.707a1 1 0 0 0 1.414 1.414l.707-.707a1 1 0 0 0 0-1.414Zm-1.415 11.313-.707-.707a1 1 0 0 1 1.415-1.415l.707.708a1 1 0 0 1-1.415 1.414ZM16 7.999a1 1 0 0 0-1-1h-1a1 1 0 1 0 0 2h1a1 1 0 0 0 1-1ZM7 14a1 1 0 1 1 2 0v1a1 1 0 1 1-2 0v-1Zm-2.536-2.464a1 1 0 0 0-1.414 0l-.707.707a1 1 0 0 0 1.414 1.414l.707-.707a1 1 0 0 0 0-1.414Zm0-8.486A1 1 0 0 1 3.05 4.464l-.707-.707a1 1 0 0 1 1.414-1.414l.707.707ZM3 8a1 1 0 0 0-1-1H1a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Z"
|
||||
}
|
||||
) });
|
||||
}
|
||||
function DarkIcon(props) {
|
||||
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", ...props, children: /* @__PURE__ */ jsx(
|
||||
"path",
|
||||
{
|
||||
fillRule: "evenodd",
|
||||
clipRule: "evenodd",
|
||||
d: "M7.23 3.333C7.757 2.905 7.68 2 7 2a6 6 0 1 0 0 12c.68 0 .758-.905.23-1.332A5.989 5.989 0 0 1 5 8c0-1.885.87-3.568 2.23-4.668ZM12 5a1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 1 1 0 2 1 1 0 0 0-1 1 1 1 0 1 1-2 0 1 1 0 0 0-1-1 1 1 0 1 1 0-2 1 1 0 0 0 1-1 1 1 0 0 1 1-1Z"
|
||||
}
|
||||
) });
|
||||
}
|
||||
function ThemeSelector(props) {
|
||||
let [mounted, setMounted] = useState(false);
|
||||
let { theme, setTheme } = useTheme();
|
||||
useEffect(() => {
|
||||
setMounted(true);
|
||||
}, []);
|
||||
if (!mounted) {
|
||||
return /* @__PURE__ */ jsx("div", { className: "h-6 w-6" });
|
||||
}
|
||||
return /* @__PURE__ */ jsxs(Listbox, { as: "div", value: theme, onChange: setTheme, ...props, children: [
|
||||
/* @__PURE__ */ jsx(Label, { className: "sr-only", children: "Theme" }),
|
||||
/* @__PURE__ */ jsxs(
|
||||
ListboxButton,
|
||||
{
|
||||
className: "flex h-6 w-6 items-center justify-center rounded-lg ring-1 shadow-md shadow-black/5 ring-black/5 dark:bg-slate-700 dark:ring-white/5 dark:ring-inset",
|
||||
"aria-label": "Theme",
|
||||
children: [
|
||||
/* @__PURE__ */ jsx(LightIcon, { className: clsx("h-4 w-4 dark:hidden", "fill-violet-400") }),
|
||||
/* @__PURE__ */ jsx(DarkIcon, { className: clsx("hidden h-4 w-4 dark:block", "fill-violet-400") })
|
||||
]
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(ListboxOptions, { className: "absolute top-full left-1/2 mt-3 w-36 -translate-x-1/2 space-y-1 rounded-xl bg-white p-3 text-sm font-medium ring-1 shadow-md shadow-black/5 ring-black/5 dark:bg-slate-800 dark:ring-white/5", children: themes.map((theme2) => /* @__PURE__ */ jsx(
|
||||
ListboxOption,
|
||||
{
|
||||
value: theme2.value,
|
||||
className: ({ focus, selected }) => clsx("flex cursor-pointer items-center rounded-[0.625rem] p-1 select-none", {
|
||||
"text-violet-500": selected,
|
||||
"text-slate-900 dark:text-white": focus && !selected,
|
||||
"text-slate-700 dark:text-slate-400": !focus && !selected,
|
||||
"bg-slate-100 dark:bg-slate-900/40": focus
|
||||
}),
|
||||
children: ({ selected }) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
||||
/* @__PURE__ */ jsx("div", { className: "rounded-md bg-white p-1 ring-1 shadow-sm ring-slate-900/5 dark:bg-slate-700 dark:ring-white/5 dark:ring-inset", children: /* @__PURE__ */ jsx(
|
||||
theme2.icon,
|
||||
{
|
||||
className: clsx("h-4 w-4", selected ? "fill-violet-400 dark:fill-violet-400" : "fill-slate-400")
|
||||
}
|
||||
) }),
|
||||
/* @__PURE__ */ jsx("div", { className: "ml-3", children: theme2.name })
|
||||
] })
|
||||
},
|
||||
theme2.value
|
||||
)) })
|
||||
] });
|
||||
}
|
||||
/*! hooks/useDebounce.ts [vike:pluginModuleBanner] */
|
||||
function useDebounce(debounceTime = 300) {
|
||||
const [debouncedValue, setDebouncedValue] = useState("");
|
||||
const [value, setValue] = useState("");
|
||||
useEffect(() => {
|
||||
const handler = setTimeout(() => {
|
||||
setDebouncedValue(value);
|
||||
}, debounceTime);
|
||||
return () => {
|
||||
clearTimeout(handler);
|
||||
};
|
||||
}, [value]);
|
||||
return [debouncedValue, setValue];
|
||||
}
|
||||
/*! components/syntax/Search.tsx [vike:pluginModuleBanner] */
|
||||
const SearchContext = createContext({
|
||||
query: "",
|
||||
close: () => {
|
||||
},
|
||||
results: [],
|
||||
isLoading: false,
|
||||
isOpened: false,
|
||||
setQuery: () => {
|
||||
},
|
||||
setIsOpened: () => {
|
||||
},
|
||||
setIsLoading: () => {
|
||||
},
|
||||
setResults: () => {
|
||||
}
|
||||
});
|
||||
function SearchIcon(props) {
|
||||
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", ...props, children: /* @__PURE__ */ jsx("path", { d: "M16.293 17.707a1 1 0 0 0 1.414-1.414l-1.414 1.414ZM9 14a5 5 0 0 1-5-5H2a7 7 0 0 0 7 7v-2ZM4 9a5 5 0 0 1 5-5V2a7 7 0 0 0-7 7h2Zm5-5a5 5 0 0 1 5 5h2a7 7 0 0 0-7-7v2Zm8.707 12.293-3.757-3.757-1.414 1.414 3.757 3.757 1.414-1.414ZM14 9a4.98 4.98 0 0 1-1.464 3.536l1.414 1.414A6.98 6.98 0 0 0 16 9h-2Zm-1.464 3.536A4.98 4.98 0 0 1 9 14v2a6.98 6.98 0 0 0 4.95-2.05l-1.414-1.414Z" }) });
|
||||
}
|
||||
function LoadingIcon(props) {
|
||||
const id = useId();
|
||||
return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", ...props, children: [
|
||||
/* @__PURE__ */ jsx("circle", { cx: "10", cy: "10", r: "5.5", strokeLinejoin: "round" }),
|
||||
/* @__PURE__ */ jsx("path", { stroke: `url(#${id})`, strokeLinecap: "round", strokeLinejoin: "round", d: "M15.5 10a5.5 5.5 0 1 0-5.5 5.5" }),
|
||||
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id, x1: "13", x2: "9.5", y1: "9", y2: "15", gradientUnits: "userSpaceOnUse", children: [
|
||||
/* @__PURE__ */ jsx("stop", { stopColor: "currentColor" }),
|
||||
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "currentColor", stopOpacity: "0" })
|
||||
] }) })
|
||||
] });
|
||||
}
|
||||
function SearchInput() {
|
||||
const { close, setQuery, query, isLoading } = useContext(SearchContext);
|
||||
return /* @__PURE__ */ jsxs("div", { className: "group relative flex h-12", children: [
|
||||
/* @__PURE__ */ jsx(SearchIcon, { className: "pointer-events-none absolute top-0 left-4 h-full w-5 fill-slate-400 dark:fill-slate-500" }),
|
||||
/* @__PURE__ */ jsx(
|
||||
"input",
|
||||
{
|
||||
"data-autofocus": true,
|
||||
className: clsx(
|
||||
"flex-auto appearance-none bg-transparent pl-12 text-slate-900 outline-hidden placeholder:text-slate-400 focus:w-full focus:flex-none sm:text-sm dark:text-white [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden",
|
||||
isLoading ? "pr-11" : "pr-4"
|
||||
),
|
||||
onKeyDown: (event) => {
|
||||
if (event.key === "Escape") {
|
||||
if (document.activeElement instanceof HTMLElement) {
|
||||
document.activeElement.blur();
|
||||
}
|
||||
close();
|
||||
}
|
||||
},
|
||||
value: query,
|
||||
onChange: (event) => setQuery(event.currentTarget.value)
|
||||
}
|
||||
),
|
||||
isLoading && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-3 flex items-center", children: /* @__PURE__ */ jsx(LoadingIcon, { className: "h-6 w-6 animate-spin stroke-slate-200 text-slate-400 dark:stroke-slate-700 dark:text-slate-500" }) })
|
||||
] });
|
||||
}
|
||||
function HighlightQuery({ text, query }) {
|
||||
return /* @__PURE__ */ jsx(
|
||||
Highlighter,
|
||||
{
|
||||
highlightClassName: "group-aria-selected:underline bg-transparent text-violet-600 dark:text-violet-400",
|
||||
searchWords: [query],
|
||||
autoEscape: true,
|
||||
textToHighlight: text
|
||||
}
|
||||
);
|
||||
}
|
||||
function SearchResultItem({ result, query }) {
|
||||
const { close } = useContext(SearchContext);
|
||||
const id = useId();
|
||||
const sectionTitle = navigation.find(
|
||||
(section) => section.links.find((link) => link.href === result.url.split("#")[0])
|
||||
)?.title;
|
||||
const hierarchy = [sectionTitle, result.pageTitle].filter((x) => typeof x === "string");
|
||||
return /* @__PURE__ */ jsxs(
|
||||
"li",
|
||||
{
|
||||
className: "group block cursor-default rounded-lg px-3 py-2 aria-selected:bg-slate-100 dark:aria-selected:bg-slate-700/30 hover:bg-slate-100 dark:hover:bg-slate-700/30",
|
||||
"aria-labelledby": `${id}-hierarchy ${id}-title`,
|
||||
role: "option",
|
||||
tabIndex: 0,
|
||||
onClick: () => {
|
||||
navigate(result.url);
|
||||
close();
|
||||
},
|
||||
children: [
|
||||
/* @__PURE__ */ jsx(
|
||||
"div",
|
||||
{
|
||||
id: `${id}-title`,
|
||||
"aria-hidden": "true",
|
||||
className: "text-sm text-slate-700 group-aria-selected:text-violet-600 dark:text-slate-300 dark:group-aria-selected:text-violet-400",
|
||||
children: /* @__PURE__ */ jsx(HighlightQuery, { text: result.title, query })
|
||||
}
|
||||
),
|
||||
hierarchy.length > 0 && /* @__PURE__ */ jsx(
|
||||
"div",
|
||||
{
|
||||
id: `${id}-hierarchy`,
|
||||
"aria-hidden": "true",
|
||||
className: "mt-0.5 truncate text-xs whitespace-nowrap text-slate-500 dark:text-slate-400",
|
||||
children: hierarchy.map((item, itemIndex, items) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
||||
/* @__PURE__ */ jsx(HighlightQuery, { text: item, query }),
|
||||
/* @__PURE__ */ jsx("span", { className: itemIndex === items.length - 1 ? "sr-only" : "mx-2 text-slate-300 dark:text-slate-700", children: "/" })
|
||||
] }, itemIndex))
|
||||
}
|
||||
)
|
||||
]
|
||||
}
|
||||
);
|
||||
}
|
||||
function SearchResults() {
|
||||
const { results, query } = useContext(SearchContext);
|
||||
if (results.length === 0) {
|
||||
return /* @__PURE__ */ jsxs("p", { className: "px-4 py-8 text-center text-sm text-slate-700 dark:text-slate-400", children: [
|
||||
"Aucun résultat pour “",
|
||||
/* @__PURE__ */ jsx("span", { className: "break-words text-slate-900 dark:text-white", children: query }),
|
||||
"”"
|
||||
] });
|
||||
}
|
||||
return /* @__PURE__ */ jsx("ul", { children: results.map((result) => /* @__PURE__ */ jsx(SearchResultItem, { result, query }, result.url)) });
|
||||
}
|
||||
function SearchDialog({ className }) {
|
||||
const { close, isOpened, setIsOpened, results } = useContext(SearchContext);
|
||||
useEffect(() => {
|
||||
if (isOpened) return;
|
||||
function onKeyDown(event) {
|
||||
if (event.key === "k" && (event.metaKey || event.ctrlKey)) {
|
||||
event.preventDefault();
|
||||
setIsOpened(true);
|
||||
}
|
||||
}
|
||||
window.addEventListener("keydown", onKeyDown);
|
||||
return () => {
|
||||
window.removeEventListener("keydown", onKeyDown);
|
||||
};
|
||||
}, [isOpened, setIsOpened]);
|
||||
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Dialog, { open: isOpened, onClose: close, className: clsx("fixed inset-0 z-50", className), children: [
|
||||
/* @__PURE__ */ jsx("div", { className: "fixed inset-0 bg-slate-900/50 backdrop-blur-sm" }),
|
||||
/* @__PURE__ */ jsx("div", { className: "fixed inset-0 overflow-y-auto px-4 py-4 sm:px-6 sm:py-20 md:py-32 lg:px-8 lg:py-[15vh]", children: /* @__PURE__ */ jsx(DialogPanel, { className: "mx-auto transform-gpu overflow-hidden rounded-xl bg-white shadow-xl sm:max-w-xl dark:bg-slate-800 dark:ring-1 dark:ring-slate-700", children: /* @__PURE__ */ jsxs("form", { onSubmit: (event) => event.preventDefault(), children: [
|
||||
/* @__PURE__ */ jsx(SearchInput, {}),
|
||||
/* @__PURE__ */ jsx("div", { className: "border-t border-slate-200 bg-white px-2 py-3 empty:hidden dark:border-slate-400/10 dark:bg-slate-800", children: results.length > 0 && /* @__PURE__ */ jsx(SearchResults, {}) })
|
||||
] }) }) })
|
||||
] }) });
|
||||
}
|
||||
function Search() {
|
||||
const [results, setResults] = useState([]);
|
||||
const [debouncedQuery, setDebouncedQuery] = useDebounce();
|
||||
const [modifierKey, setModifierKey] = useState();
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [isOpened, setIsOpened] = useState(false);
|
||||
const [query, setQuery] = useState("");
|
||||
useEffect(() => {
|
||||
const platform = navigator.userAgentData?.platform || navigator.platform;
|
||||
setModifierKey(/(Mac|iPhone|iPod|iPad)/i.test(platform) ? "⌘" : "Ctrl ");
|
||||
}, []);
|
||||
useEffect(() => {
|
||||
setDebouncedQuery(query);
|
||||
}, [query]);
|
||||
useEffect(() => {
|
||||
if (debouncedQuery.length === 0) {
|
||||
setIsLoading(false);
|
||||
setResults([]);
|
||||
return;
|
||||
}
|
||||
setIsLoading(true);
|
||||
onSearch(debouncedQuery, 5).then(setResults).finally(() => {
|
||||
setIsLoading(false);
|
||||
});
|
||||
}, [debouncedQuery]);
|
||||
return /* @__PURE__ */ jsxs(
|
||||
SearchContext.Provider,
|
||||
{
|
||||
value: {
|
||||
query,
|
||||
close: () => setIsOpened(false),
|
||||
results,
|
||||
isLoading,
|
||||
isOpened,
|
||||
setQuery,
|
||||
setIsOpened,
|
||||
setIsLoading,
|
||||
setResults
|
||||
},
|
||||
children: [
|
||||
/* @__PURE__ */ jsxs(
|
||||
"button",
|
||||
{
|
||||
type: "button",
|
||||
className: "group flex h-6 w-6 items-center justify-center sm:justify-start md:h-auto md:w-80 md:flex-none md:rounded-lg md:py-2.5 md:pr-3.5 md:pl-4 md:text-sm md:ring-1 md:ring-slate-200 md:hover:ring-slate-300 lg:w-96 dark:md:bg-slate-800/75 dark:md:ring-white/5 dark:md:ring-inset dark:md:hover:bg-slate-700/40 dark:md:hover:ring-slate-500",
|
||||
onClick: () => setIsOpened(true),
|
||||
children: [
|
||||
/* @__PURE__ */ jsx(SearchIcon, { className: "h-5 w-5 flex-none fill-slate-400 group-hover:fill-slate-500 md:group-hover:fill-slate-400 dark:fill-slate-500" }),
|
||||
/* @__PURE__ */ jsx("span", { className: "sr-only md:not-sr-only md:ml-2 md:text-slate-500 md:dark:text-slate-400", children: "Rechercher..." }),
|
||||
modifierKey && /* @__PURE__ */ jsxs("kbd", { className: "ml-auto hidden font-medium text-slate-400 md:block dark:text-slate-500", children: [
|
||||
/* @__PURE__ */ jsx("kbd", { className: "font-sans", children: modifierKey }),
|
||||
/* @__PURE__ */ jsx("kbd", { className: "font-sans", children: "K" })
|
||||
] })
|
||||
]
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(SearchDialog, {})
|
||||
]
|
||||
}
|
||||
);
|
||||
}
|
||||
/*! components/syntax/HeroBackground.tsx [vike:pluginModuleBanner] */
|
||||
function HeroBackground(props) {
|
||||
const id = useId();
|
||||
return /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 668 1069", width: 668, height: 1069, fill: "none", ...props, children: [
|
||||
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: `${id}-clip-path`, children: /* @__PURE__ */ jsx("path", { fill: "#fff", transform: "rotate(-180 334 534.4)", d: "M0 0h668v1068.8H0z" }) }) }),
|
||||
/* @__PURE__ */ jsxs("g", { opacity: ".4", clipPath: `url(#${id}-clip-path)`, strokeWidth: 4, children: [
|
||||
/* @__PURE__ */ jsx(
|
||||
"path",
|
||||
{
|
||||
opacity: ".3",
|
||||
d: "M584.5 770.4v-474M484.5 770.4v-474M384.5 770.4v-474M283.5 769.4v-474M183.5 768.4v-474M83.5 767.4v-474",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"path",
|
||||
{
|
||||
d: "M83.5 221.275v6.587a50.1 50.1 0 0 0 22.309 41.686l55.581 37.054a50.102 50.102 0 0 1 22.309 41.686v6.587M83.5 716.012v6.588a50.099 50.099 0 0 0 22.309 41.685l55.581 37.054a50.102 50.102 0 0 1 22.309 41.686v6.587M183.7 584.5v6.587a50.1 50.1 0 0 0 22.31 41.686l55.581 37.054a50.097 50.097 0 0 1 22.309 41.685v6.588M384.101 277.637v6.588a50.1 50.1 0 0 0 22.309 41.685l55.581 37.054a50.1 50.1 0 0 1 22.31 41.686v6.587M384.1 770.288v6.587a50.1 50.1 0 0 1-22.309 41.686l-55.581 37.054A50.099 50.099 0 0 0 283.9 897.3v6.588",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"path",
|
||||
{
|
||||
d: "M384.1 770.288v6.587a50.1 50.1 0 0 1-22.309 41.686l-55.581 37.054A50.099 50.099 0 0 0 283.9 897.3v6.588M484.3 594.937v6.587a50.1 50.1 0 0 1-22.31 41.686l-55.581 37.054A50.1 50.1 0 0 0 384.1 721.95v6.587M484.3 872.575v6.587a50.1 50.1 0 0 1-22.31 41.686l-55.581 37.054a50.098 50.098 0 0 0-22.309 41.686v6.582M584.501 663.824v39.988a50.099 50.099 0 0 1-22.31 41.685l-55.581 37.054a50.102 50.102 0 0 0-22.309 41.686v6.587M283.899 945.637v6.588a50.1 50.1 0 0 1-22.309 41.685l-55.581 37.05a50.12 50.12 0 0 0-22.31 41.69v6.59M384.1 277.637c0 19.946 12.763 37.655 31.686 43.962l137.028 45.676c18.923 6.308 31.686 24.016 31.686 43.962M183.7 463.425v30.69c0 21.564 13.799 40.709 34.257 47.529l134.457 44.819c18.922 6.307 31.686 24.016 31.686 43.962M83.5 102.288c0 19.515 13.554 36.412 32.604 40.645l235.391 52.309c19.05 4.234 32.605 21.13 32.605 40.646M83.5 463.425v-58.45M183.699 542.75V396.625M283.9 1068.8V945.637M83.5 363.225v-141.95M83.5 179.524v-77.237M83.5 60.537V0M384.1 630.425V277.637M484.301 830.824V594.937M584.5 1068.8V663.825M484.301 555.275V452.988M584.5 622.075V452.988M384.1 728.537v-56.362M384.1 1068.8v-20.88M384.1 1006.17V770.287M283.9 903.888V759.85M183.699 1066.71V891.362M83.5 1068.8V716.012M83.5 674.263V505.175",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "83.5", cy: "384.1", r: "10.438", transform: "rotate(-180 83.5 384.1)", fill: "#1E293B", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "83.5", cy: "200.399", r: "10.438", transform: "rotate(-180 83.5 200.399)", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "83.5", cy: "81.412", r: "10.438", transform: "rotate(-180 83.5 81.412)", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "183.699",
|
||||
cy: "375.75",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 183.699 375.75)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "183.699",
|
||||
cy: "563.625",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 183.699 563.625)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "384.1", cy: "651.3", r: "10.438", transform: "rotate(-180 384.1 651.3)", fill: "#1E293B", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "484.301",
|
||||
cy: "574.062",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 484.301 574.062)",
|
||||
fill: "#0EA5E9",
|
||||
fillOpacity: ".42",
|
||||
stroke: "#0EA5E9"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "384.1",
|
||||
cy: "749.412",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 384.1 749.412)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "384.1", cy: "1027.05", r: "10.438", transform: "rotate(-180 384.1 1027.05)", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "283.9", cy: "924.763", r: "10.438", transform: "rotate(-180 283.9 924.763)", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "183.699", cy: "870.487", r: "10.438", transform: "rotate(-180 183.699 870.487)", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "283.9",
|
||||
cy: "738.975",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 283.9 738.975)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "83.5",
|
||||
cy: "695.138",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 83.5 695.138)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "83.5",
|
||||
cy: "484.3",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 83.5 484.3)",
|
||||
fill: "#0EA5E9",
|
||||
fillOpacity: ".42",
|
||||
stroke: "#0EA5E9"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "484.301",
|
||||
cy: "432.112",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 484.301 432.112)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "584.5",
|
||||
cy: "432.112",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 584.5 432.112)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(
|
||||
"circle",
|
||||
{
|
||||
cx: "584.5",
|
||||
cy: "642.95",
|
||||
r: "10.438",
|
||||
transform: "rotate(-180 584.5 642.95)",
|
||||
fill: "#1E293B",
|
||||
stroke: "#334155"
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "484.301", cy: "851.699", r: "10.438", transform: "rotate(-180 484.301 851.699)", stroke: "#334155" }),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "384.1", cy: "256.763", r: "10.438", transform: "rotate(-180 384.1 256.763)", stroke: "#334155" })
|
||||
] })
|
||||
] });
|
||||
}
|
||||
/*! images/blur-indigo.png [vike:pluginModuleBanner] */
|
||||
const blurIndigoImage = "/assets/static/blur-indigo.Cbr0CUfr.png";
|
||||
/*! images/blur-cyan.png [vike:pluginModuleBanner] */
|
||||
const blurCyanImage = "/assets/static/blur-cyan.DJww6-ho.png";
|
||||
/*! components/common/Image.tsx [vike:pluginModuleBanner] */
|
||||
function Image(props) {
|
||||
return /* @__PURE__ */ jsx("img", { ...props, src: props.src, alt: props.alt, loading: "lazy" });
|
||||
}
|
||||
/*! components/syntax/Hero.tsx [vike:pluginModuleBanner] */
|
||||
const codeLanguage = "javascript";
|
||||
const code = `export default {
|
||||
role: 'developer',
|
||||
qualifications: [
|
||||
'DWWM',
|
||||
'CDA',
|
||||
'CDUI',
|
||||
]
|
||||
}`;
|
||||
const tabs = [
|
||||
{ name: "memento-dev.config.js", isActive: true },
|
||||
{ name: "package.json", isActive: false }
|
||||
];
|
||||
function TrafficLightsIcon(props) {
|
||||
return /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 42 10", fill: "none", ...props, children: [
|
||||
/* @__PURE__ */ jsx("circle", { cx: "5", cy: "5", r: "4.5" }),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "21", cy: "5", r: "4.5" }),
|
||||
/* @__PURE__ */ jsx("circle", { cx: "37", cy: "5", r: "4.5" })
|
||||
] });
|
||||
}
|
||||
function Hero() {
|
||||
return /* @__PURE__ */ jsx("div", { className: "overflow-hidden bg-slate-900 dark:mt-[-4.75rem] dark:-mb-32 dark:pt-[4.75rem] dark:pb-32", children: /* @__PURE__ */ jsx("div", { className: "py-16 sm:px-2 lg:relative lg:px-0 lg:py-20", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto grid max-w-2xl w-full grid-cols-1 items-center gap-x-8 gap-y-16 px-4 lg:max-w-8xl lg:grid-cols-2 lg:px-8 xl:gap-x-16 xl:px-12", children: [
|
||||
/* @__PURE__ */ jsxs("div", { className: "relative z-10 md:text-center lg:text-left", children: [
|
||||
/* @__PURE__ */ jsx(
|
||||
Image,
|
||||
{
|
||||
className: "absolute right-full bottom-full -mr-72 -mb-56 opacity-50",
|
||||
src: blurCyanImage,
|
||||
alt: "",
|
||||
width: 530,
|
||||
height: 530
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
||||
/* @__PURE__ */ jsx("p", { className: "inline bg-linear-to-r from-indigo-200 via-violet-400 to-indigo-200 bg-clip-text font-display text-5xl tracking-tight text-transparent", children: "Souviens-toi que tu développeras." }),
|
||||
/* @__PURE__ */ jsx("p", { className: "mt-3 text-2xl tracking-tight text-slate-400", children: "Découvrez des ressources essentielles pour améliorer tes compétences en développement." }),
|
||||
/* @__PURE__ */ jsxs("div", { className: "mt-8 flex gap-4 md:justify-center lg:justify-start", children: [
|
||||
/* @__PURE__ */ jsx(Button, { href: "/", children: "Accédez aux ressources" }),
|
||||
/* @__PURE__ */ jsx(Button, { href: "/", variant: "secondary", children: "Voir sur Github" })
|
||||
] })
|
||||
] })
|
||||
] }),
|
||||
/* @__PURE__ */ jsxs("div", { className: "relative lg:static xl:pl-10", children: [
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute inset-x-[-50vw] -top-32 -bottom-48 [mask-image:linear-gradient(transparent,white,white)] lg:-top-32 lg:right-0 lg:-bottom-32 lg:left-[calc(50%+14rem)] lg:[mask-image:none] dark:[mask-image:linear-gradient(transparent,white,transparent)] lg:dark:[mask-image:linear-gradient(white,white,transparent)]", children: /* @__PURE__ */ jsx(HeroBackground, { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 lg:left-0 lg:translate-x-0 lg:translate-y-[-60%]" }) }),
|
||||
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
||||
/* @__PURE__ */ jsx(Image, { className: "absolute -top-64 -right-64", src: blurCyanImage, alt: "", width: 530, height: 530 }),
|
||||
/* @__PURE__ */ jsx(Image, { className: "absolute -right-44 -bottom-40", src: blurIndigoImage, alt: "", width: 567, height: 567 }),
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 rounded-2xl bg-linear-to-tr from-violet-300 via-violet-300/70 to-purple-300 opacity-10 blur-lg" }),
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 rounded-2xl bg-linear-to-tr from-violet-300 via-violet-300/70 to-purple-300 opacity-10" }),
|
||||
/* @__PURE__ */ jsxs("div", { className: "relative rounded-2xl bg-[#0A101F]/80 ring-1 ring-white/10 backdrop-blur-sm", children: [
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute -top-px right-11 left-20 h-px bg-linear-to-r from-violet-300/0 via-violet-300/70 to-violet-300/0" }),
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute right-20 -bottom-px left-11 h-px bg-linear-to-r from-purple-400/0 via-purple-400 to-purple-400/0" }),
|
||||
/* @__PURE__ */ jsxs("div", { className: "pt-4 pl-4", children: [
|
||||
/* @__PURE__ */ jsx(TrafficLightsIcon, { className: "h-2.5 w-auto stroke-slate-500/30" }),
|
||||
/* @__PURE__ */ jsx("div", { className: "mt-4 flex space-x-2 text-xs", children: tabs.map((tab) => /* @__PURE__ */ jsx(
|
||||
"div",
|
||||
{
|
||||
className: clsx(
|
||||
"flex h-6 rounded-full",
|
||||
tab.isActive ? "bg-linear-to-r from-violet-400/30 via-violet-400 to-violet-400/30 p-px font-medium text-violet-300" : "text-slate-500"
|
||||
),
|
||||
children: /* @__PURE__ */ jsx("div", { className: clsx("flex items-center rounded-full px-2.5", tab.isActive && "bg-slate-800"), children: tab.name })
|
||||
},
|
||||
tab.name
|
||||
)) }),
|
||||
/* @__PURE__ */ jsxs("div", { className: "mt-6 flex items-start px-1 text-sm", children: [
|
||||
/* @__PURE__ */ jsx(
|
||||
"div",
|
||||
{
|
||||
"aria-hidden": "true",
|
||||
className: "border-r border-slate-300/5 pr-4 font-mono text-slate-600 select-none",
|
||||
children: Array.from({
|
||||
length: code.split("\n").length
|
||||
}).map((_, index) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
||||
(index + 1).toString().padStart(2, "0"),
|
||||
/* @__PURE__ */ jsx("br", {})
|
||||
] }, index))
|
||||
}
|
||||
),
|
||||
/* @__PURE__ */ jsx(Highlight, { code, language: codeLanguage, theme: { plain: {}, styles: [] }, children: ({ className, style, tokens, getLineProps, getTokenProps }) => /* @__PURE__ */ jsx("pre", { className: clsx(className, "flex overflow-x-auto pb-6"), style, children: /* @__PURE__ */ jsx("code", { className: "px-4", children: tokens.map((line, lineIndex) => /* @__PURE__ */ jsx("div", { ...getLineProps({ line }), children: line.map((token, tokenIndex) => /* @__PURE__ */ jsx("span", { ...getTokenProps({ token }) }, tokenIndex)) }, lineIndex)) }) }) })
|
||||
] })
|
||||
] })
|
||||
] })
|
||||
] })
|
||||
] })
|
||||
] }) }) });
|
||||
}
|
||||
/*! layouts/LayoutDefault.tsx [vike:pluginModuleBanner] */
|
||||
function GitHubIcon(props) {
|
||||
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", ...props, children: /* @__PURE__ */ jsx("path", { d: "M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" }) });
|
||||
}
|
||||
function Header() {
|
||||
let [isScrolled, setIsScrolled] = useState(false);
|
||||
useEffect(() => {
|
||||
function onScroll() {
|
||||
setIsScrolled(window.scrollY > 0);
|
||||
}
|
||||
onScroll();
|
||||
window.addEventListener("scroll", onScroll, { passive: true });
|
||||
return () => {
|
||||
window.removeEventListener("scroll", onScroll);
|
||||
};
|
||||
}, []);
|
||||
return /* @__PURE__ */ jsxs(
|
||||
"header",
|
||||
{
|
||||
className: clsx(
|
||||
"sticky top-0 z-50 flex flex-none flex-wrap items-center justify-between bg-white px-4 py-5 shadow-md shadow-slate-900/5 transition duration-500 sm:px-6 lg:px-8 dark:shadow-none",
|
||||
isScrolled ? "dark:bg-slate-900/95 dark:backdrop-blur-sm dark:[@supports(backdrop-filter:blur(0))]:bg-slate-900/75" : "dark:bg-transparent"
|
||||
),
|
||||
children: [
|
||||
/* @__PURE__ */ jsx("div", { className: "mr-6 flex lg:hidden", children: /* @__PURE__ */ jsx(MobileNavigation, {}) }),
|
||||
/* @__PURE__ */ jsx("div", { className: "relative flex grow basis-0 items-center", children: /* @__PURE__ */ jsx(Link, { href: "/", "aria-label": "Home page", children: /* @__PURE__ */ jsx(Logo, { className: "h-9 w-auto lg:block" }) }) }),
|
||||
/* @__PURE__ */ jsx("div", { className: "-my-5 mr-6 sm:mr-8 md:mr-0", children: /* @__PURE__ */ jsx(Search, {}) }),
|
||||
/* @__PURE__ */ jsxs("div", { className: "relative flex basis-0 justify-end gap-6 sm:gap-8 md:grow", children: [
|
||||
/* @__PURE__ */ jsx(ThemeSelector, { className: "relative z-10" }),
|
||||
/* @__PURE__ */ jsx(Link, { href: "https://gitea.gauthierdaniels.fr/GauthierWebDev/memento-dev", className: "group", "aria-label": "GitHub", children: /* @__PURE__ */ jsx(GitHubIcon, { className: "h-6 w-6 fill-slate-400 group-hover:fill-slate-500 dark:group-hover:fill-slate-300" }) })
|
||||
] })
|
||||
]
|
||||
}
|
||||
);
|
||||
}
|
||||
function DefaultLayout({ children }) {
|
||||
const { urlPathname } = usePageContext();
|
||||
const isHomePage = urlPathname === "/";
|
||||
return /* @__PURE__ */ jsx(ThemeProvider, { children: /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col", children: [
|
||||
/* @__PURE__ */ jsx(Header, {}),
|
||||
isHomePage && /* @__PURE__ */ jsx(Hero, {}),
|
||||
/* @__PURE__ */ jsxs("div", { className: "relative mx-auto w-full flex max-w-8xl flex-auto justify-center sm:px-2 lg:px-8 xl:px-12", children: [
|
||||
/* @__PURE__ */ jsxs("div", { className: "hidden lg:relative lg:block lg:flex-none", children: [
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 w-[50vw] bg-slate-50 dark:hidden" }),
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute top-16 right-0 bottom-0 hidden h-12 w-px bg-linear-to-t from-slate-800 dark:block" }),
|
||||
/* @__PURE__ */ jsx("div", { className: "absolute top-28 right-0 bottom-0 hidden w-px bg-slate-800 dark:block" }),
|
||||
/* @__PURE__ */ jsx("div", { className: "sticky top-[4.75rem] -ml-0.5 h-[calc(100vh-4.75rem)] w-64 overflow-x-hidden overflow-y-auto py-16 pr-8 pl-0.5 xl:w-72 xl:pr-16", children: /* @__PURE__ */ jsx(Navigation, {}) })
|
||||
] }),
|
||||
children
|
||||
] })
|
||||
] }) });
|
||||
}
|
||||
/*! pages/+config.ts [vike:pluginModuleBanner] */
|
||||
const config = {
|
||||
// https://vike.dev/head-tags
|
||||
title: "Memento Dev"
|
||||
};
|
||||
/*! pages/+title.ts [vike:pluginModuleBanner] */
|
||||
function title() {
|
||||
return `Synthèses et ressources pour développeurs - ${config.title}`;
|
||||
}
|
||||
const import6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
title
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
export {
|
||||
DefaultLayout as D,
|
||||
import4 as a,
|
||||
config as c,
|
||||
import6 as i,
|
||||
title as t
|
||||
};
|
||||
1089
app/dist/server/chunks/chunk-DhcPoVSR.js
vendored
Normal file
160
app/dist/server/entries/pages_docs.mjs
vendored
Normal file
@ -0,0 +1,160 @@
|
||||
import { onRenderHtml } from "vike-react/__internal/integration/onRenderHtml";
|
||||
import { useData } from "vike-react/useData";
|
||||
import Markdoc from "@markdoc/markdoc";
|
||||
import { t as tags, n as nodes, d as docsService } from "../chunks/chunk-DhcPoVSR.js";
|
||||
import React from "react";
|
||||
import { readingTime } from "reading-time-estimator";
|
||||
import { useConfig } from "vike-react/useConfig";
|
||||
import { t as title, c as config, i as import6$1, D as DefaultLayout, a as import4 } from "../chunks/chunk-Cog4aWZK.js";
|
||||
import { render } from "vike/abort";
|
||||
import import6 from "vike-react/__internal/integration/Loading";
|
||||
import "telefunc";
|
||||
import "flexsearch";
|
||||
import "@sindresorhus/slugify";
|
||||
import "react/jsx-runtime";
|
||||
import "vike-react/usePageContext";
|
||||
import "clsx";
|
||||
import "@heroicons/react/24/outline";
|
||||
import "prism-react-renderer";
|
||||
import "js-yaml";
|
||||
import "fast-glob";
|
||||
import "path";
|
||||
import "fs";
|
||||
import "@headlessui/react";
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
import "vike-react/config";
|
||||
import "react-highlight-words";
|
||||
import "vike/client/router";
|
||||
/*! pages/docs/+Page.tsx [vike:pluginModuleBanner] */
|
||||
function Page() {
|
||||
const { doc, estimatedReadingTime } = useData();
|
||||
const parsedDoc = Markdoc.parse(doc.content);
|
||||
const transformedDoc = Markdoc.transform(parsedDoc, { nodes, tags, variables: { estimatedReadingTime } });
|
||||
return Markdoc.renderers.react(transformedDoc, React);
|
||||
}
|
||||
const import2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: Page
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! pages/buildTitle.ts [vike:pluginModuleBanner] */
|
||||
function buildTitle(pageTitle) {
|
||||
if (!pageTitle) return title();
|
||||
return `${pageTitle} - ${config.title}`;
|
||||
}
|
||||
/*! pages/docs/+data.ts [vike:pluginModuleBanner] */
|
||||
async function data(pageContext) {
|
||||
const config2 = useConfig();
|
||||
const { key } = pageContext.routeParams;
|
||||
const doc = await docsService.getDoc("docs", key);
|
||||
if (!doc) {
|
||||
throw render(404);
|
||||
}
|
||||
const readingTimeObject = readingTime(doc.content, 300, "fr");
|
||||
config2({
|
||||
title: buildTitle(doc.title),
|
||||
description: doc.description
|
||||
});
|
||||
docsService.transform(doc);
|
||||
return { doc, estimatedReadingTime: readingTimeObject.text };
|
||||
}
|
||||
const import3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
data
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! virtual:vike:pageConfigValuesAll:server:/pages/docs [vike:pluginModuleBanner] */
|
||||
const configValuesSerialized = {
|
||||
["isClientRuntimeLoaded"]: {
|
||||
type: "computed",
|
||||
definedAtData: null,
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
},
|
||||
["onRenderHtml"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/__internal/integration/onRenderHtml", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "pointer-import",
|
||||
value: onRenderHtml
|
||||
}
|
||||
},
|
||||
["Page"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/docs/+Page.tsx", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import2
|
||||
}
|
||||
},
|
||||
["passToClient"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "vike-react/config", "fileExportPathToShowToUser": ["default", "passToClient"] }],
|
||||
valueSerialized: [{
|
||||
type: "js-serialized",
|
||||
value: ["_configFromHook"]
|
||||
}]
|
||||
},
|
||||
["data"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/docs/+data.ts", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import3
|
||||
}
|
||||
},
|
||||
["Head"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/pages/+Head.tsx", "fileExportPathToShowToUser": [] }],
|
||||
valueSerialized: [{
|
||||
type: "plus-file",
|
||||
exportValues: import4
|
||||
}]
|
||||
},
|
||||
["Layout"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/layouts/LayoutDefault.tsx", "fileExportPathToShowToUser": [] }],
|
||||
valueSerialized: [{
|
||||
type: "pointer-import",
|
||||
value: DefaultLayout
|
||||
}]
|
||||
},
|
||||
["title"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+title.ts", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import6$1
|
||||
}
|
||||
},
|
||||
["description"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "description"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: "Demo showcasing Vike"
|
||||
}
|
||||
},
|
||||
["lang"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "lang"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: "fr"
|
||||
}
|
||||
},
|
||||
["Loading"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/__internal/integration/Loading", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "pointer-import",
|
||||
value: import6
|
||||
}
|
||||
}
|
||||
};
|
||||
export {
|
||||
configValuesSerialized
|
||||
};
|
||||
132
app/dist/server/entries/pages_error.mjs
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
import { onRenderHtml } from "vike-react/__internal/integration/onRenderHtml";
|
||||
import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
||||
import { usePageContext } from "vike-react/usePageContext";
|
||||
import { L as Link } from "../chunks/chunk-DhcPoVSR.js";
|
||||
import { i as import6$1, D as DefaultLayout, a as import4 } from "../chunks/chunk-Cog4aWZK.js";
|
||||
import import6 from "vike-react/__internal/integration/Loading";
|
||||
import "telefunc";
|
||||
import "flexsearch";
|
||||
import "@sindresorhus/slugify";
|
||||
import "@markdoc/markdoc";
|
||||
import "react";
|
||||
import "clsx";
|
||||
import "@heroicons/react/24/outline";
|
||||
import "prism-react-renderer";
|
||||
import "js-yaml";
|
||||
import "fast-glob";
|
||||
import "path";
|
||||
import "fs";
|
||||
import "@headlessui/react";
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
import "vike-react/config";
|
||||
import "react-highlight-words";
|
||||
import "vike/client/router";
|
||||
/*! pages/_error/+Page.tsx [vike:pluginModuleBanner] */
|
||||
function Page() {
|
||||
const { is404 } = usePageContext();
|
||||
if (is404) {
|
||||
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { className: "max-w-2xl min-w-0 flex-auto px-4 py-16 lg:max-w-none lg:pr-0 lg:pl-8 xl:px-16", children: /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col items-center justify-center text-center", children: [
|
||||
/* @__PURE__ */ jsx("p", { className: "font-display text-sm font-medium text-slate-900 dark:text-white", children: "404" }),
|
||||
/* @__PURE__ */ jsx("h1", { className: "mt-3 font-display text-3xl tracking-tight text-slate-900 dark:text-white", children: "Page introuvable" }),
|
||||
/* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-slate-500 dark:text-slate-400", children: "Désolé, nous ne pouvons pas trouver la page que vous recherchez." }),
|
||||
/* @__PURE__ */ jsx(Link, { href: "/", className: "mt-8 text-sm font-medium text-slate-900 dark:text-white", children: "Retour à l'accueil" })
|
||||
] }) }) });
|
||||
}
|
||||
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
||||
/* @__PURE__ */ jsx("h1", { children: "500 Internal Server Error" }),
|
||||
/* @__PURE__ */ jsx("p", { children: "Something went wrong." })
|
||||
] });
|
||||
}
|
||||
const import2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: Page
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! virtual:vike:pageConfigValuesAll:server:/pages/_error [vike:pluginModuleBanner] */
|
||||
const configValuesSerialized = {
|
||||
["isClientRuntimeLoaded"]: {
|
||||
type: "computed",
|
||||
definedAtData: null,
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
},
|
||||
["onRenderHtml"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/__internal/integration/onRenderHtml", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "pointer-import",
|
||||
value: onRenderHtml
|
||||
}
|
||||
},
|
||||
["Page"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/_error/+Page.tsx", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import2
|
||||
}
|
||||
},
|
||||
["passToClient"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "vike-react/config", "fileExportPathToShowToUser": ["default", "passToClient"] }],
|
||||
valueSerialized: [{
|
||||
type: "js-serialized",
|
||||
value: ["_configFromHook"]
|
||||
}]
|
||||
},
|
||||
["Head"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/pages/+Head.tsx", "fileExportPathToShowToUser": [] }],
|
||||
valueSerialized: [{
|
||||
type: "plus-file",
|
||||
exportValues: import4
|
||||
}]
|
||||
},
|
||||
["Layout"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/layouts/LayoutDefault.tsx", "fileExportPathToShowToUser": [] }],
|
||||
valueSerialized: [{
|
||||
type: "pointer-import",
|
||||
value: DefaultLayout
|
||||
}]
|
||||
},
|
||||
["title"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+title.ts", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import6$1
|
||||
}
|
||||
},
|
||||
["description"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "description"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: "Demo showcasing Vike"
|
||||
}
|
||||
},
|
||||
["lang"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "lang"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: "fr"
|
||||
}
|
||||
},
|
||||
["Loading"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/__internal/integration/Loading", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "pointer-import",
|
||||
value: import6
|
||||
}
|
||||
}
|
||||
};
|
||||
export {
|
||||
configValuesSerialized
|
||||
};
|
||||
120
app/dist/server/entries/pages_index.mjs
vendored
Normal file
@ -0,0 +1,120 @@
|
||||
import { onRenderHtml } from "vike-react/__internal/integration/onRenderHtml";
|
||||
import { jsx } from "react/jsx-runtime";
|
||||
import { i as import6$1, D as DefaultLayout, a as import4 } from "../chunks/chunk-Cog4aWZK.js";
|
||||
import import6 from "vike-react/__internal/integration/Loading";
|
||||
import "react";
|
||||
import "vike-react/usePageContext";
|
||||
import "@headlessui/react";
|
||||
import "../chunks/chunk-DhcPoVSR.js";
|
||||
import "telefunc";
|
||||
import "flexsearch";
|
||||
import "@sindresorhus/slugify";
|
||||
import "@markdoc/markdoc";
|
||||
import "clsx";
|
||||
import "@heroicons/react/24/outline";
|
||||
import "prism-react-renderer";
|
||||
import "js-yaml";
|
||||
import "fast-glob";
|
||||
import "path";
|
||||
import "fs";
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
/* empty css */
|
||||
import "vike-react/config";
|
||||
import "react-highlight-words";
|
||||
import "vike/client/router";
|
||||
/*! pages/index/+Page.tsx [vike:pluginModuleBanner] */
|
||||
function Page() {
|
||||
return /* @__PURE__ */ jsx("main", { className: "max-w-2xl min-w-0 flex-auto px-4 py-16 lg:max-w-none lg:pr-0 lg:pl-8 xl:px-16", children: /* @__PURE__ */ jsx("h1", { className: "font-bold text-3xl pb-4", children: "My Vike app" }) });
|
||||
}
|
||||
const import2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
default: Page
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! virtual:vike:pageConfigValuesAll:server:/pages/index [vike:pluginModuleBanner] */
|
||||
const configValuesSerialized = {
|
||||
["isClientRuntimeLoaded"]: {
|
||||
type: "computed",
|
||||
definedAtData: null,
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
},
|
||||
["onRenderHtml"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/__internal/integration/onRenderHtml", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "pointer-import",
|
||||
value: onRenderHtml
|
||||
}
|
||||
},
|
||||
["Page"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/index/+Page.tsx", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import2
|
||||
}
|
||||
},
|
||||
["passToClient"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "vike-react/config", "fileExportPathToShowToUser": ["default", "passToClient"] }],
|
||||
valueSerialized: [{
|
||||
type: "js-serialized",
|
||||
value: ["_configFromHook"]
|
||||
}]
|
||||
},
|
||||
["Head"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/pages/+Head.tsx", "fileExportPathToShowToUser": [] }],
|
||||
valueSerialized: [{
|
||||
type: "plus-file",
|
||||
exportValues: import4
|
||||
}]
|
||||
},
|
||||
["Layout"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/layouts/LayoutDefault.tsx", "fileExportPathToShowToUser": [] }],
|
||||
valueSerialized: [{
|
||||
type: "pointer-import",
|
||||
value: DefaultLayout
|
||||
}]
|
||||
},
|
||||
["title"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+title.ts", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import6$1
|
||||
}
|
||||
},
|
||||
["description"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "description"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: "Demo showcasing Vike"
|
||||
}
|
||||
},
|
||||
["lang"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "lang"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: "fr"
|
||||
}
|
||||
},
|
||||
["Loading"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/__internal/integration/Loading", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "pointer-import",
|
||||
value: import6
|
||||
}
|
||||
}
|
||||
};
|
||||
export {
|
||||
configValuesSerialized
|
||||
};
|
||||
385
app/dist/server/entry.mjs
vendored
Normal file
@ -0,0 +1,385 @@
|
||||
import { setGlobalContext_buildEntry } from "vike/__internal";
|
||||
import { setTelefuncLoaders } from "telefunc/__internal/loadBuild";
|
||||
/*! pages/docs/+route.ts [vike:pluginModuleBanner] */
|
||||
const routeRegex = /^\/docs\/(.*)$/;
|
||||
function route(pageContext) {
|
||||
const match = pageContext.urlPathname.match(routeRegex);
|
||||
if (!match) return false;
|
||||
const [, key] = match;
|
||||
return { routeParams: { key } };
|
||||
}
|
||||
const import1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
route
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! virtual:vike:importUserCode:server [vike:pluginModuleBanner] */
|
||||
const pageFilesLazy = {};
|
||||
const pageFilesEager = {};
|
||||
const pageFilesExportNamesLazy = {};
|
||||
const pageFilesExportNamesEager = {};
|
||||
const pageFilesList = [];
|
||||
const neverLoaded = {};
|
||||
const pageConfigsSerialized = [
|
||||
{
|
||||
pageId: "/pages/_error",
|
||||
isErrorPage: true,
|
||||
routeFilesystem: void 0,
|
||||
loadConfigValuesAll: () => ({ moduleId: "virtual:vike:pageConfigValuesAll:server:/pages/_error", moduleExports: import("./entries/pages_error.mjs") }),
|
||||
configValuesSerialized: {
|
||||
["isClientRuntimeLoaded"]: {
|
||||
type: "computed",
|
||||
definedAtData: null,
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
},
|
||||
["clientRouting"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/config", "fileExportPathToShowToUser": ["default", "clientRouting"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
pageId: "/pages/index",
|
||||
isErrorPage: void 0,
|
||||
routeFilesystem: { "routeString": "/", "definedAtLocation": "/pages/index/" },
|
||||
loadConfigValuesAll: () => ({ moduleId: "virtual:vike:pageConfigValuesAll:server:/pages/index", moduleExports: import("./entries/pages_index.mjs") }),
|
||||
configValuesSerialized: {
|
||||
["isClientRuntimeLoaded"]: {
|
||||
type: "computed",
|
||||
definedAtData: null,
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
},
|
||||
["clientRouting"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/config", "fileExportPathToShowToUser": ["default", "clientRouting"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
pageId: "/pages/docs",
|
||||
isErrorPage: void 0,
|
||||
routeFilesystem: { "routeString": "/docs", "definedAtLocation": "/pages/docs/" },
|
||||
loadConfigValuesAll: () => ({ moduleId: "virtual:vike:pageConfigValuesAll:server:/pages/docs", moduleExports: import("./entries/pages_docs.mjs") }),
|
||||
configValuesSerialized: {
|
||||
["isClientRuntimeLoaded"]: {
|
||||
type: "computed",
|
||||
definedAtData: null,
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
},
|
||||
["route"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "/pages/docs/+route.ts", "fileExportPathToShowToUser": [] },
|
||||
valueSerialized: {
|
||||
type: "plus-file",
|
||||
exportValues: import1
|
||||
}
|
||||
},
|
||||
["clientRouting"]: {
|
||||
type: "standard",
|
||||
definedAtData: { "filePathToShowToUser": "vike-react/config", "fileExportPathToShowToUser": ["default", "clientRouting"] },
|
||||
valueSerialized: {
|
||||
type: "js-serialized",
|
||||
value: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
];
|
||||
const pageConfigGlobalSerialized = {
|
||||
configValuesSerialized: {
|
||||
["htmlAttributes"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "htmlAttributes"] }],
|
||||
valueSerialized: [{
|
||||
type: "js-serialized",
|
||||
value: { "class": "h-full antialiased" }
|
||||
}]
|
||||
},
|
||||
["bodyAttributes"]: {
|
||||
type: "cumulative",
|
||||
definedAtData: [{ "filePathToShowToUser": "/pages/+config.ts", "fileExportPathToShowToUser": ["default", "bodyAttributes"] }],
|
||||
valueSerialized: [{
|
||||
type: "js-serialized",
|
||||
value: { "class": "flex min-h-full bg-white dark:bg-slate-900" }
|
||||
}]
|
||||
}
|
||||
}
|
||||
};
|
||||
const pageFilesLazyIsomorph1 = /* @__PURE__ */ Object.assign({});
|
||||
const pageFilesLazyIsomorph = { ...pageFilesLazyIsomorph1 };
|
||||
pageFilesLazy[".page"] = pageFilesLazyIsomorph;
|
||||
const pageFilesLazyServer1 = /* @__PURE__ */ Object.assign({});
|
||||
const pageFilesLazyServer = { ...pageFilesLazyServer1 };
|
||||
pageFilesLazy[".page.server"] = pageFilesLazyServer;
|
||||
const pageFilesEagerRoute1 = /* @__PURE__ */ Object.assign({});
|
||||
const pageFilesEagerRoute = { ...pageFilesEagerRoute1 };
|
||||
pageFilesEager[".page.route"] = pageFilesEagerRoute;
|
||||
const pageFilesExportNamesEagerClient1 = /* @__PURE__ */ Object.assign({});
|
||||
const pageFilesExportNamesEagerClient = { ...pageFilesExportNamesEagerClient1 };
|
||||
pageFilesExportNamesEager[".page.client"] = pageFilesExportNamesEagerClient;
|
||||
const virtualFileExports = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
neverLoaded,
|
||||
pageConfigGlobalSerialized,
|
||||
pageConfigsSerialized,
|
||||
pageFilesEager,
|
||||
pageFilesExportNamesEager,
|
||||
pageFilesExportNamesLazy,
|
||||
pageFilesLazy,
|
||||
pageFilesList
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! node_modules/.pnpm/telefunc@0.1.87_@babel+core@7.26.10_@babel+parser@7.27.0_@babel+types@7.27.0_react-stre_779ec5fef2a5267e40fd00b9dc06fd8a/node_modules/telefunc/dist/cjs/node/vite/importGlob/telefuncFilesGlob.js [vike:pluginModuleBanner] */
|
||||
const telefuncFilesGlob = /* @__PURE__ */ Object.assign({ "/components/syntax/Search.telefunc.ts": () => import("./chunks/chunk-DhcPoVSR.js").then((n) => n.S) });
|
||||
const telefuncFiles = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
||||
__proto__: null,
|
||||
telefuncFilesGlob
|
||||
}, Symbol.toStringTag, { value: "Module" }));
|
||||
/*! virtual:@brillout/vite-plugin-server-entry:serverEntry [vike:pluginModuleBanner] */
|
||||
{
|
||||
const assetsManifest = {
|
||||
"_chunk-FoQi8sq6.js": {
|
||||
"file": "assets/chunks/chunk-FoQi8sq6.js",
|
||||
"name": "renderPageClientSide",
|
||||
"dynamicImports": [
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/_error",
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/index",
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/docs"
|
||||
]
|
||||
},
|
||||
"_chunk-YnSR0nZE.js": {
|
||||
"file": "assets/chunks/chunk-YnSR0nZE.js",
|
||||
"name": "Loading",
|
||||
"imports": [
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/blur-indigo.Cbr0CUfr.png",
|
||||
"assets/static/blur-cyan.DJww6-ho.png",
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
},
|
||||
"_layouts_prism-feac250c.B2a_QZIO.css": {
|
||||
"file": "assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"src": "_layouts_prism-feac250c.B2a_QZIO.css"
|
||||
},
|
||||
"_layouts_style-b34a8e57.HyLxvJhb.css": {
|
||||
"file": "assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"src": "_layouts_style-b34a8e57.HyLxvJhb.css"
|
||||
},
|
||||
"_layouts_tailwind-00e65532.kM054_rr.css": {
|
||||
"file": "assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"src": "_layouts_tailwind-00e65532.kM054_rr.css"
|
||||
},
|
||||
"_style-1efdef47.B5Troj4Q.css": {
|
||||
"file": "assets/static/style-1efdef47.B5Troj4Q.css",
|
||||
"src": "_style-1efdef47.B5Troj4Q.css"
|
||||
},
|
||||
"_vike-react-fe70c48a.BcWtY8Ol.css": {
|
||||
"file": "assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"src": "_vike-react-fe70c48a.BcWtY8Ol.css"
|
||||
},
|
||||
"images/blur-cyan.png": {
|
||||
"file": "assets/static/blur-cyan.DJww6-ho.png",
|
||||
"src": "images/blur-cyan.png"
|
||||
},
|
||||
"images/blur-indigo.png": {
|
||||
"file": "assets/static/blur-indigo.Cbr0CUfr.png",
|
||||
"src": "images/blur-indigo.png"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-cyrillic-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-greek-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-latin-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-vietnamese-wght-normal.woff2": {
|
||||
"file": "assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+inter@5.2.5/node_modules/@fontsource-variable/inter/files/inter-vietnamese-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-ext-wght-normal.woff2": {
|
||||
"file": "assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-ext-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-wght-normal.woff2": {
|
||||
"file": "assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-latin-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-vietnamese-wght-normal.woff2": {
|
||||
"file": "assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"src": "node_modules/.pnpm/@fontsource-variable+lexend@5.2.6/node_modules/@fontsource-variable/lexend/files/lexend-vietnamese-wght-normal.woff2"
|
||||
},
|
||||
"node_modules/.pnpm/vike@0.4.228_react-streaming@0.3.50_react-dom@19.1.0_react@19.1.0__react@19.1.0__vite@6_a5d8557c8c03851ef9ff4b1fc2b0d591/node_modules/vike/dist/esm/client/client-routing-runtime/entry.js": {
|
||||
"file": "assets/entries/entry-client-routing.Bc4tBJ4_.js",
|
||||
"name": "entries/entry-client-routing",
|
||||
"src": "node_modules/.pnpm/vike@0.4.228_react-streaming@0.3.50_react-dom@19.1.0_react@19.1.0__react@19.1.0__vite@6_a5d8557c8c03851ef9ff4b1fc2b0d591/node_modules/vike/dist/esm/client/client-routing-runtime/entry.js",
|
||||
"isEntry": true,
|
||||
"imports": [
|
||||
"_chunk-FoQi8sq6.js"
|
||||
]
|
||||
},
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/_error": {
|
||||
"file": "assets/entries/pages_error.DlwLYWej.js",
|
||||
"name": "entries/pages/_error",
|
||||
"src": "virtual:vike:pageConfigValuesAll:client:/pages/_error",
|
||||
"isEntry": true,
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_chunk-YnSR0nZE.js",
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
},
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/docs": {
|
||||
"file": "assets/entries/pages_docs.Gi7h7KmT.js",
|
||||
"name": "entries/pages/docs",
|
||||
"src": "virtual:vike:pageConfigValuesAll:client:/pages/docs",
|
||||
"isEntry": true,
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_chunk-YnSR0nZE.js",
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
},
|
||||
"virtual:vike:pageConfigValuesAll:client:/pages/index": {
|
||||
"file": "assets/entries/pages_index.Bb824t1n.js",
|
||||
"name": "entries/pages/index",
|
||||
"src": "virtual:vike:pageConfigValuesAll:client:/pages/index",
|
||||
"isEntry": true,
|
||||
"isDynamicEntry": true,
|
||||
"imports": [
|
||||
"_chunk-YnSR0nZE.js",
|
||||
"_chunk-FoQi8sq6.js"
|
||||
],
|
||||
"css": [
|
||||
"assets/static/vike-react-fe70c48a.BcWtY8Ol.css",
|
||||
"assets/static/layouts_style-b34a8e57.HyLxvJhb.css",
|
||||
"assets/static/layouts_tailwind-00e65532.kM054_rr.css",
|
||||
"assets/static/layouts_prism-feac250c.B2a_QZIO.css",
|
||||
"assets/static/style-1efdef47.B5Troj4Q.css"
|
||||
],
|
||||
"assets": [
|
||||
"assets/static/inter-cyrillic-ext-wght-normal.B2xhLi22.woff2",
|
||||
"assets/static/inter-cyrillic-wght-normal.CMZtQduZ.woff2",
|
||||
"assets/static/inter-greek-ext-wght-normal.CGAr0uHJ.woff2",
|
||||
"assets/static/inter-greek-wght-normal.CaVNZxsx.woff2",
|
||||
"assets/static/inter-vietnamese-wght-normal.CBcvBZtf.woff2",
|
||||
"assets/static/inter-latin-ext-wght-normal.CFHvXkgd.woff2",
|
||||
"assets/static/inter-latin-wght-normal.C2S99t-D.woff2",
|
||||
"assets/static/lexend-vietnamese-wght-normal.RvljkFvg.woff2",
|
||||
"assets/static/lexend-latin-ext-wght-normal.Ca5OILQq.woff2",
|
||||
"assets/static/lexend-latin-wght-normal.ga3u8m5q.woff2"
|
||||
]
|
||||
}
|
||||
};
|
||||
const buildInfo = {
|
||||
"versionAtBuildTime": "0.4.228",
|
||||
"usesClientRouter": false,
|
||||
"viteConfigRuntime": {
|
||||
"root": "/app",
|
||||
"build": {
|
||||
"outDir": "/app/dist/"
|
||||
},
|
||||
"_baseViteOriginal": "/__UNSET__",
|
||||
"vitePluginServerEntry": {}
|
||||
}
|
||||
};
|
||||
setGlobalContext_buildEntry({
|
||||
virtualFileExports,
|
||||
assetsManifest,
|
||||
buildInfo
|
||||
});
|
||||
}
|
||||
setTelefuncLoaders({
|
||||
loadTelefuncFiles: () => telefuncFiles,
|
||||
loadManifest: () => ({
|
||||
"version": "0.1.87",
|
||||
"config": {}
|
||||
})
|
||||
});
|
||||
1
app/dist/server/package.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{ "type": "module" }
|
||||
@ -1,16 +1,16 @@
|
||||
import { dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
import { vikeHandler } from "./server/vike-handler";
|
||||
import { telefuncHandler } from "./server/telefunc-handler";
|
||||
import Fastify from "fastify";
|
||||
import { createHandler } from "@universal-middleware/fastify";
|
||||
import { telefuncHandler } from "./server/telefunc-handler";
|
||||
import { vikeHandler } from "./server/vike-handler";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { dirname } from "node:path";
|
||||
import Fastify from "fastify";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
const root = __dirname;
|
||||
const port = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
|
||||
|
||||
const hmrPort = process.env.HMR_PORT ? parseInt(process.env.HMR_PORT, 10) : 24678;
|
||||
const port = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
|
||||
const root = __dirname;
|
||||
|
||||
async function startServer() {
|
||||
const app = Fastify();
|
||||
@ -57,12 +57,6 @@ async function startServer() {
|
||||
|
||||
const app = await startServer();
|
||||
|
||||
app.listen(
|
||||
{
|
||||
port: port,
|
||||
host: "0.0.0.0",
|
||||
},
|
||||
() => {
|
||||
console.log(`Server listening on http://localhost:${port}`);
|
||||
},
|
||||
);
|
||||
app.listen({ port, host: "0.0.0.0" }, () => {
|
||||
console.log(`Server listening on http://localhost:${port}`);
|
||||
});
|
||||
|
||||
37
app/hooks/useAutoComplete.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import type { SearchResult } from "@/lib/search";
|
||||
|
||||
import { useDebounce } from "./useDebounce";
|
||||
import { useState, useEffect, use } from "react";
|
||||
|
||||
export function useAutoComplete(onSearch: (query: string) => Promise<SearchResult[]>) {
|
||||
const [results, setResults] = useState<SearchResult[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [isOpened, setIsOpened] = useState(false);
|
||||
const [query, setQuery] = useDebounce();
|
||||
|
||||
useEffect(() => {
|
||||
// Attach the event listener to the window
|
||||
function handleKeyDown(event: KeyboardEvent) {
|
||||
if (event.key === "Escape") {
|
||||
setIsOpened(false);
|
||||
} else if (event.key === "K" && (event.ctrlKey || event.metaKey)) {
|
||||
event.preventDefault();
|
||||
setIsOpened(true);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("keydown", handleKeyDown);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener("keydown", handleKeyDown);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return {
|
||||
results,
|
||||
isLoading,
|
||||
isOpened,
|
||||
query,
|
||||
setQuery,
|
||||
};
|
||||
}
|
||||
18
app/hooks/useDebounce.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
|
||||
export function useDebounce(debounceTime: number = 300): [string, React.Dispatch<React.SetStateAction<string>>] {
|
||||
const [debouncedValue, setDebouncedValue] = useState<string>("");
|
||||
const [value, setValue] = useState<string>("");
|
||||
|
||||
useEffect(() => {
|
||||
const handler = setTimeout(() => {
|
||||
setDebouncedValue(value);
|
||||
}, debounceTime);
|
||||
|
||||
return () => {
|
||||
clearTimeout(handler);
|
||||
};
|
||||
}, [value]);
|
||||
|
||||
return [debouncedValue, setValue];
|
||||
}
|
||||
@ -62,7 +62,7 @@ function Header() {
|
||||
|
||||
<div className="relative flex basis-0 justify-end gap-6 sm:gap-8 md:grow">
|
||||
<ThemeSelector className="relative z-10" />
|
||||
<Link href="https://github.com" className="group" aria-label="GitHub">
|
||||
<Link href="https://gitea.gauthierdaniels.fr/GauthierWebDev/memento-dev" className="group" aria-label="GitHub">
|
||||
<GitHubIcon className="h-6 w-6 fill-slate-400 group-hover:fill-slate-500 dark:group-hover:fill-slate-300" />
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
@ -85,7 +85,6 @@ export function buildSearchIndex(pagesDir: string): FlexSearch.Document<SearchRe
|
||||
sections = cache.get(file)![1];
|
||||
} else {
|
||||
const ast = Markdoc.parse(md);
|
||||
console.log(ast.attributes);
|
||||
const title = ast.attributes?.frontmatter?.match(/^title:\s*(.*?)\s*$/m)?.[1];
|
||||
sections = [{ content: title ?? "", subsections: [] }];
|
||||
extractSections(ast, sections);
|
||||
@ -119,8 +118,6 @@ export function search(
|
||||
enrich: true,
|
||||
});
|
||||
|
||||
// console.log({ sectionIndex, query, options, results });
|
||||
|
||||
if (results.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import { type Node } from "@markdoc/markdoc";
|
||||
import type { Node } from "@markdoc/markdoc";
|
||||
|
||||
import { slugifyWithCounter } from "@sindresorhus/slugify";
|
||||
|
||||
interface HeadingNode extends Node {
|
||||
|
||||
21
app/markdoc/Tag.ts
Normal file
@ -0,0 +1,21 @@
|
||||
// Workaround about undefined import only in production build
|
||||
|
||||
import type { RenderableTreeNode } from "@markdoc/markdoc";
|
||||
|
||||
export class Tag<N extends string = string, A extends Record<string, any> = Record<string, any>> {
|
||||
readonly $$mdtype = "Tag" as const;
|
||||
|
||||
static isTag = (tag: any): tag is Tag => {
|
||||
return !!(tag?.$$mdtype === "Tag");
|
||||
};
|
||||
|
||||
name: N;
|
||||
attributes: A;
|
||||
children: RenderableTreeNode[];
|
||||
|
||||
constructor(name = "div" as N, attributes = {} as A, children: RenderableTreeNode[] = []) {
|
||||
this.name = name;
|
||||
this.attributes = attributes;
|
||||
this.children = children;
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,12 @@
|
||||
import { Config, nodes as defaultNodes, Node, Tag } from "@markdoc/markdoc";
|
||||
import type { Config, Node } from "@markdoc/markdoc";
|
||||
|
||||
import { slugifyWithCounter } from "@sindresorhus/slugify";
|
||||
import { DocsLayout } from "@syntax/DocsLayout";
|
||||
import Markdoc from "@markdoc/markdoc";
|
||||
import { Fence } from "@syntax/Fence";
|
||||
import yaml from "js-yaml";
|
||||
|
||||
import { DocsLayout } from "@syntax/DocsLayout";
|
||||
import { Fence } from "@syntax/Fence";
|
||||
const { nodes: defaultNodes, Tag } = Markdoc;
|
||||
|
||||
let documentSlugifyMap = new Map();
|
||||
|
||||
|
||||
@ -24,7 +24,6 @@ const tags = {
|
||||
collapsible?: boolean;
|
||||
children: React.ReactNode;
|
||||
}) => {
|
||||
console.log(props);
|
||||
return <Callout {...props} collapsible={props.collapsible} type={props.type || "note"} />;
|
||||
},
|
||||
},
|
||||
|
||||
@ -3,10 +3,14 @@
|
||||
"dev": "tsx ./fastify-entry.ts",
|
||||
"build": "vike build",
|
||||
"preview": "cross-env NODE_ENV=production tsx ./fastify-entry.ts",
|
||||
"lint": "eslint ."
|
||||
"lint": "eslint .",
|
||||
"prod": "npm-run-all build preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@algolia/autocomplete-core": "^1.18.1",
|
||||
"@algolia/autocomplete-js": "^1.18.1",
|
||||
"@algolia/autocomplete-plugin-algolia-insights": "^1.18.1",
|
||||
"@algolia/autocomplete-preset-algolia": "^1.18.1",
|
||||
"@fastify/middie": "^9.0.3",
|
||||
"@fastify/static": "^8.1.1",
|
||||
"@fontsource-variable/inter": "^5.2.5",
|
||||
@ -14,16 +18,19 @@
|
||||
"@headlessui/react": "^2.2.0",
|
||||
"@heroicons/react": "^2.2.0",
|
||||
"@markdoc/markdoc": "^0.5.1",
|
||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||
"@sindresorhus/slugify": "^2.2.1",
|
||||
"@tailwindcss/typography": "^0.5.16",
|
||||
"@universal-middleware/core": "^0.4.4",
|
||||
"@universal-middleware/fastify": "^0.5.9",
|
||||
"@vitejs/plugin-react": "^4.3.4",
|
||||
"algoliasearch": "^5.23.3",
|
||||
"clsx": "^2.1.1",
|
||||
"fast-glob": "^3.3.3",
|
||||
"fastify": "^5.2.1",
|
||||
"flexsearch": "^0.7.43",
|
||||
"js-yaml": "^4.1.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prism-react-renderer": "^2.4.1",
|
||||
"prisma": "^6.5.0",
|
||||
"react": "^19.0.0",
|
||||
@ -37,6 +44,7 @@
|
||||
"vike-react": "^0.5.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@algolia/client-search": "^5.23.3",
|
||||
"@eslint/js": "^9.22.0",
|
||||
"@tailwindcss/vite": "^4.0.12",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
@ -59,4 +67,4 @@
|
||||
"vite": "^6.2.1"
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
}
|
||||
|
||||
2048
app/pnpm-lock.yaml
generated
@ -14,8 +14,6 @@ export function ThemeProvider(props: ThemeProviderProps) {
|
||||
|
||||
rootElement.classList.toggle("dark", theme === "dark");
|
||||
rootElement.classList.toggle("light", theme === "light");
|
||||
|
||||
console.log("changed theme to", theme);
|
||||
}, [theme]);
|
||||
|
||||
return <ThemeContext.Provider value={{ theme, setTheme }}>{props.children}</ThemeContext.Provider>;
|
||||
|
||||
11
compose.yml
@ -12,17 +12,6 @@ services:
|
||||
volumes:
|
||||
- ./app:/app
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- memento-data
|
||||
|
||||
memento-dev-redis:
|
||||
container_name: memento-dev-redis
|
||||
image: redis:alpine
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- memento-data
|
||||
|
||||
networks:
|
||||
memento-data:
|
||||
|
||||