{"version":3,"file":"ngx-explorer.mjs","sources":["../../../projects/ngx-explorer/src/lib/shared/providers.ts","../../../projects/ngx-explorer/src/lib/shared/utils.ts","../../../projects/ngx-explorer/src/lib/services/data.service.ts","../../../projects/ngx-explorer/src/lib/services/explorer.service.ts","../../../projects/ngx-explorer/src/lib/components/base-view/base-view.directive.ts","../../../projects/ngx-explorer/src/lib/directives/drag-drop.directive.ts","../../../projects/ngx-explorer/src/lib/components/icons/icons.component.ts","../../../projects/ngx-explorer/src/lib/components/icons/icons.component.html","../../../projects/ngx-explorer/src/lib/components/tree/tree.component.ts","../../../projects/ngx-explorer/src/lib/components/tree/tree.component.html","../../../projects/ngx-explorer/src/lib/components/list/list.component.ts","../../../projects/ngx-explorer/src/lib/components/list/list.component.html","../../../projects/ngx-explorer/src/lib/components/view-switcher/view-switcher.component.ts","../../../projects/ngx-explorer/src/lib/components/view-switcher/view-switcher.component.html","../../../projects/ngx-explorer/src/lib/components/menu-bar/menu-bar.component.ts","../../../projects/ngx-explorer/src/lib/components/menu-bar/menu-bar.component.html","../../../projects/ngx-explorer/src/lib/components/breadcrumbs/breadcrumbs.component.ts","../../../projects/ngx-explorer/src/lib/components/breadcrumbs/breadcrumbs.component.html","../../../projects/ngx-explorer/src/lib/components/content/content.component.ts","../../../projects/ngx-explorer/src/lib/components/content/content.component.html","../../../projects/ngx-explorer/src/lib/components/explorer/explorer.component.ts","../../../projects/ngx-explorer/src/lib/components/explorer/explorer.component.html","../../../projects/ngx-explorer/src/public-api.ts","../../../projects/ngx-explorer/src/ngx-explorer.ts"],"sourcesContent":["import { InjectionToken, inject } from '@angular/core';\nimport { NgeExplorerConfig, View } from './types';\nimport { IconsComponent, ListComponent } from '../../public-api';\n\nexport const DEFAULT_CONFIG: Partial<NgeExplorerConfig> = {\n    homeNodeName: 'Files',\n    multipleSelection: true,\n    features: {\n        delete: true,\n        upload: true,\n        download: true,\n        rename: true,\n        createDir: true,\n    },\n};\n\nexport const VIEWS = new InjectionToken<View[]>('NXE_VIEWS', {\n    providedIn: 'root',\n    factory: () => [\n        {\n            name: 'Icons',\n            icon: 'nxe-th-large',\n            component: IconsComponent,\n        },\n        {\n            name: 'List',\n            icon: 'nxe-menu',\n            component: ListComponent,\n        },\n    ],\n});\n\nexport const CONFIG = new InjectionToken<NgeExplorerConfig>('NXE_CONFIG', {\n    providedIn: 'root',\n    factory: () => {\n        const views = inject(VIEWS);\n        const defaultView = views[0].name;\n        return { ...DEFAULT_CONFIG, defaultView } as NgeExplorerConfig;\n    },\n});\n","import { INode } from './types';\n\nexport class Utils {\n    private static id = 0;\n\n    static createNode(name: string, parentId = 0, isLeaf = false, data: unknown = {}, expanded = false) {\n        const id = ++this.id;\n        return {\n            id,\n            name,\n            parentId,\n            data,\n            isLeaf,\n            expanded,\n            children: [],\n        } as INode;\n    }\n\n    static compareObjects(a: any, b: any) {\n        return JSON.stringify(a) === JSON.stringify(b);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { IDataService, Data, DataNode } from '../shared/types';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport abstract class DataService implements IDataService<Data> {\n    abstract getContent(data: Data): Observable<{ files: Data[]; dirs: Data[] }>;\n    abstract createDir(data: Data, name: string): Observable<Data>;\n    abstract rename(data: Data, newName: string): Observable<Data>;\n    abstract delete(data: Data[]): Observable<Data>;\n    abstract uploadFiles(data: Data, files: FileList): Observable<Data>;\n    abstract downloadFile(data: Data): Observable<Data>;\n    abstract getName(data: Data): string;\n    abstract openTree(data: Data): Observable<Array<DataNode<Data>>>;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { INode, Dictionary, Data } from '../shared/types';\nimport { Utils } from '../shared/utils';\nimport { DataService } from './data.service';\nimport { CONFIG, VIEWS } from '../shared/providers';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class ExplorerService {\n    private dataService = inject(DataService);\n    private config = inject(CONFIG);\n    private views = inject(VIEWS);\n    private internalTree = Utils.createNode(this.config.homeNodeName || 'Home', 0, false, {}, true);\n    private flatPointers: Dictionary<INode> = { [this.internalTree.id]: this.internalTree };\n\n    private readonly selectedNodes$$ = new BehaviorSubject<INode[]>([]);\n    private readonly openedNode$$ = new BehaviorSubject<INode | undefined>(undefined);\n    private readonly root$$ = new BehaviorSubject<INode>(this.internalTree);\n    public readonly currentView$ = new BehaviorSubject<string>(this.config.defaultView || this.views[0].name);\n\n    /**\n     * An Observable that emits the currently selected nodes in the explorer.\n     * Subscribers can use this to react to changes in the selection.\n     */\n    public readonly selection$ = this.selectedNodes$$.asObservable();\n\n    /**\n     * An Observable that emits the currently opened directory in the explorer.\n     * Subscribers can use this to react to changes in the opened directory.\n     */\n    public readonly openedDir$ = this.openedNode$$.asObservable();\n\n    /**\n     * An Observable that emits the root node of the explorer.\n     * Subscribers can use this to react to changes in the root node.\n     */\n    public readonly root$ = this.root$$.asObservable();\n\n    /**\n     * Returns the node with the given id.\n     * @param id The id of the node to retrieve.\n     */\n    public getNode(id: number) {\n        return this.flatPointers[id];\n    }\n\n    /**\n     * Sets the selected nodes in the explorer.\n     * @param nodes The nodes to select.\n     */\n    public select(nodes: INode[]) {\n        this.selectedNodes$$.next(nodes);\n    }\n\n    /**\n     * Opens the node with the given id. If no id is provided, the root node is opened.\n     * @param id The id of the node to open.\n     */\n    public openNode(id?: number) {\n        if (!id) {\n            id = this.internalTree.id;\n        }\n\n        this.getContent(id).subscribe(() => {\n            const parent = this.flatPointers[id!];\n            this.openedNode$$.next(parent);\n            this.selectedNodes$$.next([]);\n        });\n    }\n\n    /**\n     * Expands the node with the given id.\n     * @param id The id of the node to expand.\n     */\n    public expand(id: number) {\n        const parent = this.flatPointers[id];\n        parent.expanded = true;\n        this.getContent(id).subscribe();\n    }\n\n    public collapse(id: number) {\n        const parent = this.flatPointers[id];\n        parent.expanded = false;\n        this.root$$.next(this.internalTree);\n    }\n\n    /**\n     * Creates a new directory with the given name in the currently opened directory.\n     * @param name The name of the new directory.\n     */\n    public createDir(name: string) {\n        if (this.config.features?.createDir === false) {\n            throw new Error('Create directory feature is disabled');\n        }\n\n        const parent = this.openedNode$$.value;\n        this.dataService.createDir(parent!.data, name).subscribe(() => {\n            this.refresh();\n        });\n    }\n\n    /**\n     * Refreshes the currently opened node.\n     */\n    public refresh() {\n        this.openNode(this.openedNode$$.value!.id);\n    }\n\n    /**\n     * Renames the currently selected node.\n     * @param name The new name for the node.\n     */\n    public rename(name: string) {\n        if (this.config.features?.rename === false) {\n            throw new Error('Rename feature is disabled');\n        }\n\n        const nodes = this.selectedNodes$$.value;\n        if (nodes.length > 1) {\n            throw new Error('Multiple selection rename not supported');\n        }\n        if (nodes.length === 0) {\n            throw new Error('Nothing selected to rename');\n        }\n\n        const node = nodes[0];\n        this.dataService.rename(node.data, name).subscribe(() => {\n            this.refresh();\n        });\n    }\n\n    /**\n     * Removes the currently selected nodes.\n     */\n    public remove() {\n        if (this.config.features?.delete === false) {\n            throw new Error('Delete feature is disabled');\n        }\n\n        const selection = this.selectedNodes$$.value;\n        if (selection.length === 0) {\n            throw new Error('Nothing selected to remove');\n        }\n\n        const targets = selection.map((node) => this.flatPointers[node.id].data);\n        this.dataService.delete(targets).subscribe(() => {\n            this.refresh();\n        });\n    }\n\n    /**\n     * Uploads the given files to the currently opened directory.\n     * @param files The files to upload.\n     */\n    public upload(files: FileList) {\n        if (this.config.features?.upload === false) {\n            throw new Error('Upload feature is disabled');\n        }\n\n        const node = this.openedNode$$.value!;\n        this.dataService.uploadFiles(node.data, files).subscribe(() => {\n            this.refresh();\n        });\n    }\n\n    /**\n     * Downloads the currently selected file.\n     */\n    public download() {\n        if (this.config.features?.download === false) {\n            throw new Error('Download feature is disabled');\n        }\n\n        const target = this.selectedNodes$$.value[0];\n        this.dataService.downloadFile(target.data).subscribe(() => {\n            this.refresh();\n        });\n    }\n\n    /**\n     * Open node and get all parent nodes\n     * Ideal for opening a previously opened node by value\n     */\n    public openTree(data: Data) {\n        this.dataService.openTree(data).subscribe((dataNodes) => {\n            const queue = [\n                {\n                    parent: this.internalTree,\n                    children: dataNodes,\n                },\n            ];\n\n            let lastParent = this.internalTree;\n            while (queue.length > 0) {\n                const { parent, children } = queue.shift()!;\n                lastParent = parent;\n                children.forEach((child) => {\n                    const node = Utils.createNode(this.dataService.getName(child.data), parent.id, child.isLeaf, child.data);\n                    parent.children.push(node);\n                    this.flatPointers[node.id] = node;\n                    if (!node.isLeaf && child.children && child.children.length > 0) {\n                        parent.expanded = true;\n                        queue.push({\n                            parent: node,\n                            children: child.children,\n                        });\n                    }\n                });\n            }\n\n            this.root$$.next(this.internalTree);\n            this.openedNode$$.next(lastParent);\n            this.selectedNodes$$.next([]);\n        });\n    }\n\n    private getContent(id: number) {\n        const parent = this.flatPointers[id];\n\n        if (!parent) {\n            throw new Error('Node not found');\n        }\n\n        if (parent.isLeaf) {\n            throw new Error('Cannot open a file node');\n        }\n\n        return this.dataService.getContent(parent.data).pipe(\n            tap(({ files, dirs }) => {\n                const newDirNodes = dirs.map((data) => Utils.createNode(this.dataService.getName(data), id, false, data));\n                const newFileNodes = files.map((data) => Utils.createNode(this.dataService.getName(data), id, true, data));\n                const newChildren = newDirNodes.concat(newFileNodes);\n                const added = newChildren.filter((c) => !parent.children.find((o) => Utils.compareObjects(o.data, c.data)));\n                const removed = parent.children.filter((o) => !newChildren.find((c) => Utils.compareObjects(o.data, c.data)));\n\n                removed.forEach((c) => {\n                    const index = parent.children.findIndex((o) => o.id === c.id);\n                    parent.children.splice(index, 1);\n                    delete this.flatPointers[c.id];\n                });\n\n                added.forEach((c) => {\n                    parent.children.push(c);\n                    this.flatPointers[c.id] = c;\n                });\n\n                const nodeChildren = parent.children.filter((c) => !c.isLeaf);\n                const leafChildren = parent.children.filter((c) => c.isLeaf);\n                parent.children = nodeChildren.concat(leafChildren);\n\n                this.root$$.next(this.internalTree);\n            })\n        );\n    }\n}\n","import { Directive, OnDestroy, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { INode, NgeExplorerConfig } from '../../shared/types';\nimport { CONFIG } from '../../shared/providers';\nimport { ExplorerService } from '../../services/explorer.service';\n\n@Directive()\nexport class BaseView implements OnDestroy {\n    protected selection = new Set<number>();\n    protected items: INode[] = [];\n    protected dragging = false;\n    protected subs = new Subscription();\n    protected shiftSelectionStartId: number | undefined;\n\n    protected explorerService: ExplorerService = inject(ExplorerService);\n    protected config: NgeExplorerConfig = inject(CONFIG);\n\n    constructor() {\n        this.subs.add(\n            this.explorerService.openedDir$.subscribe((nodes) => {\n                this.items = nodes ? nodes.children : [];\n            })\n        );\n\n        this.subs.add(\n            this.explorerService.selection$.subscribe((nodes) => {\n                this.selection.clear();\n                if (nodes) {\n                    this.selection = new Set(nodes.map((n) => n.id));\n                }\n            })\n        );\n    }\n\n    select(event: MouseEvent, item: INode) {\n        const shiftKeyPressed = event.shiftKey;\n        const metaKeyPressed = event.metaKey || event.ctrlKey;\n\n        if (this.config.multipleSelection && shiftKeyPressed) {\n            if (this.selection.size === 0) {\n                this.selection.add(item.id);\n                this.shiftSelectionStartId = item.id;\n            } else {\n                this.selection.clear();\n                const headIndex = this.items.findIndex((i) => i.id === this.shiftSelectionStartId);\n                const currentIndex = this.items.findIndex((i) => i.id === item.id);\n\n                const start = Math.min(headIndex, currentIndex);\n                const end = Math.max(headIndex, currentIndex);\n\n                for (let i = start; i <= end; i++) {\n                    this.selection.add(this.items[i].id);\n                }\n            }\n        } else {\n            if (this.config.multipleSelection && metaKeyPressed) {\n                if (this.selection.has(item.id)) {\n                    this.selection.delete(item.id);\n                } else {\n                    this.selection.add(item.id);\n                }\n            } else {\n                this.selection.clear();\n                this.shiftSelectionStartId = item.id;\n                this.selection.add(item.id);\n            }\n        }\n\n        const nodes = this.items.filter((i) => this.selection.has(i.id));\n        this.explorerService.select(nodes);\n    }\n\n    open(event: MouseEvent, item: INode) {\n        const metaKeyPressed = event.metaKey || event.ctrlKey || event.shiftKey;\n        if (!metaKeyPressed) {\n            this.explorerService.openNode(item.id);\n        }\n    }\n\n    isSelected(item: INode) {\n        return this.selection.has(item.id);\n    }\n\n    emptySpaceClick(): void {\n        this.explorerService.select([]);\n    }\n\n    ngOnDestroy() {\n        this.subs.unsubscribe();\n    }\n}\n","import { Directive, EventEmitter, HostListener, Output, inject } from '@angular/core';\nimport { ExplorerService } from '../services/explorer.service';\n\n@Directive({\n    selector: '[nxeDragDrop]',\n    standalone: true,\n})\nexport class DragDropDirective {\n    private explorerService = inject(ExplorerService);\n    @Output() dragEnter = new EventEmitter<any>();\n    @Output() dragOver = new EventEmitter<any>();\n    @Output() dragLeave = new EventEmitter<any>();\n    @Output() dragDrop = new EventEmitter<any>();\n    @Output() dragging = new EventEmitter<boolean>();\n\n    @HostListener('dragenter', ['$event'])\n    public onDragEnter(event: DragEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.dragEnter.emit(event);\n        this.dragging.emit(true);\n    }\n\n    @HostListener('dragover', ['$event'])\n    public onDragOver(event: DragEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.dragOver.emit(event);\n        this.dragging.emit(true);\n    }\n\n    @HostListener('dragleave', ['$event'])\n    public onDragLeave(event: DragEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.dragLeave.emit(event);\n        this.dragging.emit(false);\n    }\n\n    @HostListener('drop', ['$event'])\n    public onDrop(event: DragEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n        const files = event.dataTransfer!.files as FileList;\n        if (files.length > 0) {\n            this.explorerService.upload(files);\n            this.dragDrop.emit(files);\n        }\n        this.dragging.emit(false);\n    }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { BaseView } from '../base-view/base-view.directive';\nimport { DragDropDirective } from '../../directives/drag-drop.directive';\nimport { NgClass } from '@angular/common';\n\n@Component({\n    selector: 'nxe-icons',\n    templateUrl: './icons.component.html',\n    styleUrls: ['./icons.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n    imports: [DragDropDirective, NgClass],\n})\nexport class IconsComponent extends BaseView {\n    public readonly icons = {\n        node: 'nxe-folder',\n        leaf: 'nxe-doc',\n    };\n\n    constructor() {\n        super();\n    }\n}\n","<div class=\"nxe-icons\" nxeDragDrop (dragging)=\"dragging = $event\">\n    <div class=\"nxe-icons-drag\" [ngClass]=\"{ dragging: dragging }\"></div>\n    <div class=\"nxe-icons-backpad\" (click)=\"emptySpaceClick()\"></div>\n    <div class=\"nxe-icons-container\">\n        @for (item of items; track $index) {\n            <div class=\"nxe-icons-wrapper\" (dblclick)=\"open($event, item)\" (click)=\"select($event, item)\">\n                <div class=\"nxe-icons-wrapper-inner\" [ngClass]=\"{ 'nxe-icon-selected': isSelected(item) }\" [title]=\"item.name\">\n                    <div class=\"nxe-icons-icon\">\n                        <i [className]=\"item.isLeaf ? icons.leaf : icons.node\"></i>\n                    </div>\n                    <div class=\"nxe-icon-text\">{{ item.name }}</div>\n                </div>\n            </div>\n        }\n    </div>\n</div>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\nimport { ExplorerService } from '../../services/explorer.service';\nimport { map } from 'rxjs/operators';\nimport { INode } from '../../shared/types';\nimport { AsyncPipe, JsonPipe, NgClass, NgTemplateOutlet } from '@angular/common';\n\n@Component({\n    selector: 'nxe-tree',\n    templateUrl: './tree.component.html',\n    styleUrls: ['./tree.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [NgTemplateOutlet, NgClass, AsyncPipe, JsonPipe],\n})\nexport class TreeComponent {\n    private explorerService = inject(ExplorerService);\n    protected treeNodes: INode[] = [];\n    protected tree$ = this.explorerService.root$.pipe(map((r) => r.children));\n    protected selectedId$ = this.explorerService.openedDir$.pipe(map((p) => p?.id));\n\n    open(node: INode) {\n        this.explorerService.openNode(node.id);\n    }\n\n    expand(event: Event, node: INode) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.explorerService.expand(node.id);\n    }\n\n    collapse(event: Event, node: INode) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.explorerService.collapse(node.id);\n    }\n}\n","<div class=\"nxe-tree\">\n    @if (tree$ | async; as tree) {\n        <ng-container *ngTemplateOutlet=\"treeTmp; context: { nodes: tree }\"> </ng-container>\n    }\n</div>\n\n<ng-template #treeTmp let-nodes=\"nodes\">\n    @if (nodes && nodes.length > 0) {\n        <ul class=\"nxe-tree-ul\">\n            @for (node of nodes; track $index) {\n                @if (!node.isLeaf) {\n                    <li>\n                        <div class=\"item\" (click)=\"open(node)\" [ngClass]=\"{ selected: (selectedId$ | async) === node.id }\">\n                            @if (!node.expanded) {\n                                <div class=\"chevron\" (click)=\"expand($event, node)\"><i class=\"nxe-angle-right\" aria-hidden=\"true\"></i></div>\n                            } @else {\n                                <div class=\"chevron\" (click)=\"collapse($event, node)\">\n                                    <i class=\"nxe-angle-down\" aria-hidden=\"true\"></i>\n                                </div>\n                            }\n                            <div class=\"dir-icon\"><i class=\"nxe-folder\" aria-hidden=\"true\"></i></div>\n                            <div class=\"dir-name\" [innerText]=\"node.name\"></div>\n                        </div>\n\n                        <ng-container *ngTemplateOutlet=\"treeTmp; context: { nodes: node.children }\"> </ng-container>\n                    </li>\n                }\n            }\n        </ul>\n    }\n</ng-template>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { BaseView } from '../base-view/base-view.directive';\nimport { DragDropDirective } from '../../directives/drag-drop.directive';\nimport { NgClass } from '@angular/common';\n\n@Component({\n    selector: 'nxe-list',\n    templateUrl: './list.component.html',\n    styleUrls: ['./list.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n    imports: [DragDropDirective, NgClass],\n})\nexport class ListComponent extends BaseView {\n    public readonly icons = {\n        node: 'nxe-folder',\n        leaf: 'nxe-doc',\n    };\n\n    constructor() {\n        super();\n    }\n}\n","<div class=\"nxe-list\" nxeDragDrop (dragging)=\"dragging = $event\">\n    <div class=\"nxe-list-drag\" [ngClass]=\"{ dragging: dragging }\"></div>\n    <div class=\"nxe-list-backpad\" (click)=\"emptySpaceClick()\"></div>\n    <div class=\"nxe-list-container\">\n        <div class=\"nxe-list-wrapper\">\n            <table>\n                <thead>\n                    <tr>\n                        <th>Name</th>\n                        <th>Type</th>\n                        <th>Size</th>\n                        <th>Last Modified</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    @for (item of items; track $index) {\n                        <tr\n                            (dblclick)=\"open($event, item)\"\n                            (click)=\"select($event, item)\"\n                            [ngClass]=\"{ 'nxe-list-row-selected': isSelected(item) }\"\n                        >\n                            <td>\n                                <span class=\"nxe-list-icon\">\n                                    <i [className]=\"item.isLeaf ? icons.leaf : icons.node\"></i>\n                                </span>\n                                {{ item.name }}\n                            </td>\n                            <td></td>\n                            <td></td>\n                            <td></td>\n                        </tr>\n                    }\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { VIEWS } from '../../shared/providers';\nimport { ExplorerService } from '../../services/explorer.service';\n\n@Component({\n    selector: 'nxe-view-switcher',\n    templateUrl: './view-switcher.component.html',\n    styleUrls: ['./view-switcher.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n})\nexport class ViewSwitcherComponent {\n    private explorerService = inject(ExplorerService);\n    protected views = inject(VIEWS);\n\n    setView(view: string) {\n        this.explorerService.currentView$.next(view);\n    }\n}\n","<div class=\"nxe-view-switcher\">\n    @for (item of views; track $index) {\n        <button (click)=\"setView(item.name)\"><i class=\"{{ item.icon }}\"></i></button>\n    }\n</div>\n","import { Component, ElementRef, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { map, take } from 'rxjs';\nimport { NgeExplorerConfig } from '../../shared/types';\nimport { ExplorerService } from '../../services/explorer.service';\nimport { ViewSwitcherComponent } from '../view-switcher/view-switcher.component';\nimport { CONFIG } from '../../shared/providers';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n    selector: 'nxe-menu-bar',\n    templateUrl: './menu-bar.component.html',\n    styleUrls: ['./menu-bar.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: true,\n    imports: [ViewSwitcherComponent, AsyncPipe],\n})\nexport class MenuBarComponent {\n    @ViewChild('uploader', { static: true }) uploader!: ElementRef;\n\n    protected explorerService: ExplorerService = inject(ExplorerService);\n    protected config: NgeExplorerConfig = inject(CONFIG);\n\n    protected featDelete = this.config.features?.delete;\n    protected featUpload = this.config.features?.upload;\n    protected featDownload = this.config.features?.download;\n    protected featRename = this.config.features?.rename;\n    protected featCreateDir = this.config.features?.createDir;\n\n    protected canDownload$ = this.explorerService.selection$.pipe(map((n) => n.length === 1 && n[0].isLeaf));\n    protected canDelete$ = this.explorerService.selection$.pipe(map((n) => n.length > 0));\n    protected canRename$ = this.explorerService.selection$.pipe(map((n) => n.length === 1));\n\n    createDir() {\n        const name = prompt('Enter new name');\n        if (name) {\n            this.explorerService.createDir(name);\n        }\n    }\n\n    refresh() {\n        this.explorerService.refresh();\n    }\n\n    rename() {\n        this.explorerService.selection$\n            .pipe(\n                take(1),\n                map((n) => n[0])\n            )\n            .subscribe((node) => {\n                const oldName = node.name;\n                const newName = prompt('Enter new name', oldName);\n                if (newName) {\n                    this.explorerService.rename(newName);\n                }\n            });\n    }\n\n    remove() {\n        if (confirm('Are you sure you want to delete the selected files?')) {\n            this.explorerService.remove();\n        }\n    }\n\n    openUploader() {\n        this.uploader.nativeElement.click();\n    }\n\n    handleFiles(event: Event) {\n        const files = (event.target as HTMLInputElement).files;\n        if (!files || files.length === 0) {\n            return;\n        }\n        this.explorerService.upload(files);\n        this.uploader.nativeElement.value = '';\n    }\n\n    download() {\n        this.explorerService.download();\n    }\n}\n","<div class=\"nxe-menu-bar\">\n    <div class=\"nxe-menu-bar-left\">\n        @if (featCreateDir) {\n            <button class=\"nxe-menu-bar-button\" (click)=\"createDir()\"><i class=\"nxe-folder\" aria-hidden=\"true\"></i>New Folder</button>\n        }\n\n        <button class=\"nxe-menu-bar-button\" (click)=\"refresh()\"><i class=\"nxe-arrows-cw\" aria-hidden=\"true\"></i> Refresh</button>\n\n        @if (featUpload) {\n            <button class=\"nxe-menu-bar-button\" (click)=\"openUploader()\"><i class=\"nxe-upload\" aria-hidden=\"true\"></i> Upload</button>\n        }\n\n        @if (featDownload) {\n            <button class=\"nxe-menu-bar-button\" [disabled]=\"!(canDownload$ | async)\" (click)=\"download()\">\n                <i class=\"nxe-download\" aria-hidden=\"true\"></i> Download\n            </button>\n        }\n\n        @if (featRename) {\n            <button class=\"nxe-menu-bar-button\" [disabled]=\"!(canRename$ | async)\" (click)=\"rename()\">\n                <i class=\"nxe-edit\" aria-hidden=\"true\"></i> Rename\n            </button>\n        }\n\n        @if (featDelete) {\n            <button class=\"nxe-menu-bar-button\" [disabled]=\"!(canDelete$ | async)\" (click)=\"remove()\">\n                <i class=\"nxe-trash-empty\" aria-hidden=\"true\"></i> Delete\n            </button>\n        }\n    </div>\n    <div class=\"nxe-menu-bar-right\">\n        <nxe-view-switcher></nxe-view-switcher>\n    </div>\n    <input style=\"display: none\" type=\"file\" multiple (change)=\"handleFiles($event)\" #uploader />\n</div>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\nimport { map } from 'rxjs';\nimport { INode } from '../../shared/types';\nimport { ExplorerService } from '../../services/explorer.service';\nimport { CONFIG } from '../../shared/providers';\nimport { AsyncPipe } from '@angular/common';\n\ninterface Breadcrumb {\n    node: INode;\n    name: string;\n}\n\n@Component({\n    selector: 'nxe-breadcrumbs',\n    templateUrl: './breadcrumbs.component.html',\n    styleUrls: ['./breadcrumbs.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    imports: [AsyncPipe],\n})\nexport class BreadcrumbsComponent {\n    private explorerService = inject(ExplorerService);\n    private config = inject(CONFIG);\n\n    public breadcrumbs$ = this.explorerService.openedDir$.pipe(\n        map((n) => {\n            if (!n) {\n                return [];\n            }\n            const pieces = [] as Breadcrumb[];\n            let currentNode = n;\n            while (currentNode.parentId) {\n                pieces.unshift({ name: currentNode.name || this.config.homeNodeName || '', node: currentNode });\n                currentNode = this.explorerService.getNode(currentNode.parentId);\n            }\n            pieces.unshift({ name: currentNode.name || this.config.homeNodeName || '', node: currentNode });\n            return pieces;\n        })\n    );\n\n    public click(crumb: Breadcrumb) {\n        this.explorerService.openNode(crumb.node.id);\n    }\n}\n","<div class=\"nxe-breadcrumbs\">\n    @for (crumb of breadcrumbs$ | async; track $index; let last = $last) {\n        <span>\n            <button (click)=\"click(crumb)\" class=\"nxe-breadcrumb-button\">{{ crumb.name }}</button>\n            @if (!last) {\n                <span class=\"nxe-breadcrumb-separator\">\n                    <i class=\"nxe-angle-right\" aria-hidden=\"true\"></i>\n                </span>\n            }\n        </span>\n    }\n</div>\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { IconsComponent } from '../icons/icons.component';\nimport { ListComponent } from '../list/list.component';\nimport { MenuBarComponent } from '../menu-bar/menu-bar.component';\nimport { TreeComponent } from '../tree/tree.component';\nimport { VIEWS } from '../../shared/providers';\nimport { BreadcrumbsComponent } from '../breadcrumbs/breadcrumbs.component';\nimport { ExplorerService } from '../../services/explorer.service';\nimport { map } from 'rxjs';\n\n@Component({\n    selector: 'nxe-content',\n    standalone: true,\n    imports: [AsyncPipe, MenuBarComponent, TreeComponent, BreadcrumbsComponent, IconsComponent, ListComponent, NgComponentOutlet],\n    templateUrl: './content.component.html',\n    styleUrl: './content.component.scss',\n})\nexport class ContentComponent {\n    protected explorerService = inject(ExplorerService);\n    protected views = inject(VIEWS);\n    public viewComponent$ = this.explorerService.currentView$.pipe(map((view) => this.views.find((v) => v.name === view)!.component));\n}\n","<div class=\"nxe-content\">\n    <div class=\"nxe-content-top\">\n        <nxe-menu-bar></nxe-menu-bar>\n    </div>\n    <div class=\"nxe-content-top\">\n        <nxe-breadcrumbs></nxe-breadcrumbs>\n    </div>\n    <div class=\"nxe-content-middle\">\n        <ng-container *ngComponentOutlet=\"viewComponent$ | async\"></ng-container>\n    </div>\n</div>\n","import { Component } from '@angular/core';\nimport { TreeComponent } from '../tree/tree.component';\nimport { ContentComponent } from '../content/content.component';\n\n@Component({\n    selector: 'nxe-explorer',\n    templateUrl: './explorer.component.html',\n    styleUrls: ['./explorer.component.scss'],\n    standalone: true,\n    imports: [TreeComponent, ContentComponent],\n})\nexport class ExplorerComponent {}\n","<div class=\"nxe-explorer\">\n    <div class=\"nxe-explorer-left\">\n        <nxe-tree></nxe-tree>\n    </div>\n    <div class=\"nxe-explorer-right\">\n        <nxe-content></nxe-content>\n    </div>\n</div>\n","/*\n * Public API Surface of ngx-explorer\n */\n\nexport * from './lib/components/icons/icons.component';\nexport * from './lib/components/explorer/explorer.component';\nexport * from './lib/components/menu-bar/menu-bar.component';\nexport * from './lib/components/breadcrumbs/breadcrumbs.component';\nexport * from './lib/components/base-view/base-view.directive';\nexport * from './lib/components/view-switcher/view-switcher.component';\nexport * from './lib/components/icons/icons.component';\nexport * from './lib/components/tree/tree.component';\nexport * from './lib/components/list/list.component';\nexport * from './lib/components/content/content.component';\nexport * from './lib/services/data.service';\nexport * from './lib/services/explorer.service';\nexport * from './lib/shared/utils';\nexport * from './lib/shared/providers';\nexport * from './lib/shared/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map"],"mappings":"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"}