@putkoff/abstract-securefiles 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import './../styles/SecureFiles';
1
+ import './../styles/SecureFiles/index.css';
2
2
  import React from "react";
3
3
  declare const SecureFiles: React.FC;
4
4
  export default SecureFiles;
package/dist/index.cjs CHANGED
@@ -901,11 +901,22 @@ function Spinner() {
901
901
  return jsxRuntime.jsx("p", { className: classes.join(' '), children: "Loading\u2026" });
902
902
  }
903
903
 
904
+ function checkTokenValid() {
905
+ const tok = abstractUtilities.getToken();
906
+ return !!tok && !abstractUtilities.isTokenExpired(tok);
907
+ }
908
+ const SecureFiles = () => {
909
+ const [loggedIn, setLoggedIn] = abstractUtilities.useState(checkTokenValid());
910
+ const filesHook = useFiles(); // ← one single hook instance
911
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Upload, { onUploaded: filesHook.load }), jsxRuntime.jsx(FileTable, { files: filesHook.files, loading: filesHook.loading, error: filesHook.error, onDownload: filesHook.toggleShare, onToggleShare: filesHook.toggleShare, onPatchShare: filesHook.patchShareSettings, onDelete: filesHook.deleteFile })] }));
912
+ };
913
+
904
914
  exports.Button = Button;
905
915
  exports.Checkbox = Checkbox;
906
916
  exports.FileRow = FileRow;
907
917
  exports.FileTable = FileTable;
908
918
  exports.Input = Input;
919
+ exports.SecureFiles = SecureFiles;
909
920
  exports.ShareModal = ShareModal;
910
921
  exports.Spinner = Spinner;
911
922
  exports.Upload = Upload;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../node_modules/@heroicons/react/24/outline/esm/ClipboardIcon.js","../node_modules/@heroicons/react/24/outline/esm/CloudArrowUpIcon.js","../src/file_utils/src/download_utils/src/trigger_download.ts","../src/file_utils/src/download_utils/src/direct_download.ts","../src/file_utils/src/download_utils/src/download_file.ts","../src/file_utils/src/download_utils/src/download_select.ts","../src/file_utils/src/download_utils/src/target_downloads.ts","../src/file_utils/src/select_utils/src/sync_header_checkbox.ts","../src/file_utils/src/select_utils/src/init_select_all.ts","../src/file_utils/src/select_utils/src/toggle_checkboxes.ts","../src/file_utils/src/upload_utils/src/patch_file_settings.ts","../src/file_utils/src/upload_utils/src/upload_file.ts","../src/file_utils/src/upload_utils/src/upload_files.ts","../src/file_utils/src/delete_utils/src/delete_select.ts","../src/file_utils/src/delete_utils/src/delete_selected.ts","../src/file_utils/src/delete_utils/src/delete_row.ts","../src/file_utils/src/list_utils/src/list_utils.ts","../src/file_utils/src/share_utils/src/share_utils.ts","../src/hooks/useFiles/src/load.ts","../src/hooks/useFiles/src/toggleShare.ts","../src/hooks/useFiles/src/patchShareSettings.ts","../src/hooks/useFiles/src/useSaveShareSettings.ts","../src/hooks/useFiles/src/deleteFile.ts","../src/hooks/useFiles/src/useFiles.ts","../src/FileHandlers/FileRow/src/row_utils.tsx","../src/FileHandlers/ShareModal/src/share_utils.tsx","../src/FileHandlers/FileTable/src/table_utils.tsx","../src/FileHandlers/Upload/src/upload_utils.tsx","../src/UI/index.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ClipboardIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClipboardIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction CloudArrowUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(CloudArrowUpIcon);\nexport default ForwardRef;","/** Helper function to trigger file download */\nexport function triggerDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = Object.assign(document.createElement(\"a\"), {\n href: url,\n download: filename,\n });\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n\n console.log(`✅ Successfully downloaded: ${filename}`);\n}\n","import {triggerDownload} from './trigger_download';\nimport {FileItem} from './../imports';\n/** Non-React “direct download” used by some old links (kept for parity) */\nexport async function directDownload(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/octet-stream\",\n },\n\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n const blob = await res.blob();\n triggerDownload(blob, item.filename);\n}\n","import { requireToken, secureFetchIt, FileItem } from './../imports';\nimport { triggerDownload } from './trigger_download';\nexport async function downloadFile(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n // Don’t over-constrain Accept; let server pick proper content-type\n // Accept: \"application/octet-stream\",\n },\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n\n // Stream-friendly: if your triggerDownload revokes URL immediately, wait a tick\n const blob = await res.blob();\n const name = item.filename || \"download\";\n triggerDownload(blob, name); // ensure this waits ~0-100ms before URL.revokeObjectURL\n}","import {requireToken,secureFetchIt,FileItem} from './../imports';\nimport {triggerDownload} from './trigger_download';\nexport async function downloadSelect(item: FileItem): Promise<void> {\n const token: string = requireToken();\n const body = item\n const headers = {\n Authorization: `Bearer ${token}`,\n Accept: \"application/octet-stream\",\n \"Content-Type\": \"application/json\"\n }\n const blob = await secureFetchIt( \"download\", body, \"POST\", headers, true, true) as Blob;\n\n\n\n if (!blob || blob.size === 0) {\n throw new Error(`Received empty file data for “${item.filename}”`);\n }\n\n triggerDownload(blob, item.filename);\n}\n","import {downloadSelect} from './download_select';\nimport type {FileItem} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function downloadRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n const filepath = cb.value;\n const filename = row?.children[1]?.textContent?.trim() || \"downloaded_file\";\n if (filepath) await downloadSelect({filepath,filename} as any);\n}\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function downloadSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n await downloadRow(cb);\n }\n}\n","/**\n * Classic “select all rows” logic (still handy in non-React views\n * such as the admin dashboard).\n */\nexport function syncHeaderCheckbox(): void {\n const all = document.querySelectorAll<HTMLInputElement>(\".file-checkbox\");\n const checked = document.querySelectorAll<HTMLInputElement>(\n \".file-checkbox:checked\"\n );\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n\n header.indeterminate =\n checked.length > 0 && checked.length < all.length;\n header.checked = checked.length === all.length;\n}\n\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Wire up header + row checkboxes once the table is in the DOM. */\nexport function initSelectAll(): void {\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n const btn = document.getElementById(\"select-all\") as HTMLButtonElement;\n\n // 1) header → toggle all\n header.addEventListener(\"change\", (e) => {\n const on = (e.target as HTMLInputElement).checked;\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => (cb.checked = on));\n });\n\n // 2) button → toggle all\n btn.addEventListener(\"click\", () => {\n const cbs = Array.from(\n document.querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n );\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n });\n\n // 3) row boxes → keep header state\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => cb.addEventListener(\"change\", syncHeaderCheckbox));\n\n syncHeaderCheckbox();\n}\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Utility for other screens: toggle a list of checkboxes on/off. */\nexport function toggleCheckboxes(cbs: HTMLInputElement[]): void {\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n}\n","\n/** Generic PATCH helper kept for other admin forms */\nexport async function patchFileSetting(\n fileId: string,\n field: string,\n value: unknown\n): Promise<Record<string, unknown>> {\n const res = await fetch(`/files/${fileId}/settings/${field}`, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ value }),\n });\n if (!res.ok) {\n const err = await res.json();\n throw new Error(err.error || res.statusText);\n }\n return (await res.json()) as Record<string, unknown>;\n}\n","import { secureFetchIt } from './../imports';\n/** Classic file-upload for the fallback HTML page. */\nexport async function uploadFile(file:any,subdir:any): Promise<any> {\n const fileInput = file || document.getElementById(\n \"file-browser\"\n ) as HTMLInputElement;\n const subdirInput = subdir || document.getElementById(\"subdir\") as HTMLInputElement;\n const banner = document.getElementById(\"banner\") as HTMLElement;\n\n if (!fileInput.files?.length) {\n alert(\"No file selected.\");\n return;\n }\n\n const formData = new FormData();\n formData.append(\"file\", fileInput.files[0]);\n formData.append(\"subdir\", subdirInput.value.trim());\n\n try {\n const json = await secureFetchIt(\"upload\", formData, \"POST\", null, false,false) as { filepath: string };\n banner.textContent = `Uploaded: ${json.filepath}`;\n fileInput.value = \"\";\n subdirInput.value = \"\";\n window.location.reload(); // no-op in React view\n } catch (err: any) {\n console.error(\"Upload failed\", err);\n }\n}\n","import { secureFetchIt } from './../imports';\n\ninterface UploadResponse {\n filepath: string;\n}\n\nexport async function uploadFiles(file: File, subdir: string = ''): Promise<UploadResponse> {\n if (!(file instanceof File)) {\n throw new Error('Invalid file: Must be a File object.');\n }\n if (typeof subdir !== 'string') {\n throw new Error('Invalid subdir: Must be a string.');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('subdir', subdir.trim());\n\n try {\n const json = await secureFetchIt('upload', formData, 'POST', null, false, false);\n \n if (!json || typeof json !== 'object') {\n throw new Error('Invalid response from server.');\n }\n \n if (!('filepath' in json) || typeof json.filepath !== 'string' || !json.filepath) {\n throw new Error('Server response missing or invalid filepath.');\n }\n\n return { filepath: json.filepath };\n } catch (err: any) {\n throw new Error(`Upload failed: ${err?.message ?? 'Unknown error'}`);\n }\n}","import {requireToken,secureFetchIt} from './../imports';\n\nexport async function removeFile(item: any): Promise<void> {\n const resp = await secureFetchIt( \"remove\", item, \"POST\", null, false,false,true) as any;\n if (!resp || resp === false || resp?.result === false) {\n throw new Error(`could not delete data: “${item.filename}”`);\n }\n \n}\n","import {removeFile} from './delete_select';\n\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function removeSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n alert(cb);\n await removeFile(cb);\n }\n}","\nimport {removeFile} from './delete_select'\nimport {alertit} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function removeRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n alertit(row)\n if (row && row?.id) await removeFile(row);\n}\n\n\n","import { secureFetchIt } from './../imports';\nimport type { ApiRow, FileItem } from './../imports';\n/** GET /secure-list */\nexport async function listFiles(setFiles: any = null): Promise<any> {\n /** ← your request already returns the raw array */\n const apiRows = await secureFetchIt(\"/list\", null, \"GET\", null, false, true) as ApiRow[]\n\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n}","import {FileItem,fetchSharePatch} from './../imports'\nexport function getToggleShare(file:any){\n if (file == true || file?.shareable == true){\n return false\n }\n return false\n}\nexport function updateFileShare(file:any){\n let updated: FileItem = file\n const boolIt = getToggleShare(updated)\n updated = { ...file, shareable: boolIt };\n return updated;\n}\n \n/**\n * Custom hook to toggle share settings on a file item\n */\nexport async function toggleShare(file:FileItem){\n\n const updated = updateFileShare(file)\n try {\n const resp = await fetchSharePatch(updated);\n \n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n}\n\n","import React from 'react';\nimport { secureFetchIt, useCallback, FileItem, ApiRow, alertit } from './../imports'\n/**\n * Custom hook that returns a memoized loadFiles callback\n */\nexport const useLoadFiles = (\n setLoading: React.Dispatch<React.SetStateAction<boolean>>,\n setError: React.Dispatch<React.SetStateAction<Error | null>>,\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n\n return useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n /** ← your request already returns the raw array */\n let apiRows = await secureFetchIt<ApiRow[]>(\n \"list\",\n null,\n \"GET\",\n ) as any;\n console.log(`all apiRows == ${JSON.stringify(apiRows)}`)\n if (apiRows?.result) {\n apiRows = apiRows.result\n }\n apiRows = apiRows as ApiRow[]\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n\n } catch (err) {\n setError(err instanceof Error ? err\n : new Error(\"Unknown error loading files\"));\n } finally {\n setLoading(false);\n }\n }, [setLoading, setError, setFiles]);\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useToggleShare = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n const updated: FileItem = { ...file, shareable: !file.shareable };\n if (!updated.shareable) {\n updated.needsPassword = false;\n }\n try {\n await fetchSharePatch(updated);\n setFiles((curr) =>\n curr.map((f) => (f.id === file.id ? updated : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const usePatchShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: any) => {\n\n\n const body: any = {\n id: file.id, // ← always send id\n };\n\n // now send whichever settings changed\n body.shareable = file.shareable;\n body.share_password = file.share_password ?? null;\n body.password_str = file.password_str ?? null;\n body.download_limit = file.download_limit ?? null;\n console.log(`file contents == ${JSON.stringify(body)}`)\n try {\n await fetchSharePatch(body);\n setFiles((curr) =>\n curr.map((f) => (f.id === body.id ? body : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\nexport default usePatchShareSettings;","// hooks/useSaveShareSettings.ts\nimport React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\nexport const useSaveShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (updated: any) => {\n await fetchSharePatch({\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password,\n password_str: updated.password_str,\n download_limit: updated.download_limit,\n });\n\n // optimistic UI update – identical to toggleShare\n setFiles(curr =>\n curr.map(f => (f.id === updated.id ? updated : f))\n );\n },\n [setFiles]\n );\n};\n","import React from 'react'\nimport { useCallback, FileItem, secureFetchIt, removeFile } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useDeleteFile = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n try {\n await removeFile(file)\n window.location.reload();\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import { useState, useEffect } from 'react';\nimport type {FileItem} from './../imports';\nimport { useLoadFiles } from './load';\nimport { useToggleShare } from './toggleShare';\nimport {useSaveShareSettings} from './useSaveShareSettings';\nimport { useDeleteFile } from './deleteFile';\n\nexport function useFiles() {\n const [files, setFiles] = useState<FileItem[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const loadCallback = useLoadFiles(setLoading, setError, setFiles);\n const toggleShareCallback = useToggleShare(setFiles);\n const patchShareSettingsCallback = useSaveShareSettings(setFiles);\n const deleteFileCallback = useDeleteFile(setFiles);\n\n useEffect(() => {\n loadCallback();\n }, [loadCallback]);\n\n return {\n files,\n loading,\n error,\n load: loadCallback,\n toggleShare: toggleShareCallback,\n patchShareSettings: patchShareSettingsCallback,\n deleteFile: deleteFileCallback,\n setFiles,\n setLoading,\n setError,\n \n };\n}\n","import type { FileRowProps } from './../imports';\nimport { useState, Button, currentUsername } from './../imports';\n\nexport default function FileRow({\n file,\n onDownload,\n onSettings,\n onToggleShare,\n onDelete,\n}: FileRowProps) {\n const isOwner =\n file.uploader_id?.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const downloadAllowed = isOwner || file.shareable;\n const [isDownloading, setIsDownloading] = useState(false);\n const [isTogglingShare, setIsTogglingShare] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Mimic WindowManagerApp's unsaved heuristic\n const looksUnsaved =\n file.filename.toLowerCase().startsWith('untitled') ||\n file.filename.includes('*');\n\n const handleDownload = async () => {\n setIsDownloading(true);\n try {\n await onDownload();\n } finally {\n setIsDownloading(false);\n }\n };\n\n const handleToggleShare = async () => {\n setIsTogglingShare(true);\n try {\n await onToggleShare();\n } finally {\n setIsTogglingShare(false);\n }\n };\n\n const handleDeleteFile = async () => {\n setIsDeleting(true);\n try {\n await onDelete();\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <tr className=\"wm-row transition-colors duration-75\">\n {/* Select checkbox */}\n <td className=\"wm-cell w-12 align-middle\">\n <input\n type=\"checkbox\"\n className=\"wm-checkbox\"\n aria-label={`Select ${file.filename}`}\n />\n </td>\n\n {/* Filename */}\n <td className={`wm-cell ${looksUnsaved ? 'unsaved' : ''}`}>\n {file.filename}\n </td>\n\n {/* Download button or lock */}\n <td className=\"wm-cell w-12 align-middle\">\n {downloadAllowed ? (\n <Button\n color=\"blue\"\n variant=\"secondary\"\n onClick={handleDownload}\n disabled={isDownloading}\n aria-label={`Download ${file.filename}`}\n className=\"wm-btn-link\"\n >\n {isDownloading ? 'Downloading...' : 'Download'}\n </Button>\n ) : (\n <span\n className=\"text-gray-500 text-lg\"\n aria-label=\"Download restricted\"\n >\n 🔒\n </span>\n )}\n </td>\n\n {/* Settings cog */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={() => {\n console.log('⚙︎ clicked', file.id);\n onSettings();\n }}\n aria-label=\"Open share settings\"\n className=\"wm-btn-icon text-lg\"\n >\n ⚙️\n </Button>\n )}\n </td>\n\n {/* Share toggle */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color={file.shareable ? 'blue' : 'gray'}\n variant={file.shareable ? 'primary' : 'secondary'}\n onClick={handleToggleShare}\n disabled={isTogglingShare}\n className=\"btn\"\n >\n {isTogglingShare\n ? 'Toggling...'\n : file.shareable\n ? 'Sharing'\n : 'Share'}\n </Button>\n )}\n </td>\n\n {/* Delete button */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={handleDeleteFile}\n disabled={isDeleting}\n className=\"wm-btn-icon text-lg\"\n >\n 🗑\n </Button>\n )}\n </td>\n <td className=\"wm-cell\">{file.download_count} / {file.download_limit ?? \"∞\"}</td>\n </tr>\n );\n}","import type {\n ShareModalProps\n} from './../../imports';\nimport {\n Button,\n Checkbox,\n Input,\n ClipboardIcon,\n createPortal,\n useEffect,\n useRef,\n useState,\n} from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n\nexport default function ShareModal({ file, onClose, onSave }: ShareModalProps) {\n const [fileId, setFileId] = useState<string | number | \"\">(\"\");\n const [enabled, setEnabled] = useState<any>(false);\n const [password, setPassword] = useState<any>(undefined);\n const [strPassword, setStrPassword] = useState<any>(\"\");\n const [download_limit, setDownloadLimit] = useState<number | \"\">(0);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const modalRef = useRef<HTMLDivElement>(null);\n\n const shareLink =\n file && enabled\n ? `https://abstractendeavors.com/api/secure-files/secure-download/${file.id}`\n : \"\";\n\n useEffect(() => {\n if (!file) return;\n setFileId(file.id);\n setEnabled(file.shareable);\n // load both values from the `file` prop\n setPassword(file.share_password);\n setStrPassword(file.password_str ?? \"\");\n setDownloadLimit(file.download_limit ?? 0);\n setError(\"\");\n\n modalRef.current?.focus();\n }, [file]);\n\n\n useEffect(() => {\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [onClose]);\n\n if (!file) return null;\n\n async function handleSave() {\n if (strPassword && strPassword.length < 4) {\n setError(\"Password must be at least 4 characters\");\n return;\n }\n setBusy(true);\n const save_dict = {\n id: fileId,\n shareable: enabled,\n needsPassword: !!strPassword,\n share_password: strPassword || null,\n password_str: strPassword || null,\n download_limit: download_limit === \"\" ? null : Number(download_limit),\n }\n\n try {\n const resp = await onSave(save_dict);\n\n onClose();\n } catch (err) {\n setError(`${err} Failed to save settings. Please try again.`);\n } finally {\n setBusy(false);\n }\n }\n\n return createPortal(\n <>\n <div\n className=\"modal-backdrop z-100\"\n onClick={(e) => e.target === e.currentTarget && onClose()}\n />\n <div className=\"modal-wrapper z-110\">\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className=\"modal-panel\"\n >\n <h3 className=\"form-title\">\n Share settings for <span className=\"font-mono\">{file.filename}</span>\n </h3>\n\n {error && <p className=\"form-error\">{error}</p>}\n\n <Checkbox\n label=\"Enable sharing\"\n checked={enabled}\n onChange={(e) => setEnabled(e.target.checked)}\n className=\"checkbox\"\n />\n\n {/* This is the admin-editable plain-text password */}\n <Input\n label=\"Password (optional)\"\n type=\"text\"\n value={strPassword}\n onChange={(e) => setStrPassword(e.target.value)}\n disabled={!enabled}\n className=\"form-input\"\n />\n <Input\n label=\"Download limit (0 = ∞)\"\n type=\"number\"\n min={0}\n value={download_limit}\n onChange={(e) =>\n setDownloadLimit(e.target.value === \"\" ? \"\" : Number(e.target.value))\n }\n disabled={!enabled}\n className=\"form-input\"\n />\n\n {enabled && shareLink && (\n <Input\n label=\"Share link\"\n readOnly\n value={shareLink}\n className=\"form-input\"\n trailing={\n <Button\n variant=\"icon\"\n className=\"btn-icon\"\n onClick={() => navigator.clipboard.writeText(shareLink)}\n >\n <ClipboardIcon className=\"h-5 w-5\" />\n </Button>\n }\n />\n )}\n\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button color=\"green\" variant=\"primary\" onClick={handleSave} disabled={busy} className=\"btn-primary\">\n {busy ? \"Saving…\" : \"Save\"}\n </Button>\n <Button variant=\"secondary\" onClick={onClose} disabled={busy} className=\"btn-secondary\">\n Cancel\n </Button>\n </div>\n </div>\n </div>\n </>,\n document.body\n );\n}","import type { FileItem, FileTableProps } from './../imports';\nimport React, { useState, useMemo, ChangeEvent } from 'react';\nimport {\n useFiles,\n downloadFile,\n Spinner,\n ShareModal,\n Input,\n Button,\n currentUsername\n} from './../imports';\nimport { downloadSelected } from './../../../file_utils';\n\n// Tree node type\ninterface FileNode {\n name: string;\n path: string;\n children: Map<string, FileNode>;\n files: FileItem[];\n}\n\n// Build a directory tree from a flat file list\nfunction buildTree(files: FileItem[]): FileNode {\n const root: FileNode = { name: '', path: '', children: new Map(), files: [] };\n files.forEach(file => {\n const parts = file.filepath.split('/');\n let node = root;\n parts.slice(0, -1).forEach((seg, idx) => {\n const subPath = parts.slice(0, idx + 1).join('/');\n if (!node.children.has(seg)) {\n node.children.set(seg, { name: seg, path: subPath, children: new Map(), files: [] });\n }\n node = node.children.get(seg)!;\n });\n node.files.push(file);\n });\n return root;\n}\n\n// Collect all file IDs under a node (recursive)\nfunction collectNodeIds(node: FileNode): Array<number | string> {\n let ids: Array<number | string> = [];\n node.files.forEach(f => ids.push(f.id));\n node.children.forEach(child => {\n ids = ids.concat(collectNodeIds(child));\n });\n return ids;\n}\n\nexport default function FileTable({\n files,\n loading,\n error,\n onToggleShare,\n onPatchShare,\n onDelete\n}: FileTableProps) {\n const { load } = useFiles();\n const [search, setSearch] = useState('');\n const [modalFile, setModalFile] = useState<FileItem | null>(null);\n const [selected, setSelected] = useState<Set<number | string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n\n // Upload controls\n const [uploadDir, setUploadDir] = useState<string>('');\n const [uploadFile, setUploadFile] = useState<File | null>(null);\n const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => setUploadFile(e.target.files?.[0] ?? null);\n const handleUpload = async () => {\n if (!uploadFile) return;\n const form = new FormData();\n form.append('file', uploadFile);\n const dirPart = uploadDir ? `${uploadDir}/` : '';\n const url = `/api/secure-files/upload/${dirPart}${encodeURIComponent(uploadFile.name)}`;\n await fetch(url, { method: 'POST', credentials: 'include', body: form });\n setUploadFile(null);\n load();\n };\n\n // Filter files by search term\n const filtered = useMemo(\n () => files.filter(f => f.filename.toLowerCase().includes(search.trim().toLowerCase())),\n [files, search]\n );\n // Build tree and directory paths list\n const tree = useMemo(() => buildTree(filtered), [filtered]);\n const allDirPaths = useMemo(() => {\n const paths: string[] = [''];\n function collect(node: FileNode) {\n node.children.forEach(child => {\n paths.push(child.path);\n collect(child);\n });\n }\n collect(tree);\n return paths;\n }, [tree]);\n\n // Selection & expand/collapse logic\n const allIds = filtered.map(f => f.id);\n const toggleAllSelection = () => selected.size < allIds.length ? setSelected(new Set(allIds)) : setSelected(new Set());\n const toggleDirOpen = (path: string) => setExpanded(prev => {\n const next = new Set(prev);\n next.has(path) ? next.delete(path) : next.add(path);\n return next;\n });\n const expandAll = () => setExpanded(new Set(allDirPaths));\n const collapseAll = () => setExpanded(new Set());\n\n // Recursive renderer: directory row with select-all checkbox, then its files, then subdirectories\n const renderNode = (node: FileNode, depth = 0): React.ReactNode[] => {\n const rows: React.ReactNode[] = [];\n if (node.path) {\n const isOpen = expanded.has(node.path);\n const nodeIds = collectNodeIds(node);\n const allSelected = nodeIds.every(id => selected.has(id));\n const someSelected = nodeIds.some(id => selected.has(id));\n rows.push(\n <tr key={node.path}>\n {/* Directory-level checkbox */}\n <td className=\"px-4 py-2 bg-gray-100\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={el => { if (el) el.indeterminate = !allSelected && someSelected; }}\n onChange={() => {\n setSelected(prev => {\n const next = new Set(prev);\n if (allSelected) {\n nodeIds.forEach(id => next.delete(id));\n } else {\n nodeIds.forEach(id => next.add(id));\n }\n return next;\n });\n }}\n />\n </td>\n {/* Directory label pushed left */}\n <td className=\"px-4 py-2 bg-gray-100 font-bold\" colSpan={5} style={{ textAlign: 'left' }}>\n {node.path}\n </td>\n {/* Expand/collapse ticker on right */}\n <td className=\"px-4 py-2 bg-gray-100 text-right\">\n <button onClick={() => toggleDirOpen(node.path)}>\n {isOpen ? '▾' : '▸'}\n </button>\n </td>\n </tr>\n );\n if (!isOpen) return rows;\n }\n // Render files in this directory\n node.files.sort((a, b) => a.filename.localeCompare(b.filename)).forEach(f => {\n const isOwner = f.uploader_id.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const canDownload = isOwner || f.shareable;\n rows.push(\n <tr key={f.id}>\n <td className=\"px-4 py-2\">\n <input\n type=\"checkbox\"\n checked={selected.has(f.id)}\n onChange={() => setSelected(prev => {\n const next = new Set(prev);\n next.has(f.id) ? next.delete(f.id) : next.add(f.id);\n return next;\n })}\n />\n </td>\n <td className=\"px-4 py-2\" style={{ paddingLeft: (depth + 1) * 20 }}>\n {f.filename}\n </td>\n <td className=\"px-4 py-2\">\n {canDownload ? <Button variant=\"secondary\" onClick={() => downloadFile(f)}>Download</Button> : <span>🔒</span>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => setModalFile(f)}>⚙️</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant={f.shareable ? 'primary' : 'secondary'} onClick={() => onToggleShare(f)}>{f.shareable ? 'Sharing' : 'Share'}</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => onDelete(f).then(load)}>🗑</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {f.download_count} / {f.download_limit ?? '∞'}\n </td>\n </tr>\n );\n });\n // Render subdirectories\n Array.from(node.children.values())\n .sort((a, b) => a.name.localeCompare(b.name))\n .forEach(child => rows.push(...renderNode(child, depth + 1)));\n return rows;\n };\n\n // Batch actions\n const handleDownloadAll = async () => {\n const inputs = filtered.filter(f => selected.has(f.id)).map(f => document.createElement('input'));\n inputs.forEach((cb, idx) => cb.value = filtered.filter(f => selected.has(f.id))[idx].filepath);\n await downloadSelected(inputs);\n };\n const handleDeleteAll = async () => { await onDelete(filtered.filter(f => selected.has(f.id))); setSelected(new Set()); await load(); };\n const handleShareAll = async () => { for (const f of filtered.filter(f => selected.has(f.id))) await onToggleShare(f); };\n\n if (loading) return <Spinner />;\n if (error) return <p className=\"text-red-600\">{error.message}</p>;\n\n return (\n <> \n\n\n {/* Search & actions */}\n <div className=\"mb-4 flex flex-col md:flex-row md:justify-between gap-4\">\n <Input label=\"Search files\" type=\"text\" value={search} onChange={e => setSearch(e.target.value)} placeholder=\"Enter filename…\" className=\"form-input flex-1\" />\n <div className=\"flex gap-2\">\n <Button onClick={expandAll} disabled={!allDirPaths.length}>Expand All</Button>\n <Button onClick={collapseAll} disabled={!allDirPaths.length}>Collapse All</Button>\n <Button onClick={handleDownloadAll} disabled={!selected.size}>Download Selected</Button>\n <Button color=\"gray\" onClick={handleDeleteAll} disabled={!selected.size}>Delete Selected</Button>\n <Button onClick={handleShareAll} disabled={!selected.size}>Share Selected</Button>\n </div>\n </div>\n\n {/* File tree table */}\n <div className=\"overflow-x-auto wm-container\">\n <table className=\"file-table w-full\">\n <thead className=\"wm-thead\">\n <tr>\n <th className=\"px-4 py-2 w-12\"><input type=\"checkbox\" checked={selected.size === filtered.length && filtered.length > 0} onChange={toggleAllSelection} /></th>\n <th className=\"px-4 py-2\">Filename</th>\n <th className=\"px-4 py-2\">Download</th>\n <th className=\"px-4 py-2\">Settings</th>\n <th className=\"px-4 py-2\">Share</th>\n <th className=\"px-4 py-2\">Delete</th>\n <th className=\"px-4 py-2\">Downloads</th>\n </tr>\n </thead>\n <tbody>{renderNode(tree)}</tbody>\n </table>\n </div>\n\n <ShareModal file={modalFile} onClose={() => setModalFile(null)} onSave={async patch => {\n if (!modalFile) return;\n const updated: FileItem = { ...modalFile, ...patch };\n await onPatchShare(updated);\n setModalFile(null);\n }} />\n </>\n );\n}\n","import React, {\n ChangeEvent,\n useRef,\n useState,\n useCallback,\n useEffect,\n} from 'react';\nimport {\n CloudArrowUpIcon,\n Button,\n uploadFiles,\n useFiles,\n currentUsername\n} from './../imports';\nimport type { QueuedFile, UploadProps } from './../imports';\n\nexport default function Upload({ onUploaded }: UploadProps) {\n const [queue, setQueue] = useState<QueuedFile[]>([]);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [drag, setDrag] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const [dirs, setDirs] = useState<string[]>([]);\n\n // — existing files → directory list —\n const { files, load } = useFiles();\n\n useEffect(() => {\n const dirSet = new Set<string>();\n files.forEach(f => {\n const parts = f.filepath.split('/');\n if (parts.length > 1) {\n parts.pop();\n dirSet.add(parts.join('/') + '/');\n }\n });\n setDirs(Array.from(dirSet).sort());\n }, [files]);\n\n // — directory selection state —\n const [uploadDir, setUploadDir] = useState<string>('');\n const [creatingNew, setCreatingNew] = useState(false);\n const [newDirName, setNewDirName] = useState('');\n\n // — queue logic —\n const enqueue = useCallback((files: QueuedFile[]) => {\n setQueue(prev => {\n const map = new Map(prev.map(q => [`${q.file.name}-${q.file.size}`, q]));\n files.forEach(q => map.set(`${q.file.name}-${q.file.size}`, q));\n return Array.from(map.values());\n });\n }, []);\n\n const extractFromDataTransfer = useCallback(\n async (dt: DataTransfer): Promise<QueuedFile[]> => {\n const out: QueuedFile[] = [];\n const walk = async (entry: any, path = \"\") => {\n if (!entry) return;\n if (entry.isFile) {\n const file: File = await new Promise(res => entry.file(res));\n out.push({ file, relPath: path, progress: 0 });\n } else if (entry.isDirectory) {\n const reader = entry.createReader();\n const entries: any[] = await new Promise(r => reader.readEntries(r));\n await Promise.all(entries.map(e => walk(e, `${path}${entry.name}/`)));\n }\n };\n await Promise.all(Array.from(dt.items).map(i => walk(i.webkitGetAsEntry())));\n return out;\n },\n []\n );\n\n const handleSelect = (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n const queued: any = files.map(f => ({\n file: f,\n relPath: (f as any).webkitRelativePath.replace(/[^/]*$/, \"\"),\n progress: 0,\n }));\n enqueue(queued);\n e.target.value = \"\";\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n const files = await extractFromDataTransfer(e.dataTransfer);\n enqueue(files.length ? files : []);\n setDrag(false);\n };\n\n const handleUploadAll = async () => {\n if (!queue.length) {\n setMessage(\"No files queued.\");\n return;\n }\n setBusy(true);\n setMessage(null);\n const targetDir = creatingNew\n ? (newDirName.trim().replace(/^\\/+|\\/+$/g, \"\") + \"/\")\n : uploadDir;\n try {\n for (const { file, relPath } of queue) {\n await uploadFiles(file, targetDir + relPath);\n setQueue(cur =>\n cur.map(item =>\n item.file === file ? { ...item, progress: 100 } : item\n )\n );\n }\n setQueue([]);\n await onUploaded();\n setMessage(\"Upload complete\");\n load();\n } catch {\n setMessage(\"Upload failed\");\n } finally {\n setBusy(false);\n }\n };\n\n // — directory selector handlers —\n const handleDirChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const v = e.target.value;\n if (v === \"__new__\") {\n setCreatingNew(true);\n setNewDirName(\"\");\n } else {\n setCreatingNew(false);\n setUploadDir(v);\n }\n };\n const acceptNewDir = () => {\n // normalize like before\n const cleanName = newDirName.trim().replace(/^\\/+|\\/+$/g, '');\n const normalized = `${uploadDir}${cleanName}/`;\n // ① add it to our dirs list if it isn't there already\n setDirs(prev => {\n if (prev.includes(normalized)) return prev;\n return [...prev, normalized].sort();\n });\n\n // ② select it & flip back to the <select>\n setUploadDir(normalized);\n setCreatingNew(false);\n setNewDirName('');\n };\n\n return (\n <div className=\"form-container max-w-2xl mx-auto\">\n {/* drop area */}\n <div\n className={`flex items-center border-2 border-dashed rounded-lg p-6 bg-white shadow-md space-x-4 transition-shadow duration-150\n ${drag ? 'border-indigo-500 bg-indigo-50 shadow-lg' : 'border-gray-300 hover:shadow-lg'}`}\n onClick={() => inputRef.current?.click()}\n onDragEnter={e => { e.preventDefault(); setDrag(true); }}\n onDragOver={e => e.preventDefault()}\n onDragLeave={() => setDrag(false)}\n onDrop={handleDrop}\n role=\"region\"\n aria-label=\"File upload area\"\n >\n <CloudArrowUpIcon\n style={{ width: 300, height: 300 }}\n className=\"text-gray-500 mb-3\"\n aria-hidden=\"true\"\n />\n <div className=\"flex-1\">\n <p className=\"text-base font-semibold text-gray-700\">\n Drag & drop files or folders here\n </p>\n {queue.length > 0 && (\n <p className=\"mt-1 text-sm text-gray-600\">\n {queue.length} item{queue.length > 1 && 's'} queued\n </p>\n )}\n </div>\n </div>\n\n {/* hidden file input */}\n <input\n ref={inputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n {...({ webkitdirectory: true, directory: '' } as any)}\n onChange={handleSelect}\n />\n\n {/* bottom controls */}\n <div className=\"flex items-center justify-between mt-4\">\n {/* directory selector / new dir input */}\n <div className=\"flex-1 mr-4\">\n {!creatingNew ? (\n <select\n value={uploadDir}\n onChange={handleDirChange}\n className=\"form-select w-full\"\n >\n {dirs.map(d => (\n <option key={d} value={d}>{d}</option>\n ))}\n <option value=\"__new__\">+ Create new directory…</option>\n </select>\n ) : (\n <div className=\"flex\">\n <input\n type=\"text\"\n value={newDirName}\n placeholder=\"new-folder-name\"\n onChange={e => setNewDirName(e.target.value)}\n onBlur={acceptNewDir}\n onKeyDown={e => e.key === 'Enter' && acceptNewDir()}\n className=\"form-input flex-1\"\n />\n <Button onClick={acceptNewDir} className=\"ml-2\">\n OK\n </Button>\n </div>\n )}\n </div>\n\n {/* upload button */}\n <Button\n color=\"blue\"\n variant=\"primary\"\n onClick={handleUploadAll}\n disabled={busy || !queue.length}\n >\n {busy ? 'Uploading…' : `Upload ${queue.length}`}\n </Button>\n </div>\n\n {message && (\n <p\n className={`text-center text-sm ${message.includes('failed') ? 'text-red-600' : 'text-gray-600'\n }`}\n role=\"alert\"\n >\n {message}\n </p>\n )}\n\n {/* queued list */}\n {queue.length > 0 && (\n <div className=\"wm-container mt-4\">\n <h3 className=\"mb-2 text-sm font-semibold text-gray-700\">Queued Files</h3>\n <ul className=\"max-h-64 space-y-4 overflow-y-auto\">\n {queue.map(({ file, relPath, progress }) => (\n <li key={`${file.name}-${file.size}`} className=\"space-y-1\">\n <div className=\"flex justify-between items-center\">\n <span className=\"truncate text-sm text-gray-800\">\n {relPath}{file.name}\n </span>\n <span className=\"text-xs text-gray-500\">{progress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2 overflow-hidden\">\n <div className=\"bg-indigo-600 h-2\" style={{ width: `${progress}%` }} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport type String = string | undefined | null; \nexport type Astring = any[] | string | undefined | null; \nexport type Trailing = React.ReactNode\nexport type ImportElem = {\n reaxlEle:React.InputHTMLAttributes<HTMLInputElement>;\n label?: String;\n trailing?:Trailing;\n className?: String; \n classNames?:Astring;\n}\n\n// Utility to convert input to array\nfunction ensure_list(obj: Astring | null | undefined): string[] {\n if (Array.isArray(obj)) return obj.filter(Boolean);\n if (typeof obj === 'string') return obj.split(' ').filter(Boolean);\n return [];\n}\n\n// Get list and length safely\nfunction getListAndLen(obj: Astring | null | undefined): { return_obj: string[]; ob_len: number } {\n const return_obj = ensure_list(obj);\n const ob_len = return_obj.length;\n return { return_obj, ob_len };\n}\n\n// Combine class names with defaults\nfunction combineClassNames(classNames: Astring = [], defaultClasses: Astring = ['form-group', 'form-label', 'flex', 'gap-2']): string[] {\n const { return_obj: inputClasses } = getListAndLen(classNames);\n const { return_obj: defaultClassList } = getListAndLen(defaultClasses);\n \n // Combine and remove duplicates\n const combined = [...new Set([...defaultClassList, ...inputClasses])];\n \n console.log(`Combined classes (length: ${combined.length}): ${combined.join(' ')}`);\n return combined;\n}\n\nexport function Button({\n children,\n color = 'gray',\n variant = 'default',\n className = '',\n ...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & {\n color?: 'gray' | 'green' | 'blue';\n variant?: 'default' | 'icon' | 'primary' | 'secondary';\n className?: string;\n}) {\n const variantClasses = {\n default: 'btn',\n icon: 'btn-icon',\n primary: 'btn-primary',\n secondary: 'btn-secondary',\n };\n\n const colorClasses = {\n gray: '',\n green: variant === 'primary' ? 'btn-success' : 'btn-secondary',\n blue: variant === 'primary' ? 'btn-primary' : 'btn-secondary',\n };\n\n const classes = combineClassNames([variantClasses[variant], colorClasses[color], className]);\n \n return (\n <button className={classes.join(' ')} {...rest}>\n {children}\n </button>\n );\n}\n\nexport function Checkbox({\n label,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['checkbox', 'wm-checkbox']);\n \n return (\n <label className={classes.join(' ')}>\n <input type=\"checkbox\" className=\"wm-checkbox\" {...rest} />\n {label && <span>{label}</span>}\n </label>\n );\n}\n\nexport function Input({\n label,\n trailing,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['form-group', 'flex', 'gap-2']);\n const inputClasses = combineClassNames(className, ['form-input']);\n \n return (\n <label className={classes.join(' ')}>\n {label && <span className=\"form-label\">{label}</span>}\n <div className=\"flex gap-2\">\n <input className={inputClasses.join(' ')} {...rest} />\n {trailing}\n </div>\n </label>\n );\n}\n\nexport function Spinner() {\n const classes = combineClassNames('animate-pulse');\n return <p className={classes.join(' ')}>Loading…</p>;\n}"],"names":["React","ForwardRef","requireToken","secureFetchIt","alertit","fetchSharePatch","useCallback","useState","useEffect","currentUsername","_jsxs","_jsx","Button","useRef","createPortal","_Fragment","Checkbox","Input","ClipboardIcon","useMemo","Spinner","CloudArrowUpIcon"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index.cjs","sources":["../node_modules/@heroicons/react/24/outline/esm/ClipboardIcon.js","../node_modules/@heroicons/react/24/outline/esm/CloudArrowUpIcon.js","../src/file_utils/src/download_utils/src/trigger_download.ts","../src/file_utils/src/download_utils/src/direct_download.ts","../src/file_utils/src/download_utils/src/download_file.ts","../src/file_utils/src/download_utils/src/download_select.ts","../src/file_utils/src/download_utils/src/target_downloads.ts","../src/file_utils/src/select_utils/src/sync_header_checkbox.ts","../src/file_utils/src/select_utils/src/init_select_all.ts","../src/file_utils/src/select_utils/src/toggle_checkboxes.ts","../src/file_utils/src/upload_utils/src/patch_file_settings.ts","../src/file_utils/src/upload_utils/src/upload_file.ts","../src/file_utils/src/upload_utils/src/upload_files.ts","../src/file_utils/src/delete_utils/src/delete_select.ts","../src/file_utils/src/delete_utils/src/delete_selected.ts","../src/file_utils/src/delete_utils/src/delete_row.ts","../src/file_utils/src/list_utils/src/list_utils.ts","../src/file_utils/src/share_utils/src/share_utils.ts","../src/hooks/useFiles/src/load.ts","../src/hooks/useFiles/src/toggleShare.ts","../src/hooks/useFiles/src/patchShareSettings.ts","../src/hooks/useFiles/src/useSaveShareSettings.ts","../src/hooks/useFiles/src/deleteFile.ts","../src/hooks/useFiles/src/useFiles.ts","../src/FileHandlers/FileRow/src/row_utils.tsx","../src/FileHandlers/ShareModal/src/share_utils.tsx","../src/FileHandlers/FileTable/src/table_utils.tsx","../src/FileHandlers/Upload/src/upload_utils.tsx","../src/UI/index.tsx","../src/App/SecureFiles.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ClipboardIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClipboardIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction CloudArrowUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(CloudArrowUpIcon);\nexport default ForwardRef;","/** Helper function to trigger file download */\nexport function triggerDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = Object.assign(document.createElement(\"a\"), {\n href: url,\n download: filename,\n });\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n\n console.log(`✅ Successfully downloaded: ${filename}`);\n}\n","import {triggerDownload} from './trigger_download';\nimport {FileItem} from './../imports';\n/** Non-React “direct download” used by some old links (kept for parity) */\nexport async function directDownload(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/octet-stream\",\n },\n\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n const blob = await res.blob();\n triggerDownload(blob, item.filename);\n}\n","import { requireToken, secureFetchIt, FileItem } from './../imports';\nimport { triggerDownload } from './trigger_download';\nexport async function downloadFile(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n // Don’t over-constrain Accept; let server pick proper content-type\n // Accept: \"application/octet-stream\",\n },\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n\n // Stream-friendly: if your triggerDownload revokes URL immediately, wait a tick\n const blob = await res.blob();\n const name = item.filename || \"download\";\n triggerDownload(blob, name); // ensure this waits ~0-100ms before URL.revokeObjectURL\n}","import {requireToken,secureFetchIt,FileItem} from './../imports';\nimport {triggerDownload} from './trigger_download';\nexport async function downloadSelect(item: FileItem): Promise<void> {\n const token: string = requireToken();\n const body = item\n const headers = {\n Authorization: `Bearer ${token}`,\n Accept: \"application/octet-stream\",\n \"Content-Type\": \"application/json\"\n }\n const blob = await secureFetchIt( \"download\", body, \"POST\", headers, true, true) as Blob;\n\n\n\n if (!blob || blob.size === 0) {\n throw new Error(`Received empty file data for “${item.filename}”`);\n }\n\n triggerDownload(blob, item.filename);\n}\n","import {downloadSelect} from './download_select';\nimport type {FileItem} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function downloadRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n const filepath = cb.value;\n const filename = row?.children[1]?.textContent?.trim() || \"downloaded_file\";\n if (filepath) await downloadSelect({filepath,filename} as any);\n}\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function downloadSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n await downloadRow(cb);\n }\n}\n","/**\n * Classic “select all rows” logic (still handy in non-React views\n * such as the admin dashboard).\n */\nexport function syncHeaderCheckbox(): void {\n const all = document.querySelectorAll<HTMLInputElement>(\".file-checkbox\");\n const checked = document.querySelectorAll<HTMLInputElement>(\n \".file-checkbox:checked\"\n );\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n\n header.indeterminate =\n checked.length > 0 && checked.length < all.length;\n header.checked = checked.length === all.length;\n}\n\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Wire up header + row checkboxes once the table is in the DOM. */\nexport function initSelectAll(): void {\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n const btn = document.getElementById(\"select-all\") as HTMLButtonElement;\n\n // 1) header → toggle all\n header.addEventListener(\"change\", (e) => {\n const on = (e.target as HTMLInputElement).checked;\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => (cb.checked = on));\n });\n\n // 2) button → toggle all\n btn.addEventListener(\"click\", () => {\n const cbs = Array.from(\n document.querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n );\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n });\n\n // 3) row boxes → keep header state\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => cb.addEventListener(\"change\", syncHeaderCheckbox));\n\n syncHeaderCheckbox();\n}\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Utility for other screens: toggle a list of checkboxes on/off. */\nexport function toggleCheckboxes(cbs: HTMLInputElement[]): void {\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n}\n","\n/** Generic PATCH helper kept for other admin forms */\nexport async function patchFileSetting(\n fileId: string,\n field: string,\n value: unknown\n): Promise<Record<string, unknown>> {\n const res = await fetch(`/files/${fileId}/settings/${field}`, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ value }),\n });\n if (!res.ok) {\n const err = await res.json();\n throw new Error(err.error || res.statusText);\n }\n return (await res.json()) as Record<string, unknown>;\n}\n","import { secureFetchIt } from './../imports';\n/** Classic file-upload for the fallback HTML page. */\nexport async function uploadFile(file:any,subdir:any): Promise<any> {\n const fileInput = file || document.getElementById(\n \"file-browser\"\n ) as HTMLInputElement;\n const subdirInput = subdir || document.getElementById(\"subdir\") as HTMLInputElement;\n const banner = document.getElementById(\"banner\") as HTMLElement;\n\n if (!fileInput.files?.length) {\n alert(\"No file selected.\");\n return;\n }\n\n const formData = new FormData();\n formData.append(\"file\", fileInput.files[0]);\n formData.append(\"subdir\", subdirInput.value.trim());\n\n try {\n const json = await secureFetchIt(\"upload\", formData, \"POST\", null, false,false) as { filepath: string };\n banner.textContent = `Uploaded: ${json.filepath}`;\n fileInput.value = \"\";\n subdirInput.value = \"\";\n window.location.reload(); // no-op in React view\n } catch (err: any) {\n console.error(\"Upload failed\", err);\n }\n}\n","import { secureFetchIt } from './../imports';\n\ninterface UploadResponse {\n filepath: string;\n}\n\nexport async function uploadFiles(file: File, subdir: string = ''): Promise<UploadResponse> {\n if (!(file instanceof File)) {\n throw new Error('Invalid file: Must be a File object.');\n }\n if (typeof subdir !== 'string') {\n throw new Error('Invalid subdir: Must be a string.');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('subdir', subdir.trim());\n\n try {\n const json = await secureFetchIt('upload', formData, 'POST', null, false, false);\n \n if (!json || typeof json !== 'object') {\n throw new Error('Invalid response from server.');\n }\n \n if (!('filepath' in json) || typeof json.filepath !== 'string' || !json.filepath) {\n throw new Error('Server response missing or invalid filepath.');\n }\n\n return { filepath: json.filepath };\n } catch (err: any) {\n throw new Error(`Upload failed: ${err?.message ?? 'Unknown error'}`);\n }\n}","import {requireToken,secureFetchIt} from './../imports';\n\nexport async function removeFile(item: any): Promise<void> {\n const resp = await secureFetchIt( \"remove\", item, \"POST\", null, false,false,true) as any;\n if (!resp || resp === false || resp?.result === false) {\n throw new Error(`could not delete data: “${item.filename}”`);\n }\n \n}\n","import {removeFile} from './delete_select';\n\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function removeSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n alert(cb);\n await removeFile(cb);\n }\n}","\nimport {removeFile} from './delete_select'\nimport {alertit} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function removeRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n alertit(row)\n if (row && row?.id) await removeFile(row);\n}\n\n\n","import { secureFetchIt } from './../imports';\nimport type { ApiRow, FileItem } from './../imports';\n/** GET /secure-list */\nexport async function listFiles(setFiles: any = null): Promise<any> {\n /** ← your request already returns the raw array */\n const apiRows = await secureFetchIt(\"/list\", null, \"GET\", null, false, true) as ApiRow[]\n\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n}","import {FileItem,fetchSharePatch} from './../imports'\nexport function getToggleShare(file:any){\n if (file == true || file?.shareable == true){\n return false\n }\n return false\n}\nexport function updateFileShare(file:any){\n let updated: FileItem = file\n const boolIt = getToggleShare(updated)\n updated = { ...file, shareable: boolIt };\n return updated;\n}\n \n/**\n * Custom hook to toggle share settings on a file item\n */\nexport async function toggleShare(file:FileItem){\n\n const updated = updateFileShare(file)\n try {\n const resp = await fetchSharePatch(updated);\n \n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n}\n\n","import React from 'react';\nimport { secureFetchIt, useCallback, FileItem, ApiRow, alertit } from './../imports'\n/**\n * Custom hook that returns a memoized loadFiles callback\n */\nexport const useLoadFiles = (\n setLoading: React.Dispatch<React.SetStateAction<boolean>>,\n setError: React.Dispatch<React.SetStateAction<Error | null>>,\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n\n return useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n /** ← your request already returns the raw array */\n let apiRows = await secureFetchIt<ApiRow[]>(\n \"list\",\n null,\n \"GET\",\n ) as any;\n console.log(`all apiRows == ${JSON.stringify(apiRows)}`)\n if (apiRows?.result) {\n apiRows = apiRows.result\n }\n apiRows = apiRows as ApiRow[]\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n\n } catch (err) {\n setError(err instanceof Error ? err\n : new Error(\"Unknown error loading files\"));\n } finally {\n setLoading(false);\n }\n }, [setLoading, setError, setFiles]);\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useToggleShare = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n const updated: FileItem = { ...file, shareable: !file.shareable };\n if (!updated.shareable) {\n updated.needsPassword = false;\n }\n try {\n await fetchSharePatch(updated);\n setFiles((curr) =>\n curr.map((f) => (f.id === file.id ? updated : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const usePatchShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: any) => {\n\n\n const body: any = {\n id: file.id, // ← always send id\n };\n\n // now send whichever settings changed\n body.shareable = file.shareable;\n body.share_password = file.share_password ?? null;\n body.password_str = file.password_str ?? null;\n body.download_limit = file.download_limit ?? null;\n console.log(`file contents == ${JSON.stringify(body)}`)\n try {\n await fetchSharePatch(body);\n setFiles((curr) =>\n curr.map((f) => (f.id === body.id ? body : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\nexport default usePatchShareSettings;","// hooks/useSaveShareSettings.ts\nimport React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\nexport const useSaveShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (updated: any) => {\n await fetchSharePatch({\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password,\n password_str: updated.password_str,\n download_limit: updated.download_limit,\n });\n\n // optimistic UI update – identical to toggleShare\n setFiles(curr =>\n curr.map(f => (f.id === updated.id ? updated : f))\n );\n },\n [setFiles]\n );\n};\n","import React from 'react'\nimport { useCallback, FileItem, secureFetchIt, removeFile } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useDeleteFile = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n try {\n await removeFile(file)\n window.location.reload();\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import { useState, useEffect } from 'react';\nimport type {FileItem} from './../imports';\nimport { useLoadFiles } from './load';\nimport { useToggleShare } from './toggleShare';\nimport {useSaveShareSettings} from './useSaveShareSettings';\nimport { useDeleteFile } from './deleteFile';\n\nexport function useFiles() {\n const [files, setFiles] = useState<FileItem[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const loadCallback = useLoadFiles(setLoading, setError, setFiles);\n const toggleShareCallback = useToggleShare(setFiles);\n const patchShareSettingsCallback = useSaveShareSettings(setFiles);\n const deleteFileCallback = useDeleteFile(setFiles);\n\n useEffect(() => {\n loadCallback();\n }, [loadCallback]);\n\n return {\n files,\n loading,\n error,\n load: loadCallback,\n toggleShare: toggleShareCallback,\n patchShareSettings: patchShareSettingsCallback,\n deleteFile: deleteFileCallback,\n setFiles,\n setLoading,\n setError,\n \n };\n}\n","import type { FileRowProps } from './../imports';\nimport { useState, Button, currentUsername } from './../imports';\n\nexport default function FileRow({\n file,\n onDownload,\n onSettings,\n onToggleShare,\n onDelete,\n}: FileRowProps) {\n const isOwner =\n file.uploader_id?.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const downloadAllowed = isOwner || file.shareable;\n const [isDownloading, setIsDownloading] = useState(false);\n const [isTogglingShare, setIsTogglingShare] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Mimic WindowManagerApp's unsaved heuristic\n const looksUnsaved =\n file.filename.toLowerCase().startsWith('untitled') ||\n file.filename.includes('*');\n\n const handleDownload = async () => {\n setIsDownloading(true);\n try {\n await onDownload();\n } finally {\n setIsDownloading(false);\n }\n };\n\n const handleToggleShare = async () => {\n setIsTogglingShare(true);\n try {\n await onToggleShare();\n } finally {\n setIsTogglingShare(false);\n }\n };\n\n const handleDeleteFile = async () => {\n setIsDeleting(true);\n try {\n await onDelete();\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <tr className=\"wm-row transition-colors duration-75\">\n {/* Select checkbox */}\n <td className=\"wm-cell w-12 align-middle\">\n <input\n type=\"checkbox\"\n className=\"wm-checkbox\"\n aria-label={`Select ${file.filename}`}\n />\n </td>\n\n {/* Filename */}\n <td className={`wm-cell ${looksUnsaved ? 'unsaved' : ''}`}>\n {file.filename}\n </td>\n\n {/* Download button or lock */}\n <td className=\"wm-cell w-12 align-middle\">\n {downloadAllowed ? (\n <Button\n color=\"blue\"\n variant=\"secondary\"\n onClick={handleDownload}\n disabled={isDownloading}\n aria-label={`Download ${file.filename}`}\n className=\"wm-btn-link\"\n >\n {isDownloading ? 'Downloading...' : 'Download'}\n </Button>\n ) : (\n <span\n className=\"text-gray-500 text-lg\"\n aria-label=\"Download restricted\"\n >\n 🔒\n </span>\n )}\n </td>\n\n {/* Settings cog */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={() => {\n console.log('⚙︎ clicked', file.id);\n onSettings();\n }}\n aria-label=\"Open share settings\"\n className=\"wm-btn-icon text-lg\"\n >\n ⚙️\n </Button>\n )}\n </td>\n\n {/* Share toggle */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color={file.shareable ? 'blue' : 'gray'}\n variant={file.shareable ? 'primary' : 'secondary'}\n onClick={handleToggleShare}\n disabled={isTogglingShare}\n className=\"btn\"\n >\n {isTogglingShare\n ? 'Toggling...'\n : file.shareable\n ? 'Sharing'\n : 'Share'}\n </Button>\n )}\n </td>\n\n {/* Delete button */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={handleDeleteFile}\n disabled={isDeleting}\n className=\"wm-btn-icon text-lg\"\n >\n 🗑\n </Button>\n )}\n </td>\n <td className=\"wm-cell\">{file.download_count} / {file.download_limit ?? \"∞\"}</td>\n </tr>\n );\n}","import type {\n ShareModalProps\n} from './../../imports';\nimport {\n Button,\n Checkbox,\n Input,\n ClipboardIcon,\n createPortal,\n useEffect,\n useRef,\n useState,\n} from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n\nexport default function ShareModal({ file, onClose, onSave }: ShareModalProps) {\n const [fileId, setFileId] = useState<string | number | \"\">(\"\");\n const [enabled, setEnabled] = useState<any>(false);\n const [password, setPassword] = useState<any>(undefined);\n const [strPassword, setStrPassword] = useState<any>(\"\");\n const [download_limit, setDownloadLimit] = useState<number | \"\">(0);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const modalRef = useRef<HTMLDivElement>(null);\n\n const shareLink =\n file && enabled\n ? `https://abstractendeavors.com/api/secure-files/secure-download/${file.id}`\n : \"\";\n\n useEffect(() => {\n if (!file) return;\n setFileId(file.id);\n setEnabled(file.shareable);\n // load both values from the `file` prop\n setPassword(file.share_password);\n setStrPassword(file.password_str ?? \"\");\n setDownloadLimit(file.download_limit ?? 0);\n setError(\"\");\n\n modalRef.current?.focus();\n }, [file]);\n\n\n useEffect(() => {\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [onClose]);\n\n if (!file) return null;\n\n async function handleSave() {\n if (strPassword && strPassword.length < 4) {\n setError(\"Password must be at least 4 characters\");\n return;\n }\n setBusy(true);\n const save_dict = {\n id: fileId,\n shareable: enabled,\n needsPassword: !!strPassword,\n share_password: strPassword || null,\n password_str: strPassword || null,\n download_limit: download_limit === \"\" ? null : Number(download_limit),\n }\n\n try {\n const resp = await onSave(save_dict);\n\n onClose();\n } catch (err) {\n setError(`${err} Failed to save settings. Please try again.`);\n } finally {\n setBusy(false);\n }\n }\n\n return createPortal(\n <>\n <div\n className=\"modal-backdrop z-100\"\n onClick={(e) => e.target === e.currentTarget && onClose()}\n />\n <div className=\"modal-wrapper z-110\">\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className=\"modal-panel\"\n >\n <h3 className=\"form-title\">\n Share settings for <span className=\"font-mono\">{file.filename}</span>\n </h3>\n\n {error && <p className=\"form-error\">{error}</p>}\n\n <Checkbox\n label=\"Enable sharing\"\n checked={enabled}\n onChange={(e) => setEnabled(e.target.checked)}\n className=\"checkbox\"\n />\n\n {/* This is the admin-editable plain-text password */}\n <Input\n label=\"Password (optional)\"\n type=\"text\"\n value={strPassword}\n onChange={(e) => setStrPassword(e.target.value)}\n disabled={!enabled}\n className=\"form-input\"\n />\n <Input\n label=\"Download limit (0 = ∞)\"\n type=\"number\"\n min={0}\n value={download_limit}\n onChange={(e) =>\n setDownloadLimit(e.target.value === \"\" ? \"\" : Number(e.target.value))\n }\n disabled={!enabled}\n className=\"form-input\"\n />\n\n {enabled && shareLink && (\n <Input\n label=\"Share link\"\n readOnly\n value={shareLink}\n className=\"form-input\"\n trailing={\n <Button\n variant=\"icon\"\n className=\"btn-icon\"\n onClick={() => navigator.clipboard.writeText(shareLink)}\n >\n <ClipboardIcon className=\"h-5 w-5\" />\n </Button>\n }\n />\n )}\n\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button color=\"green\" variant=\"primary\" onClick={handleSave} disabled={busy} className=\"btn-primary\">\n {busy ? \"Saving…\" : \"Save\"}\n </Button>\n <Button variant=\"secondary\" onClick={onClose} disabled={busy} className=\"btn-secondary\">\n Cancel\n </Button>\n </div>\n </div>\n </div>\n </>,\n document.body\n );\n}","import type { FileItem, FileTableProps } from './../imports';\nimport React, { useState, useMemo, ChangeEvent } from 'react';\nimport {\n useFiles,\n downloadFile,\n Spinner,\n ShareModal,\n Input,\n Button,\n currentUsername\n} from './../imports';\nimport { downloadSelected } from './../../../file_utils';\n\n// Tree node type\ninterface FileNode {\n name: string;\n path: string;\n children: Map<string, FileNode>;\n files: FileItem[];\n}\n\n// Build a directory tree from a flat file list\nfunction buildTree(files: FileItem[]): FileNode {\n const root: FileNode = { name: '', path: '', children: new Map(), files: [] };\n files.forEach(file => {\n const parts = file.filepath.split('/');\n let node = root;\n parts.slice(0, -1).forEach((seg, idx) => {\n const subPath = parts.slice(0, idx + 1).join('/');\n if (!node.children.has(seg)) {\n node.children.set(seg, { name: seg, path: subPath, children: new Map(), files: [] });\n }\n node = node.children.get(seg)!;\n });\n node.files.push(file);\n });\n return root;\n}\n\n// Collect all file IDs under a node (recursive)\nfunction collectNodeIds(node: FileNode): Array<number | string> {\n let ids: Array<number | string> = [];\n node.files.forEach(f => ids.push(f.id));\n node.children.forEach(child => {\n ids = ids.concat(collectNodeIds(child));\n });\n return ids;\n}\n\nexport default function FileTable({\n files,\n loading,\n error,\n onToggleShare,\n onPatchShare,\n onDelete\n}: FileTableProps) {\n const { load } = useFiles();\n const [search, setSearch] = useState('');\n const [modalFile, setModalFile] = useState<FileItem | null>(null);\n const [selected, setSelected] = useState<Set<number | string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n\n // Upload controls\n const [uploadDir, setUploadDir] = useState<string>('');\n const [uploadFile, setUploadFile] = useState<File | null>(null);\n const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => setUploadFile(e.target.files?.[0] ?? null);\n const handleUpload = async () => {\n if (!uploadFile) return;\n const form = new FormData();\n form.append('file', uploadFile);\n const dirPart = uploadDir ? `${uploadDir}/` : '';\n const url = `/api/secure-files/upload/${dirPart}${encodeURIComponent(uploadFile.name)}`;\n await fetch(url, { method: 'POST', credentials: 'include', body: form });\n setUploadFile(null);\n load();\n };\n\n // Filter files by search term\n const filtered = useMemo(\n () => files.filter(f => f.filename.toLowerCase().includes(search.trim().toLowerCase())),\n [files, search]\n );\n // Build tree and directory paths list\n const tree = useMemo(() => buildTree(filtered), [filtered]);\n const allDirPaths = useMemo(() => {\n const paths: string[] = [''];\n function collect(node: FileNode) {\n node.children.forEach(child => {\n paths.push(child.path);\n collect(child);\n });\n }\n collect(tree);\n return paths;\n }, [tree]);\n\n // Selection & expand/collapse logic\n const allIds = filtered.map(f => f.id);\n const toggleAllSelection = () => selected.size < allIds.length ? setSelected(new Set(allIds)) : setSelected(new Set());\n const toggleDirOpen = (path: string) => setExpanded(prev => {\n const next = new Set(prev);\n next.has(path) ? next.delete(path) : next.add(path);\n return next;\n });\n const expandAll = () => setExpanded(new Set(allDirPaths));\n const collapseAll = () => setExpanded(new Set());\n\n // Recursive renderer: directory row with select-all checkbox, then its files, then subdirectories\n const renderNode = (node: FileNode, depth = 0): React.ReactNode[] => {\n const rows: React.ReactNode[] = [];\n if (node.path) {\n const isOpen = expanded.has(node.path);\n const nodeIds = collectNodeIds(node);\n const allSelected = nodeIds.every(id => selected.has(id));\n const someSelected = nodeIds.some(id => selected.has(id));\n rows.push(\n <tr key={node.path}>\n {/* Directory-level checkbox */}\n <td className=\"px-4 py-2 bg-gray-100\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={el => { if (el) el.indeterminate = !allSelected && someSelected; }}\n onChange={() => {\n setSelected(prev => {\n const next = new Set(prev);\n if (allSelected) {\n nodeIds.forEach(id => next.delete(id));\n } else {\n nodeIds.forEach(id => next.add(id));\n }\n return next;\n });\n }}\n />\n </td>\n {/* Directory label pushed left */}\n <td className=\"px-4 py-2 bg-gray-100 font-bold\" colSpan={5} style={{ textAlign: 'left' }}>\n {node.path}\n </td>\n {/* Expand/collapse ticker on right */}\n <td className=\"px-4 py-2 bg-gray-100 text-right\">\n <button onClick={() => toggleDirOpen(node.path)}>\n {isOpen ? '▾' : '▸'}\n </button>\n </td>\n </tr>\n );\n if (!isOpen) return rows;\n }\n // Render files in this directory\n node.files.sort((a, b) => a.filename.localeCompare(b.filename)).forEach(f => {\n const isOwner = f.uploader_id.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const canDownload = isOwner || f.shareable;\n rows.push(\n <tr key={f.id}>\n <td className=\"px-4 py-2\">\n <input\n type=\"checkbox\"\n checked={selected.has(f.id)}\n onChange={() => setSelected(prev => {\n const next = new Set(prev);\n next.has(f.id) ? next.delete(f.id) : next.add(f.id);\n return next;\n })}\n />\n </td>\n <td className=\"px-4 py-2\" style={{ paddingLeft: (depth + 1) * 20 }}>\n {f.filename}\n </td>\n <td className=\"px-4 py-2\">\n {canDownload ? <Button variant=\"secondary\" onClick={() => downloadFile(f)}>Download</Button> : <span>🔒</span>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => setModalFile(f)}>⚙️</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant={f.shareable ? 'primary' : 'secondary'} onClick={() => onToggleShare(f)}>{f.shareable ? 'Sharing' : 'Share'}</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => onDelete(f).then(load)}>🗑</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {f.download_count} / {f.download_limit ?? '∞'}\n </td>\n </tr>\n );\n });\n // Render subdirectories\n Array.from(node.children.values())\n .sort((a, b) => a.name.localeCompare(b.name))\n .forEach(child => rows.push(...renderNode(child, depth + 1)));\n return rows;\n };\n\n // Batch actions\n const handleDownloadAll = async () => {\n const inputs = filtered.filter(f => selected.has(f.id)).map(f => document.createElement('input'));\n inputs.forEach((cb, idx) => cb.value = filtered.filter(f => selected.has(f.id))[idx].filepath);\n await downloadSelected(inputs);\n };\n const handleDeleteAll = async () => { await onDelete(filtered.filter(f => selected.has(f.id))); setSelected(new Set()); await load(); };\n const handleShareAll = async () => { for (const f of filtered.filter(f => selected.has(f.id))) await onToggleShare(f); };\n\n if (loading) return <Spinner />;\n if (error) return <p className=\"text-red-600\">{error.message}</p>;\n\n return (\n <> \n\n\n {/* Search & actions */}\n <div className=\"mb-4 flex flex-col md:flex-row md:justify-between gap-4\">\n <Input label=\"Search files\" type=\"text\" value={search} onChange={e => setSearch(e.target.value)} placeholder=\"Enter filename…\" className=\"form-input flex-1\" />\n <div className=\"flex gap-2\">\n <Button onClick={expandAll} disabled={!allDirPaths.length}>Expand All</Button>\n <Button onClick={collapseAll} disabled={!allDirPaths.length}>Collapse All</Button>\n <Button onClick={handleDownloadAll} disabled={!selected.size}>Download Selected</Button>\n <Button color=\"gray\" onClick={handleDeleteAll} disabled={!selected.size}>Delete Selected</Button>\n <Button onClick={handleShareAll} disabled={!selected.size}>Share Selected</Button>\n </div>\n </div>\n\n {/* File tree table */}\n <div className=\"overflow-x-auto wm-container\">\n <table className=\"file-table w-full\">\n <thead className=\"wm-thead\">\n <tr>\n <th className=\"px-4 py-2 w-12\"><input type=\"checkbox\" checked={selected.size === filtered.length && filtered.length > 0} onChange={toggleAllSelection} /></th>\n <th className=\"px-4 py-2\">Filename</th>\n <th className=\"px-4 py-2\">Download</th>\n <th className=\"px-4 py-2\">Settings</th>\n <th className=\"px-4 py-2\">Share</th>\n <th className=\"px-4 py-2\">Delete</th>\n <th className=\"px-4 py-2\">Downloads</th>\n </tr>\n </thead>\n <tbody>{renderNode(tree)}</tbody>\n </table>\n </div>\n\n <ShareModal file={modalFile} onClose={() => setModalFile(null)} onSave={async patch => {\n if (!modalFile) return;\n const updated: FileItem = { ...modalFile, ...patch };\n await onPatchShare(updated);\n setModalFile(null);\n }} />\n </>\n );\n}\n","import React, {\n ChangeEvent,\n useRef,\n useState,\n useCallback,\n useEffect,\n} from 'react';\nimport {\n CloudArrowUpIcon,\n Button,\n uploadFiles,\n useFiles,\n currentUsername\n} from './../imports';\nimport type { QueuedFile, UploadProps } from './../imports';\n\nexport default function Upload({ onUploaded }: UploadProps) {\n const [queue, setQueue] = useState<QueuedFile[]>([]);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [drag, setDrag] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const [dirs, setDirs] = useState<string[]>([]);\n\n // — existing files → directory list —\n const { files, load } = useFiles();\n\n useEffect(() => {\n const dirSet = new Set<string>();\n files.forEach(f => {\n const parts = f.filepath.split('/');\n if (parts.length > 1) {\n parts.pop();\n dirSet.add(parts.join('/') + '/');\n }\n });\n setDirs(Array.from(dirSet).sort());\n }, [files]);\n\n // — directory selection state —\n const [uploadDir, setUploadDir] = useState<string>('');\n const [creatingNew, setCreatingNew] = useState(false);\n const [newDirName, setNewDirName] = useState('');\n\n // — queue logic —\n const enqueue = useCallback((files: QueuedFile[]) => {\n setQueue(prev => {\n const map = new Map(prev.map(q => [`${q.file.name}-${q.file.size}`, q]));\n files.forEach(q => map.set(`${q.file.name}-${q.file.size}`, q));\n return Array.from(map.values());\n });\n }, []);\n\n const extractFromDataTransfer = useCallback(\n async (dt: DataTransfer): Promise<QueuedFile[]> => {\n const out: QueuedFile[] = [];\n const walk = async (entry: any, path = \"\") => {\n if (!entry) return;\n if (entry.isFile) {\n const file: File = await new Promise(res => entry.file(res));\n out.push({ file, relPath: path, progress: 0 });\n } else if (entry.isDirectory) {\n const reader = entry.createReader();\n const entries: any[] = await new Promise(r => reader.readEntries(r));\n await Promise.all(entries.map(e => walk(e, `${path}${entry.name}/`)));\n }\n };\n await Promise.all(Array.from(dt.items).map(i => walk(i.webkitGetAsEntry())));\n return out;\n },\n []\n );\n\n const handleSelect = (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n const queued: any = files.map(f => ({\n file: f,\n relPath: (f as any).webkitRelativePath.replace(/[^/]*$/, \"\"),\n progress: 0,\n }));\n enqueue(queued);\n e.target.value = \"\";\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n const files = await extractFromDataTransfer(e.dataTransfer);\n enqueue(files.length ? files : []);\n setDrag(false);\n };\n\n const handleUploadAll = async () => {\n if (!queue.length) {\n setMessage(\"No files queued.\");\n return;\n }\n setBusy(true);\n setMessage(null);\n const targetDir = creatingNew\n ? (newDirName.trim().replace(/^\\/+|\\/+$/g, \"\") + \"/\")\n : uploadDir;\n try {\n for (const { file, relPath } of queue) {\n await uploadFiles(file, targetDir + relPath);\n setQueue(cur =>\n cur.map(item =>\n item.file === file ? { ...item, progress: 100 } : item\n )\n );\n }\n setQueue([]);\n await onUploaded();\n setMessage(\"Upload complete\");\n load();\n } catch {\n setMessage(\"Upload failed\");\n } finally {\n setBusy(false);\n }\n };\n\n // — directory selector handlers —\n const handleDirChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const v = e.target.value;\n if (v === \"__new__\") {\n setCreatingNew(true);\n setNewDirName(\"\");\n } else {\n setCreatingNew(false);\n setUploadDir(v);\n }\n };\n const acceptNewDir = () => {\n // normalize like before\n const cleanName = newDirName.trim().replace(/^\\/+|\\/+$/g, '');\n const normalized = `${uploadDir}${cleanName}/`;\n // ① add it to our dirs list if it isn't there already\n setDirs(prev => {\n if (prev.includes(normalized)) return prev;\n return [...prev, normalized].sort();\n });\n\n // ② select it & flip back to the <select>\n setUploadDir(normalized);\n setCreatingNew(false);\n setNewDirName('');\n };\n\n return (\n <div className=\"form-container max-w-2xl mx-auto\">\n {/* drop area */}\n <div\n className={`flex items-center border-2 border-dashed rounded-lg p-6 bg-white shadow-md space-x-4 transition-shadow duration-150\n ${drag ? 'border-indigo-500 bg-indigo-50 shadow-lg' : 'border-gray-300 hover:shadow-lg'}`}\n onClick={() => inputRef.current?.click()}\n onDragEnter={e => { e.preventDefault(); setDrag(true); }}\n onDragOver={e => e.preventDefault()}\n onDragLeave={() => setDrag(false)}\n onDrop={handleDrop}\n role=\"region\"\n aria-label=\"File upload area\"\n >\n <CloudArrowUpIcon\n style={{ width: 300, height: 300 }}\n className=\"text-gray-500 mb-3\"\n aria-hidden=\"true\"\n />\n <div className=\"flex-1\">\n <p className=\"text-base font-semibold text-gray-700\">\n Drag & drop files or folders here\n </p>\n {queue.length > 0 && (\n <p className=\"mt-1 text-sm text-gray-600\">\n {queue.length} item{queue.length > 1 && 's'} queued\n </p>\n )}\n </div>\n </div>\n\n {/* hidden file input */}\n <input\n ref={inputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n {...({ webkitdirectory: true, directory: '' } as any)}\n onChange={handleSelect}\n />\n\n {/* bottom controls */}\n <div className=\"flex items-center justify-between mt-4\">\n {/* directory selector / new dir input */}\n <div className=\"flex-1 mr-4\">\n {!creatingNew ? (\n <select\n value={uploadDir}\n onChange={handleDirChange}\n className=\"form-select w-full\"\n >\n {dirs.map(d => (\n <option key={d} value={d}>{d}</option>\n ))}\n <option value=\"__new__\">+ Create new directory…</option>\n </select>\n ) : (\n <div className=\"flex\">\n <input\n type=\"text\"\n value={newDirName}\n placeholder=\"new-folder-name\"\n onChange={e => setNewDirName(e.target.value)}\n onBlur={acceptNewDir}\n onKeyDown={e => e.key === 'Enter' && acceptNewDir()}\n className=\"form-input flex-1\"\n />\n <Button onClick={acceptNewDir} className=\"ml-2\">\n OK\n </Button>\n </div>\n )}\n </div>\n\n {/* upload button */}\n <Button\n color=\"blue\"\n variant=\"primary\"\n onClick={handleUploadAll}\n disabled={busy || !queue.length}\n >\n {busy ? 'Uploading…' : `Upload ${queue.length}`}\n </Button>\n </div>\n\n {message && (\n <p\n className={`text-center text-sm ${message.includes('failed') ? 'text-red-600' : 'text-gray-600'\n }`}\n role=\"alert\"\n >\n {message}\n </p>\n )}\n\n {/* queued list */}\n {queue.length > 0 && (\n <div className=\"wm-container mt-4\">\n <h3 className=\"mb-2 text-sm font-semibold text-gray-700\">Queued Files</h3>\n <ul className=\"max-h-64 space-y-4 overflow-y-auto\">\n {queue.map(({ file, relPath, progress }) => (\n <li key={`${file.name}-${file.size}`} className=\"space-y-1\">\n <div className=\"flex justify-between items-center\">\n <span className=\"truncate text-sm text-gray-800\">\n {relPath}{file.name}\n </span>\n <span className=\"text-xs text-gray-500\">{progress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2 overflow-hidden\">\n <div className=\"bg-indigo-600 h-2\" style={{ width: `${progress}%` }} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport type String = string | undefined | null; \nexport type Astring = any[] | string | undefined | null; \nexport type Trailing = React.ReactNode\nexport type ImportElem = {\n reaxlEle:React.InputHTMLAttributes<HTMLInputElement>;\n label?: String;\n trailing?:Trailing;\n className?: String; \n classNames?:Astring;\n}\n\n// Utility to convert input to array\nfunction ensure_list(obj: Astring | null | undefined): string[] {\n if (Array.isArray(obj)) return obj.filter(Boolean);\n if (typeof obj === 'string') return obj.split(' ').filter(Boolean);\n return [];\n}\n\n// Get list and length safely\nfunction getListAndLen(obj: Astring | null | undefined): { return_obj: string[]; ob_len: number } {\n const return_obj = ensure_list(obj);\n const ob_len = return_obj.length;\n return { return_obj, ob_len };\n}\n\n// Combine class names with defaults\nfunction combineClassNames(classNames: Astring = [], defaultClasses: Astring = ['form-group', 'form-label', 'flex', 'gap-2']): string[] {\n const { return_obj: inputClasses } = getListAndLen(classNames);\n const { return_obj: defaultClassList } = getListAndLen(defaultClasses);\n \n // Combine and remove duplicates\n const combined = [...new Set([...defaultClassList, ...inputClasses])];\n \n console.log(`Combined classes (length: ${combined.length}): ${combined.join(' ')}`);\n return combined;\n}\n\nexport function Button({\n children,\n color = 'gray',\n variant = 'default',\n className = '',\n ...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & {\n color?: 'gray' | 'green' | 'blue';\n variant?: 'default' | 'icon' | 'primary' | 'secondary';\n className?: string;\n}) {\n const variantClasses = {\n default: 'btn',\n icon: 'btn-icon',\n primary: 'btn-primary',\n secondary: 'btn-secondary',\n };\n\n const colorClasses = {\n gray: '',\n green: variant === 'primary' ? 'btn-success' : 'btn-secondary',\n blue: variant === 'primary' ? 'btn-primary' : 'btn-secondary',\n };\n\n const classes = combineClassNames([variantClasses[variant], colorClasses[color], className]);\n \n return (\n <button className={classes.join(' ')} {...rest}>\n {children}\n </button>\n );\n}\n\nexport function Checkbox({\n label,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['checkbox', 'wm-checkbox']);\n \n return (\n <label className={classes.join(' ')}>\n <input type=\"checkbox\" className=\"wm-checkbox\" {...rest} />\n {label && <span>{label}</span>}\n </label>\n );\n}\n\nexport function Input({\n label,\n trailing,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['form-group', 'flex', 'gap-2']);\n const inputClasses = combineClassNames(className, ['form-input']);\n \n return (\n <label className={classes.join(' ')}>\n {label && <span className=\"form-label\">{label}</span>}\n <div className=\"flex gap-2\">\n <input className={inputClasses.join(' ')} {...rest} />\n {trailing}\n </div>\n </label>\n );\n}\n\nexport function Spinner() {\n const classes = combineClassNames('animate-pulse');\n return <p className={classes.join(' ')}>Loading…</p>;\n}","// src/App.tsx\n// src/index.tsx\nimport './../styles/SecureFiles/index.css';\nimport React from \"react\";\nimport {\n FileTable,\n Upload\n} from \"./../FileHandlers\";\nimport { useFiles } from './../hooks'\nimport {\n getToken, // ⬅️ use the *non-throwing* helper\n isTokenExpired,\n useState\n} from \"@putkoff/abstract-utilities\";\nfunction checkTokenValid() {\n const tok = getToken();\n return !!tok && !isTokenExpired(tok);\n}\nconst SecureFiles: React.FC = () => {\n const [loggedIn, setLoggedIn] = useState(checkTokenValid());\n const filesHook = useFiles(); // ← one single hook instance\n return (\n <>\n {/* pass the same load & file‐list into both children */}\n <Upload onUploaded={filesHook.load} />\n <FileTable\n files={filesHook.files}\n loading={filesHook.loading}\n error={filesHook.error}\n onDownload={filesHook.toggleShare} // or downloadFile\n onToggleShare={filesHook.toggleShare}\n onPatchShare={filesHook.patchShareSettings}\n onDelete={filesHook.deleteFile}\n />\n\n </>\n )\n}\n\nexport default SecureFiles;"],"names":["React","ForwardRef","requireToken","secureFetchIt","alertit","fetchSharePatch","useCallback","useState","useEffect","currentUsername","_jsxs","_jsx","Button","useRef","createPortal","_Fragment","Checkbox","Input","ClipboardIcon","useMemo","Spinner","CloudArrowUpIcon","getToken","isTokenExpired"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,aAAa,CAAC;AACvB,EAAE,KAAK;AACP,EAAE,OAAO;AACT,EAAE,GAAG;AACL,CAAC,EAAE,MAAM,EAAE;AACX,EAAE,oBAAoBA,gBAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AAC/D,IAAI,KAAK,EAAE,4BAA4B;AACvC,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,WAAW;AACxB,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI,MAAM,EAAE,cAAc;AAC1B,IAAI,aAAa,EAAE,MAAM;AACzB,IAAI,WAAW,EAAE,MAAM;AACvB,IAAI,GAAG,EAAE,MAAM;AACf,IAAI,iBAAiB,EAAE;AACvB,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,gBAAgBA,gBAAK,CAAC,aAAa,CAAC,OAAO,EAAE;AAC/D,IAAI,EAAE,EAAE;AACR,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,eAAeA,gBAAK,CAAC,aAAa,CAAC,MAAM,EAAE;AAC7D,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,cAAc,EAAE,OAAO;AAC3B,IAAI,CAAC,EAAE;AACP,GAAG,CAAC,CAAC;AACL;AACA,MAAMC,YAAU,iBAAiBD,gBAAK,CAAC,UAAU,CAAC,aAAa,CAAC;;ACvBhE,SAAS,gBAAgB,CAAC;AAC1B,EAAE,KAAK;AACP,EAAE,OAAO;AACT,EAAE,GAAG;AACL,CAAC,EAAE,MAAM,EAAE;AACX,EAAE,oBAAoBA,gBAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AAC/D,IAAI,KAAK,EAAE,4BAA4B;AACvC,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,WAAW;AACxB,IAAI,WAAW,EAAE,GAAG;AACpB,IAAI,MAAM,EAAE,cAAc;AAC1B,IAAI,aAAa,EAAE,MAAM;AACzB,IAAI,WAAW,EAAE,MAAM;AACvB,IAAI,GAAG,EAAE,MAAM;AACf,IAAI,iBAAiB,EAAE;AACvB,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,gBAAgBA,gBAAK,CAAC,aAAa,CAAC,OAAO,EAAE;AAC/D,IAAI,EAAE,EAAE;AACR,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,eAAeA,gBAAK,CAAC,aAAa,CAAC,MAAM,EAAE;AAC7D,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,cAAc,EAAE,OAAO;AAC3B,IAAI,CAAC,EAAE;AACP,GAAG,CAAC,CAAC;AACL;AACA,MAAM,UAAU,iBAAiBA,gBAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;;ACxBnE;AACM,SAAU,eAAe,CAAC,IAAU,EAAE,QAAgB,EAAA;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACrC,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AACnD,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,QAAQ,EAAE,QAAQ;AACnB,KAAA,CAAC;AACF,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;IACT,CAAC,CAAC,MAAM,EAAE;AACV,IAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAExB,IAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,CAAA,CAAE,CAAC;AACvD;;ACXA;AACO,eAAe,cAAc,CAAC,IAAc,EAAA;IACjD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3C,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;AAElD,IAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iEAAiE,EAAE;AACzF,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE;YACP,aAAa,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;AAChC,YAAA,cAAc,EAAE,kBAAkB;AAClC,YAAA,MAAM,EAAE,0BAA0B;AACnC,SAAA;AAED,QAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,KAAA,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;AAC9D,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,IAAA,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;AACtC;;ACnBO,eAAe,YAAY,CAAC,IAAc,EAAA;IAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3C,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;AAElD,IAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iEAAiE,EAAE;AACzF,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE;YACP,aAAa,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;AAChC,YAAA,cAAc,EAAE,kBAAkB;;;AAGnC,SAAA;AACD,QAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,KAAA,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;;AAG9D,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU;AACxC,IAAA,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B;;ACrBO,eAAe,cAAc,CAAC,IAAc,EAAA;AACjD,IAAA,MAAM,KAAK,GAAWE,8BAAY,EAAE;IACpC,MAAM,IAAI,GAAG,IAAI;AACjB,IAAA,MAAM,OAAO,GAAG;QACd,aAAa,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;AAChC,QAAA,MAAM,EAAE,0BAA0B;AAClC,QAAA,cAAc,EAAE;KACjB;AACD,IAAA,MAAM,IAAI,GAAG,MAAMC,0BAAa,CAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAS;IAIxF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,IAAI,CAAC,QAAQ,CAAA,CAAA,CAAG,CAAC;IACpE;AAEA,IAAA,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;AACtC;;ACjBA;AACO,eAAe,WAAW,CAAC,EAAoB,EAAA;IACpD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAA+B;AAC1D,IAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK;AACzB,IAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,iBAAiB;AAC3E,IAAA,IAAI,QAAQ;QAAE,MAAM,cAAc,CAAC,EAAC,QAAQ,EAAC,QAAQ,EAAQ,CAAC;AAChE;AAEA;AACO,eAAe,gBAAgB,CAAC,UAAsC,EAAA;IAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChB,KAAK,CAAC,oBAAoB,CAAC;QAC3B;IACF;AACA,IAAA,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;AACrB,QAAA,MAAM,WAAW,CAAC,EAAE,CAAC;IACvB;AACF;;ACpBA;;;AAGG;SACa,kBAAkB,GAAA;IAChC,MAAM,GAAG,GAAO,QAAQ,CAAC,gBAAgB,CAAmB,gBAAgB,CAAC;IAC7E,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CACvC,wBAAwB,CACzB;IACD,MAAM,MAAM,GAAI,QAAQ,CAAC,cAAc,CACrC,qBAAqB,CACF;AAErB,IAAA,MAAM,CAAC,aAAa;AAClB,QAAA,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IACnD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;AAChD;;ACfA;SACgB,aAAa,GAAA;IAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CACpC,qBAAqB,CACF;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAsB;;IAGtE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAI;AACtC,QAAA,MAAM,EAAE,GAAI,CAAC,CAAC,MAA2B,CAAC,OAAO;QACjD;aACG,gBAAgB,CAAmB,gBAAgB;AACnD,aAAA,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AACvC,IAAA,CAAC,CAAC;;AAGF,IAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACjC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CACpB,QAAQ,CAAC,gBAAgB,CAAmB,gBAAgB,CAAC,CAC9D;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,KAAK,CAAC,qBAAqB,CAAC;YAC5B;QACF;AACA,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;AAClD,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;AAChD,QAAA,kBAAkB,EAAE;AACtB,IAAA,CAAC,CAAC;;IAGF;SACG,gBAAgB,CAAmB,gBAAgB;AACnD,SAAA,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAErE,IAAA,kBAAkB,EAAE;AACtB;;ACnCA;AACM,SAAU,gBAAgB,CAAC,GAAuB,EAAA;AACtD,IAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;QACf,KAAK,CAAC,qBAAqB,CAAC;QAC5B;IACF;AACA,IAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;AAClD,IAAA,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;AAChD,IAAA,kBAAkB,EAAE;AACtB;;ACTA;AACO,eAAe,gBAAgB,CACpC,MAAc,EACd,KAAa,EACb,KAAc,EAAA;IAEd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,MAAM,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,EAAE;AAC5D,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;AAChC,KAAA,CAAC;AACF,IAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,QAAA,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC;IAC9C;AACA,IAAA,QAAQ,MAAM,GAAG,CAAC,IAAI,EAAE;AAC1B;;AChBA;AACO,eAAe,UAAU,CAAC,IAAQ,EAAC,MAAU,EAAA;IAClD,MAAM,SAAS,GAAK,IAAI,IAAI,QAAQ,CAAC,cAAc,CACjD,cAAc,CACK;IACrB,MAAM,WAAW,GAAG,MAAM,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAqB;IACnF,MAAM,MAAM,GAAQ,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAgB;AAEpE,IAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE;QAC5B,KAAK,CAAC,mBAAmB,CAAC;QAC1B;IACF;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,IAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAA,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAEnD,IAAA,IAAI;AACF,QAAA,MAAM,IAAI,GAAG,MAAMA,0BAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAC,KAAK,CAAyB;QACvG,MAAM,CAAC,WAAW,GAAI,CAAA,UAAA,EAAa,IAAI,CAAC,QAAQ,EAAE;AAClD,QAAA,SAAS,CAAC,KAAK,GAAO,EAAE;AACxB,QAAA,WAAW,CAAC,KAAK,GAAK,EAAE;AACxB,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B;IAAE,OAAO,GAAQ,EAAE;AACjB,QAAA,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC;IACrC;AACF;;ACrBO,eAAe,WAAW,CAAC,IAAU,EAAE,SAAiB,EAAE,EAAA;AAC/D,IAAA,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC,EAAE;AAC3B,QAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;IACzD;AACA,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;IACtD;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,IAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAExC,IAAA,IAAI;AACF,QAAA,MAAM,IAAI,GAAG,MAAMA,0BAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;QAEhF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;QAClD;AAEA,QAAA,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChF,YAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;QACjE;AAEA,QAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;IACpC;IAAE,OAAO,GAAQ,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,GAAG,EAAE,OAAO,IAAI,eAAe,CAAA,CAAE,CAAC;IACtE;AACF;;AC/BO,eAAe,UAAU,CAAC,IAAS,EAAA;AACxC,IAAA,MAAM,IAAI,GAAG,MAAMA,0BAAa,CAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAC,KAAK,EAAC,IAAI,CAAQ;AACxF,IAAA,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,MAAM,KAAK,KAAK,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,QAAQ,CAAA,CAAA,CAAG,CAAC;IAC9D;AAEF;;ACLA;AACO,eAAe,cAAc,CAAC,UAAsC,EAAA;IACzE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChB,KAAK,CAAC,oBAAoB,CAAC;QAC3B;IACF;AACA,IAAA,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;QACrB,KAAK,CAAC,EAAE,CAAC;AACT,QAAA,MAAM,UAAU,CAAC,EAAE,CAAC;IACtB;AACF;;ACXA;AACO,eAAe,SAAS,CAAC,EAAoB,EAAA;IAClD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAA+B;IAC1DC,yBAAO,CAAC,GAAG,CAAC;AACZ,IAAA,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE;AAAE,QAAA,MAAM,UAAU,CAAC,GAAG,CAAC;AAC3C;;ACNA;AACO,eAAe,SAAS,CAAC,WAAgB,IAAI,EAAA;;AAElD,IAAA,MAAM,OAAO,GAAG,MAAMD,0BAAa,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAa;;IAGxF,MAAM,IAAI,GAAe,OAAO,CAAC,GAAG,CAAC,CAAC,CAAS,MAAM;QACnD,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,cAAc,EAAE,CAAC,CAAC,cAAc;QAChC,cAAc,EAAE,CAAC,CAAC,cAAc;AAChC,QAAA,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,QAAA,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;QACjC,cAAc,EAAE,CAAC,CAAC,cAAc;QAChC,YAAY,EAAE,CAAC,CAAC,YAAY;AAC7B,KAAA,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC;AAChB;;ACtBM,SAAU,cAAc,CAAC,IAAQ,EAAA;IACjC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAC;AAC1C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,KAAK;AAClB;AACM,SAAU,eAAe,CAAC,IAAQ,EAAA;IACtC,IAAI,OAAO,GAAa,IAAI;AAC5B,IAAA,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC;IACtC,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;AACxC,IAAA,OAAO,OAAO;AAChB;AAEA;;AAEG;AACI,eAAe,WAAW,CAAC,IAAa,EAAA;AAEzC,IAAA,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC;AACrC,IAAA,IAAI;AACF,QAAA,MAAM,IAAI,GAAG,MAAME,4BAAe,CAAC,OAAO,CAAC;IAE7C;IAAE,OAAO,GAAQ,EAAE;AACjB,QAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC;;IAEvD;AACN;;ACzBA;;AAEG;AACI,MAAM,YAAY,GAAG,CAC1B,UAAyD,EACzD,QAA4D,EAC5D,QAA0D,KACxD;AAEF,IAAA,OAAOC,6BAAW,CAAC,YAAW;QAC5B,UAAU,CAAC,IAAI,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;AAEd,QAAA,IAAI;;YAEF,IAAI,OAAO,GAAG,MAAMH,0BAAa,CAC/B,MAAM,EACN,IAAI,EACJ,KAAK,CACC;AACR,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;AACxD,YAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,gBAAA,OAAO,GAAG,OAAO,CAAC,MAAM;YAC1B;YACA,OAAO,GAAG,OAAmB;;YAE7B,MAAM,IAAI,GAAe,OAAO,CAAC,GAAG,CAAC,CAAC,CAAS,MAAM;gBACnD,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,cAAc,EAAE,CAAC,CAAC,cAAc;AAChC,gBAAA,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,gBAAA,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc;gBACjC,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,YAAY,EAAE,CAAC,CAAC,YAAY;AAC7B,aAAA,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC;QAEhB;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,QAAQ,CAAC,GAAG,YAAY,KAAK,GAAG;AAC9B,kBAAE,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC/C;gBAAU;YACR,UAAU,CAAC,KAAK,CAAC;QACnB;IACF,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtC;;AChDA;;AAEG;AACI,MAAM,cAAc,GAAG,CAC5B,QAA0D,KACxD;AACF,IAAA,OAAOG,6BAAW,CAChB,OAAO,IAAc,KAAI;AACvB,QAAA,MAAM,OAAO,GAAa,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;AACjE,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACtB,YAAA,OAAO,CAAC,aAAa,GAAG,KAAK;QAC/B;AACA,QAAA,IAAI;AACF,YAAA,MAAMD,4BAAe,CAAC,OAAO,CAAC;AAC9B,YAAA,QAAQ,CAAC,CAAC,IAAI,KACZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAClD;QACH;QAAE,OAAO,GAAQ,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC;;QAEvD;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;AACH;;ACxBA;;AAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,QAA0D,KACxD;AACF,IAAA,OAAOC,6BAAW,CAChB,OAAO,IAAS,KAAI;AAGlB,QAAA,MAAM,IAAI,GAAQ;AAChB,YAAA,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ;;AAGD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI;AACjD,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AACvD,QAAA,IAAI;AACF,YAAA,MAAMD,4BAAe,CAAC,IAAI,CAAC;AAC3B,YAAA,QAAQ,CAAC,CAAC,IAAI,KACZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAC/C;QACH;QAAE,OAAO,GAAQ,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC;;QAEvD;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;AACH;;AC/BO,MAAM,oBAAoB,GAAG,CAClC,QAA0D,KACxD;AACF,IAAA,OAAOC,6BAAW,CAChB,OAAO,OAAY,KAAI;AACrB,QAAA,MAAMD,4BAAe,CAAC;YACpB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,cAAc,EAAE,OAAO,CAAC,cAAc;AACvC,SAAA,CAAC;;AAGF,QAAA,QAAQ,CAAC,IAAI,IACX,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CACnD;AACH,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;AACH;;ACrBA;;AAEG;AACI,MAAM,aAAa,GAAG,CAC3B,QAA0D,KACxD;AACF,IAAA,OAAOC,6BAAW,CAChB,OAAO,IAAc,KAAI;AACvB,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,CAAC,IAAI,CAAC;AACtB,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC1B;QAAE,OAAO,GAAQ,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC;;QAEvD;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;AACH;;SCdgB,QAAQ,GAAA;IACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGC,cAAQ,CAAa,EAAE,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAU,KAAK,CAAC;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAe,IAAI,CAAC;IAEtD,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACjE,IAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,QAAQ,CAAC;AACpD,IAAA,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,QAAQ,CAAC;AACjE,IAAA,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC;IAElDC,eAAS,CAAC,MAAK;AACb,QAAA,YAAY,EAAE;AAChB,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAElB,OAAO;QACL,KAAK;QACL,OAAO;QACP,KAAK;AACL,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,WAAW,EAAE,mBAAmB;AAChC,QAAA,kBAAkB,EAAE,0BAA0B;AAC9C,QAAA,UAAU,EAAE,kBAAkB;QAC9B,QAAQ;QACR,UAAU;QACV,QAAQ;KAET;AACH;;AC/Bc,SAAU,OAAO,CAAC,EAC9B,IAAI,EACJ,UAAU,EACV,UAAU,EACV,aAAa,EACb,QAAQ,GACK,EAAA;AACb,IAAA,MAAM,OAAO,GACX,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAACC,iCAAe,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE;AAC7E,IAAA,MAAM,eAAe,GAAG,OAAO,IAAI,IAAI,CAAC,SAAS;IACjD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGF,0BAAQ,CAAC,KAAK,CAAC;IACzD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAGA,0BAAQ,CAAC,KAAK,CAAC;IAC7D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,0BAAQ,CAAC,KAAK,CAAC;;AAGnD,IAAA,MAAM,YAAY,GAChB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;AAE7B,IAAA,MAAM,cAAc,GAAG,YAAW;QAChC,gBAAgB,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI;YACF,MAAM,UAAU,EAAE;QACpB;gBAAU;YACR,gBAAgB,CAAC,KAAK,CAAC;QACzB;AACF,IAAA,CAAC;AAED,IAAA,MAAM,iBAAiB,GAAG,YAAW;QACnC,kBAAkB,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;YACF,MAAM,aAAa,EAAE;QACvB;gBAAU;YACR,kBAAkB,CAAC,KAAK,CAAC;QAC3B;AACF,IAAA,CAAC;AAED,IAAA,MAAM,gBAAgB,GAAG,YAAW;QAClC,aAAa,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI;YACF,MAAM,QAAQ,EAAE;QAClB;gBAAU;YACR,aAAa,CAAC,KAAK,CAAC;QACtB;AACF,IAAA,CAAC;AAED,IAAA,QACEG,eAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,sCAAsC,EAAA,QAAA,EAAA,CAElDC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,2BAA2B,EAAA,QAAA,EACvCA,cAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,aAAa,EAAA,YAAA,EACX,CAAA,OAAA,EAAU,IAAI,CAAC,QAAQ,CAAA,CAAE,EAAA,CACrC,EAAA,CACC,EAGLA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAE,CAAA,QAAA,EAAW,YAAY,GAAG,SAAS,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EACtD,IAAI,CAAC,QAAQ,GACX,EAGLA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,2BAA2B,EAAA,QAAA,EACtC,eAAe,IACdA,cAAA,CAACC,wBAAM,EAAA,EACL,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,aAAa,EAAA,YAAA,EACX,CAAA,SAAA,EAAY,IAAI,CAAC,QAAQ,EAAE,EACvC,SAAS,EAAC,aAAa,EAAA,QAAA,EAEtB,aAAa,GAAG,gBAAgB,GAAG,UAAU,EAAA,CACvC,KAETD,cAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,uBAAuB,EAAA,YAAA,EACtB,qBAAqB,EAAA,QAAA,EAAA,cAAA,EAAA,CAG3B,CACR,EAAA,CACE,EAGLA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,2BAA2B,EAAA,QAAA,EACtC,OAAO,KACNA,cAAA,CAACC,wBAAM,EAAA,EACL,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,MAAM,EACd,OAAO,EAAE,MAAK;wBACZ,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;AAClC,wBAAA,UAAU,EAAE;AACd,oBAAA,CAAC,EAAA,YAAA,EACU,qBAAqB,EAChC,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAAA,cAAA,EAAA,CAGxB,CACV,EAAA,CACE,EAGLD,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,2BAA2B,EAAA,QAAA,EACtC,OAAO,KACNA,cAAA,CAACC,wBAAM,EAAA,EACL,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,EACvC,OAAO,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,WAAW,EACjD,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAC,KAAK,YAEd;AACC,0BAAE;0BACA,IAAI,CAAC;AACP,8BAAE;8BACA,OAAO,EAAA,CACJ,CACV,EAAA,CACE,EAGLD,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,2BAA2B,EAAA,QAAA,EACtC,OAAO,KACNA,cAAA,CAACC,wBAAM,EAAA,EACL,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAAA,cAAA,EAAA,CAGxB,CACV,EAAA,CACE,EACLF,eAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,SAAS,EAAA,QAAA,EAAA,CAAE,IAAI,CAAC,cAAc,EAAA,KAAA,EAAK,IAAI,CAAC,cAAc,IAAI,GAAG,CAAA,EAAA,CAAM,CAAA,EAAA,CAC9E;AAET;;AC/Hc,SAAU,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAmB,EAAA;IAC3E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGH,0BAAQ,CAAuB,EAAE,CAAC;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,0BAAQ,CAAM,KAAK,CAAC;IAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,0BAAQ,CAAM,SAAS,CAAC;IACxD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAGA,0BAAQ,CAAM,EAAE,CAAC;IACvD,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAGA,0BAAQ,CAAc,CAAC,CAAC;IACnE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,0BAAQ,CAAC,EAAE,CAAC;IACtC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGA,0BAAQ,CAAC,KAAK,CAAC;AACvC,IAAA,MAAM,QAAQ,GAAGM,wBAAM,CAAiB,IAAI,CAAC;AAE7C,IAAA,MAAM,SAAS,GACb,IAAI,IAAI;AACN,UAAE,CAAA,+DAAA,EAAkE,IAAI,CAAC,EAAE,CAAA;UACzE,EAAE;IAERL,2BAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAClB,QAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE1B,QAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;AAChC,QAAA,cAAc,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;AACvC,QAAA,gBAAgB,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QAC1C,QAAQ,CAAC,EAAE,CAAC;AAEZ,QAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;AAC3B,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAGVA,2BAAS,CAAC,MAAK;AACb,QAAA,MAAM,CAAC,GAAG,CAAC,CAAgB,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,EAAE;AAC/D,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;QACrC,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,CAAC;AACvD,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAEb,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AAEtB,IAAA,eAAe,UAAU,GAAA;QACvB,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,QAAQ,CAAC,wCAAwC,CAAC;YAClD;QACF;QACA,OAAO,CAAC,IAAI,CAAC;AACb,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,EAAE,EAAE,MAAM;AACV,YAAA,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,CAAC,CAAC,WAAW;YAC5B,cAAc,EAAE,WAAW,IAAI,IAAI;YACnC,YAAY,EAAE,WAAW,IAAI,IAAI;AACjC,YAAA,cAAc,EAAE,cAAc,KAAK,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC;SACtE;AAED,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;AAEpC,YAAA,OAAO,EAAE;QACX;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAA,2CAAA,CAA6C,CAAC;QAC/D;gBAAU;YACR,OAAO,CAAC,KAAK,CAAC;QAChB;IACF;AAEA,IAAA,OAAOM,qBAAY,CACjBJ,eAAA,CAAAK,mBAAA,EAAA,EAAA,QAAA,EAAA,CACEJ,cAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,IAAI,OAAO,EAAE,EAAA,CACzD,EACFA,wBAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAClCD,yBACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,QAAQ,EAAA,YAAA,EACF,MAAM,EACjB,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAC,aAAa,EAAA,QAAA,EAAA,CAEvBA,eAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,YAAY,oCACLC,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,WAAW,EAAA,QAAA,EAAE,IAAI,CAAC,QAAQ,EAAA,CAAQ,CAAA,EAAA,CAClE,EAEJ,KAAK,IAAIA,sBAAG,SAAS,EAAC,YAAY,EAAA,QAAA,EAAE,KAAK,EAAA,CAAK,EAE/CA,eAACK,0BAAQ,EAAA,EACP,KAAK,EAAC,gBAAgB,EACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAC7C,SAAS,EAAC,UAAU,EAAA,CACpB,EAGFL,eAACM,uBAAK,EAAA,EACJ,KAAK,EAAC,qBAAqB,EAC3B,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC/C,QAAQ,EAAE,CAAC,OAAO,EAClB,SAAS,EAAC,YAAY,EAAA,CACtB,EACFN,cAAA,CAACM,uBAAK,IACJ,KAAK,EAAC,6BAAwB,EAC9B,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,CAAC,CAAC,KACV,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAEvE,QAAQ,EAAE,CAAC,OAAO,EAClB,SAAS,EAAC,YAAY,EAAA,CACtB,EAED,OAAO,IAAI,SAAS,KACnBN,cAAA,CAACM,uBAAK,IACJ,KAAK,EAAC,YAAY,EAClB,QAAQ,EAAA,IAAA,EACR,KAAK,EAAE,SAAS,EAChB,SAAS,EAAC,YAAY,EACtB,QAAQ,EACNN,cAAA,CAACC,wBAAM,IACL,OAAO,EAAC,MAAM,EACd,SAAS,EAAC,UAAU,EACpB,OAAO,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAA,QAAA,EAEvDD,cAAA,CAACO,YAAa,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAAA,CAC9B,EAAA,CAEX,CACH,EAEDR,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,cAAA,CAACC,wBAAM,EAAA,EAAC,KAAK,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,aAAa,EAAA,QAAA,EACjG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAA,CACnB,EACTD,cAAA,CAACC,wBAAM,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,QAAA,EAAA,CAE9E,CAAA,EAAA,CACL,CAAA,EAAA,CACF,GACF,CAAA,EAAA,CACL,EACH,QAAQ,CAAC,IAAI,CACd;AACH;;ACxIA;AACA,SAAS,SAAS,CAAC,KAAiB,EAAA;IAClC,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7E,IAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QACtC,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AACtC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACtF;YACA,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE;AAChC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACb;AAEA;AACA,SAAS,cAAc,CAAC,IAAc,EAAA;IACpC,IAAI,GAAG,GAA2B,EAAE;AACpC,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvC,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;QAC5B,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACzC,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEc,SAAU,SAAS,CAAC,EAChC,KAAK,EACL,OAAO,EACP,KAAK,EACL,aAAa,EACb,YAAY,EACZ,QAAQ,EACO,EAAA;AACf,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;IAC3B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGL,cAAQ,CAAC,EAAE,CAAC;IACxC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAkB,IAAI,CAAC;AACjE,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAuB,IAAI,GAAG,EAAE,CAAC;AACzE,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAc,IAAI,GAAG,EAAE,CAAC;;IAGhE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAS,EAAE,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAc,IAAI,CAAC;;AAc/D,IAAA,MAAM,QAAQ,GAAGY,aAAO,CACtB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EACvF,CAAC,KAAK,EAAE,MAAM,CAAC,CAChB;;AAED,IAAA,MAAM,IAAI,GAAGA,aAAO,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC3D,IAAA,MAAM,WAAW,GAAGA,aAAO,CAAC,MAAK;AAC/B,QAAA,MAAM,KAAK,GAAa,CAAC,EAAE,CAAC;QAC5B,SAAS,OAAO,CAAC,IAAc,EAAA;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC;AAChB,YAAA,CAAC,CAAC;QACJ;QACA,OAAO,CAAC,IAAI,CAAC;AACb,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;;AAGV,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACtC,IAAA,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;IACtH,MAAM,aAAa,GAAG,CAAC,IAAY,KAAK,WAAW,CAAC,IAAI,IAAG;AACzD,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnD,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;;IAGhD,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,KAAK,GAAG,CAAC,KAAuB;QAClE,MAAM,IAAI,GAAsB,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,YAAA,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC;AACpC,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACzD,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,CACPT,eAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAA,CAEEC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACnCA,cAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,EAAE,IAAG,EAAG,IAAI,EAAE;AAAE,gCAAA,EAAE,CAAC,aAAa,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,EACvE,QAAQ,EAAE,MAAK;gCACb,WAAW,CAAC,IAAI,IAAG;AACjB,oCAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;oCAC1B,IAAI,WAAW,EAAE;AACf,wCAAA,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oCACxC;yCAAO;AACL,wCAAA,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oCACrC;AACA,oCAAA,OAAO,IAAI;AACb,gCAAA,CAAC,CAAC;AACJ,4BAAA,CAAC,EAAA,CACD,EAAA,CACC,EAELA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,iCAAiC,EAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAA,QAAA,EACrF,IAAI,CAAC,IAAI,EAAA,CACP,EAELA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAC9CA,cAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA,QAAA,EAC5C,MAAM,GAAG,GAAG,GAAG,GAAG,EAAA,CACZ,EAAA,CACN,CAAA,EAAA,EA7BE,IAAI,CAAC,IAAI,CA8Bb,CACN;AACD,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;QAC1B;;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AAC1E,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAACF,iCAAe,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE;AACvF,YAAA,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC,SAAS;AAC1C,YAAA,IAAI,CAAC,IAAI,CACPC,eAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAA,CACEC,uBAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EACvBA,0BACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAC3B,QAAQ,EAAE,MAAM,WAAW,CAAC,IAAI,IAAG;AACjC,gCAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AAC1B,gCAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,gCAAA,OAAO,IAAI;AACb,4BAAA,CAAC,CAAC,EAAA,CACF,EAAA,CACC,EACLA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,EAAA,QAAA,EAC/D,CAAC,CAAC,QAAQ,EAAA,CACR,EACLA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,WAAW,GAAGA,cAAA,CAACC,wBAAM,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,EAAA,QAAA,EAAA,UAAA,EAAA,CAAmB,GAAGD,oDAAe,EAAA,CAC3G,EACLA,uBAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,OAAO,IAAIA,cAAA,CAACC,wBAAM,IAAC,OAAO,EAAC,MAAM,EAAC,OAAO,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,EAAA,QAAA,EAAA,cAAA,EAAA,CAAa,GAC3E,EACLD,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,YACtB,OAAO,IAAIA,cAAA,CAACC,wBAAM,IAAC,OAAO,EAAE,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,YAAG,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,OAAO,GAAU,EAAA,CAC9I,EACLD,uBAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,OAAO,IAAIA,cAAA,CAACC,wBAAM,IAAC,OAAO,EAAC,MAAM,EAAC,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA,QAAA,EAAA,cAAA,EAAA,CAAa,EAAA,CAClF,EACLF,eAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACtB,CAAC,CAAC,cAAc,SAAK,CAAC,CAAC,cAAc,IAAI,GAAG,IAC1C,CAAA,EAAA,EA7BE,CAAC,CAAC,EAAE,CA8BR,CACN;AACH,QAAA,CAAC,CAAC;;QAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC9B,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;aAC3C,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;;AAGD,IAAA,MAAM,iBAAiB,GAAG,YAAW;AACnC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACjG,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC9F,QAAA,MAAM,gBAAgB,CAAC,MAAM,CAAC;AAChC,IAAA,CAAC;AACD,IAAA,MAAM,eAAe,GAAG,YAAW,EAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IACvI,MAAM,cAAc,GAAG,YAAW,EAAG,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,QAAA,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExH,IAAA,IAAI,OAAO;QAAE,OAAOC,cAAA,CAACS,yBAAO,EAAA,EAAA,CAAG;AAC/B,IAAA,IAAI,KAAK;QAAE,OAAOT,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,cAAc,YAAE,KAAK,CAAC,OAAO,EAAA,CAAK;IAEjE,QACED,eAAA,CAAAK,mBAAA,EAAA,EAAA,QAAA,EAAA,CAIEL,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yDAAyD,EAAA,QAAA,EAAA,CACtEC,cAAA,CAACM,uBAAK,EAAA,EAAC,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAC,sBAAiB,EAAC,SAAS,EAAC,mBAAmB,EAAA,CAAG,EAC/JP,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,EAAA,QAAA,EAAA,CACzBC,cAAA,CAACC,wBAAM,EAAA,EAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,EAAA,QAAA,EAAA,YAAA,EAAA,CAAqB,EAC9ED,cAAA,CAACC,wBAAM,EAAA,EAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,EAAA,QAAA,EAAA,cAAA,EAAA,CAAuB,EAClFD,cAAA,CAACC,wBAAM,EAAA,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAA,QAAA,EAAA,mBAAA,EAAA,CAA4B,EACxFD,cAAA,CAACC,wBAAM,EAAA,EAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAA,QAAA,EAAA,iBAAA,EAAA,CAA0B,EACjGD,cAAA,CAACC,wBAAM,EAAA,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAyB,CAAA,EAAA,CAC9E,CAAA,EAAA,CACF,EAGND,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAC3CD,eAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAClCC,cAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,UAAU,EAAA,QAAA,EACzBD,eAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAA,CACEC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAACA,cAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAA,CAAI,EAAA,CAAK,EAC9JA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,UAAA,EAAA,CAAc,EACvCA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,UAAA,EAAA,CAAc,EACvCA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,UAAA,EAAA,CAAc,EACvCA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,OAAA,EAAA,CAAW,EACpCA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,QAAA,EAAA,CAAY,EACrCA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,WAAA,EAAA,CAAe,CAAA,EAAA,CACrC,EAAA,CACC,EACRA,cAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAQ,UAAU,CAAC,IAAI,CAAC,EAAA,CAAS,CAAA,EAAA,CAC3B,EAAA,CACJ,EAENA,cAAA,CAAC,UAAU,EAAA,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAM,KAAK,KAAG;AACpF,oBAAA,IAAI,CAAC,SAAS;wBAAE;oBAChB,MAAM,OAAO,GAAa,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,EAAE;AACpD,oBAAA,MAAM,YAAY,CAAC,OAAO,CAAC;oBAC3B,YAAY,CAAC,IAAI,CAAC;gBACpB,CAAC,EAAA,CAAI,CAAA,EAAA,CACJ;AAEP;;AC1Oc,SAAU,MAAM,CAAC,EAAE,UAAU,EAAe,EAAA;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGJ,cAAQ,CAAe,EAAE,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IACvC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAgB,IAAI,CAAC;IAC3D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;AACvC,IAAA,MAAM,QAAQ,GAAGM,YAAM,CAAmB,IAAI,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGN,cAAQ,CAAW,EAAE,CAAC;;IAG9C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;IAElCC,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU;AAChC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;YAChB,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,KAAK,CAAC,GAAG,EAAE;AACX,gBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;IAGX,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGD,cAAQ,CAAS,EAAE,CAAC;IACtD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,EAAE,CAAC;;AAGhD,IAAA,MAAM,OAAO,GAAGD,iBAAW,CAAC,CAAC,KAAmB,KAAI;QAClD,QAAQ,CAAC,IAAI,IAAG;AACd,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA,EAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA,CAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA,CAAE,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;AACjC,QAAA,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,uBAAuB,GAAGA,iBAAW,CACzC,OAAO,EAAgB,KAA2B;QAChD,MAAM,GAAG,GAAiB,EAAE;QAC5B,MAAM,IAAI,GAAG,OAAO,KAAU,EAAE,IAAI,GAAG,EAAE,KAAI;AAC3C,YAAA,IAAI,CAAC,KAAK;gBAAE;AACZ,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,gBAAA,MAAM,IAAI,GAAS,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAChD;AAAO,iBAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AAC5B,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE;AACnC,gBAAA,MAAM,OAAO,GAAU,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC;YACvE;AACF,QAAA,CAAC;AACD,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC5E,QAAA,OAAO,GAAG;IACZ,CAAC,EACD,EAAE,CACH;AAED,IAAA,MAAM,YAAY,GAAG,CAAC,CAAgC,KAAI;AACxD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK;AAClC,YAAA,IAAI,EAAE,CAAC;YACP,OAAO,EAAG,CAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC5D,YAAA,QAAQ,EAAE,CAAC;AACZ,SAAA,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC;AACf,QAAA,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;AACrB,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,OAAO,CAAkB,KAAI;QAC9C,CAAC,CAAC,cAAc,EAAE;QAClB,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC;AAC3D,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC;AAChB,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,YAAW;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,UAAU,CAAC,kBAAkB,CAAC;YAC9B;QACF;QACA,OAAO,CAAC,IAAI,CAAC;QACb,UAAU,CAAC,IAAI,CAAC;QAChB,MAAM,SAAS,GAAG;AAChB,eAAG,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG;cAClD,SAAS;AACb,QAAA,IAAI;YACF,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE;gBACrC,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;AAC5C,gBAAA,QAAQ,CAAC,GAAG,IACV,GAAG,CAAC,GAAG,CAAC,IAAI,IACV,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CACvD,CACF;YACH;YACA,QAAQ,CAAC,EAAE,CAAC;YACZ,MAAM,UAAU,EAAE;YAClB,UAAU,CAAC,iBAAiB,CAAC;AAC7B,YAAA,IAAI,EAAE;QACR;AAAE,QAAA,MAAM;YACN,UAAU,CAAC,eAAe,CAAC;QAC7B;gBAAU;YACR,OAAO,CAAC,KAAK,CAAC;QAChB;AACF,IAAA,CAAC;;AAGD,IAAA,MAAM,eAAe,GAAG,CAAC,CAAiC,KAAI;AAC5D,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;AACxB,QAAA,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,cAAc,CAAC,IAAI,CAAC;YACpB,aAAa,CAAC,EAAE,CAAC;QACnB;aAAO;YACL,cAAc,CAAC,KAAK,CAAC;YACrB,YAAY,CAAC,CAAC,CAAC;QACjB;AACF,IAAA,CAAC;IACD,MAAM,YAAY,GAAG,MAAK;;AAExB,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AAC7D,QAAA,MAAM,UAAU,GAAG,CAAA,EAAG,SAAS,CAAA,EAAG,SAAS,GAAG;;QAE9C,OAAO,CAAC,IAAI,IAAG;AACb,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAAE,gBAAA,OAAO,IAAI;YAC1C,OAAO,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE;AACrC,QAAA,CAAC,CAAC;;QAGF,YAAY,CAAC,UAAU,CAAC;QACxB,cAAc,CAAC,KAAK,CAAC;QACrB,aAAa,CAAC,EAAE,CAAC;AACnB,IAAA,CAAC;IAED,QACEI,yBAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAE/CA,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA;YACP,IAAI,GAAG,0CAA0C,GAAG,iCAAiC,CAAA,CAAE,EAC3F,OAAO,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,EACxC,WAAW,EAAE,CAAC,IAAG,EAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACxD,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EACnC,WAAW,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,EACjC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAC,QAAQ,EAAA,YAAA,EACF,kBAAkB,EAAA,QAAA,EAAA,CAE7BC,eAACU,UAAgB,EAAA,EACf,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAClC,SAAS,EAAC,oBAAoB,EAAA,aAAA,EAClB,MAAM,EAAA,CAClB,EACFX,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAA,CACrBC,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uCAAuC,EAAA,QAAA,EAAA,mCAAA,EAAA,CAEhD,EACH,KAAK,CAAC,MAAM,GAAG,CAAC,KACfD,eAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CACtC,KAAK,CAAC,MAAM,EAAA,OAAA,EAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAA,SAAA,CAAA,EAAA,CACzC,CACL,CAAA,EAAA,CACG,CAAA,EAAA,CACF,EAGNC,cAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,QAAQ,EAAA,IAAA,EACR,SAAS,EAAC,QAAQ,KACb,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAU,EACrD,QAAQ,EAAE,YAAY,EAAA,CACtB,EAGFD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,CAErDC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EACzB,CAAC,WAAW,IACXD,eAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CAE7B,IAAI,CAAC,GAAG,CAAC,CAAC,KACTC,cAAA,CAAA,QAAA,EAAA,EAAgB,KAAK,EAAE,CAAC,EAAA,QAAA,EAAG,CAAC,IAAf,CAAC,CAAwB,CACvC,CAAC,EACFA,cAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,SAAS,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAiC,CAAA,EAAA,CACjD,KAETD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,MAAM,EAAA,QAAA,EAAA,CACnBC,cAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,WAAW,EAAC,iBAAiB,EAC7B,QAAQ,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,YAAY,EAAE,EACnD,SAAS,EAAC,mBAAmB,EAAA,CAC7B,EACFA,cAAA,CAACC,wBAAM,EAAA,EAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAC,MAAM,EAAA,QAAA,EAAA,IAAA,EAAA,CAEtC,CAAA,EAAA,CACL,CACP,EAAA,CACG,EAGND,cAAA,CAACC,wBAAM,EAAA,EACL,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAA,QAAA,EAE9B,IAAI,GAAG,YAAY,GAAG,CAAA,OAAA,EAAU,KAAK,CAAC,MAAM,CAAA,CAAE,EAAA,CACxC,CAAA,EAAA,CACL,EAEL,OAAO,KACND,cAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAE,uBAAuB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,cAAc,GAAG,eAC9E,EAAE,EACJ,IAAI,EAAC,OAAO,EAAA,QAAA,EAEX,OAAO,EAAA,CACN,CACL,EAGA,KAAK,CAAC,MAAM,GAAG,CAAC,KACfD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAChCC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,cAAA,EAAA,CAAkB,EAC1EA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,oCAAoC,EAAA,QAAA,EAC/C,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MACrCD,eAAA,CAAA,IAAA,EAAA,EAAsC,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACzDA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,eAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,CAC7C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAA,EAAA,CACd,EACPA,eAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,aAAE,QAAQ,EAAA,GAAA,CAAA,EAAA,CAAS,CAAA,EAAA,CACtD,EACNC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qDAAqD,EAAA,QAAA,EAClEA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAG,EAAE,EAAA,CAAI,EAAA,CACnE,CAAA,EAAA,EATC,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,CAAE,CAU/B,CACN,CAAC,EAAA,CACC,CAAA,EAAA,CACD,CACP,CAAA,EAAA,CACG;AAEV;;AC7PA;AACA,SAAS,WAAW,CAAC,GAA+B,EAAA;AAClD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAClD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAClE,IAAA,OAAO,EAAE;AACX;AAEA;AACA,SAAS,aAAa,CAAC,GAA+B,EAAA;AACpD,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC;AACnC,IAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;AAChC,IAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;AAC/B;AAEA;AACA,SAAS,iBAAiB,CAAC,UAAA,GAAsB,EAAE,EAAE,cAAA,GAA0B,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAA;IAC1H,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC;IAC9D,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;;AAGtE,IAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;AAErE,IAAA,OAAO,CAAC,GAAG,CAAC,CAAA,0BAAA,EAA6B,QAAQ,CAAC,MAAM,CAAA,GAAA,EAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;AACnF,IAAA,OAAO,QAAQ;AACjB;AAEM,SAAU,MAAM,CAAC,EACrB,QAAQ,EACR,KAAK,GAAG,MAAM,EACd,OAAO,GAAG,SAAS,EACnB,SAAS,GAAG,EAAE,EACd,GAAG,IAAI,EAKR,EAAA;AACC,IAAA,MAAM,cAAc,GAAG;AACrB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,SAAS,EAAE,eAAe;KAC3B;AAED,IAAA,MAAM,YAAY,GAAG;AACnB,QAAA,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,OAAO,KAAK,SAAS,GAAG,aAAa,GAAG,eAAe;QAC9D,IAAI,EAAE,OAAO,KAAK,SAAS,GAAG,aAAa,GAAG,eAAe;KAC9D;AAED,IAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AAE5F,IAAA,QACEA,cAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAM,IAAI,EAAA,QAAA,EAC3C,QAAQ,EAAA,CACF;AAEb;SAEgB,QAAQ,CAAC,EACvB,KAAK,EACL,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,EAAE,EACf,GAAG,IAAI,EACI,EAAA;AACX,IAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAE1E,IAAA,QACED,eAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CACjCC,cAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,aAAa,EAAA,GAAK,IAAI,EAAA,CAAI,EAC1D,KAAK,IAAIA,cAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,KAAK,EAAA,CAAQ,CAAA,EAAA,CACxB;AAEZ;SAEgB,KAAK,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,EAAE,EACf,GAAG,IAAI,EACI,EAAA;AACX,IAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;AAEjE,IAAA,QACED,eAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CAChC,KAAK,IAAIC,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,YAAY,EAAA,QAAA,EAAE,KAAK,EAAA,CAAQ,EACrDD,yBAAK,SAAS,EAAC,YAAY,EAAA,QAAA,EAAA,CACzBC,cAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAA,GAAM,IAAI,EAAA,CAAI,EACrD,QAAQ,CAAA,EAAA,CACL,CAAA,EAAA,CACA;AAEZ;SAEgB,OAAO,GAAA;AACrB,IAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,eAAe,CAAC;IAClD,OAAOA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,eAAA,EAAA,CAAc;AACtD;;AClGA,SAAS,eAAe,GAAA;AACtB,IAAA,MAAM,GAAG,GAAGW,0BAAQ,EAAE;IACtB,OAAO,CAAC,CAAC,GAAG,IAAI,CAACC,gCAAc,CAAC,GAAG,CAAC;AACtC;AACA,MAAM,WAAW,GAAa,MAAK;IACjC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGhB,0BAAQ,CAAC,eAAe,EAAE,CAAC;AAC3D,IAAA,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;IAC7B,QACEG,eAAA,CAAAK,mBAAA,EAAA,EAAA,QAAA,EAAA,CAEEJ,cAAA,CAAC,MAAM,EAAA,EAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAA,CAAI,EACtCA,cAAA,CAAC,SAAS,EAAA,EACR,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,OAAO,EAAE,SAAS,CAAC,OAAO,EAC1B,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,UAAU,EAAE,SAAS,CAAC,WAAW,EACjC,aAAa,EAAE,SAAS,CAAC,WAAW,EACpC,YAAY,EAAE,SAAS,CAAC,kBAAkB,EAC1C,QAAQ,EAAE,SAAS,CAAC,UAAU,EAAA,CAC9B,CAAA,EAAA,CAED;AAEP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[0,1]}
package/dist/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from './hooks';
5
5
  export * from './UI';
6
6
  export * from './types';
7
7
  export * from './styles';
8
+ export { SecureFiles } from './App';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { createPortal } from 'react-dom';
3
- import { requireToken, alertit, useCallback, currentUsername, useState as useState$1, Button as Button$1, useRef, useEffect as useEffect$1, Checkbox as Checkbox$1, Input as Input$1, Spinner as Spinner$1 } from '@putkoff/abstract-utilities';
3
+ import { requireToken, alertit, useCallback, currentUsername, useState as useState$1, Button as Button$1, useRef, useEffect as useEffect$1, Checkbox as Checkbox$1, Input as Input$1, Spinner as Spinner$1, getToken, isTokenExpired } from '@putkoff/abstract-utilities';
4
4
  import { secureFetchIt, fetchSharePatch } from '@putkoff/abstract-apis';
5
5
  import * as React from 'react';
6
6
  import { useState, useEffect, useMemo, useRef as useRef$1, useCallback as useCallback$1 } from 'react';
@@ -881,5 +881,15 @@ function Spinner() {
881
881
  return jsx("p", { className: classes.join(' '), children: "Loading\u2026" });
882
882
  }
883
883
 
884
- export { Button, Checkbox, FileRow, FileTable, Input, ShareModal, Spinner, Upload, directDownload, downloadFile, downloadRow, downloadSelect, downloadSelected, getToggleShare, initSelectAll, listFiles, patchFileSetting, removeFile, removeRow, removeSelected, syncHeaderCheckbox, toggleCheckboxes, toggleShare, triggerDownload, updateFileShare, uploadFile, uploadFiles, useDeleteFile, useFiles, useLoadFiles, usePatchShareSettings, useSaveShareSettings, useToggleShare };
884
+ function checkTokenValid() {
885
+ const tok = getToken();
886
+ return !!tok && !isTokenExpired(tok);
887
+ }
888
+ const SecureFiles = () => {
889
+ const [loggedIn, setLoggedIn] = useState$1(checkTokenValid());
890
+ const filesHook = useFiles(); // ← one single hook instance
891
+ return (jsxs(Fragment, { children: [jsx(Upload, { onUploaded: filesHook.load }), jsx(FileTable, { files: filesHook.files, loading: filesHook.loading, error: filesHook.error, onDownload: filesHook.toggleShare, onToggleShare: filesHook.toggleShare, onPatchShare: filesHook.patchShareSettings, onDelete: filesHook.deleteFile })] }));
892
+ };
893
+
894
+ export { Button, Checkbox, FileRow, FileTable, Input, SecureFiles, ShareModal, Spinner, Upload, directDownload, downloadFile, downloadRow, downloadSelect, downloadSelected, getToggleShare, initSelectAll, listFiles, patchFileSetting, removeFile, removeRow, removeSelected, syncHeaderCheckbox, toggleCheckboxes, toggleShare, triggerDownload, updateFileShare, uploadFile, uploadFiles, useDeleteFile, useFiles, useLoadFiles, usePatchShareSettings, useSaveShareSettings, useToggleShare };
885
895
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/@heroicons/react/24/outline/esm/ClipboardIcon.js","../node_modules/@heroicons/react/24/outline/esm/CloudArrowUpIcon.js","../src/file_utils/src/download_utils/src/trigger_download.ts","../src/file_utils/src/download_utils/src/direct_download.ts","../src/file_utils/src/download_utils/src/download_file.ts","../src/file_utils/src/download_utils/src/download_select.ts","../src/file_utils/src/download_utils/src/target_downloads.ts","../src/file_utils/src/select_utils/src/sync_header_checkbox.ts","../src/file_utils/src/select_utils/src/init_select_all.ts","../src/file_utils/src/select_utils/src/toggle_checkboxes.ts","../src/file_utils/src/upload_utils/src/patch_file_settings.ts","../src/file_utils/src/upload_utils/src/upload_file.ts","../src/file_utils/src/upload_utils/src/upload_files.ts","../src/file_utils/src/delete_utils/src/delete_select.ts","../src/file_utils/src/delete_utils/src/delete_selected.ts","../src/file_utils/src/delete_utils/src/delete_row.ts","../src/file_utils/src/list_utils/src/list_utils.ts","../src/file_utils/src/share_utils/src/share_utils.ts","../src/hooks/useFiles/src/load.ts","../src/hooks/useFiles/src/toggleShare.ts","../src/hooks/useFiles/src/patchShareSettings.ts","../src/hooks/useFiles/src/useSaveShareSettings.ts","../src/hooks/useFiles/src/deleteFile.ts","../src/hooks/useFiles/src/useFiles.ts","../src/FileHandlers/FileRow/src/row_utils.tsx","../src/FileHandlers/ShareModal/src/share_utils.tsx","../src/FileHandlers/FileTable/src/table_utils.tsx","../src/FileHandlers/Upload/src/upload_utils.tsx","../src/UI/index.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ClipboardIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClipboardIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction CloudArrowUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(CloudArrowUpIcon);\nexport default ForwardRef;","/** Helper function to trigger file download */\nexport function triggerDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = Object.assign(document.createElement(\"a\"), {\n href: url,\n download: filename,\n });\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n\n console.log(`✅ Successfully downloaded: ${filename}`);\n}\n","import {triggerDownload} from './trigger_download';\nimport {FileItem} from './../imports';\n/** Non-React “direct download” used by some old links (kept for parity) */\nexport async function directDownload(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/octet-stream\",\n },\n\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n const blob = await res.blob();\n triggerDownload(blob, item.filename);\n}\n","import { requireToken, secureFetchIt, FileItem } from './../imports';\nimport { triggerDownload } from './trigger_download';\nexport async function downloadFile(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n // Don’t over-constrain Accept; let server pick proper content-type\n // Accept: \"application/octet-stream\",\n },\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n\n // Stream-friendly: if your triggerDownload revokes URL immediately, wait a tick\n const blob = await res.blob();\n const name = item.filename || \"download\";\n triggerDownload(blob, name); // ensure this waits ~0-100ms before URL.revokeObjectURL\n}","import {requireToken,secureFetchIt,FileItem} from './../imports';\nimport {triggerDownload} from './trigger_download';\nexport async function downloadSelect(item: FileItem): Promise<void> {\n const token: string = requireToken();\n const body = item\n const headers = {\n Authorization: `Bearer ${token}`,\n Accept: \"application/octet-stream\",\n \"Content-Type\": \"application/json\"\n }\n const blob = await secureFetchIt( \"download\", body, \"POST\", headers, true, true) as Blob;\n\n\n\n if (!blob || blob.size === 0) {\n throw new Error(`Received empty file data for “${item.filename}”`);\n }\n\n triggerDownload(blob, item.filename);\n}\n","import {downloadSelect} from './download_select';\nimport type {FileItem} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function downloadRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n const filepath = cb.value;\n const filename = row?.children[1]?.textContent?.trim() || \"downloaded_file\";\n if (filepath) await downloadSelect({filepath,filename} as any);\n}\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function downloadSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n await downloadRow(cb);\n }\n}\n","/**\n * Classic “select all rows” logic (still handy in non-React views\n * such as the admin dashboard).\n */\nexport function syncHeaderCheckbox(): void {\n const all = document.querySelectorAll<HTMLInputElement>(\".file-checkbox\");\n const checked = document.querySelectorAll<HTMLInputElement>(\n \".file-checkbox:checked\"\n );\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n\n header.indeterminate =\n checked.length > 0 && checked.length < all.length;\n header.checked = checked.length === all.length;\n}\n\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Wire up header + row checkboxes once the table is in the DOM. */\nexport function initSelectAll(): void {\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n const btn = document.getElementById(\"select-all\") as HTMLButtonElement;\n\n // 1) header → toggle all\n header.addEventListener(\"change\", (e) => {\n const on = (e.target as HTMLInputElement).checked;\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => (cb.checked = on));\n });\n\n // 2) button → toggle all\n btn.addEventListener(\"click\", () => {\n const cbs = Array.from(\n document.querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n );\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n });\n\n // 3) row boxes → keep header state\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => cb.addEventListener(\"change\", syncHeaderCheckbox));\n\n syncHeaderCheckbox();\n}\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Utility for other screens: toggle a list of checkboxes on/off. */\nexport function toggleCheckboxes(cbs: HTMLInputElement[]): void {\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n}\n","\n/** Generic PATCH helper kept for other admin forms */\nexport async function patchFileSetting(\n fileId: string,\n field: string,\n value: unknown\n): Promise<Record<string, unknown>> {\n const res = await fetch(`/files/${fileId}/settings/${field}`, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ value }),\n });\n if (!res.ok) {\n const err = await res.json();\n throw new Error(err.error || res.statusText);\n }\n return (await res.json()) as Record<string, unknown>;\n}\n","import { secureFetchIt } from './../imports';\n/** Classic file-upload for the fallback HTML page. */\nexport async function uploadFile(file:any,subdir:any): Promise<any> {\n const fileInput = file || document.getElementById(\n \"file-browser\"\n ) as HTMLInputElement;\n const subdirInput = subdir || document.getElementById(\"subdir\") as HTMLInputElement;\n const banner = document.getElementById(\"banner\") as HTMLElement;\n\n if (!fileInput.files?.length) {\n alert(\"No file selected.\");\n return;\n }\n\n const formData = new FormData();\n formData.append(\"file\", fileInput.files[0]);\n formData.append(\"subdir\", subdirInput.value.trim());\n\n try {\n const json = await secureFetchIt(\"upload\", formData, \"POST\", null, false,false) as { filepath: string };\n banner.textContent = `Uploaded: ${json.filepath}`;\n fileInput.value = \"\";\n subdirInput.value = \"\";\n window.location.reload(); // no-op in React view\n } catch (err: any) {\n console.error(\"Upload failed\", err);\n }\n}\n","import { secureFetchIt } from './../imports';\n\ninterface UploadResponse {\n filepath: string;\n}\n\nexport async function uploadFiles(file: File, subdir: string = ''): Promise<UploadResponse> {\n if (!(file instanceof File)) {\n throw new Error('Invalid file: Must be a File object.');\n }\n if (typeof subdir !== 'string') {\n throw new Error('Invalid subdir: Must be a string.');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('subdir', subdir.trim());\n\n try {\n const json = await secureFetchIt('upload', formData, 'POST', null, false, false);\n \n if (!json || typeof json !== 'object') {\n throw new Error('Invalid response from server.');\n }\n \n if (!('filepath' in json) || typeof json.filepath !== 'string' || !json.filepath) {\n throw new Error('Server response missing or invalid filepath.');\n }\n\n return { filepath: json.filepath };\n } catch (err: any) {\n throw new Error(`Upload failed: ${err?.message ?? 'Unknown error'}`);\n }\n}","import {requireToken,secureFetchIt} from './../imports';\n\nexport async function removeFile(item: any): Promise<void> {\n const resp = await secureFetchIt( \"remove\", item, \"POST\", null, false,false,true) as any;\n if (!resp || resp === false || resp?.result === false) {\n throw new Error(`could not delete data: “${item.filename}”`);\n }\n \n}\n","import {removeFile} from './delete_select';\n\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function removeSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n alert(cb);\n await removeFile(cb);\n }\n}","\nimport {removeFile} from './delete_select'\nimport {alertit} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function removeRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n alertit(row)\n if (row && row?.id) await removeFile(row);\n}\n\n\n","import { secureFetchIt } from './../imports';\nimport type { ApiRow, FileItem } from './../imports';\n/** GET /secure-list */\nexport async function listFiles(setFiles: any = null): Promise<any> {\n /** ← your request already returns the raw array */\n const apiRows = await secureFetchIt(\"/list\", null, \"GET\", null, false, true) as ApiRow[]\n\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n}","import {FileItem,fetchSharePatch} from './../imports'\nexport function getToggleShare(file:any){\n if (file == true || file?.shareable == true){\n return false\n }\n return false\n}\nexport function updateFileShare(file:any){\n let updated: FileItem = file\n const boolIt = getToggleShare(updated)\n updated = { ...file, shareable: boolIt };\n return updated;\n}\n \n/**\n * Custom hook to toggle share settings on a file item\n */\nexport async function toggleShare(file:FileItem){\n\n const updated = updateFileShare(file)\n try {\n const resp = await fetchSharePatch(updated);\n \n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n}\n\n","import React from 'react';\nimport { secureFetchIt, useCallback, FileItem, ApiRow, alertit } from './../imports'\n/**\n * Custom hook that returns a memoized loadFiles callback\n */\nexport const useLoadFiles = (\n setLoading: React.Dispatch<React.SetStateAction<boolean>>,\n setError: React.Dispatch<React.SetStateAction<Error | null>>,\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n\n return useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n /** ← your request already returns the raw array */\n let apiRows = await secureFetchIt<ApiRow[]>(\n \"list\",\n null,\n \"GET\",\n ) as any;\n console.log(`all apiRows == ${JSON.stringify(apiRows)}`)\n if (apiRows?.result) {\n apiRows = apiRows.result\n }\n apiRows = apiRows as ApiRow[]\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n\n } catch (err) {\n setError(err instanceof Error ? err\n : new Error(\"Unknown error loading files\"));\n } finally {\n setLoading(false);\n }\n }, [setLoading, setError, setFiles]);\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useToggleShare = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n const updated: FileItem = { ...file, shareable: !file.shareable };\n if (!updated.shareable) {\n updated.needsPassword = false;\n }\n try {\n await fetchSharePatch(updated);\n setFiles((curr) =>\n curr.map((f) => (f.id === file.id ? updated : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const usePatchShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: any) => {\n\n\n const body: any = {\n id: file.id, // ← always send id\n };\n\n // now send whichever settings changed\n body.shareable = file.shareable;\n body.share_password = file.share_password ?? null;\n body.password_str = file.password_str ?? null;\n body.download_limit = file.download_limit ?? null;\n console.log(`file contents == ${JSON.stringify(body)}`)\n try {\n await fetchSharePatch(body);\n setFiles((curr) =>\n curr.map((f) => (f.id === body.id ? body : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\nexport default usePatchShareSettings;","// hooks/useSaveShareSettings.ts\nimport React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\nexport const useSaveShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (updated: any) => {\n await fetchSharePatch({\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password,\n password_str: updated.password_str,\n download_limit: updated.download_limit,\n });\n\n // optimistic UI update – identical to toggleShare\n setFiles(curr =>\n curr.map(f => (f.id === updated.id ? updated : f))\n );\n },\n [setFiles]\n );\n};\n","import React from 'react'\nimport { useCallback, FileItem, secureFetchIt, removeFile } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useDeleteFile = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n try {\n await removeFile(file)\n window.location.reload();\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import { useState, useEffect } from 'react';\nimport type {FileItem} from './../imports';\nimport { useLoadFiles } from './load';\nimport { useToggleShare } from './toggleShare';\nimport {useSaveShareSettings} from './useSaveShareSettings';\nimport { useDeleteFile } from './deleteFile';\n\nexport function useFiles() {\n const [files, setFiles] = useState<FileItem[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const loadCallback = useLoadFiles(setLoading, setError, setFiles);\n const toggleShareCallback = useToggleShare(setFiles);\n const patchShareSettingsCallback = useSaveShareSettings(setFiles);\n const deleteFileCallback = useDeleteFile(setFiles);\n\n useEffect(() => {\n loadCallback();\n }, [loadCallback]);\n\n return {\n files,\n loading,\n error,\n load: loadCallback,\n toggleShare: toggleShareCallback,\n patchShareSettings: patchShareSettingsCallback,\n deleteFile: deleteFileCallback,\n setFiles,\n setLoading,\n setError,\n \n };\n}\n","import type { FileRowProps } from './../imports';\nimport { useState, Button, currentUsername } from './../imports';\n\nexport default function FileRow({\n file,\n onDownload,\n onSettings,\n onToggleShare,\n onDelete,\n}: FileRowProps) {\n const isOwner =\n file.uploader_id?.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const downloadAllowed = isOwner || file.shareable;\n const [isDownloading, setIsDownloading] = useState(false);\n const [isTogglingShare, setIsTogglingShare] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Mimic WindowManagerApp's unsaved heuristic\n const looksUnsaved =\n file.filename.toLowerCase().startsWith('untitled') ||\n file.filename.includes('*');\n\n const handleDownload = async () => {\n setIsDownloading(true);\n try {\n await onDownload();\n } finally {\n setIsDownloading(false);\n }\n };\n\n const handleToggleShare = async () => {\n setIsTogglingShare(true);\n try {\n await onToggleShare();\n } finally {\n setIsTogglingShare(false);\n }\n };\n\n const handleDeleteFile = async () => {\n setIsDeleting(true);\n try {\n await onDelete();\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <tr className=\"wm-row transition-colors duration-75\">\n {/* Select checkbox */}\n <td className=\"wm-cell w-12 align-middle\">\n <input\n type=\"checkbox\"\n className=\"wm-checkbox\"\n aria-label={`Select ${file.filename}`}\n />\n </td>\n\n {/* Filename */}\n <td className={`wm-cell ${looksUnsaved ? 'unsaved' : ''}`}>\n {file.filename}\n </td>\n\n {/* Download button or lock */}\n <td className=\"wm-cell w-12 align-middle\">\n {downloadAllowed ? (\n <Button\n color=\"blue\"\n variant=\"secondary\"\n onClick={handleDownload}\n disabled={isDownloading}\n aria-label={`Download ${file.filename}`}\n className=\"wm-btn-link\"\n >\n {isDownloading ? 'Downloading...' : 'Download'}\n </Button>\n ) : (\n <span\n className=\"text-gray-500 text-lg\"\n aria-label=\"Download restricted\"\n >\n 🔒\n </span>\n )}\n </td>\n\n {/* Settings cog */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={() => {\n console.log('⚙︎ clicked', file.id);\n onSettings();\n }}\n aria-label=\"Open share settings\"\n className=\"wm-btn-icon text-lg\"\n >\n ⚙️\n </Button>\n )}\n </td>\n\n {/* Share toggle */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color={file.shareable ? 'blue' : 'gray'}\n variant={file.shareable ? 'primary' : 'secondary'}\n onClick={handleToggleShare}\n disabled={isTogglingShare}\n className=\"btn\"\n >\n {isTogglingShare\n ? 'Toggling...'\n : file.shareable\n ? 'Sharing'\n : 'Share'}\n </Button>\n )}\n </td>\n\n {/* Delete button */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={handleDeleteFile}\n disabled={isDeleting}\n className=\"wm-btn-icon text-lg\"\n >\n 🗑\n </Button>\n )}\n </td>\n <td className=\"wm-cell\">{file.download_count} / {file.download_limit ?? \"∞\"}</td>\n </tr>\n );\n}","import type {\n ShareModalProps\n} from './../../imports';\nimport {\n Button,\n Checkbox,\n Input,\n ClipboardIcon,\n createPortal,\n useEffect,\n useRef,\n useState,\n} from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n\nexport default function ShareModal({ file, onClose, onSave }: ShareModalProps) {\n const [fileId, setFileId] = useState<string | number | \"\">(\"\");\n const [enabled, setEnabled] = useState<any>(false);\n const [password, setPassword] = useState<any>(undefined);\n const [strPassword, setStrPassword] = useState<any>(\"\");\n const [download_limit, setDownloadLimit] = useState<number | \"\">(0);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const modalRef = useRef<HTMLDivElement>(null);\n\n const shareLink =\n file && enabled\n ? `https://abstractendeavors.com/api/secure-files/secure-download/${file.id}`\n : \"\";\n\n useEffect(() => {\n if (!file) return;\n setFileId(file.id);\n setEnabled(file.shareable);\n // load both values from the `file` prop\n setPassword(file.share_password);\n setStrPassword(file.password_str ?? \"\");\n setDownloadLimit(file.download_limit ?? 0);\n setError(\"\");\n\n modalRef.current?.focus();\n }, [file]);\n\n\n useEffect(() => {\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [onClose]);\n\n if (!file) return null;\n\n async function handleSave() {\n if (strPassword && strPassword.length < 4) {\n setError(\"Password must be at least 4 characters\");\n return;\n }\n setBusy(true);\n const save_dict = {\n id: fileId,\n shareable: enabled,\n needsPassword: !!strPassword,\n share_password: strPassword || null,\n password_str: strPassword || null,\n download_limit: download_limit === \"\" ? null : Number(download_limit),\n }\n\n try {\n const resp = await onSave(save_dict);\n\n onClose();\n } catch (err) {\n setError(`${err} Failed to save settings. Please try again.`);\n } finally {\n setBusy(false);\n }\n }\n\n return createPortal(\n <>\n <div\n className=\"modal-backdrop z-100\"\n onClick={(e) => e.target === e.currentTarget && onClose()}\n />\n <div className=\"modal-wrapper z-110\">\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className=\"modal-panel\"\n >\n <h3 className=\"form-title\">\n Share settings for <span className=\"font-mono\">{file.filename}</span>\n </h3>\n\n {error && <p className=\"form-error\">{error}</p>}\n\n <Checkbox\n label=\"Enable sharing\"\n checked={enabled}\n onChange={(e) => setEnabled(e.target.checked)}\n className=\"checkbox\"\n />\n\n {/* This is the admin-editable plain-text password */}\n <Input\n label=\"Password (optional)\"\n type=\"text\"\n value={strPassword}\n onChange={(e) => setStrPassword(e.target.value)}\n disabled={!enabled}\n className=\"form-input\"\n />\n <Input\n label=\"Download limit (0 = ∞)\"\n type=\"number\"\n min={0}\n value={download_limit}\n onChange={(e) =>\n setDownloadLimit(e.target.value === \"\" ? \"\" : Number(e.target.value))\n }\n disabled={!enabled}\n className=\"form-input\"\n />\n\n {enabled && shareLink && (\n <Input\n label=\"Share link\"\n readOnly\n value={shareLink}\n className=\"form-input\"\n trailing={\n <Button\n variant=\"icon\"\n className=\"btn-icon\"\n onClick={() => navigator.clipboard.writeText(shareLink)}\n >\n <ClipboardIcon className=\"h-5 w-5\" />\n </Button>\n }\n />\n )}\n\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button color=\"green\" variant=\"primary\" onClick={handleSave} disabled={busy} className=\"btn-primary\">\n {busy ? \"Saving…\" : \"Save\"}\n </Button>\n <Button variant=\"secondary\" onClick={onClose} disabled={busy} className=\"btn-secondary\">\n Cancel\n </Button>\n </div>\n </div>\n </div>\n </>,\n document.body\n );\n}","import type { FileItem, FileTableProps } from './../imports';\nimport React, { useState, useMemo, ChangeEvent } from 'react';\nimport {\n useFiles,\n downloadFile,\n Spinner,\n ShareModal,\n Input,\n Button,\n currentUsername\n} from './../imports';\nimport { downloadSelected } from './../../../file_utils';\n\n// Tree node type\ninterface FileNode {\n name: string;\n path: string;\n children: Map<string, FileNode>;\n files: FileItem[];\n}\n\n// Build a directory tree from a flat file list\nfunction buildTree(files: FileItem[]): FileNode {\n const root: FileNode = { name: '', path: '', children: new Map(), files: [] };\n files.forEach(file => {\n const parts = file.filepath.split('/');\n let node = root;\n parts.slice(0, -1).forEach((seg, idx) => {\n const subPath = parts.slice(0, idx + 1).join('/');\n if (!node.children.has(seg)) {\n node.children.set(seg, { name: seg, path: subPath, children: new Map(), files: [] });\n }\n node = node.children.get(seg)!;\n });\n node.files.push(file);\n });\n return root;\n}\n\n// Collect all file IDs under a node (recursive)\nfunction collectNodeIds(node: FileNode): Array<number | string> {\n let ids: Array<number | string> = [];\n node.files.forEach(f => ids.push(f.id));\n node.children.forEach(child => {\n ids = ids.concat(collectNodeIds(child));\n });\n return ids;\n}\n\nexport default function FileTable({\n files,\n loading,\n error,\n onToggleShare,\n onPatchShare,\n onDelete\n}: FileTableProps) {\n const { load } = useFiles();\n const [search, setSearch] = useState('');\n const [modalFile, setModalFile] = useState<FileItem | null>(null);\n const [selected, setSelected] = useState<Set<number | string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n\n // Upload controls\n const [uploadDir, setUploadDir] = useState<string>('');\n const [uploadFile, setUploadFile] = useState<File | null>(null);\n const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => setUploadFile(e.target.files?.[0] ?? null);\n const handleUpload = async () => {\n if (!uploadFile) return;\n const form = new FormData();\n form.append('file', uploadFile);\n const dirPart = uploadDir ? `${uploadDir}/` : '';\n const url = `/api/secure-files/upload/${dirPart}${encodeURIComponent(uploadFile.name)}`;\n await fetch(url, { method: 'POST', credentials: 'include', body: form });\n setUploadFile(null);\n load();\n };\n\n // Filter files by search term\n const filtered = useMemo(\n () => files.filter(f => f.filename.toLowerCase().includes(search.trim().toLowerCase())),\n [files, search]\n );\n // Build tree and directory paths list\n const tree = useMemo(() => buildTree(filtered), [filtered]);\n const allDirPaths = useMemo(() => {\n const paths: string[] = [''];\n function collect(node: FileNode) {\n node.children.forEach(child => {\n paths.push(child.path);\n collect(child);\n });\n }\n collect(tree);\n return paths;\n }, [tree]);\n\n // Selection & expand/collapse logic\n const allIds = filtered.map(f => f.id);\n const toggleAllSelection = () => selected.size < allIds.length ? setSelected(new Set(allIds)) : setSelected(new Set());\n const toggleDirOpen = (path: string) => setExpanded(prev => {\n const next = new Set(prev);\n next.has(path) ? next.delete(path) : next.add(path);\n return next;\n });\n const expandAll = () => setExpanded(new Set(allDirPaths));\n const collapseAll = () => setExpanded(new Set());\n\n // Recursive renderer: directory row with select-all checkbox, then its files, then subdirectories\n const renderNode = (node: FileNode, depth = 0): React.ReactNode[] => {\n const rows: React.ReactNode[] = [];\n if (node.path) {\n const isOpen = expanded.has(node.path);\n const nodeIds = collectNodeIds(node);\n const allSelected = nodeIds.every(id => selected.has(id));\n const someSelected = nodeIds.some(id => selected.has(id));\n rows.push(\n <tr key={node.path}>\n {/* Directory-level checkbox */}\n <td className=\"px-4 py-2 bg-gray-100\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={el => { if (el) el.indeterminate = !allSelected && someSelected; }}\n onChange={() => {\n setSelected(prev => {\n const next = new Set(prev);\n if (allSelected) {\n nodeIds.forEach(id => next.delete(id));\n } else {\n nodeIds.forEach(id => next.add(id));\n }\n return next;\n });\n }}\n />\n </td>\n {/* Directory label pushed left */}\n <td className=\"px-4 py-2 bg-gray-100 font-bold\" colSpan={5} style={{ textAlign: 'left' }}>\n {node.path}\n </td>\n {/* Expand/collapse ticker on right */}\n <td className=\"px-4 py-2 bg-gray-100 text-right\">\n <button onClick={() => toggleDirOpen(node.path)}>\n {isOpen ? '▾' : '▸'}\n </button>\n </td>\n </tr>\n );\n if (!isOpen) return rows;\n }\n // Render files in this directory\n node.files.sort((a, b) => a.filename.localeCompare(b.filename)).forEach(f => {\n const isOwner = f.uploader_id.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const canDownload = isOwner || f.shareable;\n rows.push(\n <tr key={f.id}>\n <td className=\"px-4 py-2\">\n <input\n type=\"checkbox\"\n checked={selected.has(f.id)}\n onChange={() => setSelected(prev => {\n const next = new Set(prev);\n next.has(f.id) ? next.delete(f.id) : next.add(f.id);\n return next;\n })}\n />\n </td>\n <td className=\"px-4 py-2\" style={{ paddingLeft: (depth + 1) * 20 }}>\n {f.filename}\n </td>\n <td className=\"px-4 py-2\">\n {canDownload ? <Button variant=\"secondary\" onClick={() => downloadFile(f)}>Download</Button> : <span>🔒</span>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => setModalFile(f)}>⚙️</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant={f.shareable ? 'primary' : 'secondary'} onClick={() => onToggleShare(f)}>{f.shareable ? 'Sharing' : 'Share'}</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => onDelete(f).then(load)}>🗑</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {f.download_count} / {f.download_limit ?? '∞'}\n </td>\n </tr>\n );\n });\n // Render subdirectories\n Array.from(node.children.values())\n .sort((a, b) => a.name.localeCompare(b.name))\n .forEach(child => rows.push(...renderNode(child, depth + 1)));\n return rows;\n };\n\n // Batch actions\n const handleDownloadAll = async () => {\n const inputs = filtered.filter(f => selected.has(f.id)).map(f => document.createElement('input'));\n inputs.forEach((cb, idx) => cb.value = filtered.filter(f => selected.has(f.id))[idx].filepath);\n await downloadSelected(inputs);\n };\n const handleDeleteAll = async () => { await onDelete(filtered.filter(f => selected.has(f.id))); setSelected(new Set()); await load(); };\n const handleShareAll = async () => { for (const f of filtered.filter(f => selected.has(f.id))) await onToggleShare(f); };\n\n if (loading) return <Spinner />;\n if (error) return <p className=\"text-red-600\">{error.message}</p>;\n\n return (\n <> \n\n\n {/* Search & actions */}\n <div className=\"mb-4 flex flex-col md:flex-row md:justify-between gap-4\">\n <Input label=\"Search files\" type=\"text\" value={search} onChange={e => setSearch(e.target.value)} placeholder=\"Enter filename…\" className=\"form-input flex-1\" />\n <div className=\"flex gap-2\">\n <Button onClick={expandAll} disabled={!allDirPaths.length}>Expand All</Button>\n <Button onClick={collapseAll} disabled={!allDirPaths.length}>Collapse All</Button>\n <Button onClick={handleDownloadAll} disabled={!selected.size}>Download Selected</Button>\n <Button color=\"gray\" onClick={handleDeleteAll} disabled={!selected.size}>Delete Selected</Button>\n <Button onClick={handleShareAll} disabled={!selected.size}>Share Selected</Button>\n </div>\n </div>\n\n {/* File tree table */}\n <div className=\"overflow-x-auto wm-container\">\n <table className=\"file-table w-full\">\n <thead className=\"wm-thead\">\n <tr>\n <th className=\"px-4 py-2 w-12\"><input type=\"checkbox\" checked={selected.size === filtered.length && filtered.length > 0} onChange={toggleAllSelection} /></th>\n <th className=\"px-4 py-2\">Filename</th>\n <th className=\"px-4 py-2\">Download</th>\n <th className=\"px-4 py-2\">Settings</th>\n <th className=\"px-4 py-2\">Share</th>\n <th className=\"px-4 py-2\">Delete</th>\n <th className=\"px-4 py-2\">Downloads</th>\n </tr>\n </thead>\n <tbody>{renderNode(tree)}</tbody>\n </table>\n </div>\n\n <ShareModal file={modalFile} onClose={() => setModalFile(null)} onSave={async patch => {\n if (!modalFile) return;\n const updated: FileItem = { ...modalFile, ...patch };\n await onPatchShare(updated);\n setModalFile(null);\n }} />\n </>\n );\n}\n","import React, {\n ChangeEvent,\n useRef,\n useState,\n useCallback,\n useEffect,\n} from 'react';\nimport {\n CloudArrowUpIcon,\n Button,\n uploadFiles,\n useFiles,\n currentUsername\n} from './../imports';\nimport type { QueuedFile, UploadProps } from './../imports';\n\nexport default function Upload({ onUploaded }: UploadProps) {\n const [queue, setQueue] = useState<QueuedFile[]>([]);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [drag, setDrag] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const [dirs, setDirs] = useState<string[]>([]);\n\n // — existing files → directory list —\n const { files, load } = useFiles();\n\n useEffect(() => {\n const dirSet = new Set<string>();\n files.forEach(f => {\n const parts = f.filepath.split('/');\n if (parts.length > 1) {\n parts.pop();\n dirSet.add(parts.join('/') + '/');\n }\n });\n setDirs(Array.from(dirSet).sort());\n }, [files]);\n\n // — directory selection state —\n const [uploadDir, setUploadDir] = useState<string>('');\n const [creatingNew, setCreatingNew] = useState(false);\n const [newDirName, setNewDirName] = useState('');\n\n // — queue logic —\n const enqueue = useCallback((files: QueuedFile[]) => {\n setQueue(prev => {\n const map = new Map(prev.map(q => [`${q.file.name}-${q.file.size}`, q]));\n files.forEach(q => map.set(`${q.file.name}-${q.file.size}`, q));\n return Array.from(map.values());\n });\n }, []);\n\n const extractFromDataTransfer = useCallback(\n async (dt: DataTransfer): Promise<QueuedFile[]> => {\n const out: QueuedFile[] = [];\n const walk = async (entry: any, path = \"\") => {\n if (!entry) return;\n if (entry.isFile) {\n const file: File = await new Promise(res => entry.file(res));\n out.push({ file, relPath: path, progress: 0 });\n } else if (entry.isDirectory) {\n const reader = entry.createReader();\n const entries: any[] = await new Promise(r => reader.readEntries(r));\n await Promise.all(entries.map(e => walk(e, `${path}${entry.name}/`)));\n }\n };\n await Promise.all(Array.from(dt.items).map(i => walk(i.webkitGetAsEntry())));\n return out;\n },\n []\n );\n\n const handleSelect = (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n const queued: any = files.map(f => ({\n file: f,\n relPath: (f as any).webkitRelativePath.replace(/[^/]*$/, \"\"),\n progress: 0,\n }));\n enqueue(queued);\n e.target.value = \"\";\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n const files = await extractFromDataTransfer(e.dataTransfer);\n enqueue(files.length ? files : []);\n setDrag(false);\n };\n\n const handleUploadAll = async () => {\n if (!queue.length) {\n setMessage(\"No files queued.\");\n return;\n }\n setBusy(true);\n setMessage(null);\n const targetDir = creatingNew\n ? (newDirName.trim().replace(/^\\/+|\\/+$/g, \"\") + \"/\")\n : uploadDir;\n try {\n for (const { file, relPath } of queue) {\n await uploadFiles(file, targetDir + relPath);\n setQueue(cur =>\n cur.map(item =>\n item.file === file ? { ...item, progress: 100 } : item\n )\n );\n }\n setQueue([]);\n await onUploaded();\n setMessage(\"Upload complete\");\n load();\n } catch {\n setMessage(\"Upload failed\");\n } finally {\n setBusy(false);\n }\n };\n\n // — directory selector handlers —\n const handleDirChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const v = e.target.value;\n if (v === \"__new__\") {\n setCreatingNew(true);\n setNewDirName(\"\");\n } else {\n setCreatingNew(false);\n setUploadDir(v);\n }\n };\n const acceptNewDir = () => {\n // normalize like before\n const cleanName = newDirName.trim().replace(/^\\/+|\\/+$/g, '');\n const normalized = `${uploadDir}${cleanName}/`;\n // ① add it to our dirs list if it isn't there already\n setDirs(prev => {\n if (prev.includes(normalized)) return prev;\n return [...prev, normalized].sort();\n });\n\n // ② select it & flip back to the <select>\n setUploadDir(normalized);\n setCreatingNew(false);\n setNewDirName('');\n };\n\n return (\n <div className=\"form-container max-w-2xl mx-auto\">\n {/* drop area */}\n <div\n className={`flex items-center border-2 border-dashed rounded-lg p-6 bg-white shadow-md space-x-4 transition-shadow duration-150\n ${drag ? 'border-indigo-500 bg-indigo-50 shadow-lg' : 'border-gray-300 hover:shadow-lg'}`}\n onClick={() => inputRef.current?.click()}\n onDragEnter={e => { e.preventDefault(); setDrag(true); }}\n onDragOver={e => e.preventDefault()}\n onDragLeave={() => setDrag(false)}\n onDrop={handleDrop}\n role=\"region\"\n aria-label=\"File upload area\"\n >\n <CloudArrowUpIcon\n style={{ width: 300, height: 300 }}\n className=\"text-gray-500 mb-3\"\n aria-hidden=\"true\"\n />\n <div className=\"flex-1\">\n <p className=\"text-base font-semibold text-gray-700\">\n Drag & drop files or folders here\n </p>\n {queue.length > 0 && (\n <p className=\"mt-1 text-sm text-gray-600\">\n {queue.length} item{queue.length > 1 && 's'} queued\n </p>\n )}\n </div>\n </div>\n\n {/* hidden file input */}\n <input\n ref={inputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n {...({ webkitdirectory: true, directory: '' } as any)}\n onChange={handleSelect}\n />\n\n {/* bottom controls */}\n <div className=\"flex items-center justify-between mt-4\">\n {/* directory selector / new dir input */}\n <div className=\"flex-1 mr-4\">\n {!creatingNew ? (\n <select\n value={uploadDir}\n onChange={handleDirChange}\n className=\"form-select w-full\"\n >\n {dirs.map(d => (\n <option key={d} value={d}>{d}</option>\n ))}\n <option value=\"__new__\">+ Create new directory…</option>\n </select>\n ) : (\n <div className=\"flex\">\n <input\n type=\"text\"\n value={newDirName}\n placeholder=\"new-folder-name\"\n onChange={e => setNewDirName(e.target.value)}\n onBlur={acceptNewDir}\n onKeyDown={e => e.key === 'Enter' && acceptNewDir()}\n className=\"form-input flex-1\"\n />\n <Button onClick={acceptNewDir} className=\"ml-2\">\n OK\n </Button>\n </div>\n )}\n </div>\n\n {/* upload button */}\n <Button\n color=\"blue\"\n variant=\"primary\"\n onClick={handleUploadAll}\n disabled={busy || !queue.length}\n >\n {busy ? 'Uploading…' : `Upload ${queue.length}`}\n </Button>\n </div>\n\n {message && (\n <p\n className={`text-center text-sm ${message.includes('failed') ? 'text-red-600' : 'text-gray-600'\n }`}\n role=\"alert\"\n >\n {message}\n </p>\n )}\n\n {/* queued list */}\n {queue.length > 0 && (\n <div className=\"wm-container mt-4\">\n <h3 className=\"mb-2 text-sm font-semibold text-gray-700\">Queued Files</h3>\n <ul className=\"max-h-64 space-y-4 overflow-y-auto\">\n {queue.map(({ file, relPath, progress }) => (\n <li key={`${file.name}-${file.size}`} className=\"space-y-1\">\n <div className=\"flex justify-between items-center\">\n <span className=\"truncate text-sm text-gray-800\">\n {relPath}{file.name}\n </span>\n <span className=\"text-xs text-gray-500\">{progress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2 overflow-hidden\">\n <div className=\"bg-indigo-600 h-2\" style={{ width: `${progress}%` }} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport type String = string | undefined | null; \nexport type Astring = any[] | string | undefined | null; \nexport type Trailing = React.ReactNode\nexport type ImportElem = {\n reaxlEle:React.InputHTMLAttributes<HTMLInputElement>;\n label?: String;\n trailing?:Trailing;\n className?: String; \n classNames?:Astring;\n}\n\n// Utility to convert input to array\nfunction ensure_list(obj: Astring | null | undefined): string[] {\n if (Array.isArray(obj)) return obj.filter(Boolean);\n if (typeof obj === 'string') return obj.split(' ').filter(Boolean);\n return [];\n}\n\n// Get list and length safely\nfunction getListAndLen(obj: Astring | null | undefined): { return_obj: string[]; ob_len: number } {\n const return_obj = ensure_list(obj);\n const ob_len = return_obj.length;\n return { return_obj, ob_len };\n}\n\n// Combine class names with defaults\nfunction combineClassNames(classNames: Astring = [], defaultClasses: Astring = ['form-group', 'form-label', 'flex', 'gap-2']): string[] {\n const { return_obj: inputClasses } = getListAndLen(classNames);\n const { return_obj: defaultClassList } = getListAndLen(defaultClasses);\n \n // Combine and remove duplicates\n const combined = [...new Set([...defaultClassList, ...inputClasses])];\n \n console.log(`Combined classes (length: ${combined.length}): ${combined.join(' ')}`);\n return combined;\n}\n\nexport function Button({\n children,\n color = 'gray',\n variant = 'default',\n className = '',\n ...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & {\n color?: 'gray' | 'green' | 'blue';\n variant?: 'default' | 'icon' | 'primary' | 'secondary';\n className?: string;\n}) {\n const variantClasses = {\n default: 'btn',\n icon: 'btn-icon',\n primary: 'btn-primary',\n secondary: 'btn-secondary',\n };\n\n const colorClasses = {\n gray: '',\n green: variant === 'primary' ? 'btn-success' : 'btn-secondary',\n blue: variant === 'primary' ? 'btn-primary' : 'btn-secondary',\n };\n\n const classes = combineClassNames([variantClasses[variant], colorClasses[color], className]);\n \n return (\n <button className={classes.join(' ')} {...rest}>\n {children}\n </button>\n );\n}\n\nexport function Checkbox({\n label,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['checkbox', 'wm-checkbox']);\n \n return (\n <label className={classes.join(' ')}>\n <input type=\"checkbox\" className=\"wm-checkbox\" {...rest} />\n {label && <span>{label}</span>}\n </label>\n );\n}\n\nexport function Input({\n label,\n trailing,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['form-group', 'flex', 'gap-2']);\n const inputClasses = combineClassNames(className, ['form-input']);\n \n return (\n <label className={classes.join(' ')}>\n {label && <span className=\"form-label\">{label}</span>}\n <div className=\"flex gap-2\">\n <input className={inputClasses.join(' ')} {...rest} />\n {trailing}\n </div>\n </label>\n );\n}\n\nexport function Spinner() {\n const classes = combineClassNames('animate-pulse');\n return <p className={classes.join(' ')}>Loading…</p>;\n}"],"names":["ForwardRef","useState","_jsxs","_jsx","Button","useEffect","_Fragment","Checkbox","Input","ClipboardIcon","Spinner","useRef","useCallback","CloudArrowUpIcon"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/@heroicons/react/24/outline/esm/ClipboardIcon.js","../node_modules/@heroicons/react/24/outline/esm/CloudArrowUpIcon.js","../src/file_utils/src/download_utils/src/trigger_download.ts","../src/file_utils/src/download_utils/src/direct_download.ts","../src/file_utils/src/download_utils/src/download_file.ts","../src/file_utils/src/download_utils/src/download_select.ts","../src/file_utils/src/download_utils/src/target_downloads.ts","../src/file_utils/src/select_utils/src/sync_header_checkbox.ts","../src/file_utils/src/select_utils/src/init_select_all.ts","../src/file_utils/src/select_utils/src/toggle_checkboxes.ts","../src/file_utils/src/upload_utils/src/patch_file_settings.ts","../src/file_utils/src/upload_utils/src/upload_file.ts","../src/file_utils/src/upload_utils/src/upload_files.ts","../src/file_utils/src/delete_utils/src/delete_select.ts","../src/file_utils/src/delete_utils/src/delete_selected.ts","../src/file_utils/src/delete_utils/src/delete_row.ts","../src/file_utils/src/list_utils/src/list_utils.ts","../src/file_utils/src/share_utils/src/share_utils.ts","../src/hooks/useFiles/src/load.ts","../src/hooks/useFiles/src/toggleShare.ts","../src/hooks/useFiles/src/patchShareSettings.ts","../src/hooks/useFiles/src/useSaveShareSettings.ts","../src/hooks/useFiles/src/deleteFile.ts","../src/hooks/useFiles/src/useFiles.ts","../src/FileHandlers/FileRow/src/row_utils.tsx","../src/FileHandlers/ShareModal/src/share_utils.tsx","../src/FileHandlers/FileTable/src/table_utils.tsx","../src/FileHandlers/Upload/src/upload_utils.tsx","../src/UI/index.tsx","../src/App/SecureFiles.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ClipboardIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClipboardIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction CloudArrowUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(CloudArrowUpIcon);\nexport default ForwardRef;","/** Helper function to trigger file download */\nexport function triggerDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = Object.assign(document.createElement(\"a\"), {\n href: url,\n download: filename,\n });\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n\n console.log(`✅ Successfully downloaded: ${filename}`);\n}\n","import {triggerDownload} from './trigger_download';\nimport {FileItem} from './../imports';\n/** Non-React “direct download” used by some old links (kept for parity) */\nexport async function directDownload(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/octet-stream\",\n },\n\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n const blob = await res.blob();\n triggerDownload(blob, item.filename);\n}\n","import { requireToken, secureFetchIt, FileItem } from './../imports';\nimport { triggerDownload } from './trigger_download';\nexport async function downloadFile(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n // Don’t over-constrain Accept; let server pick proper content-type\n // Accept: \"application/octet-stream\",\n },\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n\n // Stream-friendly: if your triggerDownload revokes URL immediately, wait a tick\n const blob = await res.blob();\n const name = item.filename || \"download\";\n triggerDownload(blob, name); // ensure this waits ~0-100ms before URL.revokeObjectURL\n}","import {requireToken,secureFetchIt,FileItem} from './../imports';\nimport {triggerDownload} from './trigger_download';\nexport async function downloadSelect(item: FileItem): Promise<void> {\n const token: string = requireToken();\n const body = item\n const headers = {\n Authorization: `Bearer ${token}`,\n Accept: \"application/octet-stream\",\n \"Content-Type\": \"application/json\"\n }\n const blob = await secureFetchIt( \"download\", body, \"POST\", headers, true, true) as Blob;\n\n\n\n if (!blob || blob.size === 0) {\n throw new Error(`Received empty file data for “${item.filename}”`);\n }\n\n triggerDownload(blob, item.filename);\n}\n","import {downloadSelect} from './download_select';\nimport type {FileItem} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function downloadRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n const filepath = cb.value;\n const filename = row?.children[1]?.textContent?.trim() || \"downloaded_file\";\n if (filepath) await downloadSelect({filepath,filename} as any);\n}\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function downloadSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n await downloadRow(cb);\n }\n}\n","/**\n * Classic “select all rows” logic (still handy in non-React views\n * such as the admin dashboard).\n */\nexport function syncHeaderCheckbox(): void {\n const all = document.querySelectorAll<HTMLInputElement>(\".file-checkbox\");\n const checked = document.querySelectorAll<HTMLInputElement>(\n \".file-checkbox:checked\"\n );\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n\n header.indeterminate =\n checked.length > 0 && checked.length < all.length;\n header.checked = checked.length === all.length;\n}\n\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Wire up header + row checkboxes once the table is in the DOM. */\nexport function initSelectAll(): void {\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n const btn = document.getElementById(\"select-all\") as HTMLButtonElement;\n\n // 1) header → toggle all\n header.addEventListener(\"change\", (e) => {\n const on = (e.target as HTMLInputElement).checked;\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => (cb.checked = on));\n });\n\n // 2) button → toggle all\n btn.addEventListener(\"click\", () => {\n const cbs = Array.from(\n document.querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n );\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n });\n\n // 3) row boxes → keep header state\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => cb.addEventListener(\"change\", syncHeaderCheckbox));\n\n syncHeaderCheckbox();\n}\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Utility for other screens: toggle a list of checkboxes on/off. */\nexport function toggleCheckboxes(cbs: HTMLInputElement[]): void {\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n}\n","\n/** Generic PATCH helper kept for other admin forms */\nexport async function patchFileSetting(\n fileId: string,\n field: string,\n value: unknown\n): Promise<Record<string, unknown>> {\n const res = await fetch(`/files/${fileId}/settings/${field}`, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ value }),\n });\n if (!res.ok) {\n const err = await res.json();\n throw new Error(err.error || res.statusText);\n }\n return (await res.json()) as Record<string, unknown>;\n}\n","import { secureFetchIt } from './../imports';\n/** Classic file-upload for the fallback HTML page. */\nexport async function uploadFile(file:any,subdir:any): Promise<any> {\n const fileInput = file || document.getElementById(\n \"file-browser\"\n ) as HTMLInputElement;\n const subdirInput = subdir || document.getElementById(\"subdir\") as HTMLInputElement;\n const banner = document.getElementById(\"banner\") as HTMLElement;\n\n if (!fileInput.files?.length) {\n alert(\"No file selected.\");\n return;\n }\n\n const formData = new FormData();\n formData.append(\"file\", fileInput.files[0]);\n formData.append(\"subdir\", subdirInput.value.trim());\n\n try {\n const json = await secureFetchIt(\"upload\", formData, \"POST\", null, false,false) as { filepath: string };\n banner.textContent = `Uploaded: ${json.filepath}`;\n fileInput.value = \"\";\n subdirInput.value = \"\";\n window.location.reload(); // no-op in React view\n } catch (err: any) {\n console.error(\"Upload failed\", err);\n }\n}\n","import { secureFetchIt } from './../imports';\n\ninterface UploadResponse {\n filepath: string;\n}\n\nexport async function uploadFiles(file: File, subdir: string = ''): Promise<UploadResponse> {\n if (!(file instanceof File)) {\n throw new Error('Invalid file: Must be a File object.');\n }\n if (typeof subdir !== 'string') {\n throw new Error('Invalid subdir: Must be a string.');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('subdir', subdir.trim());\n\n try {\n const json = await secureFetchIt('upload', formData, 'POST', null, false, false);\n \n if (!json || typeof json !== 'object') {\n throw new Error('Invalid response from server.');\n }\n \n if (!('filepath' in json) || typeof json.filepath !== 'string' || !json.filepath) {\n throw new Error('Server response missing or invalid filepath.');\n }\n\n return { filepath: json.filepath };\n } catch (err: any) {\n throw new Error(`Upload failed: ${err?.message ?? 'Unknown error'}`);\n }\n}","import {requireToken,secureFetchIt} from './../imports';\n\nexport async function removeFile(item: any): Promise<void> {\n const resp = await secureFetchIt( \"remove\", item, \"POST\", null, false,false,true) as any;\n if (!resp || resp === false || resp?.result === false) {\n throw new Error(`could not delete data: “${item.filename}”`);\n }\n \n}\n","import {removeFile} from './delete_select';\n\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function removeSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n alert(cb);\n await removeFile(cb);\n }\n}","\nimport {removeFile} from './delete_select'\nimport {alertit} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function removeRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n alertit(row)\n if (row && row?.id) await removeFile(row);\n}\n\n\n","import { secureFetchIt } from './../imports';\nimport type { ApiRow, FileItem } from './../imports';\n/** GET /secure-list */\nexport async function listFiles(setFiles: any = null): Promise<any> {\n /** ← your request already returns the raw array */\n const apiRows = await secureFetchIt(\"/list\", null, \"GET\", null, false, true) as ApiRow[]\n\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n}","import {FileItem,fetchSharePatch} from './../imports'\nexport function getToggleShare(file:any){\n if (file == true || file?.shareable == true){\n return false\n }\n return false\n}\nexport function updateFileShare(file:any){\n let updated: FileItem = file\n const boolIt = getToggleShare(updated)\n updated = { ...file, shareable: boolIt };\n return updated;\n}\n \n/**\n * Custom hook to toggle share settings on a file item\n */\nexport async function toggleShare(file:FileItem){\n\n const updated = updateFileShare(file)\n try {\n const resp = await fetchSharePatch(updated);\n \n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n}\n\n","import React from 'react';\nimport { secureFetchIt, useCallback, FileItem, ApiRow, alertit } from './../imports'\n/**\n * Custom hook that returns a memoized loadFiles callback\n */\nexport const useLoadFiles = (\n setLoading: React.Dispatch<React.SetStateAction<boolean>>,\n setError: React.Dispatch<React.SetStateAction<Error | null>>,\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n\n return useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n /** ← your request already returns the raw array */\n let apiRows = await secureFetchIt<ApiRow[]>(\n \"list\",\n null,\n \"GET\",\n ) as any;\n console.log(`all apiRows == ${JSON.stringify(apiRows)}`)\n if (apiRows?.result) {\n apiRows = apiRows.result\n }\n apiRows = apiRows as ApiRow[]\n /** map API → UI ------------------------------------------------ */\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n setFiles(rows);\n\n } catch (err) {\n setError(err instanceof Error ? err\n : new Error(\"Unknown error loading files\"));\n } finally {\n setLoading(false);\n }\n }, [setLoading, setError, setFiles]);\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useToggleShare = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n const updated: FileItem = { ...file, shareable: !file.shareable };\n if (!updated.shareable) {\n updated.needsPassword = false;\n }\n try {\n await fetchSharePatch(updated);\n setFiles((curr) =>\n curr.map((f) => (f.id === file.id ? updated : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const usePatchShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: any) => {\n\n\n const body: any = {\n id: file.id, // ← always send id\n };\n\n // now send whichever settings changed\n body.shareable = file.shareable;\n body.share_password = file.share_password ?? null;\n body.password_str = file.password_str ?? null;\n body.download_limit = file.download_limit ?? null;\n console.log(`file contents == ${JSON.stringify(body)}`)\n try {\n await fetchSharePatch(body);\n setFiles((curr) =>\n curr.map((f) => (f.id === body.id ? body : f))\n );\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\nexport default usePatchShareSettings;","// hooks/useSaveShareSettings.ts\nimport React from 'react';\nimport { useCallback, FileItem, fetchSharePatch } from './../imports';\n\nexport const useSaveShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (updated: any) => {\n await fetchSharePatch({\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password,\n password_str: updated.password_str,\n download_limit: updated.download_limit,\n });\n\n // optimistic UI update – identical to toggleShare\n setFiles(curr =>\n curr.map(f => (f.id === updated.id ? updated : f))\n );\n },\n [setFiles]\n );\n};\n","import React from 'react'\nimport { useCallback, FileItem, secureFetchIt, removeFile } from './../imports';\n\n/**\n * Custom hook to toggle share settings on a file item\n */\nexport const useDeleteFile = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>\n) => {\n return useCallback(\n async (file: FileItem) => {\n try {\n await removeFile(file)\n window.location.reload();\n } catch (err: any) {\n console.error('Failed to toggle share settings', err);\n // Optionally revert UI state or show an error message\n }\n },\n [setFiles]\n );\n};\n","import { useState, useEffect } from 'react';\nimport type {FileItem} from './../imports';\nimport { useLoadFiles } from './load';\nimport { useToggleShare } from './toggleShare';\nimport {useSaveShareSettings} from './useSaveShareSettings';\nimport { useDeleteFile } from './deleteFile';\n\nexport function useFiles() {\n const [files, setFiles] = useState<FileItem[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const loadCallback = useLoadFiles(setLoading, setError, setFiles);\n const toggleShareCallback = useToggleShare(setFiles);\n const patchShareSettingsCallback = useSaveShareSettings(setFiles);\n const deleteFileCallback = useDeleteFile(setFiles);\n\n useEffect(() => {\n loadCallback();\n }, [loadCallback]);\n\n return {\n files,\n loading,\n error,\n load: loadCallback,\n toggleShare: toggleShareCallback,\n patchShareSettings: patchShareSettingsCallback,\n deleteFile: deleteFileCallback,\n setFiles,\n setLoading,\n setError,\n \n };\n}\n","import type { FileRowProps } from './../imports';\nimport { useState, Button, currentUsername } from './../imports';\n\nexport default function FileRow({\n file,\n onDownload,\n onSettings,\n onToggleShare,\n onDelete,\n}: FileRowProps) {\n const isOwner =\n file.uploader_id?.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const downloadAllowed = isOwner || file.shareable;\n const [isDownloading, setIsDownloading] = useState(false);\n const [isTogglingShare, setIsTogglingShare] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Mimic WindowManagerApp's unsaved heuristic\n const looksUnsaved =\n file.filename.toLowerCase().startsWith('untitled') ||\n file.filename.includes('*');\n\n const handleDownload = async () => {\n setIsDownloading(true);\n try {\n await onDownload();\n } finally {\n setIsDownloading(false);\n }\n };\n\n const handleToggleShare = async () => {\n setIsTogglingShare(true);\n try {\n await onToggleShare();\n } finally {\n setIsTogglingShare(false);\n }\n };\n\n const handleDeleteFile = async () => {\n setIsDeleting(true);\n try {\n await onDelete();\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <tr className=\"wm-row transition-colors duration-75\">\n {/* Select checkbox */}\n <td className=\"wm-cell w-12 align-middle\">\n <input\n type=\"checkbox\"\n className=\"wm-checkbox\"\n aria-label={`Select ${file.filename}`}\n />\n </td>\n\n {/* Filename */}\n <td className={`wm-cell ${looksUnsaved ? 'unsaved' : ''}`}>\n {file.filename}\n </td>\n\n {/* Download button or lock */}\n <td className=\"wm-cell w-12 align-middle\">\n {downloadAllowed ? (\n <Button\n color=\"blue\"\n variant=\"secondary\"\n onClick={handleDownload}\n disabled={isDownloading}\n aria-label={`Download ${file.filename}`}\n className=\"wm-btn-link\"\n >\n {isDownloading ? 'Downloading...' : 'Download'}\n </Button>\n ) : (\n <span\n className=\"text-gray-500 text-lg\"\n aria-label=\"Download restricted\"\n >\n 🔒\n </span>\n )}\n </td>\n\n {/* Settings cog */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={() => {\n console.log('⚙︎ clicked', file.id);\n onSettings();\n }}\n aria-label=\"Open share settings\"\n className=\"wm-btn-icon text-lg\"\n >\n ⚙️\n </Button>\n )}\n </td>\n\n {/* Share toggle */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color={file.shareable ? 'blue' : 'gray'}\n variant={file.shareable ? 'primary' : 'secondary'}\n onClick={handleToggleShare}\n disabled={isTogglingShare}\n className=\"btn\"\n >\n {isTogglingShare\n ? 'Toggling...'\n : file.shareable\n ? 'Sharing'\n : 'Share'}\n </Button>\n )}\n </td>\n\n {/* Delete button */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={handleDeleteFile}\n disabled={isDeleting}\n className=\"wm-btn-icon text-lg\"\n >\n 🗑\n </Button>\n )}\n </td>\n <td className=\"wm-cell\">{file.download_count} / {file.download_limit ?? \"∞\"}</td>\n </tr>\n );\n}","import type {\n ShareModalProps\n} from './../../imports';\nimport {\n Button,\n Checkbox,\n Input,\n ClipboardIcon,\n createPortal,\n useEffect,\n useRef,\n useState,\n} from './../imports';\nimport { alertit } from '@putkoff/abstract-utilities'\n\nexport default function ShareModal({ file, onClose, onSave }: ShareModalProps) {\n const [fileId, setFileId] = useState<string | number | \"\">(\"\");\n const [enabled, setEnabled] = useState<any>(false);\n const [password, setPassword] = useState<any>(undefined);\n const [strPassword, setStrPassword] = useState<any>(\"\");\n const [download_limit, setDownloadLimit] = useState<number | \"\">(0);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const modalRef = useRef<HTMLDivElement>(null);\n\n const shareLink =\n file && enabled\n ? `https://abstractendeavors.com/api/secure-files/secure-download/${file.id}`\n : \"\";\n\n useEffect(() => {\n if (!file) return;\n setFileId(file.id);\n setEnabled(file.shareable);\n // load both values from the `file` prop\n setPassword(file.share_password);\n setStrPassword(file.password_str ?? \"\");\n setDownloadLimit(file.download_limit ?? 0);\n setError(\"\");\n\n modalRef.current?.focus();\n }, [file]);\n\n\n useEffect(() => {\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [onClose]);\n\n if (!file) return null;\n\n async function handleSave() {\n if (strPassword && strPassword.length < 4) {\n setError(\"Password must be at least 4 characters\");\n return;\n }\n setBusy(true);\n const save_dict = {\n id: fileId,\n shareable: enabled,\n needsPassword: !!strPassword,\n share_password: strPassword || null,\n password_str: strPassword || null,\n download_limit: download_limit === \"\" ? null : Number(download_limit),\n }\n\n try {\n const resp = await onSave(save_dict);\n\n onClose();\n } catch (err) {\n setError(`${err} Failed to save settings. Please try again.`);\n } finally {\n setBusy(false);\n }\n }\n\n return createPortal(\n <>\n <div\n className=\"modal-backdrop z-100\"\n onClick={(e) => e.target === e.currentTarget && onClose()}\n />\n <div className=\"modal-wrapper z-110\">\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className=\"modal-panel\"\n >\n <h3 className=\"form-title\">\n Share settings for <span className=\"font-mono\">{file.filename}</span>\n </h3>\n\n {error && <p className=\"form-error\">{error}</p>}\n\n <Checkbox\n label=\"Enable sharing\"\n checked={enabled}\n onChange={(e) => setEnabled(e.target.checked)}\n className=\"checkbox\"\n />\n\n {/* This is the admin-editable plain-text password */}\n <Input\n label=\"Password (optional)\"\n type=\"text\"\n value={strPassword}\n onChange={(e) => setStrPassword(e.target.value)}\n disabled={!enabled}\n className=\"form-input\"\n />\n <Input\n label=\"Download limit (0 = ∞)\"\n type=\"number\"\n min={0}\n value={download_limit}\n onChange={(e) =>\n setDownloadLimit(e.target.value === \"\" ? \"\" : Number(e.target.value))\n }\n disabled={!enabled}\n className=\"form-input\"\n />\n\n {enabled && shareLink && (\n <Input\n label=\"Share link\"\n readOnly\n value={shareLink}\n className=\"form-input\"\n trailing={\n <Button\n variant=\"icon\"\n className=\"btn-icon\"\n onClick={() => navigator.clipboard.writeText(shareLink)}\n >\n <ClipboardIcon className=\"h-5 w-5\" />\n </Button>\n }\n />\n )}\n\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button color=\"green\" variant=\"primary\" onClick={handleSave} disabled={busy} className=\"btn-primary\">\n {busy ? \"Saving…\" : \"Save\"}\n </Button>\n <Button variant=\"secondary\" onClick={onClose} disabled={busy} className=\"btn-secondary\">\n Cancel\n </Button>\n </div>\n </div>\n </div>\n </>,\n document.body\n );\n}","import type { FileItem, FileTableProps } from './../imports';\nimport React, { useState, useMemo, ChangeEvent } from 'react';\nimport {\n useFiles,\n downloadFile,\n Spinner,\n ShareModal,\n Input,\n Button,\n currentUsername\n} from './../imports';\nimport { downloadSelected } from './../../../file_utils';\n\n// Tree node type\ninterface FileNode {\n name: string;\n path: string;\n children: Map<string, FileNode>;\n files: FileItem[];\n}\n\n// Build a directory tree from a flat file list\nfunction buildTree(files: FileItem[]): FileNode {\n const root: FileNode = { name: '', path: '', children: new Map(), files: [] };\n files.forEach(file => {\n const parts = file.filepath.split('/');\n let node = root;\n parts.slice(0, -1).forEach((seg, idx) => {\n const subPath = parts.slice(0, idx + 1).join('/');\n if (!node.children.has(seg)) {\n node.children.set(seg, { name: seg, path: subPath, children: new Map(), files: [] });\n }\n node = node.children.get(seg)!;\n });\n node.files.push(file);\n });\n return root;\n}\n\n// Collect all file IDs under a node (recursive)\nfunction collectNodeIds(node: FileNode): Array<number | string> {\n let ids: Array<number | string> = [];\n node.files.forEach(f => ids.push(f.id));\n node.children.forEach(child => {\n ids = ids.concat(collectNodeIds(child));\n });\n return ids;\n}\n\nexport default function FileTable({\n files,\n loading,\n error,\n onToggleShare,\n onPatchShare,\n onDelete\n}: FileTableProps) {\n const { load } = useFiles();\n const [search, setSearch] = useState('');\n const [modalFile, setModalFile] = useState<FileItem | null>(null);\n const [selected, setSelected] = useState<Set<number | string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n\n // Upload controls\n const [uploadDir, setUploadDir] = useState<string>('');\n const [uploadFile, setUploadFile] = useState<File | null>(null);\n const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => setUploadFile(e.target.files?.[0] ?? null);\n const handleUpload = async () => {\n if (!uploadFile) return;\n const form = new FormData();\n form.append('file', uploadFile);\n const dirPart = uploadDir ? `${uploadDir}/` : '';\n const url = `/api/secure-files/upload/${dirPart}${encodeURIComponent(uploadFile.name)}`;\n await fetch(url, { method: 'POST', credentials: 'include', body: form });\n setUploadFile(null);\n load();\n };\n\n // Filter files by search term\n const filtered = useMemo(\n () => files.filter(f => f.filename.toLowerCase().includes(search.trim().toLowerCase())),\n [files, search]\n );\n // Build tree and directory paths list\n const tree = useMemo(() => buildTree(filtered), [filtered]);\n const allDirPaths = useMemo(() => {\n const paths: string[] = [''];\n function collect(node: FileNode) {\n node.children.forEach(child => {\n paths.push(child.path);\n collect(child);\n });\n }\n collect(tree);\n return paths;\n }, [tree]);\n\n // Selection & expand/collapse logic\n const allIds = filtered.map(f => f.id);\n const toggleAllSelection = () => selected.size < allIds.length ? setSelected(new Set(allIds)) : setSelected(new Set());\n const toggleDirOpen = (path: string) => setExpanded(prev => {\n const next = new Set(prev);\n next.has(path) ? next.delete(path) : next.add(path);\n return next;\n });\n const expandAll = () => setExpanded(new Set(allDirPaths));\n const collapseAll = () => setExpanded(new Set());\n\n // Recursive renderer: directory row with select-all checkbox, then its files, then subdirectories\n const renderNode = (node: FileNode, depth = 0): React.ReactNode[] => {\n const rows: React.ReactNode[] = [];\n if (node.path) {\n const isOpen = expanded.has(node.path);\n const nodeIds = collectNodeIds(node);\n const allSelected = nodeIds.every(id => selected.has(id));\n const someSelected = nodeIds.some(id => selected.has(id));\n rows.push(\n <tr key={node.path}>\n {/* Directory-level checkbox */}\n <td className=\"px-4 py-2 bg-gray-100\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={el => { if (el) el.indeterminate = !allSelected && someSelected; }}\n onChange={() => {\n setSelected(prev => {\n const next = new Set(prev);\n if (allSelected) {\n nodeIds.forEach(id => next.delete(id));\n } else {\n nodeIds.forEach(id => next.add(id));\n }\n return next;\n });\n }}\n />\n </td>\n {/* Directory label pushed left */}\n <td className=\"px-4 py-2 bg-gray-100 font-bold\" colSpan={5} style={{ textAlign: 'left' }}>\n {node.path}\n </td>\n {/* Expand/collapse ticker on right */}\n <td className=\"px-4 py-2 bg-gray-100 text-right\">\n <button onClick={() => toggleDirOpen(node.path)}>\n {isOpen ? '▾' : '▸'}\n </button>\n </td>\n </tr>\n );\n if (!isOpen) return rows;\n }\n // Render files in this directory\n node.files.sort((a, b) => a.filename.localeCompare(b.filename)).forEach(f => {\n const isOwner = f.uploader_id.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const canDownload = isOwner || f.shareable;\n rows.push(\n <tr key={f.id}>\n <td className=\"px-4 py-2\">\n <input\n type=\"checkbox\"\n checked={selected.has(f.id)}\n onChange={() => setSelected(prev => {\n const next = new Set(prev);\n next.has(f.id) ? next.delete(f.id) : next.add(f.id);\n return next;\n })}\n />\n </td>\n <td className=\"px-4 py-2\" style={{ paddingLeft: (depth + 1) * 20 }}>\n {f.filename}\n </td>\n <td className=\"px-4 py-2\">\n {canDownload ? <Button variant=\"secondary\" onClick={() => downloadFile(f)}>Download</Button> : <span>🔒</span>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => setModalFile(f)}>⚙️</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant={f.shareable ? 'primary' : 'secondary'} onClick={() => onToggleShare(f)}>{f.shareable ? 'Sharing' : 'Share'}</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => onDelete(f).then(load)}>🗑</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {f.download_count} / {f.download_limit ?? '∞'}\n </td>\n </tr>\n );\n });\n // Render subdirectories\n Array.from(node.children.values())\n .sort((a, b) => a.name.localeCompare(b.name))\n .forEach(child => rows.push(...renderNode(child, depth + 1)));\n return rows;\n };\n\n // Batch actions\n const handleDownloadAll = async () => {\n const inputs = filtered.filter(f => selected.has(f.id)).map(f => document.createElement('input'));\n inputs.forEach((cb, idx) => cb.value = filtered.filter(f => selected.has(f.id))[idx].filepath);\n await downloadSelected(inputs);\n };\n const handleDeleteAll = async () => { await onDelete(filtered.filter(f => selected.has(f.id))); setSelected(new Set()); await load(); };\n const handleShareAll = async () => { for (const f of filtered.filter(f => selected.has(f.id))) await onToggleShare(f); };\n\n if (loading) return <Spinner />;\n if (error) return <p className=\"text-red-600\">{error.message}</p>;\n\n return (\n <> \n\n\n {/* Search & actions */}\n <div className=\"mb-4 flex flex-col md:flex-row md:justify-between gap-4\">\n <Input label=\"Search files\" type=\"text\" value={search} onChange={e => setSearch(e.target.value)} placeholder=\"Enter filename…\" className=\"form-input flex-1\" />\n <div className=\"flex gap-2\">\n <Button onClick={expandAll} disabled={!allDirPaths.length}>Expand All</Button>\n <Button onClick={collapseAll} disabled={!allDirPaths.length}>Collapse All</Button>\n <Button onClick={handleDownloadAll} disabled={!selected.size}>Download Selected</Button>\n <Button color=\"gray\" onClick={handleDeleteAll} disabled={!selected.size}>Delete Selected</Button>\n <Button onClick={handleShareAll} disabled={!selected.size}>Share Selected</Button>\n </div>\n </div>\n\n {/* File tree table */}\n <div className=\"overflow-x-auto wm-container\">\n <table className=\"file-table w-full\">\n <thead className=\"wm-thead\">\n <tr>\n <th className=\"px-4 py-2 w-12\"><input type=\"checkbox\" checked={selected.size === filtered.length && filtered.length > 0} onChange={toggleAllSelection} /></th>\n <th className=\"px-4 py-2\">Filename</th>\n <th className=\"px-4 py-2\">Download</th>\n <th className=\"px-4 py-2\">Settings</th>\n <th className=\"px-4 py-2\">Share</th>\n <th className=\"px-4 py-2\">Delete</th>\n <th className=\"px-4 py-2\">Downloads</th>\n </tr>\n </thead>\n <tbody>{renderNode(tree)}</tbody>\n </table>\n </div>\n\n <ShareModal file={modalFile} onClose={() => setModalFile(null)} onSave={async patch => {\n if (!modalFile) return;\n const updated: FileItem = { ...modalFile, ...patch };\n await onPatchShare(updated);\n setModalFile(null);\n }} />\n </>\n );\n}\n","import React, {\n ChangeEvent,\n useRef,\n useState,\n useCallback,\n useEffect,\n} from 'react';\nimport {\n CloudArrowUpIcon,\n Button,\n uploadFiles,\n useFiles,\n currentUsername\n} from './../imports';\nimport type { QueuedFile, UploadProps } from './../imports';\n\nexport default function Upload({ onUploaded }: UploadProps) {\n const [queue, setQueue] = useState<QueuedFile[]>([]);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [drag, setDrag] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const [dirs, setDirs] = useState<string[]>([]);\n\n // — existing files → directory list —\n const { files, load } = useFiles();\n\n useEffect(() => {\n const dirSet = new Set<string>();\n files.forEach(f => {\n const parts = f.filepath.split('/');\n if (parts.length > 1) {\n parts.pop();\n dirSet.add(parts.join('/') + '/');\n }\n });\n setDirs(Array.from(dirSet).sort());\n }, [files]);\n\n // — directory selection state —\n const [uploadDir, setUploadDir] = useState<string>('');\n const [creatingNew, setCreatingNew] = useState(false);\n const [newDirName, setNewDirName] = useState('');\n\n // — queue logic —\n const enqueue = useCallback((files: QueuedFile[]) => {\n setQueue(prev => {\n const map = new Map(prev.map(q => [`${q.file.name}-${q.file.size}`, q]));\n files.forEach(q => map.set(`${q.file.name}-${q.file.size}`, q));\n return Array.from(map.values());\n });\n }, []);\n\n const extractFromDataTransfer = useCallback(\n async (dt: DataTransfer): Promise<QueuedFile[]> => {\n const out: QueuedFile[] = [];\n const walk = async (entry: any, path = \"\") => {\n if (!entry) return;\n if (entry.isFile) {\n const file: File = await new Promise(res => entry.file(res));\n out.push({ file, relPath: path, progress: 0 });\n } else if (entry.isDirectory) {\n const reader = entry.createReader();\n const entries: any[] = await new Promise(r => reader.readEntries(r));\n await Promise.all(entries.map(e => walk(e, `${path}${entry.name}/`)));\n }\n };\n await Promise.all(Array.from(dt.items).map(i => walk(i.webkitGetAsEntry())));\n return out;\n },\n []\n );\n\n const handleSelect = (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n const queued: any = files.map(f => ({\n file: f,\n relPath: (f as any).webkitRelativePath.replace(/[^/]*$/, \"\"),\n progress: 0,\n }));\n enqueue(queued);\n e.target.value = \"\";\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n const files = await extractFromDataTransfer(e.dataTransfer);\n enqueue(files.length ? files : []);\n setDrag(false);\n };\n\n const handleUploadAll = async () => {\n if (!queue.length) {\n setMessage(\"No files queued.\");\n return;\n }\n setBusy(true);\n setMessage(null);\n const targetDir = creatingNew\n ? (newDirName.trim().replace(/^\\/+|\\/+$/g, \"\") + \"/\")\n : uploadDir;\n try {\n for (const { file, relPath } of queue) {\n await uploadFiles(file, targetDir + relPath);\n setQueue(cur =>\n cur.map(item =>\n item.file === file ? { ...item, progress: 100 } : item\n )\n );\n }\n setQueue([]);\n await onUploaded();\n setMessage(\"Upload complete\");\n load();\n } catch {\n setMessage(\"Upload failed\");\n } finally {\n setBusy(false);\n }\n };\n\n // — directory selector handlers —\n const handleDirChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const v = e.target.value;\n if (v === \"__new__\") {\n setCreatingNew(true);\n setNewDirName(\"\");\n } else {\n setCreatingNew(false);\n setUploadDir(v);\n }\n };\n const acceptNewDir = () => {\n // normalize like before\n const cleanName = newDirName.trim().replace(/^\\/+|\\/+$/g, '');\n const normalized = `${uploadDir}${cleanName}/`;\n // ① add it to our dirs list if it isn't there already\n setDirs(prev => {\n if (prev.includes(normalized)) return prev;\n return [...prev, normalized].sort();\n });\n\n // ② select it & flip back to the <select>\n setUploadDir(normalized);\n setCreatingNew(false);\n setNewDirName('');\n };\n\n return (\n <div className=\"form-container max-w-2xl mx-auto\">\n {/* drop area */}\n <div\n className={`flex items-center border-2 border-dashed rounded-lg p-6 bg-white shadow-md space-x-4 transition-shadow duration-150\n ${drag ? 'border-indigo-500 bg-indigo-50 shadow-lg' : 'border-gray-300 hover:shadow-lg'}`}\n onClick={() => inputRef.current?.click()}\n onDragEnter={e => { e.preventDefault(); setDrag(true); }}\n onDragOver={e => e.preventDefault()}\n onDragLeave={() => setDrag(false)}\n onDrop={handleDrop}\n role=\"region\"\n aria-label=\"File upload area\"\n >\n <CloudArrowUpIcon\n style={{ width: 300, height: 300 }}\n className=\"text-gray-500 mb-3\"\n aria-hidden=\"true\"\n />\n <div className=\"flex-1\">\n <p className=\"text-base font-semibold text-gray-700\">\n Drag & drop files or folders here\n </p>\n {queue.length > 0 && (\n <p className=\"mt-1 text-sm text-gray-600\">\n {queue.length} item{queue.length > 1 && 's'} queued\n </p>\n )}\n </div>\n </div>\n\n {/* hidden file input */}\n <input\n ref={inputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n {...({ webkitdirectory: true, directory: '' } as any)}\n onChange={handleSelect}\n />\n\n {/* bottom controls */}\n <div className=\"flex items-center justify-between mt-4\">\n {/* directory selector / new dir input */}\n <div className=\"flex-1 mr-4\">\n {!creatingNew ? (\n <select\n value={uploadDir}\n onChange={handleDirChange}\n className=\"form-select w-full\"\n >\n {dirs.map(d => (\n <option key={d} value={d}>{d}</option>\n ))}\n <option value=\"__new__\">+ Create new directory…</option>\n </select>\n ) : (\n <div className=\"flex\">\n <input\n type=\"text\"\n value={newDirName}\n placeholder=\"new-folder-name\"\n onChange={e => setNewDirName(e.target.value)}\n onBlur={acceptNewDir}\n onKeyDown={e => e.key === 'Enter' && acceptNewDir()}\n className=\"form-input flex-1\"\n />\n <Button onClick={acceptNewDir} className=\"ml-2\">\n OK\n </Button>\n </div>\n )}\n </div>\n\n {/* upload button */}\n <Button\n color=\"blue\"\n variant=\"primary\"\n onClick={handleUploadAll}\n disabled={busy || !queue.length}\n >\n {busy ? 'Uploading…' : `Upload ${queue.length}`}\n </Button>\n </div>\n\n {message && (\n <p\n className={`text-center text-sm ${message.includes('failed') ? 'text-red-600' : 'text-gray-600'\n }`}\n role=\"alert\"\n >\n {message}\n </p>\n )}\n\n {/* queued list */}\n {queue.length > 0 && (\n <div className=\"wm-container mt-4\">\n <h3 className=\"mb-2 text-sm font-semibold text-gray-700\">Queued Files</h3>\n <ul className=\"max-h-64 space-y-4 overflow-y-auto\">\n {queue.map(({ file, relPath, progress }) => (\n <li key={`${file.name}-${file.size}`} className=\"space-y-1\">\n <div className=\"flex justify-between items-center\">\n <span className=\"truncate text-sm text-gray-800\">\n {relPath}{file.name}\n </span>\n <span className=\"text-xs text-gray-500\">{progress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2 overflow-hidden\">\n <div className=\"bg-indigo-600 h-2\" style={{ width: `${progress}%` }} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nexport type String = string | undefined | null; \nexport type Astring = any[] | string | undefined | null; \nexport type Trailing = React.ReactNode\nexport type ImportElem = {\n reaxlEle:React.InputHTMLAttributes<HTMLInputElement>;\n label?: String;\n trailing?:Trailing;\n className?: String; \n classNames?:Astring;\n}\n\n// Utility to convert input to array\nfunction ensure_list(obj: Astring | null | undefined): string[] {\n if (Array.isArray(obj)) return obj.filter(Boolean);\n if (typeof obj === 'string') return obj.split(' ').filter(Boolean);\n return [];\n}\n\n// Get list and length safely\nfunction getListAndLen(obj: Astring | null | undefined): { return_obj: string[]; ob_len: number } {\n const return_obj = ensure_list(obj);\n const ob_len = return_obj.length;\n return { return_obj, ob_len };\n}\n\n// Combine class names with defaults\nfunction combineClassNames(classNames: Astring = [], defaultClasses: Astring = ['form-group', 'form-label', 'flex', 'gap-2']): string[] {\n const { return_obj: inputClasses } = getListAndLen(classNames);\n const { return_obj: defaultClassList } = getListAndLen(defaultClasses);\n \n // Combine and remove duplicates\n const combined = [...new Set([...defaultClassList, ...inputClasses])];\n \n console.log(`Combined classes (length: ${combined.length}): ${combined.join(' ')}`);\n return combined;\n}\n\nexport function Button({\n children,\n color = 'gray',\n variant = 'default',\n className = '',\n ...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & {\n color?: 'gray' | 'green' | 'blue';\n variant?: 'default' | 'icon' | 'primary' | 'secondary';\n className?: string;\n}) {\n const variantClasses = {\n default: 'btn',\n icon: 'btn-icon',\n primary: 'btn-primary',\n secondary: 'btn-secondary',\n };\n\n const colorClasses = {\n gray: '',\n green: variant === 'primary' ? 'btn-success' : 'btn-secondary',\n blue: variant === 'primary' ? 'btn-primary' : 'btn-secondary',\n };\n\n const classes = combineClassNames([variantClasses[variant], colorClasses[color], className]);\n \n return (\n <button className={classes.join(' ')} {...rest}>\n {children}\n </button>\n );\n}\n\nexport function Checkbox({\n label,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['checkbox', 'wm-checkbox']);\n \n return (\n <label className={classes.join(' ')}>\n <input type=\"checkbox\" className=\"wm-checkbox\" {...rest} />\n {label && <span>{label}</span>}\n </label>\n );\n}\n\nexport function Input({\n label,\n trailing,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['form-group', 'flex', 'gap-2']);\n const inputClasses = combineClassNames(className, ['form-input']);\n \n return (\n <label className={classes.join(' ')}>\n {label && <span className=\"form-label\">{label}</span>}\n <div className=\"flex gap-2\">\n <input className={inputClasses.join(' ')} {...rest} />\n {trailing}\n </div>\n </label>\n );\n}\n\nexport function Spinner() {\n const classes = combineClassNames('animate-pulse');\n return <p className={classes.join(' ')}>Loading…</p>;\n}","// src/App.tsx\n// src/index.tsx\nimport './../styles/SecureFiles/index.css';\nimport React from \"react\";\nimport {\n FileTable,\n Upload\n} from \"./../FileHandlers\";\nimport { useFiles } from './../hooks'\nimport {\n getToken, // ⬅️ use the *non-throwing* helper\n isTokenExpired,\n useState\n} from \"@putkoff/abstract-utilities\";\nfunction checkTokenValid() {\n const tok = getToken();\n return !!tok && !isTokenExpired(tok);\n}\nconst SecureFiles: React.FC = () => {\n const [loggedIn, setLoggedIn] = useState(checkTokenValid());\n const filesHook = useFiles(); // ← one single hook instance\n return (\n <>\n {/* pass the same load & file‐list into both children */}\n <Upload onUploaded={filesHook.load} />\n <FileTable\n files={filesHook.files}\n loading={filesHook.loading}\n error={filesHook.error}\n onDownload={filesHook.toggleShare} // or downloadFile\n onToggleShare={filesHook.toggleShare}\n onPatchShare={filesHook.patchShareSettings}\n onDelete={filesHook.deleteFile}\n />\n\n </>\n )\n}\n\nexport default SecureFiles;"],"names":["ForwardRef","useState","_jsxs","_jsx","Button","useEffect","_Fragment","Checkbox","Input","ClipboardIcon","Spinner","useRef","useCallback","CloudArrowUpIcon"],"mappings":"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","x_google_ignoreList":[0,1]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@putkoff/abstract-securefiles",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "A reusable Secure file system",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  // src/App.tsx
2
2
  // src/index.tsx
3
- import './../styles/SecureFiles';
3
+ import './../styles/SecureFiles/index.css';
4
4
  import React from "react";
5
5
  import {
6
6
  FileTable,
package/src/index.ts CHANGED
@@ -4,4 +4,5 @@ export * from './file_utils';
4
4
  export * from './hooks';
5
5
  export * from './UI';
6
6
  export * from './types';
7
- export * from './styles';
7
+ export * from './styles';
8
+ export { SecureFiles } from './App'