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,35 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
|
|
3
|
+
// The pointer's title bar: ui/shell.qml asks for no decorations, so nothing in this tree ever asked
|
|
4
|
+
// the compositor to move the window and only its own Super bind could.
|
|
5
|
+
Item {
|
|
6
|
+
id: root
|
|
7
|
+
|
|
8
|
+
// The caller's path editor is up, and a press that travels there selects text rather than moves.
|
|
9
|
+
required property bool editing
|
|
10
|
+
// False while something covers the chrome, so a drag that starts on it moves nothing beneath.
|
|
11
|
+
property bool inputLive: true
|
|
12
|
+
|
|
13
|
+
anchors.fill: parent
|
|
14
|
+
|
|
15
|
+
DragHandler {
|
|
16
|
+
id: move
|
|
17
|
+
|
|
18
|
+
// A handler and not a MouseArea, so a press that does not travel stays a click on the button,
|
|
19
|
+
// crumb or path under the pointer, and target is null because the move belongs to the window.
|
|
20
|
+
target: null
|
|
21
|
+
acceptedButtons: Qt.LeftButton
|
|
22
|
+
// Well under Qt's own 10, because a title bar reads a few pixels of travel as intent.
|
|
23
|
+
dragThreshold: 4
|
|
24
|
+
enabled: !root.editing && root.inputLive
|
|
25
|
+
|
|
26
|
+
onActiveChanged: {
|
|
27
|
+
if (!move.active)
|
|
28
|
+
return
|
|
29
|
+
// The same attached route ui/CardScroll.qml and ui/Ipc.qml take, so no window is threaded in.
|
|
30
|
+
var window = root.Window.window
|
|
31
|
+
if (window)
|
|
32
|
+
window.startSystemMove()
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
pragma Singleton
|
|
2
|
+
import QtQuick
|
|
3
|
+
import Quickshell
|
|
4
|
+
import Quickshell.Io
|
|
5
|
+
import "AudioNodesModel.js" as Model
|
|
6
|
+
|
|
7
|
+
// Which PipeWire nodes the audio panel and the microphone widget leave out:
|
|
8
|
+
// the shell's own level meters, and the nodes a platform's audio processing
|
|
9
|
+
// adds, which its platform package names in the fixed platform root (see
|
|
10
|
+
// Model.parsePlatformAudio). No environment variable moves that file, and most
|
|
11
|
+
// machines have none, so nothing of theirs is left out.
|
|
12
|
+
Singleton {
|
|
13
|
+
id: root
|
|
14
|
+
|
|
15
|
+
// Read synchronously at startup (the FileView blocks loading), then kept
|
|
16
|
+
// current by its load handlers below. Binding this to the missing flag
|
|
17
|
+
// the handlers write — as it was — loops on every shell start.
|
|
18
|
+
property var hints: Model.parsePlatformAudio(hintsFile.text())
|
|
19
|
+
|
|
20
|
+
// Whether the platform's hints hide a node, given the names of every node
|
|
21
|
+
// now in the graph (for a "replaced" node).
|
|
22
|
+
function platformHides(name, nodeNames) {
|
|
23
|
+
return Model.platformHidesNode(name, hints, nodeNames)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function isShellLevelMeter(name) {
|
|
27
|
+
return Model.isShellLevelMeter(name)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
FileView {
|
|
31
|
+
id: hintsFile
|
|
32
|
+
|
|
33
|
+
// A file that went away hints nothing, whatever text() still holds.
|
|
34
|
+
property bool missing: false
|
|
35
|
+
|
|
36
|
+
path: "/usr/share/omarchy-platform/audio.json"
|
|
37
|
+
blockLoading: true
|
|
38
|
+
watchChanges: true
|
|
39
|
+
printErrors: false
|
|
40
|
+
onLoaded: {
|
|
41
|
+
missing = false
|
|
42
|
+
root.hints = Model.parsePlatformAudio(text())
|
|
43
|
+
}
|
|
44
|
+
onLoadFailed: {
|
|
45
|
+
missing = true
|
|
46
|
+
root.hints = Model.parsePlatformAudio("")
|
|
47
|
+
}
|
|
48
|
+
onFileChanged: reload()
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Audio node rules the bar and the audio panel share. Plain functions, so the
|
|
2
|
+
// tests load this file in Node.
|
|
3
|
+
|
|
4
|
+
// The level meter the shell runs itself: Quickshell's peak monitor stream,
|
|
5
|
+
// named after the shell or after its stream depending on the PipeWire version.
|
|
6
|
+
// It is not an app using the input.
|
|
7
|
+
function isShellLevelMeter(name) {
|
|
8
|
+
var value = String(name || "")
|
|
9
|
+
return value === "quickshell" || value === "quickshell-peak-monitor"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function wholeNamePattern(pattern) {
|
|
13
|
+
if (typeof pattern !== "string" || pattern === "") return null
|
|
14
|
+
try {
|
|
15
|
+
return new RegExp("^(?:" + pattern + ")$")
|
|
16
|
+
} catch (e) {
|
|
17
|
+
return null
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// A platform's audio hints, which its own package ships in the platform root
|
|
22
|
+
// (/usr/share/omarchy-platform/audio.json, read by AudioNodes.qml; Omarchy
|
|
23
|
+
// ships none): nodes of its audio processing that are neither devices nor apps.
|
|
24
|
+
//
|
|
25
|
+
// { "hidden": ["<pattern>", ...],
|
|
26
|
+
// "replaced": [{ "node": "<pattern>", "by": "<pattern>" }, ...] }
|
|
27
|
+
//
|
|
28
|
+
// A pattern is a regular expression matched against a whole node.name. A
|
|
29
|
+
// hidden node is never listed as an output, an input or an app stream, and
|
|
30
|
+
// never counts as a recording; a replaced node is hidden while a node matching
|
|
31
|
+
// "by" exists. Missing or malformed text means no hints, and an invalid pattern
|
|
32
|
+
// or entry is skipped.
|
|
33
|
+
function parsePlatformAudio(text) {
|
|
34
|
+
var hints = { hidden: [], replaced: [] }
|
|
35
|
+
var data = null
|
|
36
|
+
try {
|
|
37
|
+
data = JSON.parse(String(text || ""))
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return hints
|
|
40
|
+
}
|
|
41
|
+
if (!data || typeof data !== "object" || Array.isArray(data)) return hints
|
|
42
|
+
|
|
43
|
+
var hidden = Array.isArray(data.hidden) ? data.hidden : []
|
|
44
|
+
for (var i = 0; i < hidden.length; i++) {
|
|
45
|
+
var pattern = wholeNamePattern(hidden[i])
|
|
46
|
+
if (pattern) hints.hidden.push(pattern)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var replaced = Array.isArray(data.replaced) ? data.replaced : []
|
|
50
|
+
for (var j = 0; j < replaced.length; j++) {
|
|
51
|
+
var entry = replaced[j]
|
|
52
|
+
if (!entry || typeof entry !== "object") continue
|
|
53
|
+
var node = wholeNamePattern(entry.node)
|
|
54
|
+
var by = wholeNamePattern(entry.by)
|
|
55
|
+
if (node && by) hints.replaced.push({ node: node, by: by })
|
|
56
|
+
}
|
|
57
|
+
return hints
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Whether the platform's hints hide a node, given the names of every node now
|
|
61
|
+
// in the graph (for "replaced").
|
|
62
|
+
function platformHidesNode(name, hints, nodeNames) {
|
|
63
|
+
var value = String(name || "")
|
|
64
|
+
if (value === "" || !hints) return false
|
|
65
|
+
var hidden = hints.hidden || []
|
|
66
|
+
for (var i = 0; i < hidden.length; i++)
|
|
67
|
+
if (hidden[i].test(value)) return true
|
|
68
|
+
|
|
69
|
+
var replaced = hints.replaced || []
|
|
70
|
+
var names = Array.isArray(nodeNames) ? nodeNames : []
|
|
71
|
+
for (var j = 0; j < replaced.length; j++) {
|
|
72
|
+
if (!replaced[j].node.test(value)) continue
|
|
73
|
+
for (var k = 0; k < names.length; k++) {
|
|
74
|
+
var other = String(names[k] || "")
|
|
75
|
+
if (other !== value && replaced[j].by.test(other)) return true
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return false
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// `wpctl get-volume <id>` prints "Volume: 0.50", with " [MUTED]" when muted, on
|
|
82
|
+
// the same cubic scale as PwNodeAudio.volume.
|
|
83
|
+
function parseWpctlVolume(text) {
|
|
84
|
+
var match = /^Volume:\s+([0-9]+(?:\.[0-9]+)?)(\s+\[MUTED\])?$/.exec(String(text || "").trim())
|
|
85
|
+
if (!match) return null
|
|
86
|
+
return { volume: parseFloat(match[1]), muted: !!match[2] }
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (typeof module !== "undefined") {
|
|
90
|
+
module.exports = {
|
|
91
|
+
isShellLevelMeter: isShellLevelMeter,
|
|
92
|
+
parsePlatformAudio: parsePlatformAudio,
|
|
93
|
+
platformHidesNode: platformHidesNode,
|
|
94
|
+
parseWpctlVolume: parseWpctlVolume
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
pragma Singleton
|
|
2
|
+
import QtQuick
|
|
3
|
+
import qs.Commons as Commons
|
|
4
|
+
import "BorderGeometry.js" as Geometry
|
|
5
|
+
|
|
6
|
+
// Central border-spec factory for shell surfaces and controls. A spec carries
|
|
7
|
+
// color, optional gradient, and top/right/bottom/left widths so renderers can
|
|
8
|
+
// choose the cheap Rectangle path or the Shape-ring path without duplicating
|
|
9
|
+
// theme parsing logic.
|
|
10
|
+
QtObject {
|
|
11
|
+
id: root
|
|
12
|
+
|
|
13
|
+
function none() {
|
|
14
|
+
return flat("transparent", 0)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function flat(color, width) {
|
|
18
|
+
return {
|
|
19
|
+
color: color || "transparent",
|
|
20
|
+
widths: Geometry.parseWidthSpec(width, 0),
|
|
21
|
+
gradient: { colors: [], angle: 0, enabled: false },
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function value(section, key) {
|
|
26
|
+
var v = Commons.Color.shellValues[section + "." + key]
|
|
27
|
+
return (v === undefined || v === null) ? "" : v
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function valueOr(section, keys) {
|
|
31
|
+
for (var i = 0; i < keys.length; i++) {
|
|
32
|
+
var v = value(section, keys[i])
|
|
33
|
+
if (String(v).length > 0) return v
|
|
34
|
+
}
|
|
35
|
+
return ""
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function resolveValueRef(raw) {
|
|
39
|
+
var s = String(raw || "").replace(/^\s+|\s+$/g, "")
|
|
40
|
+
var seen = {}
|
|
41
|
+
while (s.match(/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/) && !seen[s]) {
|
|
42
|
+
seen[s] = true
|
|
43
|
+
var next = Commons.Color.shellValues[s]
|
|
44
|
+
if (next === undefined || next === null || String(next).length === 0) break
|
|
45
|
+
s = String(next).replace(/^\s+|\s+$/g, "")
|
|
46
|
+
}
|
|
47
|
+
return s
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function alpha(section, key, fallback) {
|
|
51
|
+
var raw = value(section, key)
|
|
52
|
+
if (String(raw).length === 0) return fallback
|
|
53
|
+
var n = Number(raw)
|
|
54
|
+
return isFinite(n) ? Geometry.clampAlpha(n) : fallback
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function cssColor(color, opacity) {
|
|
58
|
+
var a = opacity === undefined || opacity === null ? 1 : Geometry.clampAlpha(opacity)
|
|
59
|
+
if (color && typeof color === "object" && color.r !== undefined) {
|
|
60
|
+
if (typeof Qt !== "undefined" && Qt.rgba) {
|
|
61
|
+
return Qt.rgba(color.r, color.g, color.b, (color.a === undefined ? 1 : color.a) * a)
|
|
62
|
+
}
|
|
63
|
+
return "#"
|
|
64
|
+
+ Geometry.padHex(color.r * 255)
|
|
65
|
+
+ Geometry.padHex(color.g * 255)
|
|
66
|
+
+ Geometry.padHex(color.b * 255)
|
|
67
|
+
+ Geometry.padHex((color.a === undefined ? 1 : color.a) * a * 255)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
var s = String(color || "").replace(/^\s+|\s+$/g, "")
|
|
71
|
+
var role = s.toLowerCase()
|
|
72
|
+
if (role === "foreground" || role === "text") return cssColor(Commons.Color.foreground, a)
|
|
73
|
+
if (role === "accent") return cssColor(Commons.Color.accent, a)
|
|
74
|
+
if (role === "urgent") return cssColor(Commons.Color.urgent, a)
|
|
75
|
+
if (role === "background") return cssColor(Commons.Color.background, a)
|
|
76
|
+
if (role === "transparent") return "transparent"
|
|
77
|
+
return Geometry.canonicalColor(s, a)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function resolvedGradient(raw, fallbackColor, opacity) {
|
|
81
|
+
var s = String(raw || "").replace(/^\s+|\s+$/g, "")
|
|
82
|
+
if (s.length === 0) return { colors: [], angle: 0, enabled: false }
|
|
83
|
+
|
|
84
|
+
var parts = s.split(/\s+/)
|
|
85
|
+
var colors = []
|
|
86
|
+
var angle = 0
|
|
87
|
+
for (var i = 0; i < parts.length; i++) {
|
|
88
|
+
if (parts[i].match(/^-?\d+(?:\.\d+)?deg$/)) angle = Number(parts[i].replace(/deg$/, ""))
|
|
89
|
+
else colors.push(cssColor(parts[i], opacity))
|
|
90
|
+
}
|
|
91
|
+
if (colors.length === 0) colors.push(cssColor(fallbackColor, opacity))
|
|
92
|
+
return { colors: colors, angle: angle, enabled: colors.length > 1 }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function sameColor(a, b) {
|
|
96
|
+
if (typeof Qt === "undefined" || !Qt.color) return String(a) === String(b)
|
|
97
|
+
var ca = typeof a === "string" ? Qt.color(a) : a
|
|
98
|
+
var cb = typeof b === "string" ? Qt.color(b) : b
|
|
99
|
+
if (!ca || !cb || ca.r === undefined || cb.r === undefined) return String(a) === String(b)
|
|
100
|
+
return Math.round(ca.r * 255) === Math.round(cb.r * 255)
|
|
101
|
+
&& Math.round(ca.g * 255) === Math.round(cb.g * 255)
|
|
102
|
+
&& Math.round(ca.b * 255) === Math.round(cb.b * 255)
|
|
103
|
+
&& Math.round((ca.a === undefined ? 1 : ca.a) * 255) === Math.round((cb.a === undefined ? 1 : cb.a) * 255)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function localOrSurfaceSpec(section, token, localColor, defaultColor, fallbackWidth, alphaKey) {
|
|
107
|
+
if (!sameColor(localColor, defaultColor)) return flat(localColor, fallbackWidth)
|
|
108
|
+
return surfaceSpec(section, token, localColor, fallbackWidth, alphaKey)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function surfaceWidths(section, token, fallbackWidth) {
|
|
112
|
+
var base = valueOr(section, token === "border" ? ["border-width"] : [token + "-width", "border-width"])
|
|
113
|
+
var widths = Geometry.parseWidthSpec(base, fallbackWidth)
|
|
114
|
+
return Geometry.withSideOverrides(
|
|
115
|
+
widths,
|
|
116
|
+
valueOr(section, token === "border" ? ["border-width-top"] : [token + "-width-top", "border-width-top"]),
|
|
117
|
+
valueOr(section, token === "border" ? ["border-width-right"] : [token + "-width-right", "border-width-right"]),
|
|
118
|
+
valueOr(section, token === "border" ? ["border-width-bottom"] : [token + "-width-bottom", "border-width-bottom"]),
|
|
119
|
+
valueOr(section, token === "border" ? ["border-width-left"] : [token + "-width-left", "border-width-left"])
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function borderValue(raw, fallbackColor, opacity, legacyGradientRaw) {
|
|
124
|
+
var fallback = cssColor(fallbackColor, opacity)
|
|
125
|
+
var primaryRaw = String(raw || "").replace(/^\s+|\s+$/g, "")
|
|
126
|
+
var primary = resolvedGradient(primaryRaw.length > 0 ? primaryRaw : fallbackColor, fallbackColor, opacity)
|
|
127
|
+
var color = primary.colors.length > 0 ? primary.colors[0] : fallback
|
|
128
|
+
var gradient = primary.enabled ? primary : { colors: [], angle: 0, enabled: false }
|
|
129
|
+
|
|
130
|
+
// Backward compatibility for existing configs written during the separate
|
|
131
|
+
// border-gradient experiment. New configs put solid colors and gradients in
|
|
132
|
+
// the same border token.
|
|
133
|
+
if (!gradient.enabled && String(legacyGradientRaw || "").replace(/^\s+|\s+$/g, "").length > 0) {
|
|
134
|
+
var legacy = resolvedGradient(legacyGradientRaw, color, opacity)
|
|
135
|
+
if (legacy.enabled) gradient = legacy
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return { color: color, gradient: gradient }
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function surfaceSpec(section, token, fallbackColor, fallbackWidth, alphaKey) {
|
|
142
|
+
var opacity = alpha(section, alphaKey || token + "-alpha", 1.0)
|
|
143
|
+
var legacyGradientRaw = valueOr(section, token === "border" ? ["border-gradient"] : [token + "-gradient", "border-gradient"])
|
|
144
|
+
var resolved = borderValue(resolveValueRef(value(section, token)), fallbackColor, opacity, legacyGradientRaw)
|
|
145
|
+
|
|
146
|
+
return {
|
|
147
|
+
color: resolved.color,
|
|
148
|
+
widths: surfaceWidths(section, token, fallbackWidth),
|
|
149
|
+
gradient: resolved.gradient,
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function hyprlandActiveSpec(fallbackColor, fallbackWidth) {
|
|
154
|
+
var raw = value("hyprland", "active-border")
|
|
155
|
+
var opacity = alpha("hyprland", "active-border-alpha", 1.0)
|
|
156
|
+
|
|
157
|
+
// Existing generated themes predate [hyprland] and already keep the active
|
|
158
|
+
// border under [notifications]. Use it as the compatibility source until
|
|
159
|
+
// the next theme refresh writes the shared token.
|
|
160
|
+
if (String(raw).length === 0) {
|
|
161
|
+
raw = value("notifications", "border")
|
|
162
|
+
opacity = alpha("notifications", "border-alpha", opacity)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
var resolved = borderValue(resolveValueRef(raw), fallbackColor, opacity, "")
|
|
166
|
+
return {
|
|
167
|
+
color: resolved.color,
|
|
168
|
+
widths: Geometry.parseWidthSpec(value("hyprland", "active-border-width"), fallbackWidth),
|
|
169
|
+
gradient: resolved.gradient,
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function controlPrefix(state) {
|
|
174
|
+
if (state === "hover" || state === "hot") return "hover-cursor"
|
|
175
|
+
return state || "normal"
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function controlColor(prefix, foreground, accent, urgent) {
|
|
179
|
+
if (prefix === "focus") return Style.focusStateColor(foreground, accent, urgent)
|
|
180
|
+
if (prefix === "hover-cursor") return Style.hoverStateColor(foreground, accent, urgent)
|
|
181
|
+
if (prefix === "selected") return Style.selectedStateColor(foreground, accent, urgent)
|
|
182
|
+
return Style.normalStateColor(foreground, accent, urgent)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function controlAlpha(prefix) {
|
|
186
|
+
if (prefix === "focus") return Style.focusBorderAlpha
|
|
187
|
+
if (prefix === "hover-cursor") return Style.hoverBorderAlpha
|
|
188
|
+
if (prefix === "selected") return Style.selectedBorderAlpha
|
|
189
|
+
return Style.normalBorderAlpha
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function controlFallbackWidth(prefix) {
|
|
193
|
+
if (prefix === "focus") return Style.focusBorderWidth
|
|
194
|
+
if (prefix === "hover-cursor") return Style.hoverBorderWidth
|
|
195
|
+
if (prefix === "selected") return Style.selectedBorderWidth
|
|
196
|
+
return Style.normalBorderWidth
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function controlWidths(state) {
|
|
200
|
+
var prefix = controlPrefix(state)
|
|
201
|
+
var fallbackWidth = controlFallbackWidth(prefix)
|
|
202
|
+
var base = Style.styleOverrides[prefix + "-border-width"]
|
|
203
|
+
var widths = Geometry.parseWidthSpec(base, fallbackWidth)
|
|
204
|
+
return Geometry.withSideOverrides(
|
|
205
|
+
widths,
|
|
206
|
+
Style.styleOverrides[prefix + "-border-width-top"],
|
|
207
|
+
Style.styleOverrides[prefix + "-border-width-right"],
|
|
208
|
+
Style.styleOverrides[prefix + "-border-width-bottom"],
|
|
209
|
+
Style.styleOverrides[prefix + "-border-width-left"]
|
|
210
|
+
)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function controlHasWidth(state) {
|
|
214
|
+
return Geometry.maxWidth(controlWidths(state)) > 0
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function controlSpec(state, foreground, accent, urgent) {
|
|
218
|
+
var prefix = controlPrefix(state)
|
|
219
|
+
var resolved = borderValue(
|
|
220
|
+
Style.styleOverrides[prefix + "-border"],
|
|
221
|
+
controlColor(prefix, foreground, accent, urgent),
|
|
222
|
+
controlAlpha(prefix),
|
|
223
|
+
Style.styleOverrides[prefix + "-border-gradient"]
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
return { color: resolved.color, widths: controlWidths(prefix), gradient: resolved.gradient }
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function withWidth(spec, width) {
|
|
230
|
+
if (!spec) return flat("transparent", 0)
|
|
231
|
+
return { color: spec.color, gradient: spec.gradient, widths: Geometry.parseWidthSpec(width, 0) }
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function isNone(spec) { return !spec || Geometry.maxWidth(spec.widths) <= 0 }
|
|
235
|
+
function needsOverlay(spec) { return Geometry.needsOverlay(spec) }
|
|
236
|
+
function canUseNative(spec) { return Geometry.canUseNative(spec) }
|
|
237
|
+
function top(spec) { return spec && spec.widths ? spec.widths.top : 0 }
|
|
238
|
+
function right(spec) { return spec && spec.widths ? spec.widths.right : 0 }
|
|
239
|
+
function bottom(spec) { return spec && spec.widths ? spec.widths.bottom : 0 }
|
|
240
|
+
function left(spec) { return spec && spec.widths ? spec.widths.left : 0 }
|
|
241
|
+
function uniformWidth(spec) { return spec && spec.widths ? spec.widths.top : 0 }
|
|
242
|
+
function color(spec) { return spec ? spec.color : "transparent" }
|
|
243
|
+
}
|