@putkoff/abstract-securefiles 0.0.33 → 0.0.34

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.
Files changed (181) hide show
  1. package/css.d.ts +0 -0
  2. package/dist/App/SecureFiles.d.ts +4 -0
  3. package/dist/App/index.d.ts +1 -0
  4. package/dist/FileHandlers/FileRow/imports.d.ts +2 -0
  5. package/dist/FileHandlers/FileRow/index.d.ts +1 -0
  6. package/dist/FileHandlers/FileRow/src/index.d.ts +1 -0
  7. package/dist/FileHandlers/FileRow/src/row_utils.d.ts +2 -0
  8. package/dist/FileHandlers/FileTable/imports.d.ts +4 -0
  9. package/dist/FileHandlers/FileTable/index.d.ts +1 -0
  10. package/dist/FileHandlers/FileTable/src/index.d.ts +1 -0
  11. package/dist/FileHandlers/FileTable/src/table_utils.d.ts +2 -0
  12. package/dist/FileHandlers/ShareModal/imports.d.ts +2 -0
  13. package/dist/FileHandlers/ShareModal/index.d.ts +1 -0
  14. package/dist/FileHandlers/ShareModal/src/index.d.ts +1 -0
  15. package/dist/FileHandlers/ShareModal/src/share_utils.d.ts +2 -0
  16. package/dist/FileHandlers/Upload/imports.d.ts +2 -0
  17. package/dist/FileHandlers/Upload/index.d.ts +1 -0
  18. package/dist/FileHandlers/Upload/src/index.d.ts +2 -0
  19. package/dist/FileHandlers/Upload/src/upload_utils.d.ts +2 -0
  20. package/dist/FileHandlers/imports.d.ts +4 -0
  21. package/dist/FileHandlers/index.d.ts +4 -0
  22. package/dist/UI/index.d.ts +28 -0
  23. package/dist/file_utils/imports.d.ts +2 -0
  24. package/dist/file_utils/index.d.ts +1 -0
  25. package/dist/file_utils/src/cookieFetch.d.ts +22 -0
  26. package/dist/file_utils/src/delete_utils/imports.d.ts +1 -0
  27. package/dist/file_utils/src/delete_utils/index.d.ts +1 -0
  28. package/dist/file_utils/src/delete_utils/src/delete_row.d.ts +2 -0
  29. package/dist/file_utils/src/delete_utils/src/delete_select.d.ts +4 -0
  30. package/dist/file_utils/src/delete_utils/src/delete_selected.d.ts +2 -0
  31. package/dist/file_utils/src/delete_utils/src/index.d.ts +3 -0
  32. package/dist/file_utils/src/download_utils/imports.d.ts +2 -0
  33. package/dist/file_utils/src/download_utils/index.d.ts +1 -0
  34. package/dist/file_utils/src/download_utils/src/direct_download.d.ts +3 -0
  35. package/dist/file_utils/src/download_utils/src/download_file.d.ts +6 -0
  36. package/dist/file_utils/src/download_utils/src/download_select.d.ts +2 -0
  37. package/dist/file_utils/src/download_utils/src/index.d.ts +5 -0
  38. package/dist/file_utils/src/download_utils/src/target_downloads.d.ts +4 -0
  39. package/dist/file_utils/src/download_utils/src/trigger_download.d.ts +2 -0
  40. package/dist/file_utils/src/imports.d.ts +2 -0
  41. package/dist/file_utils/src/index.d.ts +6 -0
  42. package/dist/file_utils/src/list_utils/imports.d.ts +2 -0
  43. package/dist/file_utils/src/list_utils/index.d.ts +1 -0
  44. package/dist/file_utils/src/list_utils/src/index.d.ts +1 -0
  45. package/dist/file_utils/src/list_utils/src/list_utils.d.ts +2 -0
  46. package/dist/file_utils/src/select_utils/index.d.ts +1 -0
  47. package/dist/file_utils/src/select_utils/src/index.d.ts +3 -0
  48. package/dist/file_utils/src/select_utils/src/init_select_all.d.ts +2 -0
  49. package/dist/file_utils/src/select_utils/src/sync_header_checkbox.d.ts +5 -0
  50. package/dist/file_utils/src/select_utils/src/toggle_checkboxes.d.ts +2 -0
  51. package/dist/file_utils/src/share_utils/imports.d.ts +2 -0
  52. package/dist/file_utils/src/share_utils/index.d.ts +1 -0
  53. package/dist/file_utils/src/share_utils/src/index.d.ts +1 -0
  54. package/dist/file_utils/src/share_utils/src/share_utils.d.ts +7 -0
  55. package/{package.tmp.json → dist/file_utils/src/upload_utils/imports.d.ts} +0 -0
  56. package/dist/file_utils/src/upload_utils/index.d.ts +1 -0
  57. package/dist/file_utils/src/upload_utils/src/index.d.ts +3 -0
  58. package/dist/file_utils/src/upload_utils/src/patch_file_settings.d.ts +2 -0
  59. package/dist/file_utils/src/upload_utils/src/upload_file.d.ts +2 -0
  60. package/dist/file_utils/src/upload_utils/src/upload_files.d.ts +5 -0
  61. package/dist/hooks/imports.d.ts +3 -0
  62. package/dist/hooks/index.d.ts +1 -0
  63. package/dist/hooks/useFiles/imports.d.ts +2 -0
  64. package/dist/hooks/useFiles/index.d.ts +1 -0
  65. package/dist/hooks/useFiles/src/deleteFile.d.ts +3 -0
  66. package/dist/hooks/useFiles/src/index.d.ts +6 -0
  67. package/dist/hooks/useFiles/src/load.d.ts +3 -0
  68. package/dist/hooks/useFiles/src/patchShareSettings.d.ts +3 -0
  69. package/dist/hooks/useFiles/src/toggleShare.d.ts +3 -0
  70. package/dist/hooks/useFiles/src/useFiles.d.ts +13 -0
  71. package/dist/hooks/useFiles/src/useSaveShareSettings.d.ts +7 -0
  72. package/dist/imports.d.ts +7 -0
  73. package/dist/index.cjs +992 -8
  74. package/dist/index.cjs.map +1 -1
  75. package/dist/index.css +1 -1
  76. package/dist/index.d.ts +8 -1
  77. package/dist/index.js +945 -10
  78. package/dist/index.js.map +1 -1
  79. package/dist/styles/index.d.ts +1 -0
  80. package/dist/types/index.d.ts +1 -0
  81. package/dist/types/src/index.d.ts +1 -0
  82. package/dist/types/src/types.d.ts +75 -0
  83. package/index.ts +0 -0
  84. package/package.json +4 -4
  85. package/postcss.config.cjs +0 -0
  86. package/rollup.config.js +0 -0
  87. package/rollup.config.mjs +0 -0
  88. package/src/App/SecureFiles.tsx +45 -0
  89. package/src/App/index.ts +1 -0
  90. package/src/FileHandlers/FileRow/imports.ts +2 -0
  91. package/src/FileHandlers/FileRow/index.ts +1 -0
  92. package/src/FileHandlers/FileRow/src/index.ts +1 -0
  93. package/src/FileHandlers/FileRow/src/row_utils.tsx +143 -0
  94. package/src/FileHandlers/FileTable/imports.ts +16 -0
  95. package/src/FileHandlers/FileTable/index.ts +1 -0
  96. package/src/FileHandlers/FileTable/src/index.ts +1 -0
  97. package/src/FileHandlers/FileTable/src/table_utils.tsx +251 -0
  98. package/src/FileHandlers/ShareModal/imports.ts +2 -0
  99. package/src/FileHandlers/ShareModal/index.ts +1 -0
  100. package/src/FileHandlers/ShareModal/src/index.ts +1 -0
  101. package/src/FileHandlers/ShareModal/src/share_utils.tsx +155 -0
  102. package/src/FileHandlers/Upload/imports.ts +3 -0
  103. package/src/FileHandlers/Upload/index.ts +1 -0
  104. package/src/FileHandlers/Upload/src/index.ts +2 -0
  105. package/src/FileHandlers/Upload/src/upload_utils.tsx +267 -0
  106. package/src/FileHandlers/imports.ts +18 -0
  107. package/src/FileHandlers/index.ts +4 -0
  108. package/src/UI/index.tsx +122 -0
  109. package/src/custom.d.ts +7 -0
  110. package/src/file_utils/imports.ts +2 -0
  111. package/src/file_utils/index.ts +1 -0
  112. package/src/file_utils/src/cookieFetch.ts +78 -0
  113. package/src/file_utils/src/delete_utils/imports.ts +1 -0
  114. package/src/file_utils/src/delete_utils/index.ts +1 -0
  115. package/src/file_utils/src/delete_utils/src/delete_row.ts +11 -0
  116. package/src/file_utils/src/delete_utils/src/delete_select.ts +10 -0
  117. package/src/file_utils/src/delete_utils/src/delete_selected.ts +15 -0
  118. package/src/file_utils/src/delete_utils/src/index.ts +3 -0
  119. package/src/file_utils/src/download_utils/imports.ts +3 -0
  120. package/src/file_utils/src/download_utils/index.ts +1 -0
  121. package/src/file_utils/src/download_utils/src/direct_download.ts +22 -0
  122. package/src/file_utils/src/download_utils/src/download_file.ts +25 -0
  123. package/src/file_utils/src/download_utils/src/download_select.ts +20 -0
  124. package/src/file_utils/src/download_utils/src/index.ts +5 -0
  125. package/src/file_utils/src/download_utils/src/target_downloads.ts +21 -0
  126. package/src/file_utils/src/download_utils/src/trigger_download.ts +14 -0
  127. package/src/file_utils/src/imports.ts +3 -0
  128. package/src/file_utils/src/index.ts +6 -0
  129. package/src/file_utils/src/list_utils/imports.ts +2 -0
  130. package/src/file_utils/src/list_utils/index.ts +1 -0
  131. package/src/file_utils/src/list_utils/src/index.ts +1 -0
  132. package/src/file_utils/src/list_utils/src/list_utils.ts +28 -0
  133. package/src/file_utils/src/select_utils/index.ts +1 -0
  134. package/src/file_utils/src/select_utils/src/index.ts +3 -0
  135. package/src/file_utils/src/select_utils/src/init_select_all.ts +37 -0
  136. package/src/file_utils/src/select_utils/src/sync_header_checkbox.ts +18 -0
  137. package/src/file_utils/src/select_utils/src/toggle_checkboxes.ts +11 -0
  138. package/src/file_utils/src/share_utils/imports.ts +2 -0
  139. package/src/file_utils/src/share_utils/index.ts +1 -0
  140. package/src/file_utils/src/share_utils/src/index.ts +1 -0
  141. package/src/file_utils/src/share_utils/src/share_utils.ts +20 -0
  142. package/src/file_utils/src/upload_utils/imports.ts +1 -0
  143. package/src/file_utils/src/upload_utils/index.ts +1 -0
  144. package/src/file_utils/src/upload_utils/src/index.ts +3 -0
  145. package/src/file_utils/src/upload_utils/src/patch_file_settings.ts +20 -0
  146. package/src/file_utils/src/upload_utils/src/upload_file.ts +27 -0
  147. package/src/file_utils/src/upload_utils/src/upload_files.ts +19 -0
  148. package/src/global.d.ts +1 -0
  149. package/src/hooks/imports.ts +3 -0
  150. package/src/hooks/index.ts +1 -0
  151. package/src/hooks/useFiles/imports.ts +3 -0
  152. package/src/hooks/useFiles/index.ts +1 -0
  153. package/src/hooks/useFiles/src/deleteFile.ts +23 -0
  154. package/src/hooks/useFiles/src/index.ts +6 -0
  155. package/src/hooks/useFiles/src/load.ts +39 -0
  156. package/src/hooks/useFiles/src/logs/clipit_logs.log +0 -0
  157. package/src/hooks/useFiles/src/logs/routes_bp.log +0 -0
  158. package/src/hooks/useFiles/src/patchShareSettings.ts +27 -0
  159. package/src/hooks/useFiles/src/toggleShare.ts +28 -0
  160. package/src/hooks/useFiles/src/useFiles.ts +35 -0
  161. package/src/hooks/useFiles/src/useSaveShareSettings.ts +31 -0
  162. package/src/imports.ts +19 -0
  163. package/src/index.ts +8 -1
  164. package/src/styles/{App.css → SecureFiles/App.css} +0 -0
  165. package/src/styles/{index.css → SecureFiles/index.css} +0 -0
  166. package/src/styles/SecureFiles/logs/clipit_logs.log +0 -0
  167. package/src/styles/SecureFiles/logs/routes_bp.log +0 -0
  168. package/src/styles/{tailwind.css → SecureFiles/tailwind.css} +0 -0
  169. package/src/styles/{window-manager.css → SecureFiles/window-manager.css} +0 -0
  170. package/src/styles/SecureFilesStyles.module.css +287 -0
  171. package/src/styles/index.ts +1 -0
  172. package/src/types/index.ts +1 -0
  173. package/src/types/src/index.ts +1 -0
  174. package/src/types/src/types.ts +88 -0
  175. package/tailwind.config.cjs +0 -0
  176. package/testit.mjs +0 -0
  177. package/testit.ts +0 -0
  178. package/tsconfig.json +0 -0
  179. package/.github/workflows/release.yml +0 -17
  180. package/dist/secure_files.d.ts +0 -4
  181. package/src/secure_files.tsx +0 -41
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/secure_files.tsx"],"sourcesContent":["// src/App.tsx\n// src/index.tsx\nimport './styles/index.css';\nimport React from \"react\";\nimport { useState} from 'react';\nimport {\n useFiles,\n FileTable,\n Upload\n} from \"@putkoff/abstract-files\";\n\nimport {\n getToken, // ⬅️ use the *non-throwing* helper\n isTokenExpired\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":["getToken","isTokenExpired","useState","useFiles","_jsxs","_Fragment","_jsx","Upload","FileTable"],"mappings":";;;;;;;AAeA,SAAS,eAAe,GAAA;AACtB,IAAA,MAAM,GAAG,GAAGA,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,GAAGC,cAAQ,CAAC,eAAe,EAAE,CAAC;AAC3D,IAAA,MAAM,SAAS,GAAGC,sBAAQ,EAAE,CAAC;IAC7B,QACEC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,CAEEC,cAAA,CAACC,oBAAM,EAAA,EAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAA,CAAI,EACtCD,cAAA,CAACE,uBAAS,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;;;;"}
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/UI/index.tsx","../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/cookieFetch.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/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;","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 checked?:boolean;\n type?:string;\n onChange?: any;\n value?: any;\n trailing?:Trailing;\n className?: String; \n classNames?:Astring;\n disabled?: any;\n placeholder?: any;\n error?: string;\n min?:any,\n readOnly?:boolean\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}","/** 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 type { FileItem } from './../imports';\nimport { triggerDownload } from './trigger_download';\n\n/**\n * Download a file using the current session cookie.\n * No JWT / localStorage token required.\n */\nexport async function downloadFile(item: FileItem): Promise<void> {\n const res = await fetch(\"/api/secure-files/download\", {\n method: \"POST\",\n credentials: \"include\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n id: item.id,\n filepath: item.filepath,\n filename: item.filename,\n }),\n });\n\n if (res.status === 401) throw new Error(\"Not authenticated – please log in.\");\n if (!res.ok) throw new Error(`Download failed: HTTP ${res.status}`);\n\n const blob = await res.blob();\n triggerDownload(blob, item.filename || \"download\");\n}\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","const API_BASE = '/api/secure-files';\n\n/** Generic PATCH helper for file-level admin settings. */\nexport async function patchFileSetting(\n fileId: string,\n field: string,\n value: unknown,\n): Promise<Record<string, unknown>> {\n const res = await fetch(`${API_BASE}/files/${fileId}/settings/${field}`, {\n method: 'PATCH',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ value }),\n });\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error((err as any).error || res.statusText);\n }\n return (await res.json()) as Record<string, unknown>;\n}\n","/**\n * Cookie-authenticated API helpers.\n * All requests include credentials: 'include' so the browser sends the\n * session cookie (auth_session) automatically. No JWT tokens are used.\n */\n\nconst API_BASE = \"/api/secure-files\";\n\nfunction apiUrl(path: string): string {\n const p = path.startsWith(\"/\") ? path : `/${path}`;\n return `${API_BASE}${p}`;\n}\n\n/**\n * Generic JSON fetch with session-cookie auth.\n * Throws Error(\"UNAUTHENTICATED\") on 401 so callers can redirect to login.\n */\nexport async function cookieFetch<T = unknown>(\n path: string,\n body?: unknown,\n method?: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n): Promise<T> {\n const m = method ?? (body !== undefined ? \"POST\" : \"GET\");\n const init: RequestInit = { method: m, credentials: \"include\" };\n\n if (body !== undefined && body !== null) {\n init.headers = { \"Content-Type\": \"application/json\" };\n init.body = JSON.stringify(body);\n }\n\n const res = await fetch(apiUrl(path), init);\n if (res.status === 401) throw new Error(\"UNAUTHENTICATED\");\n if (!res.ok) {\n const msg = await res.text().catch(() => res.statusText);\n throw new Error(`HTTP ${res.status}: ${msg}`);\n }\n\n const ct = res.headers.get(\"Content-Type\") ?? \"\";\n return (ct.includes(\"application/json\") ? res.json() : res.text()) as Promise<T>;\n}\n\n/**\n * Check whether the current session is valid.\n * Calls /userInfo which requires authentication; returns true if the user is\n * logged in, false otherwise (no exception thrown).\n */\nexport async function checkAuth(): Promise<boolean> {\n try {\n const res = await fetch(apiUrl(\"/userInfo\"), {\n method: \"GET\",\n credentials: \"include\",\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Upload a single file using multipart/form-data with session-cookie auth.\n * @param file The File object to upload.\n * @param relPath Optional relative path within the user's directory.\n */\nexport async function cookieUpload(file: File, relPath = \"\"): Promise<unknown> {\n const form = new FormData();\n form.append(\"file\", file);\n if (relPath) form.append(\"rel_path\", relPath);\n\n const res = await fetch(apiUrl(\"/upload\"), {\n method: \"POST\",\n credentials: \"include\",\n body: form,\n });\n\n if (res.status === 401) throw new Error(\"UNAUTHENTICATED\");\n if (!res.ok) throw new Error(`Upload failed: HTTP ${res.status}`);\n return res.json();\n}\n","import { cookieUpload } from './../../cookieFetch';\n\n/** File-upload helper (used by non-React fallback pages). */\nexport async function uploadFile(file: any, subdir: any): Promise<any> {\n const fileInput = file || document.getElementById('file-browser') 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 f = fileInput.files[0];\n const dir = (subdirInput?.value ?? '').trim();\n const relPath = dir ? `${dir}/${f.name}` : f.name;\n\n try {\n const json = await cookieUpload(f, relPath) as { filepath: string };\n if (banner) banner.textContent = `Uploaded: ${json.filepath}`;\n fileInput.value = '';\n if (subdirInput) subdirInput.value = '';\n window.location.reload();\n } catch (err: any) {\n console.error('Upload failed', err);\n }\n}\n","import { cookieUpload } from '../../../../file_utils/src/cookieFetch';\n\ninterface UploadResponse {\n filepath: string;\n}\n\nexport async function uploadFiles(\n file: File,\n subdir: string = '',\n): Promise<UploadResponse> {\n if (!(file instanceof File)) throw new Error('Invalid file: must be a File object.');\n if (typeof subdir !== 'string') throw new Error('Invalid subdir: must be a string.');\n\n const relPath = subdir.trim() ? `${subdir.trim()}/${file.name}` : file.name;\n const json = await cookieUpload(file, relPath) as { filepath?: string };\n\n if (!json?.filepath) throw new Error('Server response missing filepath.');\n return { filepath: json.filepath };\n}\n","import { cookieFetch } from '../../cookieFetch';\n\nexport async function removeFile(\n item: { id?: number | string; filename?: string },\n): Promise<void> {\n const resp = await cookieFetch<unknown>(\"remove\", { id: item.id }, \"POST\");\n if (!resp || (resp as any) === false || (resp as any)?.result === false) {\n throw new Error(`Could not delete \"${item.filename ?? item.id}\"`);\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 { cookieFetch } from './../../cookieFetch';\nimport type { ApiRow, FileItem } from './../imports';\n\nexport async function listFiles(\n setFiles: ((rows: FileItem[]) => void) | null = null,\n): Promise<FileItem[]> {\n const result = await cookieFetch<ApiRow[] | { result: ApiRow[] }>(\"list\", undefined, \"GET\");\n const apiRows: ApiRow[] = Array.isArray(result)\n ? result\n : ((result as any)?.result ?? []);\n\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 if (setFiles) setFiles(rows);\n return rows;\n}\n","import { cookieFetch } from './../../cookieFetch';\nimport type { FileItem } from './../imports';\n\n/**\n * Toggle sharing on a file.\n * Sends the updated settings to /api/secure-files/files/share.\n * Does NOT update local state – the caller is responsible for that.\n */\nexport async function toggleShare(file: FileItem): Promise<void> {\n const updated: FileItem = { ...file, shareable: !file.shareable };\n if (!updated.shareable) updated.needsPassword = false;\n\n await cookieFetch(\"files/share\", {\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password ?? null,\n password_str: updated.password_str ?? null,\n download_limit: updated.download_limit ?? null,\n }, \"POST\");\n}\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport type { FileItem, ApiRow } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\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 return useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await cookieFetch<ApiRow[] | { result: ApiRow[] }>(\"list\", undefined, \"GET\");\n const apiRows: ApiRow[] = Array.isArray(result)\n ? result\n : ((result as any)?.result ?? []);\n\n setFiles(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 } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load files'));\n } finally {\n setLoading(false);\n }\n }, [setLoading, setError, setFiles]);\n};\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport type { FileItem } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\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) updated.needsPassword = false;\n try {\n await cookieFetch(\"files/share\", {\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password ?? null,\n password_str: updated.password_str ?? null,\n download_limit: updated.download_limit ?? null,\n }, \"POST\");\n setFiles(curr => curr.map(f => f.id === file.id ? updated : f));\n } catch (err) {\n console.error('Failed to toggle share:', err);\n }\n },\n [setFiles],\n );\n};\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\nexport const usePatchShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<any[]>>,\n) => {\n return useCallback(\n async (file: any) => {\n const body = {\n id: file.id,\n shareable: file.shareable,\n share_password: file.share_password ?? null,\n password_str: file.password_str ?? null,\n download_limit: file.download_limit ?? null,\n };\n try {\n await cookieFetch(\"files/share\", body, \"POST\");\n setFiles(curr => curr.map(f => f.id === body.id ? { ...f, ...body } : f));\n } catch (err) {\n console.error('Failed to update share settings:', err);\n }\n },\n [setFiles],\n );\n};\nexport default usePatchShareSettings;\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\n/**\n * Hook alias used by useFiles.ts. Patches share settings via the session-cookie\n * authenticated /files/share endpoint.\n */\nexport const useSaveShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<any[]>>,\n) => {\n return useCallback(\n async (file: any) => {\n const body = {\n id: file.id,\n shareable: file.shareable,\n share_password: file.share_password ?? null,\n password_str: file.password_str ?? null,\n download_limit: file.download_limit ?? null,\n };\n try {\n await cookieFetch(\"files/share\", body, \"POST\");\n setFiles(curr => curr.map(f => f.id === body.id ? { ...f, ...body } : f));\n } catch (err) {\n console.error('Failed to save share settings:', err);\n }\n },\n [setFiles],\n );\n};\nexport default useSaveShareSettings;\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport type { FileItem } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\nexport const useDeleteFile = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>,\n) => {\n return useCallback(\n async (file: FileItem | FileItem[]) => {\n const targets = Array.isArray(file) ? file : [file];\n for (const f of targets) {\n try {\n await cookieFetch(\"remove\", { id: f.id }, \"POST\");\n setFiles(curr => curr.filter(item => item.id !== f.id));\n } catch (err) {\n console.error(`Failed to delete \"${f.filename}\":`, err);\n }\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';\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 ? `/api/secure-files/secure-download/${file.id}`\n : \"\";\n\n useEffect(() => {\n if (!file) return;\n setFileId(file.id);\n setEnabled(file.shareable);\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:any) => setEnabled(e.target.checked)}\n className=\"checkbox\"\n />\n\n <Input\n label=\"Password (optional)\"\n type=\"text\"\n value={strPassword}\n onChange={(e:any) => 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:any) =>\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}\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:any) => 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 './../styles/SecureFiles/index.css';\nimport React, { useEffect, useState } from 'react';\nimport { FileTable, Upload } from './../FileHandlers';\nimport { useFiles } from './../hooks';\nimport { checkAuth } from '../file_utils/src/cookieFetch';\n\nconst SecureFiles: React.FC = () => {\n const [authChecked, setAuthChecked] = useState(false);\n const [loggedIn, setLoggedIn] = useState(false);\n const filesHook = useFiles();\n\n useEffect(() => {\n checkAuth().then(ok => {\n setLoggedIn(ok);\n setAuthChecked(true);\n });\n }, []);\n\n if (!authChecked) return null;\n\n if (!loggedIn) {\n return (\n <p style={{ textAlign: 'center', marginTop: '2rem', color: '#6b7280' }}>\n Please log in to access your files.\n </p>\n );\n }\n\n return (\n <>\n <Upload onUploaded={filesHook.load} />\n <FileTable\n files={filesHook.files}\n loading={filesHook.loading}\n error={filesHook.error}\n onDownload={filesHook.toggleShare}\n onToggleShare={filesHook.toggleShare}\n onPatchShare={filesHook.patchShareSettings}\n onDelete={filesHook.deleteFile}\n />\n </>\n );\n};\n\nexport default SecureFiles;\n"],"names":["React","ForwardRef","_jsx","_jsxs","requireToken","secureFetchIt","API_BASE","alertit","useCallback","useState","useEffect","currentUsername","useRef","createPortal","_Fragment","ClipboardIcon","useMemo","CloudArrowUpIcon"],"mappings":"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","x_google_ignoreList":[0,1]}
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.wm-table{font-size:13px;table-layout:fixed;width:100%}.wm-thead th{background-color:#e5e7eb;border-bottom:1px solid #9ca3af;font-weight:600;padding:5px 8px;text-align:left}.wm-row{background-color:#f9fafb;border-bottom:1px solid #d1d5db}.wm-row:hover{background-color:#eff6ff}.wm-cell{overflow:hidden;padding:5px 8px;text-overflow:ellipsis;white-space:nowrap}.wm-checkbox{border:1px solid #9ca3af;border-radius:4px;color:#2563eb;cursor:pointer;height:14px;width:14px}.wm-btn-link{color:#2563eb;text-decoration:underline}.wm-btn-link:hover{color:#1e40af}.wm-btn-link:disabled{color:#9ca3af;cursor:not-allowed}.wm-btn-icon{border-radius:4px;color:#4b5563;padding:2px}.wm-btn-icon:hover{background-color:#e5e7eb;color:#111827}.wm-btn-icon:disabled{color:#9ca3af}.file-table{border:1px solid #9ca3af;border-collapse:collapse;font-size:13px;line-height:1.15rem;width:100%}.file-table thead th{background-color:#e5e7eb;border-bottom:1px solid #9ca3af;border-right:1px solid #d1d5db;color:#1f2937;font-weight:600;padding:6px 12px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.file-table thead th:last-child{border-right:none}.file-table tbody tr{border-bottom:1px solid #d1d5db;transition:background-color .2s}.file-table tbody tr:hover{background-color:#f3f4f6}.file-table tbody tr:nth-child(2n){background-color:#f9fafb}.file-table td{border-right:1px solid #d1d5db;padding:6px 12px;vertical-align:middle;white-space:nowrap}.file-table td:last-child{border-right:none}.file-table .unsaved{color:#dc2626}.modal-backdrop{background-color:rgba(0,0,0,.6)}.modal-backdrop,.modal-wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.modal-wrapper{align-items:center;display:flex;justify-content:center}.modal-panel{border-radius:12px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25);max-height:90vh;outline:none;overflow-y:auto}.form-container,.modal-panel{background-color:#fff;max-width:28rem;padding:24px}.form-container{border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.1),0 1px 2px rgba(0,0,0,.06);display:flex;flex-direction:column;gap:16px}.form-title{font-size:20px;font-weight:600;text-align:center}.form-input{border:1px solid #d1d5db;border-radius:4px;display:block;padding:4px 8px;width:100%}.form-input:disabled{background-color:#f3f4f6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;margin-bottom:4px}.form-error{color:#dc2626;font-size:14px}.btn{border-radius:8px;font-size:14px;font-weight:500;padding:4px 12px;transition:background-color .15s,color .15s}.btn:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(0,0,0,.1);outline:none}.btn-primary{background-color:#2563eb;color:#fff}.btn-primary:hover{background-color:#1d4ed8}.btn-primary:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(59,130,246,.5)}.btn-secondary{background-color:#e5e7eb}.btn-secondary:hover{background-color:#d1d5db}.btn-secondary:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(156,163,175,.5)}.btn-success{background-color:#16a34a;color:#fff}.btn-success:hover{background-color:#15803d}.btn-success:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(34,197,94,.5)}.btn-danger{background-color:#dc2626;color:#fff}.btn-danger:hover{background-color:#b91c1c}.btn-danger:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(239,68,68,.5)}.btn-icon{background-color:transparent;padding:4px}.btn-icon:hover{background-color:#f3f4f6}.checkbox{align-items:center;display:flex;gap:8px;margin-bottom:16px}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.logo{height:6em;padding:1.5em;transition:filter .3s;will-change:filter}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (prefers-reduced-motion:no-preference){a:nth-of-type(2) .logo{animation:logo-spin 20s linear infinite}}.card{padding:2em}.read-the-docs{color:#888}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial}}}
1
+ /*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */.relative{position:relative}.z-100{z-index:100}.z-110{z-index:110}.mx-auto{margin-inline:auto}.flex{display:flex}.hidden{display:none}.table{display:table}.table-row{display:table-row}.w-full{width:100%}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:calc(infinity * 1px)}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-colors{transition-duration:var(--tw-duration,0s);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,ease)}.transition-shadow{transition-duration:var(--tw-duration,0s);transition-property:box-shadow;transition-timing-function:var(--tw-ease,ease)}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-150{--tw-duration:150ms;transition-duration:.15s}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.wm-table{font-size:13px;table-layout:fixed;width:100%}.wm-thead th{background-color:#e5e7eb;border-bottom:1px solid #9ca3af;font-weight:600;padding:5px 8px;text-align:left}.wm-row{background-color:#f9fafb;border-bottom:1px solid #d1d5db}.wm-row:hover{background-color:#eff6ff}.wm-cell{overflow:hidden;padding:5px 8px;text-overflow:ellipsis;white-space:nowrap}.wm-checkbox{border:1px solid #9ca3af;border-radius:4px;color:#2563eb;cursor:pointer;height:14px;width:14px}.wm-btn-link{color:#2563eb;text-decoration:underline}.wm-btn-link:hover{color:#1e40af}.wm-btn-link:disabled{color:#9ca3af;cursor:not-allowed}.wm-btn-icon{border-radius:4px;color:#4b5563;padding:2px}.wm-btn-icon:hover{background-color:#e5e7eb;color:#111827}.wm-btn-icon:disabled{color:#9ca3af}.file-table{border:1px solid #9ca3af;border-collapse:collapse;font-size:13px;line-height:1.15rem;width:100%}.file-table thead th{background-color:#e5e7eb;border-bottom:1px solid #9ca3af;border-right:1px solid #d1d5db;color:#1f2937;font-weight:600;padding:6px 12px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.file-table thead th:last-child{border-right:none}.file-table tbody tr{border-bottom:1px solid #d1d5db;transition:background-color .2s}.file-table tbody tr:hover{background-color:#f3f4f6}.file-table tbody tr:nth-child(2n){background-color:#f9fafb}.file-table td{border-right:1px solid #d1d5db;padding:6px 12px;vertical-align:middle;white-space:nowrap}.file-table td:last-child{border-right:none}.file-table .unsaved{color:#dc2626}.modal-backdrop{background-color:rgba(0,0,0,.6)}.modal-backdrop,.modal-wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.modal-wrapper{align-items:center;display:flex;justify-content:center}.modal-panel{border-radius:12px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25);max-height:90vh;outline:none;overflow-y:auto}.form-container,.modal-panel{background-color:#fff;max-width:28rem;padding:24px}.form-container{border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.1),0 1px 2px rgba(0,0,0,.06);display:flex;flex-direction:column;gap:16px}.form-title{font-size:20px;font-weight:600;text-align:center}.form-input{border:1px solid #d1d5db;border-radius:4px;display:block;padding:4px 8px;width:100%}.form-input:disabled{background-color:#f3f4f6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;margin-bottom:4px}.form-error{color:#dc2626;font-size:14px}.btn{border-radius:8px;font-size:14px;font-weight:500;padding:4px 12px;transition:background-color .15s,color .15s}.btn:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(0,0,0,.1);outline:none}.btn-primary{background-color:#2563eb;color:#fff}.btn-primary:hover{background-color:#1d4ed8}.btn-primary:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(59,130,246,.5)}.btn-secondary{background-color:#e5e7eb}.btn-secondary:hover{background-color:#d1d5db}.btn-secondary:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(156,163,175,.5)}.btn-success{background-color:#16a34a;color:#fff}.btn-success:hover{background-color:#15803d}.btn-success:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(34,197,94,.5)}.btn-danger{background-color:#dc2626;color:#fff}.btn-danger:hover{background-color:#b91c1c}.btn-danger:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(239,68,68,.5)}.btn-icon{background-color:transparent;padding:4px}.btn-icon:hover{background-color:#f3f4f6}.checkbox{align-items:center;display:flex;gap:8px;margin-bottom:16px}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.logo{height:6em;padding:1.5em;transition:filter .3s;will-change:filter}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (prefers-reduced-motion:no-preference){a:nth-of-type(2) .logo{animation:logo-spin 20s linear infinite}}.card{padding:2em}.read-the-docs{color:#888}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}
package/dist/index.d.ts CHANGED
@@ -1 +1,8 @@
1
- export { default as SecureFiles } from './secure_files';
1
+ export { FileRow, ShareModal, FileTable, Upload } from './FileHandlers';
2
+ export { useFiles } from './hooks';
3
+ export * from './file_utils';
4
+ export * from './hooks';
5
+ export * from './UI';
6
+ export * from './types';
7
+ export * from './styles';
8
+ export { SecureFiles } from './App';