| | |
| | | // @ts-ignore |
| | | import script from "./scripts/explorer.inline" |
| | | import { ExplorerNode, FileNode, Options } from "./ExplorerNode" |
| | | import { QuartzPluginData } from "../plugins/vfile" |
| | | |
| | | // Options interface defined in `ExplorerNode` to avoid circular dependency |
| | | const defaultOptions = { |
| | |
| | | } satisfies Options |
| | | |
| | | export default ((userOpts?: Partial<Options>) => { |
| | | function Explorer({ allFiles, displayClass, fileData }: QuartzComponentProps) { |
| | | // Parse config |
| | | const opts: Options = { ...defaultOptions, ...userOpts } |
| | | |
| | | // memoized |
| | | let fileTree: FileNode |
| | | let jsonTree: string |
| | | |
| | | function constructFileTree(allFiles: QuartzPluginData[]) { |
| | | if (!fileTree) { |
| | | // Construct tree from allFiles |
| | | const fileTree = new FileNode("") |
| | | fileTree = new FileNode("") |
| | | allFiles.forEach((file) => fileTree.add(file, 1)) |
| | | |
| | | /** |
| | |
| | | const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed") |
| | | |
| | | // Stringify to pass json tree as data attribute ([data-tree]) |
| | | const jsonTree = JSON.stringify(folders) |
| | | jsonTree = JSON.stringify(folders) |
| | | } |
| | | } |
| | | |
| | | function Explorer({ allFiles, displayClass, fileData }: QuartzComponentProps) { |
| | | constructFileTree(allFiles) |
| | | return ( |
| | | <div class={`explorer ${displayClass}`}> |
| | | <button |