omarchy dev ui-preview: jump to a specific section via argument
Pass a section name to open the gallery with the cursor already on
that component instead of scrolling from the top. Useful when
iterating on a single widget.
omarchy dev ui-preview # default position
omarchy dev ui-preview button # land on the Button section
omarchy dev ui-preview button-group # land on ButtonGroup
omarchy dev ui-preview slider # land on Slider, etc.
The bin script forwards the argument as {"section": "..."} in the
shell summon payload. The gallery's open(payloadJson) parses it,
clamps against visibleSections (unknown names fall back to default),
and sets focusSection + selectedIndex inside the existing Qt.callLater
so the cursor's hasCursor bindings fire ensureCursorVisible
automatically.
This commit is contained in:
@@ -1,5 +1,20 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# omarchy:summary=Open the omarchy-shell dev gallery (qs.Ui kit preview)
|
# omarchy:summary=Open the omarchy-shell dev gallery (qs.Ui kit preview)
|
||||||
|
# omarchy:args=[section]
|
||||||
|
# omarchy:examples=omarchy dev ui-preview | omarchy dev ui-preview button | omarchy dev ui-preview button-group | omarchy dev ui-preview slider
|
||||||
|
#
|
||||||
|
# Pass a section name to jump straight to that component instead of
|
||||||
|
# scrolling from the top. Section names match the cursor section ids in
|
||||||
|
# shell/plugins/dev-gallery/GalleryPanel.qml — `button`, `button-group`,
|
||||||
|
# `cursor-surface`, `slider`, `toggle`, `dropdown`, etc. Unknown names
|
||||||
|
# are ignored and the gallery opens at its normal default position.
|
||||||
|
|
||||||
omarchy-shell shell summon omarchy.dev-gallery '{}'
|
if [[ $# -gt 0 && -n $1 ]]; then
|
||||||
|
section="$1"
|
||||||
|
payload=$(printf '{"section":"%s"}' "${section//\"/}")
|
||||||
|
else
|
||||||
|
payload='{}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
omarchy-shell shell summon omarchy.dev-gallery "$payload"
|
||||||
|
|||||||
@@ -21,10 +21,28 @@ Item {
|
|||||||
function open(payloadJson) {
|
function open(payloadJson) {
|
||||||
closingFromHost = false
|
closingFromHost = false
|
||||||
window.visible = true
|
window.visible = true
|
||||||
// Defer focus so the FloatingWindow's content tree is in place; the
|
|
||||||
// hasCursor bindings on each demo target scroll themselves into view
|
// Optional { section: "button" } in the payload lets `omarchy dev
|
||||||
// via onHasCursorChanged, so no explicit scroll call is needed here.
|
// ui-preview <section>` open the gallery with the cursor already on
|
||||||
|
// a specific component, so iterating on one widget doesn't require
|
||||||
|
// scrolling from the top each time. Unknown section names are
|
||||||
|
// ignored — the gallery opens at its default position.
|
||||||
|
var requested = ""
|
||||||
|
if (payloadJson) {
|
||||||
|
try {
|
||||||
|
var parsed = JSON.parse(String(payloadJson))
|
||||||
|
if (parsed && typeof parsed.section === "string") requested = parsed.section
|
||||||
|
} catch (e) { /* ignore */ }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Defer the section assignment + focus so the FloatingWindow's
|
||||||
|
// content tree is mounted. The hasCursor bindings on each demo
|
||||||
|
// target then scroll themselves into view via onHasCursorChanged.
|
||||||
Qt.callLater(function() {
|
Qt.callLater(function() {
|
||||||
|
if (requested && visibleSections.indexOf(requested) !== -1) {
|
||||||
|
focusSection = requested
|
||||||
|
selectedIndex = sectionFirstIndex(requested)
|
||||||
|
}
|
||||||
if (keyCatcher) keyCatcher.forceActiveFocus()
|
if (keyCatcher) keyCatcher.forceActiveFocus()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user