492 lines
22 KiB
TypeScript
492 lines
22 KiB
TypeScript
// AUTO-GENERATED by `wrnexus dev` - do not edit.
|
|
// Typed routes support required, optional, and catch-all parameters.
|
|
|
|
export interface Routes {
|
|
"/": Record<string, never>;
|
|
"/accessibility": Record<string, never>;
|
|
"/advanced-forms": Record<string, never>;
|
|
"/base": Record<string, never>;
|
|
"/block-library": Record<string, never>;
|
|
"/colors": Record<string, never>;
|
|
"/components/accordion": Record<string, never>;
|
|
"/components/advanced-select": Record<string, never>;
|
|
"/components/alert": Record<string, never>;
|
|
"/components/announcement-bar": Record<string, never>;
|
|
"/components/auth-form": Record<string, never>;
|
|
"/components/auth-split-layout": Record<string, never>;
|
|
"/components/avatar": Record<string, never>;
|
|
"/components/avatar-group": Record<string, never>;
|
|
"/components/back-to-top": Record<string, never>;
|
|
"/components/badge": Record<string, never>;
|
|
"/components/blockquote": Record<string, never>;
|
|
"/components/breadcrumb": Record<string, never>;
|
|
"/components/button": Record<string, never>;
|
|
"/components/button-group": Record<string, never>;
|
|
"/components/card": Record<string, never>;
|
|
"/components/carousel": Record<string, never>;
|
|
"/components/chart": Record<string, never>;
|
|
"/components/chat-bubble": Record<string, never>;
|
|
"/components/checkbox": Record<string, never>;
|
|
"/components/clipboard": Record<string, never>;
|
|
"/components/collapse": Record<string, never>;
|
|
"/components/color-picker": Record<string, never>;
|
|
"/components/columns": Record<string, never>;
|
|
"/components/combo-box": Record<string, never>;
|
|
"/components/confetti": Record<string, never>;
|
|
"/components/container": Record<string, never>;
|
|
"/components/context-menu": Record<string, never>;
|
|
"/components/ctasection": Record<string, never>;
|
|
"/components/custom-scrollbar": Record<string, never>;
|
|
"/components/data-map": Record<string, never>;
|
|
"/components/data-table": Record<string, never>;
|
|
"/components/date-picker": Record<string, never>;
|
|
"/components/device-frame": Record<string, never>;
|
|
"/components/divider": Record<string, never>;
|
|
"/components/drag-and-drop": Record<string, never>;
|
|
"/components/drawer": Record<string, never>;
|
|
"/components/dropdown": Record<string, never>;
|
|
"/components/feature-card": Record<string, never>;
|
|
"/components/feature-grid": Record<string, never>;
|
|
"/components/feature-icon-card": Record<string, never>;
|
|
"/components/file-input": Record<string, never>;
|
|
"/components/file-upload-progress": Record<string, never>;
|
|
"/components/footer": Record<string, never>;
|
|
"/components/grid": Record<string, never>;
|
|
"/components/hero": Record<string, never>;
|
|
"/components/hero-actions": Record<string, never>;
|
|
"/components/image": Record<string, never>;
|
|
"/components/input": Record<string, never>;
|
|
"/components/input-group": Record<string, never>;
|
|
"/components/input-number": Record<string, never>;
|
|
"/components/kbd": Record<string, never>;
|
|
"/components/layout-splitter": Record<string, never>;
|
|
"/components/legend-indicator": Record<string, never>;
|
|
"/components/link": Record<string, never>;
|
|
"/components/list": Record<string, never>;
|
|
"/components/list-group": Record<string, never>;
|
|
"/components/map": Record<string, never>;
|
|
"/components/marketing-section-header": Record<string, never>;
|
|
"/components/marquee": Record<string, never>;
|
|
"/components/mega-menu": Record<string, never>;
|
|
"/components/metric-card": Record<string, never>;
|
|
"/components/metric-grid": Record<string, never>;
|
|
"/components/modal": Record<string, never>;
|
|
"/components/nav": Record<string, never>;
|
|
"/components/navbar": Record<string, never>;
|
|
"/components/page-header": Record<string, never>;
|
|
"/components/pagination": Record<string, never>;
|
|
"/components/pin-input": Record<string, never>;
|
|
"/components/popover": Record<string, never>;
|
|
"/components/portal-dashboard": Record<string, never>;
|
|
"/components/preference-switcher": Record<string, never>;
|
|
"/components/progress": Record<string, never>;
|
|
"/components/public-page-shell": Record<string, never>;
|
|
"/components/radio": Record<string, never>;
|
|
"/components/range-slider": Record<string, never>;
|
|
"/components/rating": Record<string, never>;
|
|
"/components/scrollspy": Record<string, never>;
|
|
"/components/search-box": Record<string, never>;
|
|
"/components/section": Record<string, never>;
|
|
"/components/section-header": Record<string, never>;
|
|
"/components/select": Record<string, never>;
|
|
"/components/sidebar": Record<string, never>;
|
|
"/components/skeleton": Record<string, never>;
|
|
"/components/spinner": Record<string, never>;
|
|
"/components/split-hero": Record<string, never>;
|
|
"/components/stats-bar": Record<string, never>;
|
|
"/components/stepper": Record<string, never>;
|
|
"/components/strong-password": Record<string, never>;
|
|
"/components/styled-icon": Record<string, never>;
|
|
"/components/switch": Record<string, never>;
|
|
"/components/tabs": Record<string, never>;
|
|
"/components/text-link": Record<string, never>;
|
|
"/components/textarea": Record<string, never>;
|
|
"/components/time-picker": Record<string, never>;
|
|
"/components/timeline": Record<string, never>;
|
|
"/components/toaster": Record<string, never>;
|
|
"/components/toggle-count": Record<string, never>;
|
|
"/components/toggle-password": Record<string, never>;
|
|
"/components/tooltip": Record<string, never>;
|
|
"/components/tree-view": Record<string, never>;
|
|
"/components/typography": Record<string, never>;
|
|
"/components/wysiwyg-editor": Record<string, never>;
|
|
"/core": Record<string, never>;
|
|
"/dark-mode": Record<string, never>;
|
|
"/data": Record<string, never>;
|
|
"/docs": Record<string, never>;
|
|
"/fonts": Record<string, never>;
|
|
"/forms": Record<string, never>;
|
|
"/framework-guides": Record<string, never>;
|
|
"/installation": Record<string, never>;
|
|
"/integrations": Record<string, never>;
|
|
"/layout": Record<string, never>;
|
|
"/marketing": Record<string, never>;
|
|
"/navigation": Record<string, never>;
|
|
"/overlays": Record<string, never>;
|
|
"/resources": Record<string, never>;
|
|
"/sizing": Record<string, never>;
|
|
"/tables": Record<string, never>;
|
|
"/templates": Record<string, never>;
|
|
"/themes": Record<string, never>;
|
|
"/v06-functions": Record<string, never>;
|
|
"/v06-imports": Record<string, never>;
|
|
"/v06-migration": Record<string, never>;
|
|
"/v06-outputs": Record<string, never>;
|
|
"/v06-runtime": Record<string, never>;
|
|
"/v06-state": Record<string, never>;
|
|
"/v06-stores": Record<string, never>;
|
|
"/v06-types": Record<string, never>;
|
|
}
|
|
|
|
export interface RouteNames {
|
|
"index": "/";
|
|
"accessibility": "/accessibility";
|
|
"advanced.forms": "/advanced-forms";
|
|
"base": "/base";
|
|
"block.library": "/block-library";
|
|
"colors": "/colors";
|
|
"components.accordion": "/components/accordion";
|
|
"components.advanced.select": "/components/advanced-select";
|
|
"components.alert": "/components/alert";
|
|
"components.announcement.bar": "/components/announcement-bar";
|
|
"components.auth.form": "/components/auth-form";
|
|
"components.auth.split.layout": "/components/auth-split-layout";
|
|
"components.avatar": "/components/avatar";
|
|
"components.avatar.group": "/components/avatar-group";
|
|
"components.back.to.top": "/components/back-to-top";
|
|
"components.badge": "/components/badge";
|
|
"components.blockquote": "/components/blockquote";
|
|
"components.breadcrumb": "/components/breadcrumb";
|
|
"components.button": "/components/button";
|
|
"components.button.group": "/components/button-group";
|
|
"components.card": "/components/card";
|
|
"components.carousel": "/components/carousel";
|
|
"components.chart": "/components/chart";
|
|
"components.chat.bubble": "/components/chat-bubble";
|
|
"components.checkbox": "/components/checkbox";
|
|
"components.clipboard": "/components/clipboard";
|
|
"components.collapse": "/components/collapse";
|
|
"components.color.picker": "/components/color-picker";
|
|
"components.columns": "/components/columns";
|
|
"components.combo.box": "/components/combo-box";
|
|
"components.confetti": "/components/confetti";
|
|
"components.container": "/components/container";
|
|
"components.context.menu": "/components/context-menu";
|
|
"components.ctasection": "/components/ctasection";
|
|
"components.custom.scrollbar": "/components/custom-scrollbar";
|
|
"components.data.map": "/components/data-map";
|
|
"components.data.table": "/components/data-table";
|
|
"components.date.picker": "/components/date-picker";
|
|
"components.device.frame": "/components/device-frame";
|
|
"components.divider": "/components/divider";
|
|
"components.drag.and.drop": "/components/drag-and-drop";
|
|
"components.drawer": "/components/drawer";
|
|
"components.dropdown": "/components/dropdown";
|
|
"components.feature.card": "/components/feature-card";
|
|
"components.feature.grid": "/components/feature-grid";
|
|
"components.feature.icon.card": "/components/feature-icon-card";
|
|
"components.file.input": "/components/file-input";
|
|
"components.file.upload.progress": "/components/file-upload-progress";
|
|
"components.footer": "/components/footer";
|
|
"components.grid": "/components/grid";
|
|
"components.hero": "/components/hero";
|
|
"components.hero.actions": "/components/hero-actions";
|
|
"components.image": "/components/image";
|
|
"components.input": "/components/input";
|
|
"components.input.group": "/components/input-group";
|
|
"components.input.number": "/components/input-number";
|
|
"components.kbd": "/components/kbd";
|
|
"components.layout.splitter": "/components/layout-splitter";
|
|
"components.legend.indicator": "/components/legend-indicator";
|
|
"components.link": "/components/link";
|
|
"components.list": "/components/list";
|
|
"components.list.group": "/components/list-group";
|
|
"components.map": "/components/map";
|
|
"components.marketing.section.header": "/components/marketing-section-header";
|
|
"components.marquee": "/components/marquee";
|
|
"components.mega.menu": "/components/mega-menu";
|
|
"components.metric.card": "/components/metric-card";
|
|
"components.metric.grid": "/components/metric-grid";
|
|
"components.modal": "/components/modal";
|
|
"components.nav": "/components/nav";
|
|
"components.navbar": "/components/navbar";
|
|
"components.page.header": "/components/page-header";
|
|
"components.pagination": "/components/pagination";
|
|
"components.pin.input": "/components/pin-input";
|
|
"components.popover": "/components/popover";
|
|
"components.portal.dashboard": "/components/portal-dashboard";
|
|
"components.preference.switcher": "/components/preference-switcher";
|
|
"components.progress": "/components/progress";
|
|
"components.public.page.shell": "/components/public-page-shell";
|
|
"components.radio": "/components/radio";
|
|
"components.range.slider": "/components/range-slider";
|
|
"components.rating": "/components/rating";
|
|
"components.scrollspy": "/components/scrollspy";
|
|
"components.search.box": "/components/search-box";
|
|
"components.section": "/components/section";
|
|
"components.section.header": "/components/section-header";
|
|
"components.select": "/components/select";
|
|
"components.sidebar": "/components/sidebar";
|
|
"components.skeleton": "/components/skeleton";
|
|
"components.spinner": "/components/spinner";
|
|
"components.split.hero": "/components/split-hero";
|
|
"components.stats.bar": "/components/stats-bar";
|
|
"components.stepper": "/components/stepper";
|
|
"components.strong.password": "/components/strong-password";
|
|
"components.styled.icon": "/components/styled-icon";
|
|
"components.switch": "/components/switch";
|
|
"components.tabs": "/components/tabs";
|
|
"components.text.link": "/components/text-link";
|
|
"components.textarea": "/components/textarea";
|
|
"components.time.picker": "/components/time-picker";
|
|
"components.timeline": "/components/timeline";
|
|
"components.toaster": "/components/toaster";
|
|
"components.toggle.count": "/components/toggle-count";
|
|
"components.toggle.password": "/components/toggle-password";
|
|
"components.tooltip": "/components/tooltip";
|
|
"components.tree.view": "/components/tree-view";
|
|
"components.typography": "/components/typography";
|
|
"components.wysiwyg.editor": "/components/wysiwyg-editor";
|
|
"core": "/core";
|
|
"dark.mode": "/dark-mode";
|
|
"data": "/data";
|
|
"docs": "/docs";
|
|
"fonts": "/fonts";
|
|
"forms": "/forms";
|
|
"framework.guides": "/framework-guides";
|
|
"installation": "/installation";
|
|
"integrations": "/integrations";
|
|
"layout": "/layout";
|
|
"marketing": "/marketing";
|
|
"navigation": "/navigation";
|
|
"overlays": "/overlays";
|
|
"resources": "/resources";
|
|
"sizing": "/sizing";
|
|
"tables": "/tables";
|
|
"templates": "/templates";
|
|
"themes": "/themes";
|
|
"v06.functions": "/v06-functions";
|
|
"v06.imports": "/v06-imports";
|
|
"v06.migration": "/v06-migration";
|
|
"v06.outputs": "/v06-outputs";
|
|
"v06.runtime": "/v06-runtime";
|
|
"v06.state": "/v06-state";
|
|
"v06.stores": "/v06-stores";
|
|
"v06.types": "/v06-types";
|
|
}
|
|
|
|
export interface RouteQueries {
|
|
[path: string]: Record<string, string | number | boolean | null | undefined>;
|
|
}
|
|
|
|
export type RoutePath = keyof Routes;
|
|
export type RouteName = keyof RouteNames;
|
|
export type RouteQuery<P extends RoutePath> = P extends keyof RouteQueries
|
|
? RouteQueries[P]
|
|
: Record<string, string | number | boolean | null | undefined>;
|
|
type RouteValue = string | readonly string[] | undefined;
|
|
|
|
function encodeRouteValue(value: RouteValue, catchAll: boolean): string {
|
|
if (value === undefined) return "";
|
|
const values = Array.isArray(value) ? value : catchAll ? String(value).split("/") : [String(value)];
|
|
return values.map((part) => encodeURIComponent(part)).join("/");
|
|
}
|
|
|
|
function buildHref(path: string, params: Record<string, RouteValue> = {}): string {
|
|
const output: string[] = [];
|
|
for (const segment of path.split("/").filter(Boolean)) {
|
|
let name: string | undefined;
|
|
let optional = false;
|
|
let catchAll = false;
|
|
if (segment.startsWith("[[") && segment.endsWith("]]")) {
|
|
optional = true;
|
|
name = segment.slice(2, -2);
|
|
} else if (segment.startsWith("[") && segment.endsWith("]")) {
|
|
name = segment.slice(1, -1);
|
|
if (name.endsWith("?")) {
|
|
optional = true;
|
|
name = name.slice(0, -1);
|
|
}
|
|
}
|
|
if (!name) {
|
|
output.push(segment);
|
|
continue;
|
|
}
|
|
if (name.startsWith("...")) {
|
|
catchAll = true;
|
|
name = name.slice(3);
|
|
}
|
|
const value = params[name];
|
|
if (value === undefined && optional) continue;
|
|
if (value === undefined) throw new Error(`WRN-ROUTE-MISSING-PARAM: Missing route parameter '${name}'.`);
|
|
output.push(encodeRouteValue(value, catchAll));
|
|
}
|
|
return "/" + output.filter(Boolean).join("/");
|
|
}
|
|
|
|
export function href<P extends RoutePath>(
|
|
path: P,
|
|
...args: keyof Routes[P] extends never
|
|
? []
|
|
: Record<string, never> extends Routes[P]
|
|
? [params?: Routes[P]]
|
|
: [params: Routes[P]]
|
|
): string {
|
|
const params = (args[0] ?? {}) as Record<string, RouteValue>;
|
|
return buildHref(String(path), params);
|
|
}
|
|
|
|
export function route<N extends RouteName>(
|
|
name: N,
|
|
...args: keyof Routes[RouteNames[N]] extends never
|
|
? [params?: Routes[RouteNames[N]], query?: RouteQuery<RouteNames[N]>]
|
|
: Record<string, never> extends Routes[RouteNames[N]]
|
|
? [params?: Routes[RouteNames[N]], query?: RouteQuery<RouteNames[N]>]
|
|
: [params: Routes[RouteNames[N]], query?: RouteQuery<RouteNames[N]>]
|
|
): string {
|
|
const paths: Record<RouteName, RoutePath> = {
|
|
"index": "/",
|
|
"accessibility": "/accessibility",
|
|
"advanced.forms": "/advanced-forms",
|
|
"base": "/base",
|
|
"block.library": "/block-library",
|
|
"colors": "/colors",
|
|
"components.accordion": "/components/accordion",
|
|
"components.advanced.select": "/components/advanced-select",
|
|
"components.alert": "/components/alert",
|
|
"components.announcement.bar": "/components/announcement-bar",
|
|
"components.auth.form": "/components/auth-form",
|
|
"components.auth.split.layout": "/components/auth-split-layout",
|
|
"components.avatar": "/components/avatar",
|
|
"components.avatar.group": "/components/avatar-group",
|
|
"components.back.to.top": "/components/back-to-top",
|
|
"components.badge": "/components/badge",
|
|
"components.blockquote": "/components/blockquote",
|
|
"components.breadcrumb": "/components/breadcrumb",
|
|
"components.button": "/components/button",
|
|
"components.button.group": "/components/button-group",
|
|
"components.card": "/components/card",
|
|
"components.carousel": "/components/carousel",
|
|
"components.chart": "/components/chart",
|
|
"components.chat.bubble": "/components/chat-bubble",
|
|
"components.checkbox": "/components/checkbox",
|
|
"components.clipboard": "/components/clipboard",
|
|
"components.collapse": "/components/collapse",
|
|
"components.color.picker": "/components/color-picker",
|
|
"components.columns": "/components/columns",
|
|
"components.combo.box": "/components/combo-box",
|
|
"components.confetti": "/components/confetti",
|
|
"components.container": "/components/container",
|
|
"components.context.menu": "/components/context-menu",
|
|
"components.ctasection": "/components/ctasection",
|
|
"components.custom.scrollbar": "/components/custom-scrollbar",
|
|
"components.data.map": "/components/data-map",
|
|
"components.data.table": "/components/data-table",
|
|
"components.date.picker": "/components/date-picker",
|
|
"components.device.frame": "/components/device-frame",
|
|
"components.divider": "/components/divider",
|
|
"components.drag.and.drop": "/components/drag-and-drop",
|
|
"components.drawer": "/components/drawer",
|
|
"components.dropdown": "/components/dropdown",
|
|
"components.feature.card": "/components/feature-card",
|
|
"components.feature.grid": "/components/feature-grid",
|
|
"components.feature.icon.card": "/components/feature-icon-card",
|
|
"components.file.input": "/components/file-input",
|
|
"components.file.upload.progress": "/components/file-upload-progress",
|
|
"components.footer": "/components/footer",
|
|
"components.grid": "/components/grid",
|
|
"components.hero": "/components/hero",
|
|
"components.hero.actions": "/components/hero-actions",
|
|
"components.image": "/components/image",
|
|
"components.input": "/components/input",
|
|
"components.input.group": "/components/input-group",
|
|
"components.input.number": "/components/input-number",
|
|
"components.kbd": "/components/kbd",
|
|
"components.layout.splitter": "/components/layout-splitter",
|
|
"components.legend.indicator": "/components/legend-indicator",
|
|
"components.link": "/components/link",
|
|
"components.list": "/components/list",
|
|
"components.list.group": "/components/list-group",
|
|
"components.map": "/components/map",
|
|
"components.marketing.section.header": "/components/marketing-section-header",
|
|
"components.marquee": "/components/marquee",
|
|
"components.mega.menu": "/components/mega-menu",
|
|
"components.metric.card": "/components/metric-card",
|
|
"components.metric.grid": "/components/metric-grid",
|
|
"components.modal": "/components/modal",
|
|
"components.nav": "/components/nav",
|
|
"components.navbar": "/components/navbar",
|
|
"components.page.header": "/components/page-header",
|
|
"components.pagination": "/components/pagination",
|
|
"components.pin.input": "/components/pin-input",
|
|
"components.popover": "/components/popover",
|
|
"components.portal.dashboard": "/components/portal-dashboard",
|
|
"components.preference.switcher": "/components/preference-switcher",
|
|
"components.progress": "/components/progress",
|
|
"components.public.page.shell": "/components/public-page-shell",
|
|
"components.radio": "/components/radio",
|
|
"components.range.slider": "/components/range-slider",
|
|
"components.rating": "/components/rating",
|
|
"components.scrollspy": "/components/scrollspy",
|
|
"components.search.box": "/components/search-box",
|
|
"components.section": "/components/section",
|
|
"components.section.header": "/components/section-header",
|
|
"components.select": "/components/select",
|
|
"components.sidebar": "/components/sidebar",
|
|
"components.skeleton": "/components/skeleton",
|
|
"components.spinner": "/components/spinner",
|
|
"components.split.hero": "/components/split-hero",
|
|
"components.stats.bar": "/components/stats-bar",
|
|
"components.stepper": "/components/stepper",
|
|
"components.strong.password": "/components/strong-password",
|
|
"components.styled.icon": "/components/styled-icon",
|
|
"components.switch": "/components/switch",
|
|
"components.tabs": "/components/tabs",
|
|
"components.text.link": "/components/text-link",
|
|
"components.textarea": "/components/textarea",
|
|
"components.time.picker": "/components/time-picker",
|
|
"components.timeline": "/components/timeline",
|
|
"components.toaster": "/components/toaster",
|
|
"components.toggle.count": "/components/toggle-count",
|
|
"components.toggle.password": "/components/toggle-password",
|
|
"components.tooltip": "/components/tooltip",
|
|
"components.tree.view": "/components/tree-view",
|
|
"components.typography": "/components/typography",
|
|
"components.wysiwyg.editor": "/components/wysiwyg-editor",
|
|
"core": "/core",
|
|
"dark.mode": "/dark-mode",
|
|
"data": "/data",
|
|
"docs": "/docs",
|
|
"fonts": "/fonts",
|
|
"forms": "/forms",
|
|
"framework.guides": "/framework-guides",
|
|
"installation": "/installation",
|
|
"integrations": "/integrations",
|
|
"layout": "/layout",
|
|
"marketing": "/marketing",
|
|
"navigation": "/navigation",
|
|
"overlays": "/overlays",
|
|
"resources": "/resources",
|
|
"sizing": "/sizing",
|
|
"tables": "/tables",
|
|
"templates": "/templates",
|
|
"themes": "/themes",
|
|
"v06.functions": "/v06-functions",
|
|
"v06.imports": "/v06-imports",
|
|
"v06.migration": "/v06-migration",
|
|
"v06.outputs": "/v06-outputs",
|
|
"v06.runtime": "/v06-runtime",
|
|
"v06.state": "/v06-state",
|
|
"v06.stores": "/v06-stores",
|
|
"v06.types": "/v06-types"
|
|
} as Record<RouteName, RoutePath>;
|
|
const output = buildHref(paths[name], (args[0] ?? {}) as Record<string, RouteValue>);
|
|
const query = args[1];
|
|
if (!query) return output;
|
|
const search = new URLSearchParams();
|
|
for (const [key, value] of Object.entries(query))
|
|
if (value !== undefined && value !== null) search.set(key, String(value));
|
|
const text = search.toString();
|
|
return text ? `${output}?${text}` : output;
|
|
}
|