feat(files): folders managed in place, a grid per folder, drop to upload, open on one file

- Own folders are made, renamed and deleted from the rail (right click, long press,
  Shift+F10) or the "…" beside an open folder's name; any folder's retention is a
  submenu (7/30/90 days, until deleted). Deleting confirms where its files go.
- List or grid per folder, sharing one sort; the grid is the one media card.
- A file dropped anywhere on the page opens Upload with it, bound for the folder
  on screen.
- A link (?item=) or the upload notice opens Files on the file: its page turned
  to, the keyboard on it, a ring round it.
- An in-place name field left by Enter or Escape hands the focus back to what
  replaced it (the row, the entry, the "…") instead of dropping it on <body>.
- The table's saved page size is per account.
This commit is contained in:
2026-10-11 15:59:12 +02:00
parent 85aa917b38
commit d22c64f4dd
23 changed files with 1569 additions and 175 deletions
+6 -1
View File
@@ -14,8 +14,13 @@ export const LS = {
filesCollapsed: "siftlode.filesCollapsed",
// The Files view last open (every file, shared with me, or a folder id), per-account.
filesView: "siftlode.filesView",
// The Files table's sort and rows-per-page (DataTable's persist blob).
// The Files table's rows-per-page and page (DataTable's persist blob), per-account.
filesTable: "siftlode.filesTable",
// List or grid per Files view (a `{ viewParam: layout }` map), the sort both paints share, and the
// grid's cards per page — per-account mirrors of the server prefs (the last is local only).
filesLayouts: "siftlode.filesLayouts",
filesSort: "siftlode.filesSort",
filesCardSize: "siftlode.filesCardSize",
hints: "siftlode.hints",
lang: "siftlode.lang",
filters: "siftlode.filters",