@parallelworks/ui 0.21.0 → 0.21.2
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.
- package/README.md +5 -0
- package/dist/ai/components/AttachmentManager.js +6 -4
- package/dist/ai/components/AttachmentUpload.js +11 -7
- package/dist/ai/components/BlockedGroupBanner.js +2 -2
- package/dist/ai/components/BranchNavigator.js +4 -3
- package/dist/ai/components/ChatEmptyState.js +8 -5
- package/dist/ai/components/ChatInput.js +6 -4
- package/dist/ai/components/ChatMessage.js +18 -10
- package/dist/ai/components/ChatMessageList.js +4 -3
- package/dist/ai/components/ChatSidebar.js +18 -10
- package/dist/ai/components/ChatThread.js +4 -3
- package/dist/ai/components/ComposerChrome.js +2 -2
- package/dist/ai/components/ModelSelector.js +17 -12
- package/dist/ai/components/ShareDialog.js +4 -3
- package/dist/ai/components/agent/ActivityLine.js +3 -2
- package/dist/ai/components/agent/AgentMessageParts.js +9 -7
- package/dist/ai/ui/Dropdown.js +2 -2
- package/dist/ai/ui/Notice.js +5 -3
- package/dist/ai/ui/sidebar.js +2 -2
- package/dist/components/Button.js +3 -2
- package/dist/components/Callout.js +4 -3
- package/dist/components/CollapsiblePanel.js +2 -2
- package/dist/components/CopyToClipboard.js +8 -4
- package/dist/components/CreateModal.js +11 -7
- package/dist/components/Dropdown.js +2 -2
- package/dist/components/Filter.js +2 -2
- package/dist/components/Indicator.js +14 -9
- package/dist/components/Input.js +6 -4
- package/dist/components/Listbox.js +2 -2
- package/dist/components/Loader.js +1 -1
- package/dist/components/PageHeader.js +10 -7
- package/dist/components/Sort.js +6 -4
- package/dist/components/StatusIcons.d.ts +11 -0
- package/dist/components/StatusIcons.js +20 -0
- package/dist/components/Tooltip.js +3 -3
- package/dist/components/dropdownUtils.js +2 -2
- package/dist/editor/FormCodePanel.js +6 -3
- package/dist/file-explorer/FileExplorer.js +72 -23
- package/dist/file-explorer/FilePreview/Inline.js +2 -2
- package/dist/file-explorer/FilePreview/StreamedBadge.js +2 -2
- package/dist/file-explorer/FilePreview/Viewer.js +14 -10
- package/dist/file-explorer/FilePreview/index.js +17 -10
- package/dist/file-explorer/FileRow.js +2 -2
- package/dist/file-explorer/FileRowsWindow.js +3 -2
- package/dist/file-explorer/TreeView.js +5 -3
- package/dist/file-explorer/helpers.js +43 -29
- package/dist/file-explorer/toasts.js +18 -11
- package/dist/form/Form.js +4 -3
- package/dist/form/SpecialTypes/FormikCustomInput.js +3 -2
- package/dist/graph/AnnotationBanner.js +9 -5
- package/dist/graph/DependencyGraph.js +6 -4
- package/dist/graph/JobSummary.js +4 -3
- package/dist/graph/TreeView.js +3 -2
- package/dist/icons/ai/AiOutlineRollback.js +16 -0
- package/dist/icons/bi/BiBell.js +16 -0
- package/dist/icons/bi/BiBellOff.js +16 -0
- package/dist/icons/bi/BiBuildings.js +20 -0
- package/dist/icons/bi/BiError.js +20 -0
- package/dist/icons/bi/BiExpandVertical.js +16 -0
- package/dist/icons/bi/BiPause.js +16 -0
- package/dist/icons/bi/BiPlay.js +16 -0
- package/dist/icons/bi/BiSolidCheckShield.js +16 -0
- package/dist/icons/bi/BiSolidTrashAlt.js +16 -0
- package/dist/icons/bi/BiStop.js +16 -0
- package/dist/icons/bs/BsArrowsCollapse.js +22 -0
- package/dist/icons/bs/BsBank2.js +19 -0
- package/dist/icons/bs/BsBriefcase.js +19 -0
- package/dist/icons/bs/BsBucket.js +19 -0
- package/dist/icons/bs/BsCalendarX.js +23 -0
- package/dist/icons/bs/BsChatLeft.js +19 -0
- package/dist/icons/bs/BsChevronDoubleDown.js +29 -0
- package/dist/icons/bs/BsChevronDoubleUp.js +29 -0
- package/dist/icons/bs/BsClipboardCheck.js +34 -0
- package/dist/icons/bs/BsCurrencyDollar.js +19 -0
- package/dist/icons/bs/BsDash.js +19 -0
- package/dist/icons/bs/BsFileEarmarkZip.js +23 -0
- package/dist/icons/bs/BsFiles.js +19 -0
- package/dist/icons/bs/BsGeoAlt.js +23 -0
- package/dist/icons/bs/BsGrid.js +19 -0
- package/dist/icons/bs/BsLayers.js +19 -0
- package/dist/icons/bs/BsLayoutThreeColumns.js +19 -0
- package/dist/icons/bs/BsListUl.js +22 -0
- package/dist/icons/bs/BsMortarboard.js +23 -0
- package/dist/icons/bs/BsMusicNoteBeamed.js +34 -0
- package/dist/icons/bs/BsOpenai.js +19 -0
- package/dist/icons/bs/BsPersonPlus.js +26 -0
- package/dist/icons/bs/BsSearch.js +19 -0
- package/dist/icons/bs/BsSend.js +19 -0
- package/dist/icons/bs/BsShieldSlash.js +22 -0
- package/dist/icons/bs/BsStar.js +19 -0
- package/dist/icons/bs/BsStarFill.js +19 -0
- package/dist/icons/bs/BsStopCircle.js +23 -0
- package/dist/icons/bs/BsTag.js +23 -0
- package/dist/icons/bs/BsTelephone.js +19 -0
- package/dist/icons/bs/BsTerminal.js +23 -0
- package/dist/icons/bs/BsTerminalFill.js +19 -0
- package/dist/icons/bs/BsThreeDots.js +19 -0
- package/dist/icons/bs/BsThreeDotsVertical.js +19 -0
- package/dist/icons/bs/BsZoomIn.js +37 -0
- package/dist/icons/fa/FaAmazon.js +16 -0
- package/dist/icons/fa/FaAngleDown.js +16 -0
- package/dist/icons/fa/FaAngleLeft.js +16 -0
- package/dist/icons/fa/FaAngleRight.js +16 -0
- package/dist/icons/fa/FaAngleUp.js +16 -0
- package/dist/icons/fa/FaArrowDown.js +16 -0
- package/dist/icons/fa/FaArrowLeft.js +16 -0
- package/dist/icons/fa/FaArrowRight.js +16 -0
- package/dist/icons/fa/FaArrowUp.js +16 -0
- package/dist/icons/fa/FaBalanceScale.js +16 -0
- package/dist/icons/fa/FaCaretDown.js +16 -0
- package/dist/icons/fa/FaCentos.js +16 -0
- package/dist/icons/fa/FaChartLine.js +16 -0
- package/dist/icons/fa/FaChartPie.js +16 -0
- package/dist/icons/fa/FaCheck.js +16 -0
- package/dist/icons/fa/FaChevronDown.js +16 -0
- package/dist/icons/fa/FaChevronUp.js +16 -0
- package/dist/icons/fa/FaChrome.js +16 -0
- package/dist/icons/fa/FaCircleNotch.js +16 -0
- package/dist/icons/fa/FaCloud.js +16 -0
- package/dist/icons/fa/FaCloudDownloadAlt.js +16 -0
- package/dist/icons/fa/FaCog.js +16 -0
- package/dist/icons/fa/FaCogs.js +16 -0
- package/dist/icons/fa/FaComments.js +16 -0
- package/dist/icons/fa/FaCompress.js +16 -0
- package/dist/icons/fa/FaDesktop.js +16 -0
- package/dist/icons/fa/FaDocker.js +16 -0
- package/dist/icons/fa/FaDollarSign.js +16 -0
- package/dist/icons/fa/FaEdge.js +16 -0
- package/dist/icons/fa/FaEdit.js +16 -0
- package/dist/icons/fa/FaExclamationTriangle.js +16 -0
- package/dist/icons/fa/FaExpand.js +16 -0
- package/dist/icons/fa/FaEye.js +16 -0
- package/dist/icons/fa/FaEyeSlash.js +16 -0
- package/dist/icons/fa/FaFile.js +16 -0
- package/dist/icons/fa/FaFilePdf.js +16 -0
- package/dist/icons/fa/FaFilter.js +16 -0
- package/dist/icons/fa/FaFirefoxBrowser.js +16 -0
- package/dist/icons/fa/FaFlask.js +16 -0
- package/dist/icons/fa/FaFolder.js +16 -0
- package/dist/icons/fa/FaGithub.js +16 -0
- package/dist/icons/fa/FaGitlab.js +16 -0
- package/dist/icons/fa/FaGlobe.js +16 -0
- package/dist/icons/fa/FaGlobeAmericas.js +16 -0
- package/dist/icons/fa/FaImage.js +16 -0
- package/dist/icons/fa/FaInfoCircle.js +16 -0
- package/dist/icons/fa/FaKey.js +16 -0
- package/dist/icons/fa/FaLayerGroup.js +16 -0
- package/dist/icons/fa/FaLink.js +16 -0
- package/dist/icons/fa/FaLinkedin.js +16 -0
- package/dist/icons/fa/FaLinux.js +16 -0
- package/dist/icons/fa/FaList.js +16 -0
- package/dist/icons/fa/FaLock.js +16 -0
- package/dist/icons/fa/FaOpenid.js +16 -0
- package/dist/icons/fa/FaOpera.js +16 -0
- package/dist/icons/fa/FaPaperclip.js +16 -0
- package/dist/icons/fa/FaPlus.js +16 -0
- package/dist/icons/fa/FaPowerOff.js +16 -0
- package/dist/icons/fa/FaPrint.js +16 -0
- package/dist/icons/fa/FaQrcode.js +16 -0
- package/dist/icons/fa/FaQuestionCircle.js +16 -0
- package/dist/icons/fa/FaRedhat.js +16 -0
- package/dist/icons/fa/FaRegCircle.js +16 -0
- package/dist/icons/fa/FaRegFileImage.js +16 -0
- package/dist/icons/fa/FaRegFolder.js +16 -0
- package/dist/icons/fa/FaRobot.js +16 -0
- package/dist/icons/fa/FaRocket.js +16 -0
- package/dist/icons/fa/FaRunning.js +16 -0
- package/dist/icons/fa/FaSafari.js +16 -0
- package/dist/icons/fa/FaSave.js +16 -0
- package/dist/icons/fa/FaSearch.js +16 -0
- package/dist/icons/fa/FaShieldAlt.js +16 -0
- package/dist/icons/fa/FaSlack.js +16 -0
- package/dist/icons/fa/FaStar.js +16 -0
- package/dist/icons/fa/FaStop.js +16 -0
- package/dist/icons/fa/FaSuse.js +16 -0
- package/dist/icons/fa/FaTerminal.js +16 -0
- package/dist/icons/fa/FaTimes.js +16 -0
- package/dist/icons/fa/FaUbuntu.js +16 -0
- package/dist/icons/fa/FaUndoAlt.js +16 -0
- package/dist/icons/fa/FaUnlink.js +16 -0
- package/dist/icons/fa/FaUser.js +16 -0
- package/dist/icons/fa/FaUsers.js +16 -0
- package/dist/icons/fa/FaWindows.js +16 -0
- package/dist/icons/fa6/FaApple.js +16 -0
- package/dist/icons/fa6/FaArrowsRotate.js +16 -0
- package/dist/icons/fa6/FaDebian.js +16 -0
- package/dist/icons/fa6/FaFilterCircleXmark.js +16 -0
- package/dist/icons/fa6/FaInbox.js +16 -0
- package/dist/icons/fa6/FaLocationDot.js +16 -0
- package/dist/icons/fa6/FaRegFilePdf.js +16 -0
- package/dist/icons/fa6/FaRegFolderOpen.js +16 -0
- package/dist/icons/fa6/FaUpRightFromSquare.js +16 -0
- package/dist/icons/fa6/FaWandMagicSparkles.js +16 -0
- package/dist/icons/fa6/FaXTwitter.js +16 -0
- package/dist/icons/fi/FiActivity.js +23 -0
- package/dist/icons/fi/FiAlertCircle.js +49 -0
- package/dist/icons/fi/FiChevronDown.js +23 -0
- package/dist/icons/fi/FiClock.js +31 -0
- package/dist/icons/fi/FiCopy.js +34 -0
- package/dist/icons/fi/FiDownload.js +40 -0
- package/dist/icons/fi/FiFile.js +27 -0
- package/dist/icons/fi/FiFileText.js +55 -0
- package/dist/icons/fi/FiHardDrive.js +55 -0
- package/dist/icons/fi/FiRotateCcw.js +27 -0
- package/dist/icons/fi/FiUpload.js +40 -0
- package/dist/icons/fi/FiX.js +37 -0
- package/dist/icons/fi/FiZap.js +23 -0
- package/dist/icons/gi/GiSpy.js +16 -0
- package/dist/icons/go/GoGitCommit.js +16 -0
- package/dist/icons/go/GoGitPullRequest.js +20 -0
- package/dist/icons/go/GoIssueOpened.js +16 -0
- package/dist/icons/go/GoPlus.js +16 -0
- package/dist/icons/go/GoRepoForked.js +28 -0
- package/dist/icons/go/GoSignOut.js +16 -0
- package/dist/icons/go/GoSkip.js +20 -0
- package/dist/icons/go/GoVideo.js +20 -0
- package/dist/icons/gr/GrCloudComputer.js +20 -0
- package/dist/icons/gr/GrInbox.js +20 -0
- package/dist/icons/gr/GrServerCluster.js +20 -0
- package/dist/icons/gr/GrStorage.js +20 -0
- package/dist/icons/gr/GrTasks.js +20 -0
- package/dist/icons/hi/HiCog.js +24 -0
- package/dist/icons/hi/HiDuplicate.js +24 -0
- package/dist/icons/hi/HiOutlineArchive.js +26 -0
- package/dist/icons/hi/HiOutlineClipboardCopy.js +26 -0
- package/dist/icons/hi/HiOutlineHome.js +26 -0
- package/dist/icons/hi/HiQuestionMarkCircle.js +24 -0
- package/dist/icons/hi/HiServer.js +24 -0
- package/dist/icons/hi2/HiMiniCheckCircle.js +24 -0
- package/dist/icons/hi2/HiMiniLanguage.js +28 -0
- package/dist/icons/hi2/HiMiniMinusCircle.js +24 -0
- package/dist/icons/hi2/HiMiniXCircle.js +24 -0
- package/dist/icons/hi2/HiSparkles.js +24 -0
- package/dist/icons/im/ImSpinner5.js +19 -0
- package/dist/icons/io/IoIosNotifications.js +16 -0
- package/dist/icons/io/IoMdBuild.js +16 -0
- package/dist/icons/io/IoMdClose.js +16 -0
- package/dist/icons/io5/IoCloudUploadOutline.js +32 -0
- package/dist/icons/io5/IoDocumentTextOutline.js +31 -0
- package/dist/icons/io5/IoFileTrayFullOutline.js +31 -0
- package/dist/icons/io5/IoHeart.js +16 -0
- package/dist/icons/io5/IoHeartDislike.js +16 -0
- package/dist/icons/io5/IoHeartOutline.js +22 -0
- package/dist/icons/io5/IoInformationCircleOutline.js +50 -0
- package/dist/icons/io5/IoSettingsOutline.js +22 -0
- package/dist/icons/io5/IoWarningOutline.js +40 -0
- package/dist/icons/lu/LuArrowRight.js +27 -0
- package/dist/icons/lu/LuBadgeCheck.js +27 -0
- package/dist/icons/lu/LuBrainCircuit.js +101 -0
- package/dist/icons/lu/LuCalendar.js +46 -0
- package/dist/icons/lu/LuCheck.js +23 -0
- package/dist/icons/lu/LuChevronLeft.js +23 -0
- package/dist/icons/lu/LuChevronRight.js +23 -0
- package/dist/icons/lu/LuExternalLink.js +35 -0
- package/dist/icons/lu/LuEye.js +31 -0
- package/dist/icons/lu/LuEyeOff.js +40 -0
- package/dist/icons/lu/LuFolderTree.js +40 -0
- package/dist/icons/lu/LuIdCard.js +55 -0
- package/dist/icons/lu/LuLogs.js +65 -0
- package/dist/icons/lu/LuMail.js +33 -0
- package/dist/icons/lu/LuMegaphone.js +27 -0
- package/dist/icons/lu/LuMoon.js +23 -0
- package/dist/icons/lu/LuPartyPopper.js +65 -0
- package/dist/icons/lu/LuSettings2.js +48 -0
- package/dist/icons/lu/LuSheet.js +72 -0
- package/dist/icons/lu/LuShield.js +23 -0
- package/dist/icons/lu/LuSun.js +69 -0
- package/dist/icons/lu/LuX.js +27 -0
- package/dist/icons/lu/LuZoomIn.js +59 -0
- package/dist/icons/lu/LuZoomOut.js +49 -0
- package/dist/icons/md/MdClear.js +23 -0
- package/dist/icons/md/MdDragHandle.js +23 -0
- package/dist/icons/md/MdInstallDesktop.js +31 -0
- package/dist/icons/md/MdOutlineAttachMoney.js +23 -0
- package/dist/icons/md/MdOutlineMoneyOff.js +23 -0
- package/dist/icons/md/MdPieChart.js +23 -0
- package/dist/icons/md/MdRefresh.js +23 -0
- package/dist/icons/md/MdReplay.js +23 -0
- package/dist/icons/md/MdSmartphone.js +23 -0
- package/dist/icons/pi/PiArrowBendUpRightBold.js +19 -0
- package/dist/icons/pi/PiPlugsConnectedFill.js +19 -0
- package/dist/icons/pi/PiRectangleDashed.js +19 -0
- package/dist/icons/pi/PiShareBold.js +19 -0
- package/dist/icons/si/SiAnthropic.js +19 -0
- package/dist/icons/si/SiHelm.js +19 -0
- package/dist/icons/si/SiKubernetes.js +19 -0
- package/dist/icons/tb/TbAlertTriangle.js +35 -0
- package/dist/icons/tb/TbAlertTriangleFilled.js +19 -0
- package/dist/icons/tb/TbApi.js +40 -0
- package/dist/icons/tb/TbBrain.js +50 -0
- package/dist/icons/tb/TbBuildingTunnel.js +65 -0
- package/dist/icons/tb/TbEdit.js +35 -0
- package/dist/icons/tb/TbLayoutSidebar.js +27 -0
- package/dist/icons/tb/TbLayoutSidebarLeftCollapse.js +35 -0
- package/dist/icons/tb/TbLayoutSidebarRightCollapse.js +35 -0
- package/dist/icons/tb/TbUser.js +27 -0
- package/dist/icons/tb/TbUserOff.js +35 -0
- package/dist/icons/tb/TbWorldShare.js +55 -0
- package/dist/icons/tb/TbWorldWww.js +65 -0
- package/dist/icons/ti/TiArrowSortedDown.js +20 -0
- package/dist/icons/ti/TiArrowSortedUp.js +20 -0
- package/dist/icons/ti/TiArrowUnsorted.js +20 -0
- package/dist/icons/ti/TiCancel.js +20 -0
- package/dist/icons/vsc/VscChromeMinimize.js +19 -0
- package/dist/icons/vsc/VscJson.js +19 -0
- package/dist/icons/vsc/VscLayoutSidebarLeft.js +19 -0
- package/dist/icons/vsc/VscPass.js +27 -0
- package/dist/icons/vsc/VscSplitHorizontal.js +19 -0
- package/dist/icons/vsc/VscTerminalPowershell.js +19 -0
- package/dist/icons.d.ts +6 -21
- package/dist/icons.js +257 -38
- package/dist/list/ActionToolbar.js +2 -2
- package/dist/list/ListPager.js +4 -3
- package/dist/list/ListTable.js +2 -2
- package/dist/list/ListViewControls.js +13 -8
- package/dist/list/RowContextMenu.js +21 -12
- package/dist/list/listSearch.js +6 -5
- package/dist/logviewer/LogViewer.js +21 -11
- package/package.json +2 -2
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import { safeUrl } from "../safeUrl.js";
|
|
2
2
|
import { useNotify, useSlots, useStrings } from "../components/Provider.js";
|
|
3
|
-
import {
|
|
3
|
+
import { BiSolidTrashAlt } from "../icons/bi/BiSolidTrashAlt.js";
|
|
4
|
+
import { BsArrowsCollapse } from "../icons/bs/BsArrowsCollapse.js";
|
|
5
|
+
import { FaAngleDown } from "../icons/fa/FaAngleDown.js";
|
|
6
|
+
import { FaLink } from "../icons/fa/FaLink.js";
|
|
7
|
+
import { FaRegFolder } from "../icons/fa/FaRegFolder.js";
|
|
8
|
+
import { FaUsers } from "../icons/fa/FaUsers.js";
|
|
9
|
+
import { FiDownload } from "../icons/fi/FiDownload.js";
|
|
10
|
+
import { FiFile } from "../icons/fi/FiFile.js";
|
|
11
|
+
import { FiFileText } from "../icons/fi/FiFileText.js";
|
|
12
|
+
import { FiUpload } from "../icons/fi/FiUpload.js";
|
|
13
|
+
import { HiOutlineClipboardCopy } from "../icons/hi/HiOutlineClipboardCopy.js";
|
|
14
|
+
import { LuChevronRight } from "../icons/lu/LuChevronRight.js";
|
|
15
|
+
import { LuEye } from "../icons/lu/LuEye.js";
|
|
16
|
+
import { MdRefresh } from "../icons/md/MdRefresh.js";
|
|
17
|
+
import { PiShareBold } from "../icons/pi/PiShareBold.js";
|
|
18
|
+
import { TbAlertTriangle } from "../icons/tb/TbAlertTriangle.js";
|
|
4
19
|
import { keyedByContent } from "../components/keys.js";
|
|
5
20
|
import { TOOLTIP_ID, TooltipInfo } from "../components/Tooltip.js";
|
|
6
21
|
import { ConfirmModal } from "../components/ConfirmModal.js";
|
|
@@ -51,7 +66,7 @@ function UriCard({ value }) {
|
|
|
51
66
|
/* @__PURE__ */ jsx("span", {
|
|
52
67
|
className: "shrink-0 inline-flex items-center justify-center px-3 border-l theme-border theme-muted-text group-hover:text-(--theme-link) group-hover:bg-(--theme-link)/5 transition-colors duration-150",
|
|
53
68
|
title: t.chrome.copyToClipboard,
|
|
54
|
-
children: /* @__PURE__ */ jsx(
|
|
69
|
+
children: /* @__PURE__ */ jsx(HiOutlineClipboardCopy, { className: "h-3.5 w-3.5" })
|
|
55
70
|
})
|
|
56
71
|
]
|
|
57
72
|
});
|
|
@@ -172,6 +187,40 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
172
187
|
const [accessDrawerOpen, setAccessDrawerOpen] = useState(false);
|
|
173
188
|
const [connectionIssuesMessage, updateConnectionIssuesMessage] = useState(/* @__PURE__ */ new Map());
|
|
174
189
|
const [hasCorsIssue, setHasCorsIssue] = useState(/* @__PURE__ */ new Map());
|
|
190
|
+
const storageRoots = useMemo(() => {
|
|
191
|
+
const roots = /* @__PURE__ */ new Map();
|
|
192
|
+
for (const node of rootNodes) {
|
|
193
|
+
const candidates = node.root ? [node] : parentToChildrenMap[node.path] ?? [];
|
|
194
|
+
for (const root of candidates) if (root.root && root.storageId) roots.set(root.storageId, root.path);
|
|
195
|
+
}
|
|
196
|
+
return roots;
|
|
197
|
+
}, [rootNodes, parentToChildrenMap]);
|
|
198
|
+
const seenStorageRootsRef = useRef(storageRoots);
|
|
199
|
+
const forgetStorages = useEffectEvent((removed) => {
|
|
200
|
+
const isUnder = (path) => removed.some(([, root]) => path !== root && path.startsWith(root));
|
|
201
|
+
const isWithin = (path) => removed.some(([, root]) => path.startsWith(root));
|
|
202
|
+
for (const path of [...fetchesInFlightRef.current.keys()]) if (isWithin(path)) fetchesInFlightRef.current.delete(path);
|
|
203
|
+
setListings((prev) => removed.reduce((next, [, root]) => clearListingsUnder(next, root), prev));
|
|
204
|
+
setLoadingPaths((prev) => new Set([...prev].filter((path) => !isWithin(path))));
|
|
205
|
+
setExpandedPaths((prev) => new Set([...prev].filter((path) => !isUnder(path))));
|
|
206
|
+
const withoutRemoved = (prev) => {
|
|
207
|
+
const next = new Map(prev);
|
|
208
|
+
for (const [id] of removed) next.delete(id);
|
|
209
|
+
return next;
|
|
210
|
+
};
|
|
211
|
+
updateConnectionIssuesMessage(withoutRemoved);
|
|
212
|
+
setHasCorsIssue(withoutRemoved);
|
|
213
|
+
const selectedRoot = removed.find(([, root]) => normalizedSelectedPath.startsWith(root))?.[1];
|
|
214
|
+
if (selectedRoot) {
|
|
215
|
+
const parent = getParentPath(selectedRoot);
|
|
216
|
+
setSelectedPath(treeMap[parent] ? parent : "");
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
useEffect(() => {
|
|
220
|
+
const removed = [...seenStorageRootsRef.current].filter(([id]) => !storageRoots.has(id));
|
|
221
|
+
seenStorageRootsRef.current = storageRoots;
|
|
222
|
+
if (removed.length > 0) forgetStorages(removed);
|
|
223
|
+
}, [storageRoots]);
|
|
175
224
|
const [uploadModalOpen, setUploadModalOpen] = useState(false);
|
|
176
225
|
const [createFolderTarget, setCreateFolderTarget] = useState(null);
|
|
177
226
|
const [pendingUpload, setPendingUpload] = useState(null);
|
|
@@ -555,7 +604,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
555
604
|
return [{
|
|
556
605
|
key: "create-folder",
|
|
557
606
|
label: t.createFolder.action,
|
|
558
|
-
icon: /* @__PURE__ */ jsx(
|
|
607
|
+
icon: /* @__PURE__ */ jsx(FaRegFolder, {}),
|
|
559
608
|
onSelect: () => openCreateFolder(node)
|
|
560
609
|
}];
|
|
561
610
|
};
|
|
@@ -569,20 +618,20 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
569
618
|
if (isFile && canPreview(node)) actions.push({
|
|
570
619
|
key: "preview",
|
|
571
620
|
label: t.preview.preview,
|
|
572
|
-
icon: /* @__PURE__ */ jsx(
|
|
621
|
+
icon: /* @__PURE__ */ jsx(LuEye, {}),
|
|
573
622
|
onSelect: () => openPreview(node)
|
|
574
623
|
});
|
|
575
624
|
if (isFile) {
|
|
576
625
|
actions.push({
|
|
577
626
|
key: "download",
|
|
578
627
|
label: t.preview.download,
|
|
579
|
-
icon: /* @__PURE__ */ jsx(
|
|
628
|
+
icon: /* @__PURE__ */ jsx(FiDownload, {}),
|
|
580
629
|
onSelect: () => downloadNode(node)
|
|
581
630
|
});
|
|
582
631
|
if (nodeCanShare) actions.push({
|
|
583
632
|
key: "share",
|
|
584
633
|
label: t.preview.shareFile,
|
|
585
|
-
icon: /* @__PURE__ */ jsx(
|
|
634
|
+
icon: /* @__PURE__ */ jsx(PiShareBold, {}),
|
|
586
635
|
onSelect: () => onShareFileButtonClick(node)
|
|
587
636
|
});
|
|
588
637
|
}
|
|
@@ -590,20 +639,20 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
590
639
|
if (nodeCanWrite && !node.root) actions.push({
|
|
591
640
|
key: "delete",
|
|
592
641
|
label: t.preview.delete,
|
|
593
|
-
icon: /* @__PURE__ */ jsx(
|
|
642
|
+
icon: /* @__PURE__ */ jsx(BiSolidTrashAlt, {}),
|
|
594
643
|
destructive: true,
|
|
595
644
|
onSelect: () => deleteNode(node)
|
|
596
645
|
});
|
|
597
646
|
const lead = [{
|
|
598
647
|
kind: "action",
|
|
599
648
|
label: isFile ? t.preview.viewDetails : t.preview.openFolder,
|
|
600
|
-
icon: isFile ? /* @__PURE__ */ jsx(
|
|
649
|
+
icon: isFile ? /* @__PURE__ */ jsx(FiFileText, {}) : /* @__PURE__ */ jsx(FaRegFolder, {}),
|
|
601
650
|
onSelect: () => handleSelectTreeItem(node.path, node)
|
|
602
651
|
}];
|
|
603
652
|
const uriExtras = uris.map((value) => ({
|
|
604
653
|
label: `${getUriScheme(value).toUpperCase()} URI`,
|
|
605
654
|
value,
|
|
606
|
-
icon: /* @__PURE__ */ jsx(
|
|
655
|
+
icon: /* @__PURE__ */ jsx(FaLink, {})
|
|
607
656
|
}));
|
|
608
657
|
return assembleRowMenu({
|
|
609
658
|
lead,
|
|
@@ -639,7 +688,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
639
688
|
const label = node.displayName || node.name;
|
|
640
689
|
return /* @__PURE__ */ jsxs("span", {
|
|
641
690
|
className: "flex min-w-0 items-center gap-1",
|
|
642
|
-
children: [i > 0 && /* @__PURE__ */ jsx(
|
|
691
|
+
children: [i > 0 && /* @__PURE__ */ jsx(LuChevronRight, { className: "h-3 w-3 shrink-0 text-(--theme-muted-text-color)" }), isLast ? /* @__PURE__ */ jsx("span", {
|
|
643
692
|
className: "truncate font-semibold text-(--theme-app)",
|
|
644
693
|
children: label
|
|
645
694
|
}) : /* @__PURE__ */ jsx("button", {
|
|
@@ -884,7 +933,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
884
933
|
"data-tooltip-class-name": "z-50",
|
|
885
934
|
className: "inline-flex items-center justify-center h-7 w-7 rounded-md cursor-pointer theme-muted-text hover:theme-text hover:theme-hover transition-colors duration-150 focus:outline-none focus-visible:ring-1 focus-visible:ring-(--theme-link)",
|
|
886
935
|
onClick: () => handleRefresh(),
|
|
887
|
-
children: /* @__PURE__ */ jsx(
|
|
936
|
+
children: /* @__PURE__ */ jsx(MdRefresh, { className: "h-3.5 w-3.5" })
|
|
888
937
|
}), /* @__PURE__ */ jsx("button", {
|
|
889
938
|
type: "button",
|
|
890
939
|
"aria-label": t.chrome.collapse,
|
|
@@ -893,7 +942,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
893
942
|
"data-tooltip-class-name": "z-50",
|
|
894
943
|
className: "inline-flex items-center justify-center h-7 w-7 rounded-md cursor-pointer theme-muted-text hover:theme-text hover:theme-hover transition-colors duration-150 focus:outline-none focus-visible:ring-1 focus-visible:ring-(--theme-link)",
|
|
895
944
|
onClick: collapseAll,
|
|
896
|
-
children: /* @__PURE__ */ jsx(
|
|
945
|
+
children: /* @__PURE__ */ jsx(BsArrowsCollapse, { className: "h-3.5 w-3.5" })
|
|
897
946
|
})]
|
|
898
947
|
})
|
|
899
948
|
}), /* @__PURE__ */ jsx(TreeView, {
|
|
@@ -955,7 +1004,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
955
1004
|
getItems: () => [{
|
|
956
1005
|
kind: "action",
|
|
957
1006
|
label: t.preview.open,
|
|
958
|
-
icon: /* @__PURE__ */ jsx(
|
|
1007
|
+
icon: /* @__PURE__ */ jsx(FaRegFolder, {}),
|
|
959
1008
|
onSelect: () => openUserNode(rootNode)
|
|
960
1009
|
}],
|
|
961
1010
|
openMenu,
|
|
@@ -1012,7 +1061,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1012
1061
|
className: "btn btn-info cursor-pointer flex items-center justify-center",
|
|
1013
1062
|
disabled: selectedNode.type === "file" || !selectedNode.storageId,
|
|
1014
1063
|
onClick: () => setCreateFolderTarget(selectedNode),
|
|
1015
|
-
children: [/* @__PURE__ */ jsx(
|
|
1064
|
+
children: [/* @__PURE__ */ jsx(FaRegFolder, { className: "h-4 w-4 mr-2" }), /* @__PURE__ */ jsx("span", {
|
|
1016
1065
|
className: "hidden md:inline",
|
|
1017
1066
|
children: t.createFolder.action
|
|
1018
1067
|
})]
|
|
@@ -1021,10 +1070,10 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1021
1070
|
"aria-label": t.chrome.upload,
|
|
1022
1071
|
className: "btn btn-info cursor-pointer flex items-center justify-between pr-0.5!",
|
|
1023
1072
|
disabled: selectedNode.type === "file" || !selectedNode.storageId,
|
|
1024
|
-
children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(
|
|
1073
|
+
children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(FiUpload, { className: "h-4 w-4 mr-2" }), /* @__PURE__ */ jsx("span", {
|
|
1025
1074
|
className: "hidden md:inline",
|
|
1026
1075
|
children: t.chrome.upload
|
|
1027
|
-
})] }), /* @__PURE__ */ jsx(
|
|
1076
|
+
})] }), /* @__PURE__ */ jsx(FaAngleDown, { className: "h-4 w-4 ml-2" })]
|
|
1028
1077
|
}), /* @__PURE__ */ jsxs(MenuItems, {
|
|
1029
1078
|
transition: true,
|
|
1030
1079
|
anchor: "bottom end",
|
|
@@ -1045,10 +1094,10 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1045
1094
|
"aria-label": t.chrome.download,
|
|
1046
1095
|
className: "btn btn-info cursor-pointer flex items-center justify-between pr-0.5!",
|
|
1047
1096
|
disabled: checkedItems.size === 0 && selectedNode.type !== "file" || hasFolderSelected() || !selectedNode.storageId,
|
|
1048
|
-
children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(
|
|
1097
|
+
children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(FiDownload, { className: "h-4 w-4 mr-2" }), /* @__PURE__ */ jsx("span", {
|
|
1049
1098
|
className: "hidden md:inline",
|
|
1050
1099
|
children: t.chrome.download
|
|
1051
|
-
})] }), /* @__PURE__ */ jsx(
|
|
1100
|
+
})] }), /* @__PURE__ */ jsx(FaAngleDown, { className: "h-4 w-4 ml-2" })]
|
|
1052
1101
|
}), /* @__PURE__ */ jsxs(MenuItems, {
|
|
1053
1102
|
transition: true,
|
|
1054
1103
|
anchor: "bottom end",
|
|
@@ -1079,7 +1128,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1079
1128
|
disabled: !selectedNode.storageId,
|
|
1080
1129
|
onClick: () => setAccessDrawerOpen(true),
|
|
1081
1130
|
hidden: groups.length === 0 || !selectedNodeCanManageAccess,
|
|
1082
|
-
children: [/* @__PURE__ */ jsx(
|
|
1131
|
+
children: [/* @__PURE__ */ jsx(FaUsers, { className: "h-4 w-4 mr-2" }), /* @__PURE__ */ jsx("span", {
|
|
1083
1132
|
className: "hidden md:inline",
|
|
1084
1133
|
children: t.chrome.manageAccess
|
|
1085
1134
|
})]
|
|
@@ -1090,7 +1139,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1090
1139
|
className: "btn btn-destructive cursor-pointer flex items-center justify-center",
|
|
1091
1140
|
disabled: checkedItems.size === 0 && selectedNode.type !== "file" || !selectedNode.storageId,
|
|
1092
1141
|
onClick: onDeleteClick,
|
|
1093
|
-
children: [/* @__PURE__ */ jsx(
|
|
1142
|
+
children: [/* @__PURE__ */ jsx(BiSolidTrashAlt, { className: "h-4 w-4 mr-2" }), /* @__PURE__ */ jsx("span", {
|
|
1094
1143
|
className: "hidden md:inline",
|
|
1095
1144
|
children: t.chrome.delete
|
|
1096
1145
|
})]
|
|
@@ -1136,7 +1185,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1136
1185
|
}),
|
|
1137
1186
|
selectedNode.type === "file" && (() => {
|
|
1138
1187
|
const uris = getNodeUris(selectedNode);
|
|
1139
|
-
const fileIcon = getNodeIcon(selectedNode, slots.storageIconUrl, t.chrome.storageIconAlt) ?? /* @__PURE__ */ jsx(
|
|
1188
|
+
const fileIcon = getNodeIcon(selectedNode, slots.storageIconUrl, t.chrome.storageIconAlt) ?? /* @__PURE__ */ jsx(FiFile, { className: "h-5 w-5 theme-muted-text" });
|
|
1140
1189
|
const modifiedDt = selectedNode.modified ? DateTime.fromISO(selectedNode.modified) : null;
|
|
1141
1190
|
const createdDt = selectedNode.created ? DateTime.fromISO(selectedNode.created) : null;
|
|
1142
1191
|
const previewable = canPreview(selectedNode);
|
|
@@ -1296,7 +1345,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1296
1345
|
/* @__PURE__ */ jsx(CreateModal, {
|
|
1297
1346
|
open: !!createFolderTarget,
|
|
1298
1347
|
onClose: () => setCreateFolderTarget(null),
|
|
1299
|
-
typeIcon: /* @__PURE__ */ jsx(
|
|
1348
|
+
typeIcon: /* @__PURE__ */ jsx(FaRegFolder, { className: "w-3 h-3" }),
|
|
1300
1349
|
typeLabel: t.createFolder.folder,
|
|
1301
1350
|
namePlaceholder: t.createFolder.namePlaceholder,
|
|
1302
1351
|
submitLabel: t.createFolder.submit,
|
|
@@ -1353,7 +1402,7 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
|
|
|
1353
1402
|
className: "mt-3 p-3 bg-amber-50 border border-amber-200 rounded-lg",
|
|
1354
1403
|
children: /* @__PURE__ */ jsxs("div", {
|
|
1355
1404
|
className: "flex items-start gap-2",
|
|
1356
|
-
children: [/* @__PURE__ */ jsx(
|
|
1405
|
+
children: [/* @__PURE__ */ jsx(TbAlertTriangle, { className: "w-4 h-4 text-amber-600 shrink-0 mt-0.5" }), /* @__PURE__ */ jsxs("div", {
|
|
1357
1406
|
className: "text-amber-800",
|
|
1358
1407
|
children: [/* @__PURE__ */ jsx("div", {
|
|
1359
1408
|
className: "font-semibold mb-1",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useStrings } from "../../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FaExpand } from "../../icons/fa/FaExpand.js";
|
|
3
3
|
import { formatFileSize } from "../lib/utils.js";
|
|
4
4
|
import { getPreviewKind } from "./previewType.js";
|
|
5
5
|
import { StreamedBadge } from "./StreamedBadge.js";
|
|
@@ -36,7 +36,7 @@ function FilePreviewInline({ node, storage, getPresignedUrl, onOpenFull, onDownl
|
|
|
36
36
|
type: "button",
|
|
37
37
|
className: "btn btn-neutral cursor-pointer",
|
|
38
38
|
onClick: () => onOpenFull(node),
|
|
39
|
-
children: [/* @__PURE__ */ jsx(
|
|
39
|
+
children: [/* @__PURE__ */ jsx(FaExpand, { className: "mr-2 h-4 w-4" }), t.preview.openFullPreview]
|
|
40
40
|
})]
|
|
41
41
|
})]
|
|
42
42
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useStrings } from "../../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FaLock } from "../../icons/fa/FaLock.js";
|
|
3
3
|
import { TOOLTIP_ID } from "../../components/Tooltip.js";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/file-explorer/FilePreview/StreamedBadge.tsx
|
|
@@ -9,7 +9,7 @@ function StreamedBadge() {
|
|
|
9
9
|
className: "inline-flex shrink-0 items-center gap-1 rounded-full border border-green-500/40 bg-green-500/15 px-2 py-0.5 text-[11px] text-green-600",
|
|
10
10
|
"data-tooltip-id": TOOLTIP_ID,
|
|
11
11
|
"data-tooltip-content": t.preview.streamedTooltip,
|
|
12
|
-
children: [/* @__PURE__ */ jsx(
|
|
12
|
+
children: [/* @__PURE__ */ jsx(FaLock, { className: "h-2.5 w-2.5" }), t.preview.streamed]
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { useStrings } from "../../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { BsFileEarmarkZip } from "../../icons/bs/BsFileEarmarkZip.js";
|
|
3
|
+
import { BsMusicNoteBeamed } from "../../icons/bs/BsMusicNoteBeamed.js";
|
|
4
|
+
import { FaLock } from "../../icons/fa/FaLock.js";
|
|
5
|
+
import { FiDownload } from "../../icons/fi/FiDownload.js";
|
|
6
|
+
import { FiFile } from "../../icons/fi/FiFile.js";
|
|
3
7
|
import { positionKeys, withPositionKeys } from "../../components/keys.js";
|
|
4
8
|
import Loader from "../../components/Loader.js";
|
|
5
9
|
import Markdown from "../../components/Markdown.js";
|
|
@@ -36,19 +40,19 @@ function FilePreviewViewer({ node, kind, url, urlLoading, urlError, zoom = 100,
|
|
|
36
40
|
return { corsError: false };
|
|
37
41
|
}, [url]);
|
|
38
42
|
if (urlError) return /* @__PURE__ */ jsx(NotPreviewable, {
|
|
39
|
-
icon: /* @__PURE__ */ jsx(
|
|
43
|
+
icon: /* @__PURE__ */ jsx(FiFile, { className: "h-9 w-9 theme-muted-text" }),
|
|
40
44
|
title: t.preview.errorTitle,
|
|
41
45
|
message: urlError,
|
|
42
46
|
onDownload
|
|
43
47
|
});
|
|
44
48
|
if (kind === "archive") return /* @__PURE__ */ jsx(NotPreviewable, {
|
|
45
|
-
icon: /* @__PURE__ */ jsx(
|
|
49
|
+
icon: /* @__PURE__ */ jsx(BsFileEarmarkZip, { className: "h-9 w-9 text-(--theme-link)" }),
|
|
46
50
|
title: t.preview.archiveTitle,
|
|
47
51
|
message: t.preview.archiveMessage,
|
|
48
52
|
onDownload
|
|
49
53
|
});
|
|
50
54
|
if (kind === "unsupported") return /* @__PURE__ */ jsx(NotPreviewable, {
|
|
51
|
-
icon: /* @__PURE__ */ jsx(
|
|
55
|
+
icon: /* @__PURE__ */ jsx(FiFile, { className: "h-9 w-9 theme-muted-text" }),
|
|
52
56
|
title: t.preview.unsupportedTitle,
|
|
53
57
|
message: t.preview.unsupportedMessage,
|
|
54
58
|
onDownload
|
|
@@ -153,7 +157,7 @@ function AudioView({ node, url, onDownload }) {
|
|
|
153
157
|
children: [
|
|
154
158
|
/* @__PURE__ */ jsx("div", {
|
|
155
159
|
className: "flex h-28 w-28 items-center justify-center rounded-2xl bg-linear-to-br from-(--theme-element) to-(--theme-link) shadow-lg",
|
|
156
|
-
children: /* @__PURE__ */ jsx(
|
|
160
|
+
children: /* @__PURE__ */ jsx(BsMusicNoteBeamed, { className: "h-12 w-12 text-white" })
|
|
157
161
|
}),
|
|
158
162
|
/* @__PURE__ */ jsxs("div", {
|
|
159
163
|
className: "text-center",
|
|
@@ -179,7 +183,7 @@ function AudioView({ node, url, onDownload }) {
|
|
|
179
183
|
function PreviewError({ onDownload }) {
|
|
180
184
|
const t = useStrings().fileExplorer;
|
|
181
185
|
return /* @__PURE__ */ jsx(NotPreviewable, {
|
|
182
|
-
icon: /* @__PURE__ */ jsx(
|
|
186
|
+
icon: /* @__PURE__ */ jsx(FiFile, { className: "h-9 w-9 theme-muted-text" }),
|
|
183
187
|
title: t.preview.errorTitle,
|
|
184
188
|
message: t.preview.previewError,
|
|
185
189
|
onDownload
|
|
@@ -250,7 +254,7 @@ function CodeView({ node, url, onDownload, storage, onCorsRetry }) {
|
|
|
250
254
|
}),
|
|
251
255
|
/* @__PURE__ */ jsxs("span", {
|
|
252
256
|
className: "inline-flex shrink-0 items-center gap-1 rounded-full border theme-border px-2 py-0.5 text-[11px] theme-muted-text",
|
|
253
|
-
children: [/* @__PURE__ */ jsx(
|
|
257
|
+
children: [/* @__PURE__ */ jsx(FaLock, { className: "h-2.5 w-2.5" }), t.readOnly]
|
|
254
258
|
})
|
|
255
259
|
]
|
|
256
260
|
}), /* @__PURE__ */ jsx("div", {
|
|
@@ -476,7 +480,7 @@ function NotPreviewable({ icon, title, message, onDownload }) {
|
|
|
476
480
|
type: "button",
|
|
477
481
|
className: "btn btn-info cursor-pointer",
|
|
478
482
|
onClick: onDownload,
|
|
479
|
-
children: [/* @__PURE__ */ jsx(
|
|
483
|
+
children: [/* @__PURE__ */ jsx(FiDownload, { className: "mr-2 h-4 w-4" }), t.preview.downloadInstead]
|
|
480
484
|
})
|
|
481
485
|
]
|
|
482
486
|
})
|
|
@@ -495,7 +499,7 @@ function TooLargeInline({ onDownload }) {
|
|
|
495
499
|
type: "button",
|
|
496
500
|
className: "btn btn-info cursor-pointer",
|
|
497
501
|
onClick: onDownload,
|
|
498
|
-
children: [/* @__PURE__ */ jsx(
|
|
502
|
+
children: [/* @__PURE__ */ jsx(FiDownload, { className: "mr-2 h-4 w-4" }), t.preview.downloadInstead]
|
|
499
503
|
})]
|
|
500
504
|
})
|
|
501
505
|
});
|
|
@@ -513,7 +517,7 @@ function InlineError({ message, onDownload }) {
|
|
|
513
517
|
type: "button",
|
|
514
518
|
className: "btn btn-neutral cursor-pointer",
|
|
515
519
|
onClick: onDownload,
|
|
516
|
-
children: [/* @__PURE__ */ jsx(
|
|
520
|
+
children: [/* @__PURE__ */ jsx(FiDownload, { className: "mr-2 h-4 w-4" }), t.preview.downloadInstead]
|
|
517
521
|
})]
|
|
518
522
|
})
|
|
519
523
|
});
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { useStrings } from "../../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FaLink } from "../../icons/fa/FaLink.js";
|
|
3
|
+
import { FiDownload } from "../../icons/fi/FiDownload.js";
|
|
4
|
+
import { FiFile } from "../../icons/fi/FiFile.js";
|
|
5
|
+
import { IoMdClose } from "../../icons/io/IoMdClose.js";
|
|
6
|
+
import { LuChevronLeft } from "../../icons/lu/LuChevronLeft.js";
|
|
7
|
+
import { LuChevronRight } from "../../icons/lu/LuChevronRight.js";
|
|
8
|
+
import { LuZoomIn } from "../../icons/lu/LuZoomIn.js";
|
|
9
|
+
import { LuZoomOut } from "../../icons/lu/LuZoomOut.js";
|
|
3
10
|
import { formatFileSize } from "../lib/utils.js";
|
|
4
11
|
import { getPreviewKind } from "./previewType.js";
|
|
5
12
|
import { StreamedBadge } from "./StreamedBadge.js";
|
|
@@ -71,7 +78,7 @@ function FilePreview({ open, node, siblings, storage, getPresignedUrl, onNavigat
|
|
|
71
78
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
72
79
|
className: "flex min-w-0 items-center gap-2.5",
|
|
73
80
|
children: [
|
|
74
|
-
/* @__PURE__ */ jsx(
|
|
81
|
+
/* @__PURE__ */ jsx(FiFile, { className: cx("h-4 w-4 shrink-0", !floatingChrome && "theme-muted-text") }),
|
|
75
82
|
/* @__PURE__ */ jsx("span", {
|
|
76
83
|
className: "truncate font-semibold",
|
|
77
84
|
children: node.name
|
|
@@ -99,19 +106,19 @@ function FilePreview({ open, node, siblings, storage, getPresignedUrl, onNavigat
|
|
|
99
106
|
overlay: floatingChrome,
|
|
100
107
|
label: t.preview.copyUri,
|
|
101
108
|
onClick: () => onCopyUri(node),
|
|
102
|
-
children: /* @__PURE__ */ jsx(
|
|
109
|
+
children: /* @__PURE__ */ jsx(FaLink, { className: "h-4 w-4" })
|
|
103
110
|
}),
|
|
104
111
|
/* @__PURE__ */ jsx(ChromeButton, {
|
|
105
112
|
overlay: floatingChrome,
|
|
106
113
|
label: t.preview.download,
|
|
107
114
|
onClick: () => onDownload(node),
|
|
108
|
-
children: /* @__PURE__ */ jsx(
|
|
115
|
+
children: /* @__PURE__ */ jsx(FiDownload, { className: "h-4 w-4" })
|
|
109
116
|
}),
|
|
110
117
|
/* @__PURE__ */ jsx(ChromeButton, {
|
|
111
118
|
overlay: floatingChrome,
|
|
112
119
|
label: t.preview.close,
|
|
113
120
|
onClick: onClose,
|
|
114
|
-
children: /* @__PURE__ */ jsx(
|
|
121
|
+
children: /* @__PURE__ */ jsx(IoMdClose, { className: "h-4 w-4" })
|
|
115
122
|
})
|
|
116
123
|
]
|
|
117
124
|
})]
|
|
@@ -130,7 +137,7 @@ function FilePreview({ open, node, siblings, storage, getPresignedUrl, onNavigat
|
|
|
130
137
|
overlay: floatingChrome,
|
|
131
138
|
label: t.preview.zoomOut,
|
|
132
139
|
onClick: () => setZoom((z) => Math.max(25, z - 25)),
|
|
133
|
-
children: /* @__PURE__ */ jsx(
|
|
140
|
+
children: /* @__PURE__ */ jsx(LuZoomOut, { className: "h-3.5 w-3.5" })
|
|
134
141
|
}),
|
|
135
142
|
/* @__PURE__ */ jsxs("span", {
|
|
136
143
|
className: "min-w-11 text-center text-xs tabular-nums",
|
|
@@ -140,7 +147,7 @@ function FilePreview({ open, node, siblings, storage, getPresignedUrl, onNavigat
|
|
|
140
147
|
overlay: floatingChrome,
|
|
141
148
|
label: t.preview.zoomIn,
|
|
142
149
|
onClick: () => setZoom((z) => Math.min(400, z + 25)),
|
|
143
|
-
children: /* @__PURE__ */ jsx(
|
|
150
|
+
children: /* @__PURE__ */ jsx(LuZoomIn, { className: "h-3.5 w-3.5" })
|
|
144
151
|
})
|
|
145
152
|
]
|
|
146
153
|
}), /* @__PURE__ */ jsxs("div", {
|
|
@@ -151,7 +158,7 @@ function FilePreview({ open, node, siblings, storage, getPresignedUrl, onNavigat
|
|
|
151
158
|
label: t.preview.previousFile,
|
|
152
159
|
disabled: !hasPrev,
|
|
153
160
|
onClick: goPrev,
|
|
154
|
-
children: /* @__PURE__ */ jsx(
|
|
161
|
+
children: /* @__PURE__ */ jsx(LuChevronLeft, { className: "h-4 w-4" })
|
|
155
162
|
}),
|
|
156
163
|
/* @__PURE__ */ jsx("span", {
|
|
157
164
|
className: "min-w-14 text-center text-xs tabular-nums",
|
|
@@ -162,7 +169,7 @@ function FilePreview({ open, node, siblings, storage, getPresignedUrl, onNavigat
|
|
|
162
169
|
label: t.preview.nextFile,
|
|
163
170
|
disabled: !hasNext,
|
|
164
171
|
onClick: goNext,
|
|
165
|
-
children: /* @__PURE__ */ jsx(
|
|
172
|
+
children: /* @__PURE__ */ jsx(LuChevronRight, { className: "h-4 w-4" })
|
|
166
173
|
})
|
|
167
174
|
]
|
|
168
175
|
})]
|
|
@@ -259,7 +266,7 @@ function EdgeButton({ side, label, disabled, onClick }) {
|
|
|
259
266
|
},
|
|
260
267
|
className: cx("absolute top-1/2 z-20 flex h-13 w-13 -translate-y-1/2 items-center justify-center rounded-full text-white backdrop-blur", side === "left" ? "left-5" : "right-5", disabled ? "cursor-not-allowed opacity-30" : "cursor-pointer hover:bg-white/20"),
|
|
261
268
|
style: { backgroundColor: "rgba(22,27,34,.7)" },
|
|
262
|
-
children: side === "left" ? /* @__PURE__ */ jsx(
|
|
269
|
+
children: side === "left" ? /* @__PURE__ */ jsx(LuChevronLeft, { className: "h-6 w-6" }) : /* @__PURE__ */ jsx(LuChevronRight, { className: "h-6 w-6" })
|
|
263
270
|
});
|
|
264
271
|
}
|
|
265
272
|
//#endregion
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useStrings } from "../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { LuEye } from "../icons/lu/LuEye.js";
|
|
3
3
|
import { TOOLTIP_ID } from "../components/Tooltip.js";
|
|
4
4
|
import { MoreButton, useRowMenuActive } from "../list/RowContextMenu.js";
|
|
5
5
|
import { Table } from "../components/Table.js";
|
|
@@ -151,7 +151,7 @@ function FileRow({ node, icon, rowId, rowIndex, active, checked, canPreview, get
|
|
|
151
151
|
onPreview(node);
|
|
152
152
|
},
|
|
153
153
|
className: cx("rounded p-1 text-(--theme-muted-text-color) transition-colors hover:bg-(--theme-muted-panel-bg) hover:text-(--theme-app) [&>svg]:h-4 [&>svg]:w-4", menuActive ? "opacity-100" : "opacity-0 group-hover:opacity-100 focus-visible:opacity-100"),
|
|
154
|
-
children: /* @__PURE__ */ jsx(
|
|
154
|
+
children: /* @__PURE__ */ jsx(LuEye, {})
|
|
155
155
|
}), /* @__PURE__ */ jsx(MoreButton, {
|
|
156
156
|
active: menuActive,
|
|
157
157
|
onOpen: (x, y) => openRowMenu(x, y, getItems())
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useSlots, useStrings } from "../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FaRegFolder } from "../icons/fa/FaRegFolder.js";
|
|
3
|
+
import { FiFile } from "../icons/fi/FiFile.js";
|
|
3
4
|
import { canPreview } from "./FilePreview/previewType.js";
|
|
4
5
|
import { getNodeIcon } from "./helpers.js";
|
|
5
6
|
import { FileRow } from "./FileRow.js";
|
|
@@ -41,7 +42,7 @@ function FileRowsWindow({ items, padTop, padBottom, nodes, checkedItems, activeI
|
|
|
41
42
|
root: scrollEl,
|
|
42
43
|
onLoadMore: loadMore.onLoadMore
|
|
43
44
|
}, "load-more") : null;
|
|
44
|
-
const icon = getNodeIcon(node, storageIconUrl, storageIconAlt) ?? (node.type === "directory" ? /* @__PURE__ */ jsx(
|
|
45
|
+
const icon = getNodeIcon(node, storageIconUrl, storageIconAlt) ?? (node.type === "directory" ? /* @__PURE__ */ jsx(FaRegFolder, { className: "h-4 w-4 text-sky-500/80" }) : /* @__PURE__ */ jsx(FiFile, { className: "h-4 w-4 theme-muted-text" }));
|
|
45
46
|
return /* @__PURE__ */ jsx(FileRow, {
|
|
46
47
|
rowId: `${rowIdPrefix}-${item.index}`,
|
|
47
48
|
rowIndex: item.index + 2,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { useStrings } from "../components/Provider.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FaAngleRight } from "../icons/fa/FaAngleRight.js";
|
|
3
|
+
import { FaRegFolder } from "../icons/fa/FaRegFolder.js";
|
|
4
|
+
import { FaRegFolderOpen } from "../icons/fa6/FaRegFolderOpen.js";
|
|
3
5
|
import { positionKeys } from "../components/keys.js";
|
|
4
6
|
import { getParentPath } from "./lib/utils.js";
|
|
5
7
|
import { canPreview } from "./FilePreview/previewType.js";
|
|
@@ -192,8 +194,8 @@ function RowIcons({ isDirectory, isExpanded, customIcon }) {
|
|
|
192
194
|
className: "shrink-0",
|
|
193
195
|
children: customIcon
|
|
194
196
|
});
|
|
195
|
-
const folder = isExpanded ? /* @__PURE__ */ jsx(
|
|
196
|
-
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(
|
|
197
|
+
const folder = isExpanded ? /* @__PURE__ */ jsx(FaRegFolderOpen, { className: "h-4 w-4 mr-1 text-sky-500" }) : /* @__PURE__ */ jsx(FaRegFolder, { className: "h-4 w-4 mr-1 text-sky-500/80" });
|
|
198
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(FaAngleRight, { className: cx("h-3.5 w-3.5 shrink-0 theme-muted-text transition-transform duration-150", isExpanded && "rotate-90") }), customIcon ?? folder] });
|
|
197
199
|
}
|
|
198
200
|
/** Click-only, unlike the table's sentinel: the tree is a navigation aid, and
|
|
199
201
|
* growing it automatically as the user scrolls is what the cap exists to prevent. */
|