Files
mnote/wolai-frontend/src/lib/documents/page-option-semantics.ts
T

132 lines
3.3 KiB
TypeScript

import type {
BooleanPageOptionKey,
PageLayoutDensity,
PageOptionsState,
} from "@/types/page-options";
export type PageOptionSurface =
| "page_shell_layout"
| "read_view"
| "editor_runtime"
| "inspector_only";
export type PageOptionRuntimeSupport = "wired" | "planned" | "ui_only";
export type PageOptionPanelPolicy = "keep" | "downgrade" | "global_only";
export type PageOptionSemanticDescriptor = {
surfaces: PageOptionSurface[];
runtimeSupport: PageOptionRuntimeSupport;
};
export const PAGE_OPTION_PANEL_GROUPS: {
page: BooleanPageOptionKey[];
custom: BooleanPageOptionKey[];
} = {
page: [
"wideLayout",
"smallText",
"showHeadingNumbers",
"showToc",
"protectEditing",
"showWordCount",
],
custom: ["collapseBacklinks", "hideChildPages", "showBlockRefCount"],
};
export const PAGE_OPTION_SEMANTICS: Record<
BooleanPageOptionKey | "pageFont" | "layoutDensity" | "showStructure" | "embedDefaultBlockId",
PageOptionSemanticDescriptor
> = {
wideLayout: {
surfaces: ["page_shell_layout", "editor_runtime"],
runtimeSupport: "wired",
},
smallText: {
surfaces: ["page_shell_layout", "editor_runtime"],
runtimeSupport: "wired",
},
showHeadingNumbers: {
surfaces: ["read_view", "editor_runtime"],
runtimeSupport: "wired",
},
showToc: {
surfaces: ["read_view"],
runtimeSupport: "wired",
},
showStructure: {
surfaces: ["read_view"],
runtimeSupport: "ui_only",
},
protectEditing: {
surfaces: ["page_shell_layout", "editor_runtime"],
runtimeSupport: "planned",
},
showWordCount: {
surfaces: ["inspector_only"],
runtimeSupport: "wired",
},
collapseBacklinks: {
surfaces: ["page_shell_layout"],
runtimeSupport: "wired",
},
pageFont: {
surfaces: ["page_shell_layout"],
runtimeSupport: "wired",
},
layoutDensity: {
surfaces: ["page_shell_layout", "editor_runtime"],
runtimeSupport: "wired",
},
hideChildPages: {
surfaces: ["page_shell_layout", "read_view"],
runtimeSupport: "wired",
},
showBlockRefCount: {
surfaces: ["editor_runtime", "inspector_only"],
runtimeSupport: "planned",
},
embedDefaultBlockId: {
surfaces: ["editor_runtime"],
runtimeSupport: "wired",
},
};
export type LeptosTiptapRuntimePageOptions = {
wideLayout: boolean;
smallText: boolean;
layoutDensity: PageLayoutDensity;
showHeadingNumbers: boolean;
embedDefaultBlockId: string | null;
};
export const PAGE_OPTION_PANEL_POLICY: Record<
BooleanPageOptionKey | "pageFont" | "layoutDensity" | "showStructure" | "embedDefaultBlockId",
PageOptionPanelPolicy
> = {
wideLayout: "keep",
smallText: "keep",
showHeadingNumbers: "keep",
showToc: "keep",
showStructure: "global_only",
protectEditing: "downgrade",
showWordCount: "keep",
collapseBacklinks: "keep",
pageFont: "keep",
layoutDensity: "keep",
hideChildPages: "keep",
showBlockRefCount: "downgrade",
embedDefaultBlockId: "keep",
};
export function pickLeptosTiptapRuntimePageOptions(
pageOptions: PageOptionsState,
): LeptosTiptapRuntimePageOptions {
return {
wideLayout: pageOptions.wideLayout,
smallText: pageOptions.smallText,
layoutDensity: pageOptions.layoutDensity,
showHeadingNumbers: pageOptions.showHeadingNumbers,
embedDefaultBlockId: pageOptions.embedDefaultBlockId,
};
}