UNPKG

@e280/quay

Version:

File-browser and outliner UI for the web

118 lines (89 loc) 2.96 kB
# 🏗️ Work In Progress > This project is under construction. It's not finished. > The install instructions probably won't work yet. --- --- <br/><br/> <div align="center"><img alt="" width=320 src="assets/favicon.png"/></div> # 🪝 Quay **Quay** is file-browser and outliner ui toolkit for the web. It provides a good user experience for interacting with files, folders, layers — any nested tree. List-view or icons-view. Reorganize with drag-and-drop. Quick-search. Renaming things. Dropping files. <br/> ## Quick-start OPFS file browser Quay is a toolkit that can be used in many different ways. In this section, several different intergration examples are provided. ### HTML technique 1. Install the script into your html `<head>`: ```html <script type="module"> import * as Quay from "https://quay.e280.org/install.bundle.min.js" const opfs = new Quay.Opfs({allow: ["/"]}) Quay.register(opfs.components()) </script> ``` 1. Place the outliner component anywhere in your html `<body>`: ```html <quay-outliner></quay-outliner> ``` 1. Now you're done! Try it out, upload some files and play around. ### Web dev technique 1. Install the package into your project: ```sh npm i @e280/quay ``` 1. Put this code into your js/ts app entrypoint (like "main.ts" or something): ```ts import * as Quay from "@e280/quay" const opfs = new Quay.Opfs({allow: ["/"]}) Quay.register(opfs.components()) ``` 1. Place the outliner component anywhere in your html `<body>`: ```html <quay-outliner></quay-outliner> ``` 1. It's ready, take it for a spin! <br/> ## Hands-on custom integration ```ts import * as Quay from "@e280/quay" const file = Quay.make.file({label: "My cool file"}) const folder = Quay.make.folder({label: "My project", children: [file.id]}) const brain = new Quay.Brain({ state: new Quay.State({ rootId: folder.id, items: [folder, file], }), icons: Quay.icons.standard, theme: Quay.themes.standard, contextMenu: Quay.contextMenus.standard, allowSearch: true, allowRefresh: true, permissions: async item => Quay.permissions.all, actions: { newFolder: async folder => {}, move: async move => {}, search: async search => {}, delete: async del => {}, rename: async rename => {}, refresh: async refresh => {}, dragAndDrop: async dnd => {}, upload: async upload => {}, }, }) Quay.register(brain.components()) ``` ### Flexible permissions Let's say you wanted to make a particular folder read-only ```ts const restricted = Quay.make.folder({label: "Restricted"}) new Quay.Brain({ ...stuff, permissions: async item => { if (item.id === restricted.id) return Quay.permissions.readOnly else return Quay.permissions.all }, }) ``` In this way, you can setup sophisticated rules about what actions are permitted, and under whatever changing circumstances.