Explorer can now hold components in it so that they can be visible from the menu drawer on mobile view

This commit is contained in:
watashiwaaniket 2026-01-09 12:27:23 +05:30
parent f346a01296
commit 54064649ac
2 changed files with 50 additions and 4 deletions

View File

@ -38,7 +38,19 @@ export const defaultContentPageLayout: PageLayout = {
{ Component: Component.ReaderMode() }, { Component: Component.ReaderMode() },
], ],
}), }),
Component.Explorer(), Component.Explorer({
folderDefaultState: "collapsed",
components: [
{
Component: Component.RecentNotes(),
position: "before",
},
{
Component: Component.ContentMeta(),
position: "after",
}
]
}),
], ],
right: [ right: [
Component.Graph(), Component.Graph(),

View File

@ -20,6 +20,10 @@ export interface Options {
filterFn: (node: FileTrieNode) => boolean filterFn: (node: FileTrieNode) => boolean
mapFn: (node: FileTrieNode) => void mapFn: (node: FileTrieNode) => void
order: OrderEntries[] order: OrderEntries[]
components?: {
Component: QuartzComponent
position: "before" | "after"
}[]
} }
const defaultOptions: Options = { const defaultOptions: Options = {
@ -48,6 +52,7 @@ const defaultOptions: Options = {
}, },
filterFn: (node) => node.slugSegment !== "tags", filterFn: (node) => node.slugSegment !== "tags",
order: ["filter", "map", "sort"], order: ["filter", "map", "sort"],
components: [],
} }
export type FolderState = { export type FolderState = {
@ -60,9 +65,16 @@ export default ((userOpts?: Partial<Options>) => {
const opts: Options = { ...defaultOptions, ...userOpts } const opts: Options = { ...defaultOptions, ...userOpts }
const { OverflowList, overflowListAfterDOMLoaded } = OverflowListFactory() const { OverflowList, overflowListAfterDOMLoaded } = OverflowListFactory()
const Explorer: QuartzComponent = ({ cfg, displayClass }: QuartzComponentProps) => { const Explorer: QuartzComponent = ({ cfg, displayClass, ...props }: QuartzComponentProps) => {
const id = `explorer-${numExplorers++}` const id = `explorer-${numExplorers++}`
const beforeComponents = (opts.components || []).filter(
(c) => c.position === "before" || !c.position,
)
const afterCOmpoentns = (opts.components || []).filter(
(c) => c.position === "after" || !c.position,
)
return ( return (
<div <div
class={classNames(displayClass, "explorer")} class={classNames(displayClass, "explorer")}
@ -120,7 +132,19 @@ export default ((userOpts?: Partial<Options>) => {
</svg> </svg>
</button> </button>
<div id={id} class="explorer-content" aria-expanded={false} role="group"> <div id={id} class="explorer-content" aria-expanded={false} role="group">
{beforeComponents.map((comp, idx) => (
<div key={`before-${idx}`}>
<comp.Component {...props} cfg={cfg} />
</div>
))}
<OverflowList class="explorer-ul" /> <OverflowList class="explorer-ul" />
{afterCOmpoentns.map((comp, idx) => (
<div key={`after-${idx}`}>
<comp.Component {...props} cfg={cfg} />
</div>
))}
</div> </div>
<template id="template-file"> <template id="template-file">
<li> <li>
@ -159,7 +183,17 @@ export default ((userOpts?: Partial<Options>) => {
) )
} }
Explorer.css = style const additionalCSS = opts.components?.map(c => c.Component.css) || []
Explorer.afterDOMLoaded = concatenateResources(script, overflowListAfterDOMLoaded) const additionalAfterDOM = opts.components?.map(c => c.Component.afterDOMLoaded) || []
const additionalBeforeDOM = opts.components?.map(c => c.Component.beforeDOMLoaded) || []
Explorer.css = concatenateResources(style, ...additionalCSS)
Explorer.afterDOMLoaded = concatenateResources(
script,
overflowListAfterDOMLoaded,
...additionalAfterDOM
)
Explorer.beforeDOMLoaded = concatenateResources(...additionalBeforeDOM)
return Explorer return Explorer
}) satisfies QuartzComponentConstructor }) satisfies QuartzComponentConstructor