flea-qml 0.0.0-stage → 0.2.0
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/LICENSE +22 -0
- package/README.md +511 -2
- package/THIRD-PARTY-NOTICES.md +29 -0
- package/demos/App.java +5 -0
- package/demos/Dockerfile +4 -0
- package/demos/Main.kt +3 -0
- package/demos/Program.cs +1 -0
- package/demos/README.md +12 -0
- package/demos/app.dart +3 -0
- package/demos/app.deb +0 -0
- package/demos/app.js +1 -0
- package/demos/backup.tar +0 -0
- package/demos/budget.xlsx +0 -0
- package/demos/build.sh +2 -0
- package/demos/bundle.zip +0 -0
- package/demos/clip.mp4 +0 -0
- package/demos/data.sqlite +0 -0
- package/demos/disk.iso +0 -0
- package/demos/engine.cpp +5 -0
- package/demos/firmware.bin +0 -0
- package/demos/flake.nix +4 -0
- package/demos/folder/inside.txt +1 -0
- package/demos/font.ttf +0 -0
- package/demos/index.html +5 -0
- package/demos/index.php +2 -0
- package/demos/init.lua +1 -0
- package/demos/letter.docx +0 -0
- package/demos/lib.rs +3 -0
- package/demos/main.c +6 -0
- package/demos/main.h +3 -0
- package/demos/math-and-diagrams.md +200 -0
- package/demos/notes.tar.gz +0 -0
- package/demos/notes.txt +3 -0
- package/demos/photo.png +0 -0
- package/demos/program +2 -0
- package/demos/report.pdf +32 -0
- package/demos/script.py +1 -0
- package/demos/server.go +7 -0
- package/demos/settings.json +4 -0
- package/demos/slides.pptx +0 -0
- package/demos/song.mp3 +0 -0
- package/demos/style.css +4 -0
- package/demos/tool.rb +1 -0
- package/demos/types.ts +2 -0
- package/docs/pele.md +23 -0
- package/docs/protocol.md +3420 -0
- package/docs/temml.md +63 -0
- package/index.js +107 -0
- package/package.json +34 -4
- package/src/archive.js +407 -0
- package/src/archiveops.js +728 -0
- package/src/backend.js +369 -0
- package/src/bulkrename.js +95 -0
- package/src/clip-host.js +76 -0
- package/src/clip.js +462 -0
- package/src/code.js +168 -0
- package/src/compare.js +74 -0
- package/src/create.js +128 -0
- package/src/dirsize.js +147 -0
- package/src/figure-svg.js +530 -0
- package/src/figure-thread.js +23 -0
- package/src/figure.js +132 -0
- package/src/find.js +55 -0
- package/src/flea.js +39 -0
- package/src/fsinfo.js +39 -0
- package/src/highlight.js +141 -0
- package/src/html.js +52 -0
- package/src/kinds.js +89 -0
- package/src/listing.js +130 -0
- package/src/markdown-html.js +317 -0
- package/src/mathml.js +186 -0
- package/src/menu.js +180 -0
- package/src/meta.js +135 -0
- package/src/office.js +810 -0
- package/src/order.js +100 -0
- package/src/peek.js +49 -0
- package/src/pele-wrapper.js +695 -0
- package/src/permissions.js +180 -0
- package/src/places.js +313 -0
- package/src/preview-language.js +10 -0
- package/src/terminal-server.js +95 -0
- package/src/terminal-shell.js +26 -0
- package/src/transfer.js +669 -0
- package/src/trash-record.js +41 -0
- package/src/trash.js +210 -0
- package/src/trashbrowse.js +327 -0
- package/src/uistate.js +393 -0
- package/src/uistore.js +168 -0
- package/src/vendor/LICENSES/Apache-2.0.txt +202 -0
- package/src/vendor/LICENSES/MIT-katex-2015.txt +27 -0
- package/src/vendor/LICENSES/MIT-katex.txt +21 -0
- package/src/vendor/LICENSES/MIT-mermaid.txt +21 -0
- package/src/vendor/LICENSES/MIT-pele.txt +40 -0
- package/src/vendor/LICENSES/MIT-perseus.txt +18 -0
- package/src/vendor/LICENSES/MIT-temml.txt +21 -0
- package/src/vendor/pele.js +145 -0
- package/src/vendor/temml.mjs +14708 -0
- package/src/watch.js +98 -0
- package/src/wayland/client.js +109 -0
- package/src/wayland/protocol.js +55 -0
- package/src/wayland/protocols/ext-data-control-v1.xml +276 -0
- package/src/wayland/protocols/wayland.xml +3248 -0
- package/src/wayland/protocols/wlr-data-control-unstable-v1.xml +278 -0
- package/src/wayland/resource-io.js +6 -0
- package/src/wayland/socket-discovery.js +26 -0
- package/src/wayland/transport-posix.js +120 -0
- package/src/wayland/transport-win32.js +11 -0
- package/src/wayland/transport.js +3 -0
- package/src/wayland/win32-resources.js +80 -0
- package/src/wayland/win32-wire.js +62 -0
- package/test/archive.test.js +80 -0
- package/test/bench-markdown-scroll.mjs +190 -0
- package/test/clip-host.test.js +113 -0
- package/test/code-preview.test.js +35 -0
- package/test/compare-ui-paths.test.js +24 -0
- package/test/compare.test.js +54 -0
- package/test/delete-trash.test.js +67 -0
- package/test/dirsize.test.js +138 -0
- package/test/file-ops.test.js +307 -0
- package/test/file-url.test.js +24 -0
- package/test/find-contents.test.js +161 -0
- package/test/find-input.test.js +66 -0
- package/test/fixtures/pele-parity.json +1006 -0
- package/test/highlight-launcher.test.js +35 -0
- package/test/html-preview.test.js +22 -0
- package/test/input.test.js +15 -0
- package/test/keymap.test.js +26 -0
- package/test/language-icons.test.js +36 -0
- package/test/launcher.test.js +51 -0
- package/test/manual-archive-here-ui.mjs +47 -0
- package/test/manual-code-scroll.mjs +28 -0
- package/test/manual-column-scroll.mjs +24 -0
- package/test/manual-compare-ui.mjs +20 -0
- package/test/manual-find-status.mjs +37 -0
- package/test/manual-folder-focus.mjs +63 -0
- package/test/manual-html-security.mjs +23 -0
- package/test/manual-html-ui.mjs +30 -0
- package/test/manual-syntax-preview.mjs +26 -0
- package/test/manual-terminal-lifecycle.mjs +42 -0
- package/test/manual-terminal-navigation.mjs +48 -0
- package/test/manual-terminal-ui.mjs +47 -0
- package/test/manual-trash-ui.mjs +86 -0
- package/test/markdown-diagrams.test.js +93 -0
- package/test/markdown-html.test.js +105 -0
- package/test/mathml.test.js +92 -0
- package/test/menu-transfer.test.js +57 -0
- package/test/office-preview.test.js +154 -0
- package/test/pele-parity.test.js +28 -0
- package/test/places.test.js +134 -0
- package/test/preview-keys.test.js +60 -0
- package/test/preview-language.test.js +22 -0
- package/test/status-filename.test.js +20 -0
- package/test/transfer-replace-merge.test.js +187 -0
- package/test/trash-address.test.js +23 -0
- package/test/trash-view.test.js +37 -0
- package/test/trashbrowse.test.js +135 -0
- package/ui/AboutFacts.qml +78 -0
- package/ui/ArchiveCards.qml +95 -0
- package/ui/ArchiveCompressDialog.qml +378 -0
- package/ui/ArchiveHereConfirm.qml +127 -0
- package/ui/ArchivePasswordDialog.qml +257 -0
- package/ui/Backend.qml +775 -0
- package/ui/BulkOldNames.qml +47 -0
- package/ui/BulkRenameDialog.qml +380 -0
- package/ui/CardFrame.qml +67 -0
- package/ui/CardScroll.qml +79 -0
- package/ui/CheckBox.qml +73 -0
- package/ui/ChromeBar.qml +360 -0
- package/ui/ChromeButton.qml +131 -0
- package/ui/ChromeModes.qml +43 -0
- package/ui/CodeLines.qml +256 -0
- package/ui/CodeRefusal.qml +52 -0
- package/ui/CollideConfirm.qml +147 -0
- package/ui/CollideHost.qml +167 -0
- package/ui/ColumnPane.qml +525 -0
- package/ui/ColumnRow.qml +380 -0
- package/ui/ColumnsArea.qml +594 -0
- package/ui/ColumnsLanding.qml +147 -0
- package/ui/CompareView.qml +321 -0
- package/ui/ContextMenu.qml +743 -0
- package/ui/ConvertDialog.qml +456 -0
- package/ui/CountedWorker.qml +7 -0
- package/ui/Crumb.qml +64 -0
- package/ui/CrumbDrop.qml +25 -0
- package/ui/CsvTable.qml +394 -0
- package/ui/CursorMark.qml +41 -0
- package/ui/DefaultClaim.qml +130 -0
- package/ui/DeviceLock.qml +47 -0
- package/ui/DeviceMounts.qml +540 -0
- package/ui/DialogButton.qml +150 -0
- package/ui/DialogField.qml +147 -0
- package/ui/DialogHeader.qml +31 -0
- package/ui/DialogScrim.qml +20 -0
- package/ui/DialogTitle.qml +37 -0
- package/ui/Divider.qml +9 -0
- package/ui/DropInto.qml +126 -0
- package/ui/DropTarget.qml +35 -0
- package/ui/DropboxMark.qml +60 -0
- package/ui/EmptyState.qml +150 -0
- package/ui/EscapeHint.qml +11 -0
- package/ui/FactsTable.qml +54 -0
- package/ui/FastScrollHandler.qml +476 -0
- package/ui/FatNamesConfirm.qml +157 -0
- package/ui/Favourites.qml +143 -0
- package/ui/FigureService.qml +120 -0
- package/ui/FileDrag.qml +267 -0
- package/ui/FilterStrip.qml +133 -0
- package/ui/FitMetrics.qml +22 -0
- package/ui/FlashDriveRows.qml +137 -0
- package/ui/FlashHost.qml +72 -0
- package/ui/FlashImageRow.qml +104 -0
- package/ui/FlashRunner.qml +119 -0
- package/ui/FlashStepRow.qml +172 -0
- package/ui/FlashStrip.qml +38 -0
- package/ui/FlashView.qml +397 -0
- package/ui/FleaMark.qml +88 -0
- package/ui/FlyoutFade.qml +23 -0
- package/ui/FontPane.qml +170 -0
- package/ui/Glass.qml +114 -0
- package/ui/GlassTagger.qml +59 -0
- package/ui/Glyph.qml +64 -0
- package/ui/GlyphSolid.qml +22 -0
- package/ui/GridArea.qml +664 -0
- package/ui/GridTile.qml +325 -0
- package/ui/GvfsBridge.qml +164 -0
- package/ui/Header.qml +433 -0
- package/ui/HoverTimers.qml +39 -0
- package/ui/HtmlClip.qml +30 -0
- package/ui/HtmlPane.qml +63 -0
- package/ui/HyprlandMark.qml +45 -0
- package/ui/Ipc.qml +1005 -0
- package/ui/IpcControls.qml +7 -0
- package/ui/IpcMenuState.qml +48 -0
- package/ui/IpcPreviewState.qml +185 -0
- package/ui/JumpPath.qml +51 -0
- package/ui/KeymapSheet.qml +561 -0
- package/ui/KeymapSheetResult.qml +89 -0
- package/ui/KindStack.qml +40 -0
- package/ui/LangMark.qml +51 -0
- package/ui/LangMarkLoader.qml +26 -0
- package/ui/List.qml +480 -0
- package/ui/LoadingState.qml +54 -0
- package/ui/LocalSend.qml +56 -0
- package/ui/LocalSendMark.qml +73 -0
- package/ui/MarkdownBlockView.qml +311 -0
- package/ui/MarkdownBlocks.qml +35 -0
- package/ui/MarkdownFigure.qml +254 -0
- package/ui/MarkdownImages.qml +72 -0
- package/ui/MarkdownList.qml +81 -0
- package/ui/MarkdownMathsText.qml +97 -0
- package/ui/MarkdownPane.qml +83 -0
- package/ui/MarkdownPictures.qml +41 -0
- package/ui/MarkdownQuote.qml +52 -0
- package/ui/MarkdownRemote.qml +82 -0
- package/ui/MarkdownSource.qml +155 -0
- package/ui/MarkdownTable.qml +222 -0
- package/ui/MarkdownTableScroll.qml +64 -0
- package/ui/MarkdownTableWheel.qml +126 -0
- package/ui/MarkdownText.qml +87 -0
- package/ui/MarkdownWorker.js +132 -0
- package/ui/MatchText.qml +99 -0
- package/ui/MediaSession.qml +38 -0
- package/ui/MediaSound.qml +26 -0
- package/ui/MediaStrip.qml +191 -0
- package/ui/MediaTrack.qml +36 -0
- package/ui/MediaVolume.qml +54 -0
- package/ui/MenuActionDialog.qml +396 -0
- package/ui/MenuEdgeFade.qml +24 -0
- package/ui/MenuHost.qml +227 -0
- package/ui/MenuRow.qml +351 -0
- package/ui/MountListing.qml +100 -0
- package/ui/NetworkDialog.qml +435 -0
- package/ui/NetworkForm.qml +426 -0
- package/ui/NetworkMounts.qml +913 -0
- package/ui/NetworkPlaces.qml +127 -0
- package/ui/OpenWithDialog.qml +613 -0
- package/ui/Opener.qml +95 -0
- package/ui/Pane.qml +1320 -0
- package/ui/PaneMenuActions.qml +527 -0
- package/ui/PanePath.qml +90 -0
- package/ui/PaneRail.qml +268 -0
- package/ui/PaneStates.qml +88 -0
- package/ui/PaneSwap.qml +339 -0
- package/ui/PaneWire.qml +601 -0
- package/ui/ParkedWait.qml +9 -0
- package/ui/PathEntry.qml +186 -0
- package/ui/PathJump.qml +400 -0
- package/ui/PdfViewer.qml +297 -0
- package/ui/PermissionsDialog.qml +658 -0
- package/ui/PermissionsHeadings.qml +31 -0
- package/ui/PhoneMounts.qml +67 -0
- package/ui/PickerAnswers.qml +75 -0
- package/ui/PickerBox.qml +26 -0
- package/ui/PickerChrome.qml +295 -0
- package/ui/PickerFilter.qml +97 -0
- package/ui/PickerGrid.qml +308 -0
- package/ui/PickerHeader.qml +28 -0
- package/ui/PickerLifecycle.qml +27 -0
- package/ui/PickerList.qml +218 -0
- package/ui/PickerListing.qml +149 -0
- package/ui/PickerPathBar.qml +127 -0
- package/ui/PickerPlaces.qml +189 -0
- package/ui/PickerRecent.qml +92 -0
- package/ui/PickerSave.qml +101 -0
- package/ui/PickerSelection.qml +155 -0
- package/ui/PickerWindow.qml +846 -0
- package/ui/PowerSectorsReader.qml +10 -0
- package/ui/PrebuildDriver.qml +146 -0
- package/ui/Preview.qml +1005 -0
- package/ui/PreviewAnimation.qml +24 -0
- package/ui/PreviewArchive.qml +91 -0
- package/ui/PreviewColumn.qml +553 -0
- package/ui/PreviewEdge.qml +63 -0
- package/ui/PreviewFacts.qml +30 -0
- package/ui/PreviewFactsLine.qml +34 -0
- package/ui/PreviewHtml.qml +233 -0
- package/ui/PreviewImage.qml +253 -0
- package/ui/PreviewImagePan.qml +13 -0
- package/ui/PreviewImageSharp.qml +32 -0
- package/ui/PreviewLines.qml +106 -0
- package/ui/PreviewMarkdown.qml +706 -0
- package/ui/PreviewMedia.qml +250 -0
- package/ui/PreviewPdf.qml +482 -0
- package/ui/PreviewScroll.qml +201 -0
- package/ui/PreviewSwap.qml +335 -0
- package/ui/PreviewText.qml +149 -0
- package/ui/ProtocolChip.qml +18 -0
- package/ui/QuickLookArchive.qml +41 -0
- package/ui/QuickLookBar.qml +103 -0
- package/ui/QuickLookPrepare.qml +355 -0
- package/ui/QuickLookSwap.qml +10 -0
- package/ui/QuickLookWarm.qml +65 -0
- package/ui/RailDrop.qml +155 -0
- package/ui/RailHeading.qml +19 -0
- package/ui/RailPlaces.qml +38 -0
- package/ui/RailTrashRow.qml +67 -0
- package/ui/RenameField.qml +353 -0
- package/ui/RendererRetry.qml +11 -0
- package/ui/ResizeHandle.qml +52 -0
- package/ui/Reveal.qml +54 -0
- package/ui/Row.qml +476 -0
- package/ui/RowDrag.qml +213 -0
- package/ui/RowDropTarget.qml +27 -0
- package/ui/RunCard.qml +286 -0
- package/ui/Scripts.qml +65 -0
- package/ui/SearchStrip.qml +232 -0
- package/ui/SelectionBand.qml +140 -0
- package/ui/SelectionPreview.qml +370 -0
- package/ui/SettingsFavourite.qml +122 -0
- package/ui/SettingsGroup.qml +96 -0
- package/ui/SettingsHint.qml +12 -0
- package/ui/SettingsMetrics.qml +29 -0
- package/ui/SettingsPane.qml +178 -0
- package/ui/SettingsPanel.qml +547 -0
- package/ui/SettingsRail.qml +128 -0
- package/ui/SettingsRow.qml +409 -0
- package/ui/SettingsRuler.qml +85 -0
- package/ui/SettingsSegment.qml +85 -0
- package/ui/ShareBrowser.qml +113 -0
- package/ui/ShareLink.qml +67 -0
- package/ui/ShelfPins.qml +101 -0
- package/ui/Sidebar.qml +728 -0
- package/ui/SidebarRow.qml +358 -0
- package/ui/Spinner.qml +60 -0
- package/ui/StableModel.qml +89 -0
- package/ui/StateMessage.qml +84 -0
- package/ui/StatusBar.qml +512 -0
- package/ui/StatusFileName.qml +27 -0
- package/ui/TabBar.qml +673 -0
- package/ui/TabDragGeometry.qml +60 -0
- package/ui/TagMenuMark.qml +52 -0
- package/ui/TagRailSection.qml +53 -0
- package/ui/TagSlot.qml +40 -0
- package/ui/TagState.qml +150 -0
- package/ui/TagSwatch.qml +28 -0
- package/ui/Taildrop.qml +86 -0
- package/ui/TailscaleMark.qml +50 -0
- package/ui/TerminalService.qml +69 -0
- package/ui/TerminalTab.qml +48 -0
- package/ui/TerminalTabs.qml +27 -0
- package/ui/Theme.qml +460 -0
- package/ui/ThemeColors.qml +43 -0
- package/ui/TransferCard.qml +239 -0
- package/ui/TrashConfirm.qml +129 -0
- package/ui/TrashDropHandler.qml +11 -0
- package/ui/TrashHost.qml +202 -0
- package/ui/TrashMonitor.qml +30 -0
- package/ui/TrashToolbar.qml +19 -0
- package/ui/TrashView.qml +492 -0
- package/ui/UnlockDialog.qml +450 -0
- package/ui/UnlockHost.qml +206 -0
- package/ui/UpdateCheck.qml +97 -0
- package/ui/UserDirs.qml +25 -0
- package/ui/ViewState.qml +565 -0
- package/ui/ViewportScrollBar.qml +195 -0
- package/ui/ViewportScrollBars.qml +25 -0
- package/ui/WebPreview.qml +33 -0
- package/ui/WebPreviewView.qml +26 -0
- package/ui/WindowBody.qml +829 -0
- package/ui/WindowDrag.qml +35 -0
- package/ui/boot/Commons/AudioNodes.qml +50 -0
- package/ui/boot/Commons/AudioNodesModel.js +96 -0
- package/ui/boot/Commons/Border.qml +243 -0
- package/ui/boot/Commons/BorderGeometry.js +373 -0
- package/ui/boot/Commons/Color.qml +258 -0
- package/ui/boot/Commons/I18n.qml +118 -0
- package/ui/boot/Commons/InputDevices.qml +112 -0
- package/ui/boot/Commons/InputMethodState.qml +38 -0
- package/ui/boot/Commons/IpcRegistry.qml +77 -0
- package/ui/boot/Commons/Numbers.js +19 -0
- package/ui/boot/Commons/Plural.js +91 -0
- package/ui/boot/Commons/ShellIpc.qml +12 -0
- package/ui/boot/Commons/Style.qml +561 -0
- package/ui/boot/Commons/Translations.qml +100 -0
- package/ui/boot/Commons/UntypedInput.qml +152 -0
- package/ui/boot/Commons/Util.qml +188 -0
- package/ui/boot/Commons/qmldir +13 -0
- package/ui/boot/LICENSE-omarchy +20 -0
- package/ui/boot/Ui/BackgroundMedia.qml +49 -0
- package/ui/boot/Ui/BarIconButton.qml +106 -0
- package/ui/boot/Ui/BarIconContent.qml +38 -0
- package/ui/boot/Ui/BarIndicator.qml +53 -0
- package/ui/boot/Ui/BarWidget.qml +50 -0
- package/ui/boot/Ui/BorderOverlay.qml +54 -0
- package/ui/boot/Ui/BorderSurface.qml +40 -0
- package/ui/boot/Ui/Button.qml +224 -0
- package/ui/boot/Ui/ButtonGroup.qml +131 -0
- package/ui/boot/Ui/ConfirmDialog.qml +134 -0
- package/ui/boot/Ui/CursorSurface.qml +42 -0
- package/ui/boot/Ui/Dropdown.qml +245 -0
- package/ui/boot/Ui/FilterInput.qml +26 -0
- package/ui/boot/Ui/IconContentBounds.qml +141 -0
- package/ui/boot/Ui/KeyboardPanel.qml +453 -0
- package/ui/boot/Ui/MultiSelect.qml +624 -0
- package/ui/boot/Ui/NumberField.qml +86 -0
- package/ui/boot/Ui/OpticalGlyph.qml +68 -0
- package/ui/boot/Ui/OverlayWindow.qml +102 -0
- package/ui/boot/Ui/Panel.qml +60 -0
- package/ui/boot/Ui/PanelActionButton.qml +105 -0
- package/ui/boot/Ui/PanelController.qml +16 -0
- package/ui/boot/Ui/PanelHero.qml +112 -0
- package/ui/boot/Ui/PanelKeyCatcher.qml +100 -0
- package/ui/boot/Ui/PanelSectionHeader.qml +31 -0
- package/ui/boot/Ui/PanelSeparator.qml +19 -0
- package/ui/boot/Ui/PanelSlider.qml +156 -0
- package/ui/boot/Ui/PanelToolTip.qml +50 -0
- package/ui/boot/Ui/PluginBarApi.qml +89 -0
- package/ui/boot/Ui/PointerMoveGate.qml +54 -0
- package/ui/boot/Ui/PopupCard.qml +181 -0
- package/ui/boot/Ui/ScreenMoveRemap.qml +43 -0
- package/ui/boot/Ui/SearchableDropdown.qml +354 -0
- package/ui/boot/Ui/SizedImage.qml +125 -0
- package/ui/boot/Ui/SpeedTestOverlay.qml +412 -0
- package/ui/boot/Ui/TextField.qml +58 -0
- package/ui/boot/Ui/Toggle.qml +118 -0
- package/ui/boot/Ui/ToggleSwitch.qml +115 -0
- package/ui/boot/Ui/WidgetButton.qml +172 -0
- package/ui/boot/Ui/qmldir +41 -0
- package/ui/boot/fleatab.qml +50 -0
- package/ui/boot/picker.qml +39 -0
- package/ui/boot/shell.qml +131 -0
- package/ui/boot/tabtearoff.qml +51 -0
- package/ui/js/Anchor.js +379 -0
- package/ui/js/AnchorHold.js +162 -0
- package/ui/js/Archive.js +157 -0
- package/ui/js/ArchiveCard.js +44 -0
- package/ui/js/ArchiveOps.js +44 -0
- package/ui/js/BackReturn.js +118 -0
- package/ui/js/BulkRename.js +100 -0
- package/ui/js/Buttons.js +54 -0
- package/ui/js/ChromeKeys.js +116 -0
- package/ui/js/ClipMarks.js +73 -0
- package/ui/js/ClipSelection.js +67 -0
- package/ui/js/Clipboard.js +179 -0
- package/ui/js/Cloud.js +97 -0
- package/ui/js/CodeRuns.js +72 -0
- package/ui/js/Collide.js +212 -0
- package/ui/js/ColumnFit.js +28 -0
- package/ui/js/ColumnMenu.js +111 -0
- package/ui/js/Columns.js +298 -0
- package/ui/js/ColumnsCarry.js +103 -0
- package/ui/js/Compare.js +74 -0
- package/ui/js/Contrast.js +157 -0
- package/ui/js/ControlReader.js +42 -0
- package/ui/js/Convert.js +52 -0
- package/ui/js/CopyAs.js +52 -0
- package/ui/js/Crumbs.js +178 -0
- package/ui/js/Csv.js +231 -0
- package/ui/js/Density.js +44 -0
- package/ui/js/Devices.js +440 -0
- package/ui/js/DirSizes.js +180 -0
- package/ui/js/Drag.js +360 -0
- package/ui/js/DragOut.js +166 -0
- package/ui/js/DropDev.js +52 -0
- package/ui/js/Dropbox.js +41 -0
- package/ui/js/Eject.js +217 -0
- package/ui/js/Errors.js +188 -0
- package/ui/js/ExtThumbs.js +115 -0
- package/ui/js/Facts.js +402 -0
- package/ui/js/FigureDate.js +14 -0
- package/ui/js/Filter.js +285 -0
- package/ui/js/Find.js +46 -0
- package/ui/js/Flash.js +184 -0
- package/ui/js/FlashCard.js +79 -0
- package/ui/js/FlashEndings.js +125 -0
- package/ui/js/FlashPane.js +116 -0
- package/ui/js/FleaBin.js +12 -0
- package/ui/js/Focus.js +504 -0
- package/ui/js/FolderSorts.js +108 -0
- package/ui/js/FolderViews.js +44 -0
- package/ui/js/Format.js +314 -0
- package/ui/js/Fuzzy.js +141 -0
- package/ui/js/GlassTag.js +72 -0
- package/ui/js/Grid.js +33 -0
- package/ui/js/GridGeometry.js +90 -0
- package/ui/js/GridNames.js +153 -0
- package/ui/js/GvfsBridge.js +200 -0
- package/ui/js/HostClipboard.js +29 -0
- package/ui/js/Icons.js +218 -0
- package/ui/js/Input.js +50 -0
- package/ui/js/Jump.js +200 -0
- package/ui/js/KeyName.js +64 -0
- package/ui/js/Keymap.js +401 -0
- package/ui/js/Kinds.js +164 -0
- package/ui/js/LICENSES/ISC-lucide.txt +43 -0
- package/ui/js/LangMarkPaths.js +47 -0
- package/ui/js/LangMarks.js +120 -0
- package/ui/js/Lists.js +11 -0
- package/ui/js/LocalSend.js +39 -0
- package/ui/js/LockedMenu.js +63 -0
- package/ui/js/MakeDefault.js +186 -0
- package/ui/js/MarkBox.js +7 -0
- package/ui/js/Markdown.js +119 -0
- package/ui/js/MarkdownLists.js +86 -0
- package/ui/js/MarkdownMaths.js +58 -0
- package/ui/js/MarkdownPictures.js +32 -0
- package/ui/js/MarkdownPrepared.js +139 -0
- package/ui/js/MarkdownTableFit.js +34 -0
- package/ui/js/Marks.js +148 -0
- package/ui/js/Marquee.js +96 -0
- package/ui/js/Match.js +93 -0
- package/ui/js/Material.js +109 -0
- package/ui/js/MdBlocks.js +437 -0
- package/ui/js/MdBreak.js +71 -0
- package/ui/js/MdChunks.js +70 -0
- package/ui/js/MdContainer.js +137 -0
- package/ui/js/MdDocument.js +337 -0
- package/ui/js/MdEmph.js +97 -0
- package/ui/js/MdEntity.js +108 -0
- package/ui/js/MdEntityTable.js +223 -0
- package/ui/js/MdEscape.js +59 -0
- package/ui/js/MdFront.js +37 -0
- package/ui/js/MdHold.js +32 -0
- package/ui/js/MdHtml.js +307 -0
- package/ui/js/MdHtmlBlock.js +290 -0
- package/ui/js/MdHtmlHeading.js +53 -0
- package/ui/js/MdHtmlImage.js +179 -0
- package/ui/js/MdInline.js +154 -0
- package/ui/js/MdItems.js +212 -0
- package/ui/js/MdLeaf.js +309 -0
- package/ui/js/MdLink.js +196 -0
- package/ui/js/MdMath.js +67 -0
- package/ui/js/MdParagraphs.js +138 -0
- package/ui/js/MdRefs.js +232 -0
- package/ui/js/MdResolve.js +226 -0
- package/ui/js/MdRun.js +300 -0
- package/ui/js/MdUrl.js +226 -0
- package/ui/js/Menu.js +514 -0
- package/ui/js/MenuContext.js +85 -0
- package/ui/js/MenuFit.js +13 -0
- package/ui/js/MenuRefresh.js +74 -0
- package/ui/js/MenuWheel.js +35 -0
- package/ui/js/Messages.js +186 -0
- package/ui/js/Motion.js +16 -0
- package/ui/js/Mounts.js +320 -0
- package/ui/js/MouseNav.js +13 -0
- package/ui/js/Nav.js +329 -0
- package/ui/js/NetFs.js +26 -0
- package/ui/js/OpenWith.js +83 -0
- package/ui/js/Ops.js +585 -0
- package/ui/js/Palette.js +33 -0
- package/ui/js/PathBar.js +260 -0
- package/ui/js/Permissions.js +179 -0
- package/ui/js/Phones.js +112 -0
- package/ui/js/Picker.js +353 -0
- package/ui/js/PlaceMenu.js +96 -0
- package/ui/js/Places.js +265 -0
- package/ui/js/PreviewAsk.js +21 -0
- package/ui/js/PreviewKeys.js +155 -0
- package/ui/js/PreviewSettle.js +29 -0
- package/ui/js/PreviewSwap.js +101 -0
- package/ui/js/PropertyFacts.js +144 -0
- package/ui/js/Protocols.js +296 -0
- package/ui/js/QuickLookKinds.js +27 -0
- package/ui/js/QuickLookRect.js +24 -0
- package/ui/js/RailDrop.js +51 -0
- package/ui/js/RailKeys.js +87 -0
- package/ui/js/RailMenu.js +133 -0
- package/ui/js/Recent.js +135 -0
- package/ui/js/RecentMode.js +156 -0
- package/ui/js/Reload.js +60 -0
- package/ui/js/Renderer.js +9 -0
- package/ui/js/RunFile.js +143 -0
- package/ui/js/Scripts.js +28 -0
- package/ui/js/Scroll.js +304 -0
- package/ui/js/ScrollOff.js +69 -0
- package/ui/js/Search.js +478 -0
- package/ui/js/Selection.js +97 -0
- package/ui/js/Settings.js +476 -0
- package/ui/js/SettingsAbout.js +97 -0
- package/ui/js/SettingsShelf.js +52 -0
- package/ui/js/SheetKeys.js +42 -0
- package/ui/js/SheetQuery.js +281 -0
- package/ui/js/ShelfPile.js +27 -0
- package/ui/js/SlowClick.js +53 -0
- package/ui/js/SlowOp.js +6 -0
- package/ui/js/Sort.js +134 -0
- package/ui/js/Startup.js +63 -0
- package/ui/js/StateWords.js +17 -0
- package/ui/js/Status.js +238 -0
- package/ui/js/Swap.js +166 -0
- package/ui/js/TabMove.js +39 -0
- package/ui/js/Tabs.js +751 -0
- package/ui/js/Tags.js +134 -0
- package/ui/js/Taildrop.js +128 -0
- package/ui/js/Tap.js +180 -0
- package/ui/js/TextSize.js +107 -0
- package/ui/js/Thumbs.js +158 -0
- package/ui/js/Transfer.js +172 -0
- package/ui/js/Trash.js +84 -0
- package/ui/js/TrashDates.js +47 -0
- package/ui/js/TrashDrop.js +64 -0
- package/ui/js/UiState.js +438 -0
- package/ui/js/Unlock.js +152 -0
- package/ui/js/Update.js +130 -0
- package/ui/js/UserDirs.js +56 -0
- package/ui/qmldir +230 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import qs.Commons
|
|
3
|
+
import "." as Flea
|
|
4
|
+
import "js/Buttons.js" as Buttons
|
|
5
|
+
import "js/Protocols.js" as Protocols
|
|
6
|
+
|
|
7
|
+
// The Add-network-place form: a protocol picks the scheme, prefills the port and swaps the field set,
|
|
8
|
+
// and the Mounts-as line always shows the exact URI this will hand to gio mount. A form over a URI,
|
|
9
|
+
// never a second mount system.
|
|
10
|
+
Column {
|
|
11
|
+
id: root
|
|
12
|
+
|
|
13
|
+
property string protocol: "SMB"
|
|
14
|
+
// Every value is read out of the field that holds it, so nothing here can go stale against what
|
|
15
|
+
// is on screen and a programmatic set reaches the field rather than a shadow copy.
|
|
16
|
+
readonly property string label: labelField.text
|
|
17
|
+
readonly property string host: hostField.text
|
|
18
|
+
readonly property string port: portField.text
|
|
19
|
+
readonly property string path: pathField.text
|
|
20
|
+
readonly property string domain: domainField.text
|
|
21
|
+
readonly property string user: userField.text
|
|
22
|
+
readonly property string password: passwordField.text
|
|
23
|
+
// The TLS box flips dav/davs and ftp/ftps, and the canvas draws it ticked.
|
|
24
|
+
property bool tls: true
|
|
25
|
+
|
|
26
|
+
signal submitted()
|
|
27
|
+
|
|
28
|
+
readonly property var spec: Protocols.fieldsFor(root.protocol)
|
|
29
|
+
readonly property string uri: Protocols.uri({
|
|
30
|
+
protocol: root.protocol, host: root.host, port: root.port, path: root.path,
|
|
31
|
+
domain: root.domain, user: root.user, tls: root.tls
|
|
32
|
+
})
|
|
33
|
+
readonly property string passwordHintText: passwordHint.visible ? passwordHint.text : ""
|
|
34
|
+
readonly property bool complete: Protocols.complete({ host: root.host, port: root.port })
|
|
35
|
+
|
|
36
|
+
spacing: Style.space(12)
|
|
37
|
+
// Every row's natural height whether or not the protocol shows it: the form keeps this height
|
|
38
|
+
// through every chip, so the chips above and the buttons below never move under the pointer,
|
|
39
|
+
// and a shorter protocol leaves its air under Mounts as rather than a hole between fields.
|
|
40
|
+
// The three protocol-bound rows count once, as the tallest of them: they never show together.
|
|
41
|
+
readonly property real tallest: {
|
|
42
|
+
var swapped = [domainField, nfsNote, tlsRow]
|
|
43
|
+
var sum = 0
|
|
44
|
+
var shown = 0
|
|
45
|
+
for (var i = 0; i < root.children.length; i++) {
|
|
46
|
+
if (swapped.indexOf(root.children[i]) >= 0)
|
|
47
|
+
continue
|
|
48
|
+
sum += root.children[i].implicitHeight
|
|
49
|
+
shown++
|
|
50
|
+
}
|
|
51
|
+
var tallestSwapped = 0
|
|
52
|
+
for (var j = 0; j < swapped.length; j++)
|
|
53
|
+
tallestSwapped = Math.max(tallestSwapped, swapped[j].implicitHeight)
|
|
54
|
+
return sum + tallestSwapped + root.spacing * shown
|
|
55
|
+
}
|
|
56
|
+
height: root.tallest
|
|
57
|
+
|
|
58
|
+
function pick(name) {
|
|
59
|
+
root.protocol = name
|
|
60
|
+
// The port follows the scheme, because it is that scheme's own default and not a memory.
|
|
61
|
+
portField.text = String(Protocols.defaultPort(name, root.tls))
|
|
62
|
+
root.rehome()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// The box picks half of the scheme, so it picks half of the port: dav is 80 where davs is 443,
|
|
66
|
+
// and a number left behind by the tick offers a port the scheme the form built does not use.
|
|
67
|
+
onTlsChanged: portField.text = String(Protocols.defaultPort(root.protocol, root.tls))
|
|
68
|
+
|
|
69
|
+
// Qt keeps active focus on an item that has just gone invisible, so a chip click that hides the
|
|
70
|
+
// focused field would leave the caret where nobody can see it and Enter still submits from.
|
|
71
|
+
// The caret steps on to the next visible ring member instead; step already skips hidden ones.
|
|
72
|
+
function rehome() {
|
|
73
|
+
var ring = root.focusRing()
|
|
74
|
+
for (var i = 0; i < ring.length; i++) {
|
|
75
|
+
if (ring[i].focused && !ring[i].visible) {
|
|
76
|
+
root.step(ring[i], 1)
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function focusHost() {
|
|
83
|
+
hostField.input.forceActiveFocus()
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// The dialog's buttons below the form, which the walk takes after the TLS box, in reading order.
|
|
87
|
+
property var trailing: []
|
|
88
|
+
|
|
89
|
+
// Visual order: the protocol chips, then the fields down the form, then the TLS box. Three of
|
|
90
|
+
// these are visibility-bound and come and go with the protocol, so the walk skips what is not on
|
|
91
|
+
// screen rather than parking the caret where nobody can see it.
|
|
92
|
+
function focusRing() {
|
|
93
|
+
var ring = []
|
|
94
|
+
var kids = chips.children
|
|
95
|
+
for (var i = 0; i < kids.length; i++) {
|
|
96
|
+
// A Repeater is itself a child of the Row it fills, alongside its delegates, so the ring
|
|
97
|
+
// takes only what can hold a caret; chipFor below dodges the same object by testing a label.
|
|
98
|
+
if (typeof kids[i].takeFocus === "function") {
|
|
99
|
+
ring.push(kids[i])
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
ring.push(labelField, hostField, portField, pathField, domainField, userField, passwordField, tlsRow)
|
|
103
|
+
return ring.concat(root.trailing)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function step(from, delta) {
|
|
107
|
+
var ring = root.focusRing()
|
|
108
|
+
var len = ring.length
|
|
109
|
+
var at = ring.indexOf(from)
|
|
110
|
+
if (at < 0) {
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
for (var n = 1; n <= len; n++) {
|
|
114
|
+
var next = ring[((at + delta * n) % len + len) % len]
|
|
115
|
+
// A button that cannot act is passed over, the way a hidden field is; a button takes plain focus.
|
|
116
|
+
if (next.visible && next.available !== false) {
|
|
117
|
+
if (typeof next.takeFocus === "function") next.takeFocus(); else next.forceActiveFocus()
|
|
118
|
+
return
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// A test reaches a chip by its label.
|
|
124
|
+
function chipFor(name) {
|
|
125
|
+
var kids = chips.children
|
|
126
|
+
for (var i = 0; i < kids.length; i++) {
|
|
127
|
+
if (kids[i].label === name)
|
|
128
|
+
return kids[i]
|
|
129
|
+
}
|
|
130
|
+
return null
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function reset() {
|
|
134
|
+
labelField.text = ""
|
|
135
|
+
hostField.text = ""
|
|
136
|
+
pathField.text = ""
|
|
137
|
+
domainField.text = ""
|
|
138
|
+
userField.text = ""
|
|
139
|
+
passwordField.text = ""
|
|
140
|
+
root.tls = true
|
|
141
|
+
root.pick("SMB")
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function load(values) {
|
|
145
|
+
root.reset()
|
|
146
|
+
root.pick(values.protocol || "SMB")
|
|
147
|
+
// The box before the port: onTlsChanged above prefills the scheme's own default, and after
|
|
148
|
+
// the port it would overwrite the one this saved location actually carries.
|
|
149
|
+
root.tls = values.tls !== false
|
|
150
|
+
labelField.text = values.label || ""
|
|
151
|
+
hostField.text = values.host || ""
|
|
152
|
+
portField.text = values.port || String(Protocols.defaultPort(root.protocol, root.tls))
|
|
153
|
+
pathField.text = values.path || ""
|
|
154
|
+
domainField.text = values.domain || ""
|
|
155
|
+
userField.text = values.user || ""
|
|
156
|
+
passwordField.text = values.password || ""
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function takePassword() {
|
|
160
|
+
var value = passwordField.text
|
|
161
|
+
passwordField.text = ""
|
|
162
|
+
return value
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Non-secret form observables: tests may see shape, focus and masking, never field contents.
|
|
166
|
+
function visibleFields() {
|
|
167
|
+
var out = ["Label", "Host", "Port", root.spec.pathLabel]
|
|
168
|
+
if (root.spec.domain) out.push("Domain")
|
|
169
|
+
if (root.spec.credentials) out.push("Username", "Password")
|
|
170
|
+
if (root.spec.tls) out.push("TLS")
|
|
171
|
+
return out.join("|")
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function focusName() {
|
|
175
|
+
var fields = [labelField, hostField, portField, pathField, domainField, userField, passwordField]
|
|
176
|
+
for (var i = 0; i < fields.length; i++) {
|
|
177
|
+
if (fields[i].focused) return fields[i].label
|
|
178
|
+
}
|
|
179
|
+
for (var j = 0; j < root.trailing.length; j++) {
|
|
180
|
+
if (root.trailing[j].activeFocus) return root.trailing[j].label
|
|
181
|
+
}
|
|
182
|
+
return tlsRow.focused ? "TLS" : ""
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function hostPortWidths() { return Math.round(hostField.width) + "|" + Math.round(portField.width) }
|
|
186
|
+
function passwordState() {
|
|
187
|
+
return (passwordField.input.echoMode === TextInput.Password ? "masked" : "visible")
|
|
188
|
+
+ "|" + (passwordField.text.length > 0 ? "set" : "empty")
|
|
189
|
+
}
|
|
190
|
+
function passwordEyeCentre() {
|
|
191
|
+
var input = passwordField.input
|
|
192
|
+
var hit = Math.max(Theme.hitMin, Theme.font.bodySmall)
|
|
193
|
+
var point = input.mapToItem(null, input.width + Theme.spacing.gap + hit / 2, input.height / 2)
|
|
194
|
+
return Math.round(point.x) + " " + Math.round(point.y)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
Row {
|
|
198
|
+
id: chips
|
|
199
|
+
spacing: Theme.spacing.hairline * Buttons.SET_GAP
|
|
200
|
+
|
|
201
|
+
Repeater {
|
|
202
|
+
model: Protocols.PROTOCOLS
|
|
203
|
+
delegate: Flea.ProtocolChip {
|
|
204
|
+
required property string modelData
|
|
205
|
+
label: modelData
|
|
206
|
+
picked: root.protocol === modelData
|
|
207
|
+
onActivated: root.pick(modelData)
|
|
208
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
Flea.DialogField {
|
|
214
|
+
id: labelField
|
|
215
|
+
width: parent.width
|
|
216
|
+
label: "Label"
|
|
217
|
+
placeholder: Protocols.label({ label: "", host: root.host, path: root.path })
|
|
218
|
+
onAccepted: root.submitted()
|
|
219
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
Row {
|
|
223
|
+
width: parent.width
|
|
224
|
+
spacing: Style.space(10)
|
|
225
|
+
|
|
226
|
+
Flea.DialogField {
|
|
227
|
+
id: hostField
|
|
228
|
+
width: (parent.width - parent.spacing) / 2
|
|
229
|
+
label: "Host"
|
|
230
|
+
onAccepted: root.submitted()
|
|
231
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
Flea.DialogField {
|
|
235
|
+
width: hostField.width
|
|
236
|
+
id: portField
|
|
237
|
+
label: "Port"
|
|
238
|
+
onAccepted: root.submitted()
|
|
239
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Share, Path or Export: the row is the same, the thing it names is not.
|
|
244
|
+
Flea.DialogField {
|
|
245
|
+
id: pathField
|
|
246
|
+
width: parent.width
|
|
247
|
+
label: root.spec.pathLabel
|
|
248
|
+
onAccepted: root.submitted()
|
|
249
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
Flea.DialogField {
|
|
253
|
+
id: domainField
|
|
254
|
+
width: parent.width
|
|
255
|
+
visible: root.spec.domain
|
|
256
|
+
height: visible ? implicitHeight : 0
|
|
257
|
+
label: "Domain"
|
|
258
|
+
onAccepted: root.submitted()
|
|
259
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
Flea.DialogField {
|
|
263
|
+
id: userField
|
|
264
|
+
width: parent.width
|
|
265
|
+
visible: root.spec.credentials
|
|
266
|
+
height: visible ? implicitHeight : 0
|
|
267
|
+
label: "Username"
|
|
268
|
+
onAccepted: root.submitted()
|
|
269
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
Flea.DialogField {
|
|
273
|
+
id: passwordField
|
|
274
|
+
width: parent.width
|
|
275
|
+
visible: root.spec.credentials
|
|
276
|
+
height: visible ? implicitHeight : 0
|
|
277
|
+
label: "Password"
|
|
278
|
+
secret: true
|
|
279
|
+
onAccepted: root.submitted()
|
|
280
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
Text {
|
|
284
|
+
id: passwordHint
|
|
285
|
+
visible: root.spec.credentials
|
|
286
|
+
width: parent.width
|
|
287
|
+
height: visible ? implicitHeight : 0
|
|
288
|
+
text: "The password is not saved."
|
|
289
|
+
color: Theme.color.muted
|
|
290
|
+
font.family: Theme.font.family
|
|
291
|
+
font.pixelSize: Theme.font.caption
|
|
292
|
+
textFormat: Text.PlainText
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
Text {
|
|
296
|
+
id: nfsNote
|
|
297
|
+
visible: root.protocol === "NFS"
|
|
298
|
+
width: parent.width
|
|
299
|
+
height: visible ? implicitHeight : 0
|
|
300
|
+
text: "No password needed. The NFS server trusts this computer."
|
|
301
|
+
color: Theme.color.muted
|
|
302
|
+
font.family: Theme.font.family
|
|
303
|
+
font.pixelSize: Theme.font.caption
|
|
304
|
+
textFormat: Text.PlainText
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
Item {
|
|
308
|
+
id: tlsRow
|
|
309
|
+
width: parent.width
|
|
310
|
+
visible: root.spec.tls
|
|
311
|
+
implicitHeight: Theme.rowHeight - Theme.spacing.rowPaddingY
|
|
312
|
+
height: visible ? implicitHeight : 0
|
|
313
|
+
|
|
314
|
+
readonly property bool focused: tlsRow.activeFocus
|
|
315
|
+
signal tabbed(var from, bool back)
|
|
316
|
+
function takeFocus() { tlsRow.forceActiveFocus() }
|
|
317
|
+
onTabbed: function (from, back) { root.step(from, back ? -1 : 1) }
|
|
318
|
+
Keys.onTabPressed: function(event) { tlsRow.tabbed(tlsRow, (event.modifiers & Qt.ShiftModifier) !== 0) }
|
|
319
|
+
Keys.onBacktabPressed: tlsRow.tabbed(tlsRow, true)
|
|
320
|
+
Keys.onReturnPressed: root.tls = !root.tls
|
|
321
|
+
Keys.onEnterPressed: root.tls = !root.tls
|
|
322
|
+
Keys.onSpacePressed: root.tls = !root.tls
|
|
323
|
+
|
|
324
|
+
Rectangle {
|
|
325
|
+
id: tlsBox
|
|
326
|
+
anchors.left: parent.left
|
|
327
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
328
|
+
width: Theme.font.caption
|
|
329
|
+
height: Theme.font.caption
|
|
330
|
+
color: "transparent"
|
|
331
|
+
border.width: Theme.spacing.hairline * 2
|
|
332
|
+
border.color: root.tls ? Theme.color.accent
|
|
333
|
+
: (tlsRow.focused ? Theme.color.foreground : Theme.color.mutedFrame)
|
|
334
|
+
|
|
335
|
+
Flea.Glyph {
|
|
336
|
+
anchors.fill: parent
|
|
337
|
+
visible: root.tls
|
|
338
|
+
name: "check"
|
|
339
|
+
color: Theme.color.accent
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
Text {
|
|
344
|
+
anchors.left: tlsBox.right
|
|
345
|
+
anchors.leftMargin: Theme.spacing.gap
|
|
346
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
347
|
+
text: "Encrypted (TLS)"
|
|
348
|
+
color: Theme.color.foreground
|
|
349
|
+
font.family: Theme.font.family
|
|
350
|
+
font.pixelSize: Theme.font.body
|
|
351
|
+
textFormat: Text.PlainText
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
TapHandler {
|
|
355
|
+
acceptedButtons: Qt.LeftButton
|
|
356
|
+
gesturePolicy: TapHandler.ReleaseWithinBounds
|
|
357
|
+
onTapped: root.tls = !root.tls
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// The exact URI, on one line that never wraps and never clips: it pans, and the edge fade says
|
|
362
|
+
// there is more. A Flickable is what makes that a pan rather than an elide.
|
|
363
|
+
Column {
|
|
364
|
+
width: parent.width
|
|
365
|
+
spacing: Theme.spacing.hairline * 2
|
|
366
|
+
// HANDOFF rule 19: an unfilled form has no URI to show, so the sentence goes with it.
|
|
367
|
+
visible: root.uri.length > 0
|
|
368
|
+
|
|
369
|
+
Item {
|
|
370
|
+
width: parent.width
|
|
371
|
+
height: uriText.implicitHeight
|
|
372
|
+
clip: true
|
|
373
|
+
|
|
374
|
+
Flickable {
|
|
375
|
+
id: sentenceFlick
|
|
376
|
+
anchors.fill: parent
|
|
377
|
+
contentWidth: sentence.implicitWidth
|
|
378
|
+
contentHeight: sentence.implicitHeight
|
|
379
|
+
flickableDirection: Flickable.HorizontalFlick
|
|
380
|
+
boundsBehavior: Flickable.StopAtBounds
|
|
381
|
+
Flea.FastScrollHandler {
|
|
382
|
+
parent: sentenceFlick
|
|
383
|
+
flickable: sentenceFlick
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Dialogs rule 3: one sentence rather than an eyebrow over a value, and it says the
|
|
387
|
+
// whole answer, because Protocols.uri() has one as soon as the host and port validate:
|
|
388
|
+
// an empty Share is the server root, which is a real and mountable place.
|
|
389
|
+
Row {
|
|
390
|
+
id: sentence
|
|
391
|
+
spacing: Theme.spacing.gap / 2
|
|
392
|
+
|
|
393
|
+
Text {
|
|
394
|
+
text: "Mounts as"
|
|
395
|
+
color: Theme.color.muted
|
|
396
|
+
font.family: Theme.font.family
|
|
397
|
+
font.pixelSize: Theme.font.caption
|
|
398
|
+
textFormat: Text.PlainText
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
Text {
|
|
402
|
+
id: uriText
|
|
403
|
+
text: root.uri
|
|
404
|
+
color: Theme.color.foreground
|
|
405
|
+
font.family: Theme.font.family
|
|
406
|
+
font.pixelSize: Theme.font.caption
|
|
407
|
+
textFormat: Text.PlainText
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
Rectangle {
|
|
413
|
+
anchors.right: parent.right
|
|
414
|
+
anchors.top: parent.top
|
|
415
|
+
anchors.bottom: parent.bottom
|
|
416
|
+
visible: sentence.implicitWidth > parent.width
|
|
417
|
+
width: Theme.space(36)
|
|
418
|
+
gradient: Gradient {
|
|
419
|
+
orientation: Gradient.Horizontal
|
|
420
|
+
GradientStop { position: 0; color: "transparent" }
|
|
421
|
+
GradientStop { position: 1; color: Theme.color.surface }
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|