Pantrix UI

Command Palette

Uygulamanın her komutu, adıyla bulunur ve klavyeden çalıştırılır: Cmd+K ya da Ctrl+K'nın açtığı.

import com.pantrixui.components.overlay.commandpalette.PantrixCommandPalette

Örnekler

Gruplar, kısayollar ve anahtar sözcükler

Bir dosya düzenleyicisinin komutları, gruplarıyla. Düğmeyle açılır; yazdıkça liste daralır, oklarla gezilir, Enter vurgulanan komutu çalıştırır ve palet kapanır. "Sil" şu an çalıştırılamaz: listededir ama oklar onu atlar. "Görünüm"ü "tema" ya da "karanlık" yazarak da bulursun: anahtar sözcükleri bunlardır. İki komutun etiketinin altında ne yaptığını söyleyen ikinci bir satır var (supportingText); arama onu da okur: "adres" yaz.

var open by rememberSaveable { mutableStateOf(false) }
var ran by rememberSaveable { mutableStateOf<String?>(null) }
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md)) {
    PantrixButton(text = "Komut paletini aç", onClick = { open = true }, tagKey = "open_editor")
    PantrixText(
        text = "Son çalıştırılan: ${ran ?: "yok"}",
        color = PantrixTheme.colors.textSecondary,
        tagKey = "ran_editor"
    )
}
PantrixCommandPalette(
    visible = open,
    onDismissRequest = { open = false },
    commands = EDITOR_COMMANDS,
    onRun = { command ->
        open = false
        ran = command.label
    },
    tagKey = "editor"
)

private val EDITOR_COMMANDS = listOf(
    PantrixCommand(
        key = "new",
        label = "Yeni dosya",
        group = "Dosya",
        icon = PantrixIcons.Plus,
        shortcut = PantrixShortcut(Key.N, command = true)
    ),
    PantrixCommand(
        key = "open",
        label = "Dosya aç",
        group = "Dosya",
        icon = PantrixIcons.Folder,
        shortcut = PantrixShortcut(Key.O, command = true)
    ),
    PantrixCommand(
        key = "rename",
        label = "Yeniden adlandır",
        group = "Dosya",
        shortcut = PantrixShortcut(Key.R, command = true, shift = true)
    ),
    PantrixCommand(key = "delete", label = "Sil", group = "Dosya", enabled = false),
    PantrixCommand(
        key = "copy",
        label = "Bağlantıyı kopyala",
        group = "Dosya",
        icon = PantrixIcons.Copy,
        keywords = listOf("link", "paylaş"),
        supportingText = "Dosyayı görebilenler için bir adres"
    ),
    PantrixCommand(
        key = "zoom_in",
        label = "Yakınlaştır",
        group = "Görünüm",
        icon = PantrixIcons.ZoomIn,
        shortcut = PantrixShortcut(Key.Equals, command = true)
    ),
    PantrixCommand(
        key = "zoom_out",
        label = "Uzaklaştır",
        group = "Görünüm",
        icon = PantrixIcons.ZoomOut,
        shortcut = PantrixShortcut(Key.Minus, command = true)
    ),
    PantrixCommand(
        key = "appearance",
        label = "Görünüm ayarları",
        group = "Görünüm",
        icon = PantrixIcons.Eye,
        keywords = listOf("tema", "karanlık", "açık"),
        supportingText = "Tema, yazı boyutu, satır aralığı"
    ),
    PantrixCommand(
        key = "search",
        label = "Dosyalarda ara",
        icon = PantrixIcons.Search,
        shortcut = PantrixShortcut(Key.F, command = true, shift = true)
    )
)

Komutların kendi kısayolları

Komutların kendi kısayolları: aynı liste hem paletin gösterdiği hem klavyenin çalıştırdığıdır. Alana yazarken ⌘B ya da Ctrl+B "Kalın"ı, ⌘I ya da Ctrl+I "İtalik"i çalıştırır; harf alana yazılmaz. Odak bu kartın içindeyken duyulurlar: bütün pencere için kökte durmaları gerekir.

var open by rememberSaveable { mutableStateOf(false) }
var ran by rememberSaveable { mutableStateOf<String?>(null) }
val note = rememberTextFieldState()
val run = { command: PantrixCommand -> ran = command.label }
Column(
    modifier = Modifier.fillMaxWidth().commandShortcuts(TEXT_COMMANDS, onRun = run),
    verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md)
) {
    PantrixTextField(
        state = note,
        modifier = Modifier.fillMaxWidth(),
        label = "Not",
        placeholder = "Buraya yaz, sonra ⌘B ya da Ctrl+B",
        tagKey = "note"
    )
    PantrixButton(
        text = "Biçim komutları",
        onClick = { open = true },
        variant = ButtonVariant.Outline,
        tagKey = "open_text"
    )
    PantrixText(
        text = "Son çalıştırılan: ${ran ?: "yok"}",
        color = PantrixTheme.colors.textSecondary,
        tagKey = "ran_text"
    )
}
PantrixCommandPalette(
    visible = open,
    onDismissRequest = { open = false },
    commands = TEXT_COMMANDS,
    onRun = { command ->
        open = false
        run(command)
    },
    tagKey = "text"
)

private val TEXT_COMMANDS = listOf(
    PantrixCommand(
        key = "bold",
        label = "Kalın",
        group = "Biçim",
        shortcut = PantrixShortcut(Key.B, command = true)
    ),
    PantrixCommand(
        key = "italic",
        label = "İtalik",
        group = "Biçim",
        shortcut = PantrixShortcut(Key.I, command = true)
    ),
    PantrixCommand(
        key = "clear",
        label = "Biçimi temizle",
        group = "Biçim",
        shortcut = PantrixShortcut(Key.Backslash, command = true)
    )
)

Kendi sözleri ve kendi renkleri

Paletin kendi sözleri ve kendi renkleri: alanın yer tutucusu ve hiçbir şey eşleşmediğinde yazılan söz çağıranın, vurgulanan satır uygulamanın kendi morunda. "zzz" yazınca boş listenin sözü görünür.

var open by rememberSaveable { mutableStateOf(false) }
val own = ownColors()
PantrixButton(text = "Bir yere git", onClick = { open = true }, variant = ButtonVariant.Outline, tagKey = "open_go")
PantrixCommandPalette(
    visible = open,
    onDismissRequest = { open = false },
    commands = PLACES,
    onRun = { open = false },
    placeholder = "Bir sayfanın adını yaz…",
    emptyText = "Bu adla bir sayfa yok",
    colors = CommandPaletteColors(highlightedContainer = own.container, highlightedContent = own.onContainer),
    tagKey = "go"
)

private val PLACES = listOf(
    PantrixCommand(key = "home", label = "Ana sayfa", icon = PantrixIcons.Inbox),
    PantrixCommand(key = "profile", label = "Profil", icon = PantrixIcons.Person),
    PantrixCommand(key = "favourites", label = "Favoriler", icon = PantrixIcons.Star),
    PantrixCommand(key = "calendar", label = "Takvim", icon = PantrixIcons.Calendar)
)

Kendi stiliyle

Kendi stiliyle: CommandPaletteStyle paletin genişliğini, köşesini ve satırlarını değiştirir. Burada palet en çok 420dp genişlikte, köşeleri orta yuvarlak ve satırları 40dp yüksekliğindedir; verilmeyen her alan platformun ön ayarıdır.

var open by rememberSaveable { mutableStateOf(false) }
PantrixButton(text = "Dar paleti aç", onClick = { open = true }, tagKey = "open_narrow")
PantrixCommandPalette(
    visible = open,
    onDismissRequest = { open = false },
    commands = EDITOR_COMMANDS,
    onRun = { open = false },
    style = CommandPaletteStyle(maxWidth = 420.dp, shape = ShapeRole.Medium, itemHeight = 40.dp, iconGap = 12.dp),
    tagKey = "narrow"
)

private val EDITOR_COMMANDS = listOf(
    PantrixCommand(
        key = "new",
        label = "Yeni dosya",
        group = "Dosya",
        icon = PantrixIcons.Plus,
        shortcut = PantrixShortcut(Key.N, command = true)
    ),
    PantrixCommand(
        key = "open",
        label = "Dosya aç",
        group = "Dosya",
        icon = PantrixIcons.Folder,
        shortcut = PantrixShortcut(Key.O, command = true)
    ),
    PantrixCommand(
        key = "rename",
        label = "Yeniden adlandır",
        group = "Dosya",
        shortcut = PantrixShortcut(Key.R, command = true, shift = true)
    ),
    PantrixCommand(key = "delete", label = "Sil", group = "Dosya", enabled = false),
    PantrixCommand(
        key = "copy",
        label = "Bağlantıyı kopyala",
        group = "Dosya",
        icon = PantrixIcons.Copy,
        keywords = listOf("link", "paylaş"),
        supportingText = "Dosyayı görebilenler için bir adres"
    ),
    PantrixCommand(
        key = "zoom_in",
        label = "Yakınlaştır",
        group = "Görünüm",
        icon = PantrixIcons.ZoomIn,
        shortcut = PantrixShortcut(Key.Equals, command = true)
    ),
    PantrixCommand(
        key = "zoom_out",
        label = "Uzaklaştır",
        group = "Görünüm",
        icon = PantrixIcons.ZoomOut,
        shortcut = PantrixShortcut(Key.Minus, command = true)
    ),
    PantrixCommand(
        key = "appearance",
        label = "Görünüm ayarları",
        group = "Görünüm",
        icon = PantrixIcons.Eye,
        keywords = listOf("tema", "karanlık", "açık"),
        supportingText = "Tema, yazı boyutu, satır aralığı"
    ),
    PantrixCommand(
        key = "search",
        label = "Dosyalarda ara",
        icon = PantrixIcons.Search,
        shortcut = PantrixShortcut(Key.F, command = true, shift = true)
    )
)

API

visible

Uygulamanın her komutu, adıyla bulunur ve klavyeden çalıştırılır: Cmd+K ya da Ctrl+K'nın açtığı.

ParametreTürVarsayılanNe olduğu
visibleBooleanpaletin gösterilip gösterilmediği. Kendini asla gizlemez.
onDismissRequest() -> Unitgeri, Escape ve scrim'e tıklama için çağrılır.
commandsList<PantrixCommand>her komut, gruplarının altında listelendikleri sırayla. İkisi aynı anahtarı taşımaz.
onRun(PantrixCommand) -> Unitçalıştırılan komutla çağrılır; Enter, klavyenin eylemi ya da bir basışla. Paleti burada kapat.
modifierModifierModifierpanelin modifier'ı.
placeholderString?nullboş alanın gösterdiği, ya da temanın komut aramak için sözleri için null.
emptyTextString?nullhiçbir şey eşleşmezken listenin yerinde duran, ya da temanın bunun için sözleri için null.
styleCommandPaletteStyle?nullbu çağrının kendi stili: çevreleyen her stilin üstünde, yoğunluğun altında. Yalnızca verdiği alanlar değişir, her platformda.
colorsCommandPaletteColors?nullbu paletin temanınkiler olmayan kendi renkleri: burada verilenler, geri kalanlar için temanınkiler.
tagKeyString?nullpaletin otomasyon anahtarı: panel CommandPalette_<tagKey>, alanı CommandPalette_<tagKey>.TextField_query ve bir komutun satırı CommandPalette_<tagKey>.Command_<key> olur. Yapılan bir CommandPalette olayı olarak bildirilir: open, via (back ya da scrim) ile dismiss, ve komutun anahtarı ile via (key ya da click) ile run. Yazılan asla bildirilmez.

CommandPaletteStyle

PantrixCommandPalette'in geometrisi: panel, durduğu yer ve listesinin satırları.

ParametreTürVarsayılanNe olduğu
shapeShapeSpecShapeSpec.UnspecifiedPanelin köşeleri: markanın şekil ölçeğinden bir adım, ya da sabit bir şekil.
maxWidthDpDp.UnspecifiedPanelin geniş bir pencerede büyüyebildiği en geniş hâl.
maxHeightDpDp.UnspecifiedPanelin uzun bir pencerede büyüyebildiği en uzun hâl. Daha dar bir pencere ve klavye onu kısaltır.
elevationDpDp.UnspecifiedPanelin gölgesi. iOS bir paneli yalnızca karartmayla ayırır.
marginDpDp.UnspecifiedPanel ile pencerenin güvenli alanı arasındaki en az boşluk.
topSpaceDpDp.UnspecifiedPanelin üstündeki boşluk, margin'in ötesinde.
itemHeightDpDp.UnspecifiedBir komut satırının en az yüksekliği. Daha büyük bir yazı onu uzatır.
itemHorizontalPaddingDpDp.UnspecifiedBir satırın kenarlarıyla içindekiler arasındaki boşluk, bir başlığınki de.
iconSizeDpDp.UnspecifiedBir komutun ikonunun genişliği ve yüksekliği.
iconGapDpDp.UnspecifiedBir komutun ikonu, etiketi ve kısayolu arasında.

CommandPaletteColors

Bir PantrixCommandPalette'in temanın renkleri yerine boyandığı renkler: verilen bir renk kullanılır, bırakılan temanınki kalır.

ParametreTürVarsayılanNe olduğu
containerColorColor.UnspecifiedPanelin dolgusu. Temanın surface'ı.
contentColorColor.UnspecifiedBir komutun etiketi ve ikonu, bir de yazılan. Temanın textPrimary'si, ya da container olarak verilen bir rol dolgusunun üstünde duranlara verdiği renk.
highlightedContainerColorColor.UnspecifiedEnter'ın çalıştırdığı komutun arkasındaki dolgu. Birincil rolün container'ı.
highlightedContentColorColor.UnspecifiedO komutun etiketi, ikonu ve kısayolu: highlightedContainer üstünde okunan renk. Birincil rolün onContainer'ı.
headingColorColor.UnspecifiedBir grubun başlığı, bir kısayol ve hiçbir şey eşleşmediğinde listenin yerinde duran. Temanın kendi zeminlerinde textSecondary'si, başka bir dolguda content.
scrimColorColor.UnspecifiedPaletin arkasında uygulamanın üstüne serilen karartma, kendi alfasıyla. Temanın scrim'i.

Erişilebilirlik