flea-qml 0.0.0-stage → 0.1.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 +478 -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 +402 -0
- package/src/archiveops.js +697 -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 +129 -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/transfer.js +669 -0
- package/src/trash-record.js +41 -0
- package/src/trash.js +210 -0
- package/src/trashbrowse.js +326 -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 +241 -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-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-html-security.mjs +23 -0
- package/test/manual-html-ui.mjs +30 -0
- package/test/manual-syntax-preview.mjs +26 -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 +68 -0
- package/ui/ArchiveCompressDialog.qml +378 -0
- package/ui/ArchivePasswordDialog.qml +257 -0
- package/ui/Backend.qml +771 -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 +523 -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 +115 -0
- package/ui/Pane.qml +1296 -0
- package/ui/PaneMenuActions.qml +527 -0
- package/ui/PanePath.qml +90 -0
- package/ui/PaneRail.qml +239 -0
- package/ui/PaneStates.qml +88 -0
- package/ui/PaneSwap.qml +339 -0
- package/ui/PaneWire.qml +605 -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 +1004 -0
- package/ui/PreviewAnimation.qml +24 -0
- package/ui/PreviewArchive.qml +66 -0
- package/ui/PreviewColumn.qml +551 -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 +38 -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 +732 -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/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 +827 -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 +122 -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 +364 -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 +502 -0
- package/ui/js/FolderSorts.js +108 -0
- package/ui/js/FolderViews.js +44 -0
- package/ui/js/Format.js +305 -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 +736 -0
- package/ui/js/Tags.js +134 -0
- package/ui/js/Taildrop.js +128 -0
- package/ui/js/Tap.js +174 -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 +81 -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 +228 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import "js/Columns.js" as Columns
|
|
3
|
+
import "js/Swap.js" as Swap
|
|
4
|
+
|
|
5
|
+
// A changing ancestor keeps its own slot's last rows until the replacement or the listing swap's cap.
|
|
6
|
+
Item {
|
|
7
|
+
id: root
|
|
8
|
+
property var area: null
|
|
9
|
+
property string target: ""
|
|
10
|
+
property var held: ({})
|
|
11
|
+
property var previous: null
|
|
12
|
+
property int version: 0
|
|
13
|
+
property bool expired: false
|
|
14
|
+
property bool minimum: false
|
|
15
|
+
property double startedAt: 0
|
|
16
|
+
property double markSince: 0
|
|
17
|
+
|
|
18
|
+
function begin(carry, asks) {
|
|
19
|
+
var now = Date.now()
|
|
20
|
+
var next = {}, inheritedSince = 0, old = Columns.neighbourAsks(root.area.pane.path, root.area.width, root.area.columnsLimit)
|
|
21
|
+
if (carry) {
|
|
22
|
+
for (var i = 1; i <= asks.length; i++) {
|
|
23
|
+
var path = asks[asks.length - i], from = old[old.length - i]
|
|
24
|
+
var key = root.area.peekKey(path)
|
|
25
|
+
var ready = root.area.peeked[key] !== undefined && root.area.peekOrders[key] === root.area.orderOf(path)
|
|
26
|
+
if (ready || path === carry.seed && carry.rows !== null || !from) continue
|
|
27
|
+
var source = root.stateFor(from), reading = source !== null && root.isLoading(source, from)
|
|
28
|
+
var since = reading ? source.held[from].shownAt : undefined
|
|
29
|
+
next[path] = { rows: root.area.rowsFor(from), mode: root.area.deniedMode(from), ready: false,
|
|
30
|
+
loading: reading, shownAt: since }
|
|
31
|
+
if (since !== undefined) inheritedSince = Math.max(inheritedSince, since)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Only a carried superseding request keeps the previous landing's cap and shown minimum.
|
|
35
|
+
if (!carry) root.previous = null
|
|
36
|
+
else if (root.target === root.area.pane.path) {
|
|
37
|
+
root.previous = Object.keys(root.held).length ? {
|
|
38
|
+
target: root.target, held: root.held, expired: root.expired, minimum: root.minimum,
|
|
39
|
+
startedAt: root.startedAt, markSince: root.markSince
|
|
40
|
+
} : null
|
|
41
|
+
}
|
|
42
|
+
root.target = carry ? carry.target : ""
|
|
43
|
+
root.held = next
|
|
44
|
+
root.expired = false
|
|
45
|
+
root.minimum = inheritedSince > 0 && inheritedSince + Swap.MIN_SHOW_MS > now
|
|
46
|
+
root.startedAt = now
|
|
47
|
+
root.markSince = inheritedSince
|
|
48
|
+
root.version++
|
|
49
|
+
root.armCap(); root.armMinimum()
|
|
50
|
+
}
|
|
51
|
+
function stateFor(path) {
|
|
52
|
+
if (root.version < 0) return null
|
|
53
|
+
var state = root.area.pane.path === root.target ? root : root.previous
|
|
54
|
+
return state && state.target === root.area.pane.path && state.held[path] !== undefined ? state : null
|
|
55
|
+
}
|
|
56
|
+
function waiting(path) { return root.stateFor(path) !== null }
|
|
57
|
+
function isLoading(state, path) { return state.expired || state.held[path].loading === true }
|
|
58
|
+
function loading(path) { var state = root.stateFor(path); return state !== null && root.isLoading(state, path) }
|
|
59
|
+
function rows(path, ordinary) {
|
|
60
|
+
var state = root.stateFor(path)
|
|
61
|
+
return state === null ? ordinary : root.isLoading(state, path) ? [] : state.held[path].rows
|
|
62
|
+
}
|
|
63
|
+
function mode(path, ordinary) {
|
|
64
|
+
var state = root.stateFor(path)
|
|
65
|
+
return state === null ? ordinary : root.isLoading(state, path) ? -1 : state.held[path].mode
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function remove(path, state) {
|
|
69
|
+
var next = Object.assign({}, state.held)
|
|
70
|
+
delete next[path]
|
|
71
|
+
state.held = next
|
|
72
|
+
if (!Object.keys(next).length) {
|
|
73
|
+
state.minimum = false
|
|
74
|
+
if (state !== root) root.previous = null
|
|
75
|
+
}
|
|
76
|
+
root.version++
|
|
77
|
+
root.armCap(); root.armMinimum()
|
|
78
|
+
}
|
|
79
|
+
function answered(path) {
|
|
80
|
+
for (var state of [root, root.previous]) {
|
|
81
|
+
if (!state || state.held[path] === undefined) continue
|
|
82
|
+
if (root.isLoading(state, path) && state.minimum) {
|
|
83
|
+
var next = Object.assign({}, state.held)
|
|
84
|
+
next[path] = Object.assign({}, next[path], { ready: true })
|
|
85
|
+
state.held = next
|
|
86
|
+
root.version++
|
|
87
|
+
} else root.remove(path, state)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function landed() {
|
|
91
|
+
if (root.area.pane.path !== root.target) return
|
|
92
|
+
root.previous = null
|
|
93
|
+
root.version++
|
|
94
|
+
root.armCap(); root.armMinimum()
|
|
95
|
+
}
|
|
96
|
+
// Only the LoadingState's shown signal starts the minimum, including a mark built while its column is hidden.
|
|
97
|
+
function markShown(path, shown) {
|
|
98
|
+
var state = root.stateFor(path)
|
|
99
|
+
if (!shown || !state || !root.isLoading(state, path)) return
|
|
100
|
+
// Bookkeeping must not invalidate loadingRows while its Loader reports shown.
|
|
101
|
+
var now = Date.now()
|
|
102
|
+
state.held[path].shownAt = now
|
|
103
|
+
state.markSince = now
|
|
104
|
+
state.minimum = true
|
|
105
|
+
root.armMinimum()
|
|
106
|
+
}
|
|
107
|
+
// The same two timers serve both landings without restarting either deadline.
|
|
108
|
+
function armCap() {
|
|
109
|
+
cap.stop()
|
|
110
|
+
var left = -1, now = Date.now()
|
|
111
|
+
for (var state of [root, root.previous]) {
|
|
112
|
+
if (!state || state.expired || !Object.keys(state.held).length) continue
|
|
113
|
+
var owed = Math.max(0, state.startedAt + Swap.CAP_MS - now)
|
|
114
|
+
left = left < 0 ? owed : Math.min(left, owed)
|
|
115
|
+
}
|
|
116
|
+
if (left >= 0) { cap.interval = left; cap.start() }
|
|
117
|
+
}
|
|
118
|
+
function armMinimum() {
|
|
119
|
+
minShow.stop()
|
|
120
|
+
var left = -1, now = Date.now()
|
|
121
|
+
for (var state of [root, root.previous]) {
|
|
122
|
+
if (!state || !state.minimum) continue
|
|
123
|
+
var owed = Math.max(0, state.markSince + Swap.MIN_SHOW_MS - now)
|
|
124
|
+
left = left < 0 ? owed : Math.min(left, owed)
|
|
125
|
+
}
|
|
126
|
+
if (left >= 0) { minShow.interval = left; minShow.start() }
|
|
127
|
+
}
|
|
128
|
+
function expire() {
|
|
129
|
+
var now = Date.now()
|
|
130
|
+
for (var state of [root, root.previous])
|
|
131
|
+
if (state && !state.expired && state.startedAt + Swap.CAP_MS <= now) state.expired = true
|
|
132
|
+
root.version++
|
|
133
|
+
root.armCap()
|
|
134
|
+
}
|
|
135
|
+
function releaseMinimum() {
|
|
136
|
+
var now = Date.now()
|
|
137
|
+
for (var state of [root, root.previous]) {
|
|
138
|
+
if (!state || !state.minimum || state.markSince + Swap.MIN_SHOW_MS > now) continue
|
|
139
|
+
state.minimum = false
|
|
140
|
+
var paths = Object.keys(state.held)
|
|
141
|
+
for (var path of paths) if (state.held[path].ready) root.remove(path, state)
|
|
142
|
+
}
|
|
143
|
+
root.armMinimum()
|
|
144
|
+
}
|
|
145
|
+
Timer { id: cap; onTriggered: root.expire() }
|
|
146
|
+
Timer { id: minShow; onTriggered: root.releaseMinimum() }
|
|
147
|
+
}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import qs.Commons
|
|
3
|
+
import "." as Flea
|
|
4
|
+
import "js/CodeRuns.js" as CodeRuns
|
|
5
|
+
import "js/Compare.js" as Compare
|
|
6
|
+
import "js/Icons.js" as Icons
|
|
7
|
+
import "js/Kinds.js" as Kinds
|
|
8
|
+
|
|
9
|
+
// Quick Look's Compare kind: the unified diff of two files, coloured by ink alone, or the sentence that says why there is none.
|
|
10
|
+
Item {
|
|
11
|
+
id: root
|
|
12
|
+
readonly property alias viewport: view
|
|
13
|
+
|
|
14
|
+
// The backend asks and answers the diff; the opener holds the text copy route Copy as Path uses.
|
|
15
|
+
property var backend: null
|
|
16
|
+
property var opener: null
|
|
17
|
+
property bool active: false
|
|
18
|
+
property string pathA: ""
|
|
19
|
+
property string pathB: ""
|
|
20
|
+
property string iconName: ""
|
|
21
|
+
|
|
22
|
+
// "" until the backend has answered, then diff, identical, binary, over or failed.
|
|
23
|
+
property string answer: ""
|
|
24
|
+
property string patch: ""
|
|
25
|
+
// The token of the ask in flight, 0 when none: an answer for any other token is dropped.
|
|
26
|
+
property int token: 0
|
|
27
|
+
// Asks made, so a suite can tell one run of diff per open.
|
|
28
|
+
property int asks: 0
|
|
29
|
+
readonly property bool hasPatch: root.answer === "diff"
|
|
30
|
+
readonly property var rows: root.hasPatch ? Compare.rows(root.patch) : []
|
|
31
|
+
readonly property string titleText: Compare.title(Compare.leaf(root.pathA), Compare.leaf(root.pathB),
|
|
32
|
+
root.hasPatch ? Compare.changed(root.rows) : null)
|
|
33
|
+
// Quick Look reads this to hold the card back until the diff or the sentence can draw whole.
|
|
34
|
+
readonly property string status: root.answer === "" ? "loading" : "compare"
|
|
35
|
+
// Indexed by the code reply's role: the foreground, then red, green, yellow, blue, magenta and cyan.
|
|
36
|
+
readonly property var inks: CodeRuns.inks(Theme.palette, Theme.fallbackColor, String(Theme.color.foreground))
|
|
37
|
+
readonly property bool engine: root.backend !== null && typeof root.backend.askCompare === "function"
|
|
38
|
+
|
|
39
|
+
// Compare.html resolves its pixels at body 14, and each one follows the body from there.
|
|
40
|
+
readonly property int boardBodyPx: 14
|
|
41
|
+
readonly property int numberBoardWidth: 34
|
|
42
|
+
readonly property int columnBoardGap: 10
|
|
43
|
+
readonly property int signBoardWidth: 9
|
|
44
|
+
readonly property int copyPaddingBoardPx: 8
|
|
45
|
+
readonly property int contentMarginBoardPx: 12
|
|
46
|
+
readonly property int contentPaddingBoardPx: 16
|
|
47
|
+
readonly property real rowLineHeightFactor: 1.45
|
|
48
|
+
function boardPx(px) {
|
|
49
|
+
return Math.round(px * Theme.font.body / root.boardBodyPx)
|
|
50
|
+
}
|
|
51
|
+
readonly property int numberWidth: root.boardPx(root.numberBoardWidth)
|
|
52
|
+
readonly property int columnGap: root.boardPx(root.columnBoardGap)
|
|
53
|
+
readonly property int signWidth: root.boardPx(root.signBoardWidth)
|
|
54
|
+
readonly property int textX: 2 * root.numberWidth + root.signWidth + 3 * root.columnGap
|
|
55
|
+
readonly property int rowHeight: Math.round(Theme.font.body * root.rowLineHeightFactor) + 2 * Theme.spacing.hairline
|
|
56
|
+
|
|
57
|
+
signal closeRequested
|
|
58
|
+
|
|
59
|
+
function copyPatch() {
|
|
60
|
+
if (root.hasPatch && root.opener)
|
|
61
|
+
root.opener.copyText(root.patch)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// The pane consumes preview Tab, so Compare enters and cycles its own real controls.
|
|
65
|
+
function stepFocus(back) {
|
|
66
|
+
if (!root.active) return
|
|
67
|
+
var controls = root.hasPatch ? [copyButton, barClose] : [barClose]
|
|
68
|
+
var at = controls.indexOf(copyButton.activeFocus ? copyButton : barClose.activeFocus ? barClose : null)
|
|
69
|
+
var next = at < 0 ? (back ? controls.length - 1 : 0)
|
|
70
|
+
: (at + (back ? -1 : 1) + controls.length) % controls.length
|
|
71
|
+
controls[next].forceActiveFocus(back ? Qt.BacktabFocusReason : Qt.TabFocusReason)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// A new pair starts a new ask; the first waits for the end of the turn so one change of several properties asks once.
|
|
75
|
+
function fresh() {
|
|
76
|
+
root.answer = ""
|
|
77
|
+
root.patch = ""
|
|
78
|
+
root.token = 0
|
|
79
|
+
if (root.active && root.engine)
|
|
80
|
+
Qt.callLater(root.ask)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function ask() {
|
|
84
|
+
if (!root.active || !root.engine || root.token !== 0 || root.answer !== "" || root.pathA.length === 0 || root.pathB.length === 0)
|
|
85
|
+
return
|
|
86
|
+
root.asks += 1
|
|
87
|
+
root.token = root.backend.askCompare(root.pathA, root.pathB)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function answered(message) {
|
|
91
|
+
if (root.token === 0 || message.token !== root.token)
|
|
92
|
+
return
|
|
93
|
+
root.token = 0
|
|
94
|
+
root.patch = message.patch || ""
|
|
95
|
+
root.answer = message.state
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function inkOf(kind) {
|
|
99
|
+
if (kind === "removed")
|
|
100
|
+
return root.inks[1]
|
|
101
|
+
if (kind === "added")
|
|
102
|
+
return root.inks[2]
|
|
103
|
+
if (kind === "hunk")
|
|
104
|
+
return root.inks[6]
|
|
105
|
+
return kind === "note" ? Theme.color.muted : Theme.color.foreground
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// The render suite reads the bar's order and size off these, the way MarkdownPane hands its bar over.
|
|
109
|
+
function barGeometry() {
|
|
110
|
+
return { bar: bar, mark: barMark, markName: barMark.name, title: barTitle, copy: copyButton, close: barClose, ready: root.answer !== "" }
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
onPathAChanged: root.fresh()
|
|
114
|
+
onPathBChanged: root.fresh()
|
|
115
|
+
onActiveChanged: root.fresh()
|
|
116
|
+
onEngineChanged: root.fresh()
|
|
117
|
+
|
|
118
|
+
Connections {
|
|
119
|
+
target: root.engine ? root.backend : null
|
|
120
|
+
function onCompareResult(message) { root.answered(message) }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// No fill of its own: Quick Look's surface is already the chrome colour and rounds the corners this bar sits under.
|
|
124
|
+
Item {
|
|
125
|
+
id: bar
|
|
126
|
+
anchors.top: parent.top
|
|
127
|
+
anchors.left: parent.left
|
|
128
|
+
anchors.right: parent.right
|
|
129
|
+
height: Theme.chromeHeight
|
|
130
|
+
|
|
131
|
+
Rectangle {
|
|
132
|
+
anchors.bottom: parent.bottom
|
|
133
|
+
anchors.left: parent.left
|
|
134
|
+
anchors.right: parent.right
|
|
135
|
+
height: Theme.spacing.hairline
|
|
136
|
+
color: Theme.color.foreground
|
|
137
|
+
opacity: 0.12
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// File a's kind mark, in foreground and centred above the rule like the Markdown bar's.
|
|
141
|
+
Flea.Glyph {
|
|
142
|
+
id: barMark
|
|
143
|
+
anchors.left: parent.left
|
|
144
|
+
anchors.leftMargin: Theme.spacing.rowPaddingX
|
|
145
|
+
y: Math.round((parent.height - Theme.spacing.hairline - height) / 2)
|
|
146
|
+
width: Theme.chromeMarkSize
|
|
147
|
+
height: Theme.chromeMarkSize
|
|
148
|
+
name: Kinds.isMarkdown(root.pathA) ? "markdown" : Icons.glyphFor(root.iconName)
|
|
149
|
+
color: Theme.color.foreground
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// corner: a filename is arbitrary text, so PlainText, the same rule every name on this surface follows.
|
|
153
|
+
Text {
|
|
154
|
+
id: barTitle
|
|
155
|
+
anchors.left: barMark.right
|
|
156
|
+
anchors.leftMargin: Theme.spacing.gap
|
|
157
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
158
|
+
width: Math.min(implicitWidth, Math.max(0, (root.hasPatch ? copyButton.x : barClose.x) - x - Theme.spacing.gap))
|
|
159
|
+
text: root.titleText
|
|
160
|
+
color: Theme.color.foreground
|
|
161
|
+
font.family: Theme.font.family
|
|
162
|
+
font.pixelSize: Theme.font.caption
|
|
163
|
+
textFormat: Text.PlainText
|
|
164
|
+
elide: Text.ElideMiddle
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// The strip's shared button, so its rest, hover, focus, press and disabled looks are the recipe every strip button draws.
|
|
168
|
+
Flea.DialogButton {
|
|
169
|
+
id: copyButton
|
|
170
|
+
visible: root.hasPatch
|
|
171
|
+
anchors.right: barClose.left
|
|
172
|
+
anchors.rightMargin: Theme.spacing.gap
|
|
173
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
174
|
+
label: "Copy patch"
|
|
175
|
+
inStrip: true
|
|
176
|
+
tabHandle: true
|
|
177
|
+
// Compare.html pads the label 8 either side of its 1 px frame; the recipe's own padding is the gap.
|
|
178
|
+
horizontalPadding: root.boardPx(root.copyPaddingBoardPx)
|
|
179
|
+
onActivated: root.copyPatch()
|
|
180
|
+
onTabbed: function(from, back) { root.stepFocus(back) }
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
Flea.ChromeButton {
|
|
184
|
+
id: barClose
|
|
185
|
+
gesturePolicy: TapHandler.ReleaseWithinBounds
|
|
186
|
+
ruleRows: Theme.spacing.hairline
|
|
187
|
+
anchors.right: parent.right
|
|
188
|
+
anchors.rightMargin: Theme.spacing.rowPaddingX
|
|
189
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
190
|
+
glyph: "x"
|
|
191
|
+
accessName: "Close"
|
|
192
|
+
activeFocusOnTab: true
|
|
193
|
+
keyboardFocused: barClose.activeFocus
|
|
194
|
+
Keys.onTabPressed: function(event) { root.stepFocus((event.modifiers & Qt.ShiftModifier) !== 0) }
|
|
195
|
+
Keys.onBacktabPressed: root.stepFocus(true)
|
|
196
|
+
onActivated: root.closeRequested()
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// A pair with no patch says why, in the board's one muted sentence.
|
|
201
|
+
Text {
|
|
202
|
+
visible: root.answer !== "" && !root.hasPatch
|
|
203
|
+
anchors.top: bar.bottom
|
|
204
|
+
anchors.bottom: parent.bottom
|
|
205
|
+
anchors.left: parent.left
|
|
206
|
+
anchors.right: parent.right
|
|
207
|
+
anchors.leftMargin: Theme.spacing.rowPaddingX
|
|
208
|
+
anchors.rightMargin: Theme.spacing.rowPaddingX
|
|
209
|
+
horizontalAlignment: Text.AlignHCenter
|
|
210
|
+
verticalAlignment: Text.AlignVCenter
|
|
211
|
+
text: Compare.sentence(root.answer)
|
|
212
|
+
color: Theme.color.muted
|
|
213
|
+
font.family: Theme.font.family
|
|
214
|
+
font.pixelSize: Theme.font.caption
|
|
215
|
+
textFormat: Text.PlainText
|
|
216
|
+
wrapMode: Text.Wrap
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
TextMetrics {
|
|
220
|
+
id: widest
|
|
221
|
+
font.family: Theme.font.family
|
|
222
|
+
font.pixelSize: Theme.font.body
|
|
223
|
+
text: root.hasPatch ? root.widestLine() : ""
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function widestLine() {
|
|
227
|
+
var best = ""
|
|
228
|
+
for (var i = 0; i < root.rows.length; i++)
|
|
229
|
+
if (root.rows[i].text.length > best.length)
|
|
230
|
+
best = root.rows[i].text
|
|
231
|
+
return best
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
ListView {
|
|
235
|
+
id: view
|
|
236
|
+
visible: root.hasPatch
|
|
237
|
+
anchors.top: bar.bottom
|
|
238
|
+
anchors.bottom: parent.bottom
|
|
239
|
+
anchors.left: parent.left
|
|
240
|
+
anchors.right: parent.right
|
|
241
|
+
clip: true
|
|
242
|
+
topMargin: root.boardPx(root.contentMarginBoardPx)
|
|
243
|
+
bottomMargin: root.boardPx(root.contentMarginBoardPx)
|
|
244
|
+
boundsBehavior: Flickable.StopAtBounds
|
|
245
|
+
flickableDirection: Flickable.AutoFlickDirection
|
|
246
|
+
contentWidth: root.textX + widest.advanceWidth + root.boardPx(root.contentPaddingBoardPx)
|
|
247
|
+
model: root.rows
|
|
248
|
+
|
|
249
|
+
delegate: Item {
|
|
250
|
+
id: line
|
|
251
|
+
required property var modelData
|
|
252
|
+
// The delegate's one read of the overlay and of the list, so every other read below is qualified.
|
|
253
|
+
readonly property var host: root
|
|
254
|
+
readonly property var strip: view
|
|
255
|
+
readonly property color ink: line.host.inkOf(line.modelData.kind)
|
|
256
|
+
readonly property bool numbered: line.modelData.kind === "context" || line.modelData.kind === "removed" || line.modelData.kind === "added"
|
|
257
|
+
width: Math.max(line.strip.width, line.strip.contentWidth)
|
|
258
|
+
height: line.host.rowHeight
|
|
259
|
+
|
|
260
|
+
Text {
|
|
261
|
+
visible: line.numbered && line.modelData.oldNo > 0
|
|
262
|
+
x: 0
|
|
263
|
+
width: line.host.numberWidth
|
|
264
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
265
|
+
horizontalAlignment: Text.AlignRight
|
|
266
|
+
text: String(line.modelData.oldNo)
|
|
267
|
+
color: Theme.color.muted
|
|
268
|
+
font.family: Theme.font.family
|
|
269
|
+
font.pixelSize: Theme.font.body
|
|
270
|
+
textFormat: Text.PlainText
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
Text {
|
|
274
|
+
visible: line.numbered && line.modelData.newNo > 0
|
|
275
|
+
x: line.host.numberWidth + line.host.columnGap
|
|
276
|
+
width: line.host.numberWidth
|
|
277
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
278
|
+
horizontalAlignment: Text.AlignRight
|
|
279
|
+
text: String(line.modelData.newNo)
|
|
280
|
+
color: Theme.color.muted
|
|
281
|
+
font.family: Theme.font.family
|
|
282
|
+
font.pixelSize: Theme.font.body
|
|
283
|
+
textFormat: Text.PlainText
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
Text {
|
|
287
|
+
x: 2 * (line.host.numberWidth + line.host.columnGap)
|
|
288
|
+
width: line.host.signWidth
|
|
289
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
290
|
+
text: line.modelData.kind === "removed" ? "-" : line.modelData.kind === "added" ? "+" : ""
|
|
291
|
+
color: line.ink
|
|
292
|
+
font.family: Theme.font.family
|
|
293
|
+
font.pixelSize: Theme.font.body
|
|
294
|
+
textFormat: Text.PlainText
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// corner: file contents are arbitrary text, so PlainText, and the whitespace is kept as the diff has it.
|
|
298
|
+
Text {
|
|
299
|
+
x: line.host.textX
|
|
300
|
+
anchors.verticalCenter: parent.verticalCenter
|
|
301
|
+
text: line.modelData.text
|
|
302
|
+
color: line.ink
|
|
303
|
+
font.family: Theme.font.family
|
|
304
|
+
font.pixelSize: Theme.font.body
|
|
305
|
+
textFormat: Text.PlainText
|
|
306
|
+
wrapMode: Text.NoWrap
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// The wheel and momentum are the text preview's own, so the diff takes the same notch as the code it sits beside.
|
|
311
|
+
Flea.FastScrollHandler {
|
|
312
|
+
parent: view
|
|
313
|
+
flickable: view
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
Flea.ViewportScrollBars {
|
|
317
|
+
parent: view
|
|
318
|
+
flickable: view
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|