pulsar
RU

QML API (escape hatch)

QML не обязателен. Продвинутые пользователи могут указать "ui": "ui/main.qml" и использовать полный QML API ниже; Store и capabilities те же.

import Pulsar 1.0   // синглтоны Pulsar и Store
import Pulsar 1.0   // синглтоны Pulsar и Store

Pulsar

Метод Описание
Pulsar.emit(name, params) Послать событие в приложение (app.on(name, ...)).
Pulsar.call(name, params) Вызвать событие/capability; возвращает Promise (напр. Pulsar.call("fs.exists", { path: "." }).then(...)).
Pulsar.openFile(title, filter, dir) Нативный диалог открытия; возвращает путь (синхронно).
Pulsar.saveFile(title, filter, dir) Нативный диалог сохранения; возвращает путь.
Pulsar.message(title, text) Нативное окно сообщения.
Pulsar.clipboardText() / Pulsar.clipboardWrite(text) Буфер обмена.
Pulsar.trayAvailable() Доступен ли системный трей.
Pulsar.setTrayIcon(path) / Pulsar.setTrayTooltip(text) / Pulsar.setTrayMenu(items) / Pulsar.hideTray() Управление треем.
Pulsar.diagnostics() Отладочная строка.
Pulsar.restart() Перезапустить бэкенд (dev).

Сигналы: log(level, message, source), appEvent(event, payload, target) и colorSchemeChanged — подписка через Connections. Каждое окно также получает контекстное свойство PulsarWindowLabel со своей меткой. Свойство Pulsar.colorScheme равно "light"/"dark".

Store

Store.<key> реактивно отражает каждое значение app.store:

Label { text: "Count: " + (Store.count ?? 0) }
Grid { model: Store.photos; delegate: Image { required property var modelData; source: modelData.url } }

Несколько окон

// main.ts
app.on("togglePanel", async () => {
  const open = app.store.get("panelOpen") as boolean
  const panel = app.window("panel")
  await (open ? panel.hide() : panel.show())
  app.store.set("panelOpen", !open)
})
// panel.qml
Button {
    text: "Close me"
    onClicked: Pulsar.call("window", { label: "panel", action: "close" })
}