Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
124b71b
docs(theme): add custom JSON theme parser requirements
ZhuchkaTriplesix Jun 13, 2026
7470434
docs(theme): add theme parser implementation plan
ZhuchkaTriplesix Jun 13, 2026
2fc199b
docs(theme): add GitHub issues for custom theme parser epic
ZhuchkaTriplesix Jun 13, 2026
54bb88a
docs: add marketplace extensions technical specification
ZhuchkaTriplesix Jun 13, 2026
f33b392
docs: index theme parser and marketplace planning docs
ZhuchkaTriplesix Jun 13, 2026
fe36e04
Merge pull request #126 from QueryaHub/issue/96-theme-parser-planning
ZhuchkaTriplesix Jun 13, 2026
c940232
docs(theme): add querya.theme.v1 custom JSON schema
ZhuchkaTriplesix Jun 13, 2026
6ade631
docs(theme): link custom theme JSON from import guide and index
ZhuchkaTriplesix Jun 13, 2026
c0eb4ca
Merge pull request #127 from QueryaHub/issue/96-theme-custom-json-schema
ZhuchkaTriplesix Jun 13, 2026
64b651c
test(theme): add querya.theme.v1 parser fixtures
ZhuchkaTriplesix Jun 13, 2026
777fa44
feat(theme): add QueryaThemeManifest model
ZhuchkaTriplesix Jun 13, 2026
7b78bd3
test(theme): add QueryaThemeManifest parser tests
ZhuchkaTriplesix Jun 13, 2026
60581ec
fix(theme): satisfy prefer_const_constructors in manifest parser
ZhuchkaTriplesix Jun 13, 2026
be379d0
Merge pull request #129 from QueryaHub/issue/98-querya-theme-manifest
ZhuchkaTriplesix Jun 13, 2026
211a3b1
feat(theme): add parseQueryaThemeColor wrapper
ZhuchkaTriplesix Jun 13, 2026
88183ed
test(theme): cover parseQueryaThemeColor formats and errors
ZhuchkaTriplesix Jun 13, 2026
b619e9c
Merge pull request #130 from QueryaHub/issue/99-querya-theme-color-pa…
ZhuchkaTriplesix Jun 13, 2026
aad0a06
feat(theme): map shadcn_colors to ColorScheme
ZhuchkaTriplesix Jun 13, 2026
b3c269f
test(theme): cover shadcn_colors ColorScheme mapping
ZhuchkaTriplesix Jun 13, 2026
34e8368
fix(theme): silence deprecated destructiveForeground lint
ZhuchkaTriplesix Jun 13, 2026
dc8dd89
fix(theme): place deprecated_member_use ignore on correct line
ZhuchkaTriplesix Jun 13, 2026
689f80a
Merge pull request #131 from QueryaHub/issue/100-querya-theme-color-s…
ZhuchkaTriplesix Jun 13, 2026
f46b336
feat(theme): map editor_colors to QueryaEditorTheme
ZhuchkaTriplesix Jun 13, 2026
1920e2b
test(theme): cover editor_colors QueryaEditorTheme mapping
ZhuchkaTriplesix Jun 13, 2026
e14b911
Merge pull request #132 from QueryaHub/issue/101-querya-editor-theme-…
ZhuchkaTriplesix Jun 13, 2026
2ceeeb8
feat(theme): map editor_colors to QueryaWorkbenchTheme
ZhuchkaTriplesix Jun 13, 2026
2c7e686
test(theme): cover editor_colors QueryaWorkbenchTheme mapping
ZhuchkaTriplesix Jun 13, 2026
271b196
Merge pull request #133 from QueryaHub/issue/102-querya-workbench-the…
ZhuchkaTriplesix Jun 13, 2026
99b2de5
feat(theme): build QueryaTheme from custom manifest
ZhuchkaTriplesix Jun 13, 2026
6777eac
test(theme): cover QueryaTheme factory from custom manifest
ZhuchkaTriplesix Jun 13, 2026
d1cff84
fix(theme): use const fallback in manifest factory test
ZhuchkaTriplesix Jun 13, 2026
16c3e3f
Merge pull request #134 from QueryaHub/issue/103-querya-theme-from-ma…
ZhuchkaTriplesix Jun 13, 2026
b18aaca
feat(theme): add ThemeDefinition metadata model
ZhuchkaTriplesix Jun 13, 2026
c6954f9
feat(theme): add ThemeLoadResult sealed load types
ZhuchkaTriplesix Jun 13, 2026
30db7f5
Merge pull request #135 from QueryaHub/issue/104-theme-load-result
ZhuchkaTriplesix Jun 13, 2026
a332f75
feat(theme): add ThemeDefinition value equality
ZhuchkaTriplesix Jun 13, 2026
529f9aa
test(theme): cover ThemeDefinition helpers and equality
ZhuchkaTriplesix Jun 13, 2026
52385fa
Merge pull request #136 from QueryaHub/issue/105-theme-definition-tests
ZhuchkaTriplesix Jun 13, 2026
94bad09
feat(theme): add ThemePaths directory helpers
ZhuchkaTriplesix Jun 14, 2026
784656c
test(theme): cover ThemePaths resolution and ensure helpers
ZhuchkaTriplesix Jun 14, 2026
8c4608d
Merge pull request #137 from QueryaHub/issue/106-theme-paths
ZhuchkaTriplesix Jun 14, 2026
045f88d
feat(theme): scan filesystem themes into ThemeDefinition list
ZhuchkaTriplesix Jun 14, 2026
a8cd744
test(theme): cover ThemeRegistryService filesystem scan
ZhuchkaTriplesix Jun 14, 2026
59811d7
Merge pull request #138 from QueryaHub/issue/107-theme-registry-scan
ZhuchkaTriplesix Jun 14, 2026
7aeb0b0
feat(theme): load ThemeDefinition into ThemeLoadResult
ZhuchkaTriplesix Jun 14, 2026
dba3e37
test(theme): cover ThemeRegistryService.loadTheme paths
ZhuchkaTriplesix Jun 14, 2026
900d0bd
Merge pull request #139 from QueryaHub/issue/108-theme-registry-load
ZhuchkaTriplesix Jun 14, 2026
b4b2476
feat(theme): add LRU cache to ThemeRegistryService.loadTheme
ZhuchkaTriplesix Jun 14, 2026
b479d7b
test(theme): cover ThemeRegistryService LRU cache behavior
ZhuchkaTriplesix Jun 14, 2026
9a8d3e4
Merge pull request #140 from QueryaHub/issue/109-theme-registry-cache
ZhuchkaTriplesix Jun 14, 2026
384c4ec
feat(theme): persist selected registry theme in AppSettings
ZhuchkaTriplesix Jun 14, 2026
e718201
test(storage): cover selected theme registry AppSettings roundtrip
ZhuchkaTriplesix Jun 14, 2026
ea1766d
Merge pull request #141 from QueryaHub/issue/110-theme-selected-settings
ZhuchkaTriplesix Jun 14, 2026
ec41c54
feat(theme): migrate legacy imported theme into registry scan
ZhuchkaTriplesix Jun 14, 2026
0f86f40
test(theme): cover legacy imported theme registry migration
ZhuchkaTriplesix Jun 14, 2026
7deaa34
Merge pull request #142 from QueryaHub/issue/111-legacy-imported-migr…
ZhuchkaTriplesix Jun 14, 2026
64c653e
feat(theme): integrate ThemeRegistry into ThemeController
ZhuchkaTriplesix Jun 14, 2026
e55dd57
test(theme): cover ThemeController registry selection and fallback
ZhuchkaTriplesix Jun 14, 2026
accdd45
fix(theme): remove unnecessary foundation import in ThemeController
ZhuchkaTriplesix Jun 14, 2026
d5820ad
Merge pull request #143 from QueryaHub/issue/112-theme-controller-reg…
ZhuchkaTriplesix Jun 14, 2026
abb1432
feat(settings): add ThemePickerButton for registry theme lists
ZhuchkaTriplesix Jun 14, 2026
176464d
test(settings): cover ThemePickerButton menu and selection
ZhuchkaTriplesix Jun 14, 2026
6e135a1
fix(settings): satisfy prefer_const analyzer hints in theme picker
ZhuchkaTriplesix Jun 14, 2026
0115afb
Merge pull request #144 from QueryaHub/issue/113-theme-picker-button
ZhuchkaTriplesix Jun 14, 2026
7ed7869
feat(settings): add search filter to ThemePickerButton popup
ZhuchkaTriplesix Jun 14, 2026
b7309a2
test(settings): cover ThemePickerButton search filtering
ZhuchkaTriplesix Jun 14, 2026
3280d13
Merge pull request #145 from QueryaHub/issue/114-theme-picker-search
ZhuchkaTriplesix Jun 14, 2026
e61a8da
feat(settings): add ThemePreviewCard with debounced hover preview
ZhuchkaTriplesix Jun 14, 2026
cf6e231
test(settings): cover ThemePreviewCard and picker hover preview
ZhuchkaTriplesix Jun 14, 2026
93f745d
Merge pull request #146 from QueryaHub/issue/115-theme-preview-card
ZhuchkaTriplesix Jun 14, 2026
cba6907
feat(settings): wire ThemePickerButton into Preferences appearance
ZhuchkaTriplesix Jun 14, 2026
124d51d
test(settings): cover Preferences theme picker integration
ZhuchkaTriplesix Jun 14, 2026
a4a1971
Merge pull request #147 from QueryaHub/issue/116-wire-theme-picker-pr…
ZhuchkaTriplesix Jun 14, 2026
fc48324
feat(settings): add Refresh themes action in Preferences
ZhuchkaTriplesix Jun 14, 2026
42339dd
test(settings): cover theme refresh loading and list rescan
ZhuchkaTriplesix Jun 14, 2026
10ecf93
Merge pull request #148 from QueryaHub/issue/117-refresh-themes
ZhuchkaTriplesix Jun 14, 2026
9fd3406
feat(theme): import theme files into user themes registry
ZhuchkaTriplesix Jun 14, 2026
931e23a
test(theme): cover registry theme import and duplicate handling
ZhuchkaTriplesix Jun 14, 2026
09eaa91
fix ci
ZhuchkaTriplesix Jun 14, 2026
7f29de1
Merge pull request #149 from QueryaHub/issue/118-import-themes-registry
ZhuchkaTriplesix Jun 14, 2026
8fd69cb
feat(theme): ship built-in themes from Flutter asset bundle
ZhuchkaTriplesix Jun 14, 2026
8121c2e
test(theme): cover built-in asset theme registry loading
ZhuchkaTriplesix Jun 14, 2026
bc010eb
Merge pull request #150 from QueryaHub/issue/119-builtin-theme-assets
ZhuchkaTriplesix Jun 14, 2026
c260ff5
feat(theme): document user themes folder and add open-folder control
ZhuchkaTriplesix Jun 14, 2026
63a1d70
test(theme): cover themes folder hint and open-directory helper
ZhuchkaTriplesix Jun 14, 2026
4de68e0
Merge pull request #151 from QueryaHub/issue/120-user-theme-folder-docs
ZhuchkaTriplesix Jun 14, 2026
12a4012
feat(theme): sync window chrome with QueryaThemeScope workbench tokens
ZhuchkaTriplesix Jun 14, 2026
1d69ec1
test(theme): cover window chrome styling from QueryaThemeScope
ZhuchkaTriplesix Jun 14, 2026
84a8e6a
fix: restore GestureDetector import and trim analyze warnings
ZhuchkaTriplesix Jun 14, 2026
6b8cab8
Merge pull request #152 from QueryaHub/issue/121-window-chrome-theme-…
ZhuchkaTriplesix Jun 14, 2026
a5e681c
feat(theme): standardize startup fallback when selected theme fails
ZhuchkaTriplesix Jun 14, 2026
51e1ccd
test(theme): cover missing, invalid, and recovery startup theme paths
ZhuchkaTriplesix Jun 14, 2026
d294329
fix(theme): keep in-memory theme when refresh loses disk file
ZhuchkaTriplesix Jun 14, 2026
7c2b5ef
Merge pull request #153 from QueryaHub/issue/122-startup-theme-fallback
ZhuchkaTriplesix Jun 14, 2026
5e16657
test(theme): guard 60-theme picker against overflow and lazy-build re…
ZhuchkaTriplesix Jun 14, 2026
eb424a5
Merge pull request #154 from QueryaHub/issue/123-performance-50-theme…
ZhuchkaTriplesix Jun 14, 2026
ad09db4
test(theme): cover end-to-end registry import, apply, and reload flow
ZhuchkaTriplesix Jun 14, 2026
0415000
Merge pull request #155 from QueryaHub/issue/124-theme-import-flow-test
ZhuchkaTriplesix Jun 14, 2026
191848c
docs(theme): add release QA checklist and troubleshooting for custom …
ZhuchkaTriplesix Jun 14, 2026
93b87be
Merge pull request #156 from QueryaHub/issue/125-release-theme-qa-docs
ZhuchkaTriplesix Jun 14, 2026
31cae8f
chore(release): prepare 0.4.2 and plan 0.4.3 theme follow-ups
ZhuchkaTriplesix Jun 14, 2026
b5a848c
Merge pull request #157 from QueryaHub/release/0.4.2-prep
ZhuchkaTriplesix Jun 15, 2026
c87df6f
chore(release): align pubspec with main for 0.4.2 version-bump
ZhuchkaTriplesix Jun 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,26 @@ All notable changes to this project are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Planned (0.4.3)

Theme and extensions follow-ups — see [docs/planned-0.4.3.md](docs/planned-0.4.3.md): file watcher (TP-F1), marketplace metadata (TP-F2), visual theme editor (TP-F3), remote theme install (TP-F4).

## [0.4.2] - 2026-06-14

Custom theme registry release (parser epic TP-01–TP-30, GitHub issues **#96–#125**). Git tag **`0.4.2`**.

### Added

- **Custom theme registry** — scan `{appSupport}/themes/` for `querya.theme.v1` and VS Code JSON/JSONC; **Theme** picker with search, hover preview, **Refresh themes**, and **Open themes folder** (Preferences → Appearance).
- **Built-in bundled themes** — **Querya Cyberpunk Neon** from `assets/themes/` (no manual install).
- **Theme import** — **Import theme…** copies into the user themes directory with content-hash and id deduplication; selection persists across restarts.
- **Startup safety** — missing or broken selected theme falls back to Querya Dark with a Preferences error; saved theme id is kept until the user picks another theme.
- **Window chrome** — title bar and window controls follow active `QueryaThemeScope` workbench tokens.
- **Docs / QA** — [theme-custom-json.md](docs/theme-custom-json.md), updated [theme-import.md](docs/theme-import.md), custom-theme section in [release-checklist.md](docs/release-checklist.md).
- **Tests** — registry/parser/controller coverage, 60-theme picker performance guard, end-to-end import flow (`theme_import_flow_test.dart`).

## [0.4.1] - 2026-06-13

Performance and UX release ([#93](https://github.com/QueryaHub/Querya-Desktop/issues/93)). Git tag **`0.4.1`**.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ a clean, dark UI inspired by tools like pgAdmin.
statement timeouts, query history, and CSV/JSON export.
- **Object browsing** — connection tree with databases, tables, views, and
server stats.
- **Themeable** — runtime dark/light/system modes and **VS Code theme import**.
- **Themeable** — dark/light/system, **VS Code theme import**, custom `querya.theme.v1` registry, and bundled themes (0.4.2).
- **Scalable UI** — global interface scaling for high-DPI and accessibility.
- **Secure by default** — passwords and connection strings live in the OS secure
store, never in plaintext.
Expand Down
96 changes: 96 additions & 0 deletions assets/themes/cyberpunk-neon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
{
"name": "Querya Cyberpunk Neon",
"type": "dark",
"colors": {
"activityBar.background": "#050508",
"statusBar.background": "#050508",
"sideBar.background": "#0c0820",
"sideBar.foreground": "#8b7cf8",
"tab.activeBackground": "#14102a",
"panel.background": "#14102a",
"input.background": "#14102a",
"editor.background": "#0a0a14",
"editor.foreground": "#e8f4ff",
"editor.selectionBackground": "#ff2a6d44",
"editorLineNumber.foreground": "#4a3f7a",
"editorBracketMatch.background": "#00f5ff33",
"editorWidget.border": "#00f5ff66",
"focusBorder": "#00f5ff",
"list.hoverBackground": "#ff2a6d22",
"gitDecoration.modifiedResourceForeground": "#fcee09",
"gitDecoration.untrackedResourceForeground": "#39ff14"
},
"tokenColors": [
{
"name": "Comments",
"scope": ["comment", "comment.line", "comment.block", "punctuation.definition.comment"],
"settings": {
"foreground": "#5c4d8a",
"fontStyle": "italic"
}
},
{
"name": "Keywords",
"scope": [
"keyword",
"keyword.control",
"keyword.operator.logical",
"storage.type",
"storage.modifier"
],
"settings": {
"foreground": "#ff2a6d",
"fontStyle": "bold"
}
},
{
"name": "Strings",
"scope": ["string", "string.quoted.single", "string.quoted.double"],
"settings": {
"foreground": "#fcee09"
}
},
{
"name": "Numbers",
"scope": ["constant.numeric", "constant.language"],
"settings": {
"foreground": "#bd00ff"
}
},
{
"name": "Functions",
"scope": ["entity.name.function", "support.function"],
"settings": {
"foreground": "#00f5ff"
}
},
{
"name": "Types / classes",
"scope": ["entity.name.type", "support.type"],
"settings": {
"foreground": "#8b7cf8"
}
},
{
"name": "Variables",
"scope": ["variable", "variable.other"],
"settings": {
"foreground": "#e8f4ff"
}
},
{
"name": "JSON keys",
"scope": ["support.type.property-name.json"],
"settings": {
"foreground": "#00f5ff"
}
},
{
"name": "JSON strings",
"scope": ["string.quoted.double.json"],
"settings": {
"foreground": "#39ff14"
}
}
]
}
6 changes: 6 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Index of Querya Desktop documentation, grouped by audience.
- [Architecture](architecture.md) — `lib/` layout and module responsibilities.
- [Theme system](theme.md) — runtime theming and VS Code theme tokens.
- [Theme import](theme-import.md) — supported `colors` keys and merge behavior.
- [Custom theme JSON](theme-custom-json.md) — `querya.theme.v1` schema and fallback rules.
- [Performance baseline](perf-baseline.md) — per-milestone DevTools checklist.

## For release managers
Expand All @@ -25,6 +26,11 @@ Index of Querya Desktop documentation, grouped by audience.
## Planning

- [Roadmap](roadmap.md) — current direction and follow-ups.
- [Planned 0.4.3](planned-0.4.3.md) — deferred theme/extensions follow-ups after 0.4.2.
- [Custom theme parser requirements](scheme-parcer.md) — JSON theme format and scaling spec.
- [Theme parser implementation plan](theme-parser-implementation-tasks.md) — task breakdown and architecture.
- [Theme parser GitHub issues](theme-parser-github-issues.md) — issue templates for epic #96–#125.
- [Marketplace extensions spec](market-tech.md) — extensions manager and marketplace integration.

## Archive

Expand Down
103 changes: 103 additions & 0 deletions docs/market-tech.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
Это потрясающая новость! Разработка собственного маркетплейса параллельно с клиентом — это переход от создания просто "инструмента" к созданию полноценной экосистемы (как у VS Code или Obsidian). Это невероятно мощный драйвер для роста сообщества и получения звезд на GitHub.

Чтобы Querya Desktop оставалась легковесной, функционал маркетплейса должен быть реализован архитектурно грамотно: ядро ничего не знает о логике плагинов, оно лишь предоставляет интерфейс (API) для их загрузки и применения.

Вот подробное техническое задание (ТЗ) на создание менеджера расширений и задел для интеграции с твоим будущим маркетом.
ТЗ 3: Встроенный Менеджер Расширений и Интеграция с Маркетплейсом

Цель: Создать в интерфейсе Querya Desktop выделенный раздел для управления дополнениями (темами, UI-твиками, коннекторами) и заложить сетевую/файловую архитектуру для связи с внешним API маркетплейса.
1. UI/UX: Раздел «Extensions» (В стиле VS Code)

В интерфейсе приложения (например, в левом боковом меню) появляется новая иконка (🧩 Пазл).

Структура раздела:

Левая панель (Навигация и Поиск):

Строка поиска (с debounce-задержкой, чтобы не спамить API твоего маркета).

Вкладки-фильтры: Installed (Установленные), Explore (Поиск по маркету), Updates (Доступные обновления).

Центральная панель (Список):

Карточки расширений с использованием компонентов shadcn_flutter.

На карточке: Иконка, Название, Автор, Рейтинг (⭐), Бейдж типа (Theme, Plugin, Driver) и кнопка Install / Uninstall.

Правая панель (Детали - Markdown View):

При клике на карточку справа открывается подробное описание (парсится из README расширения), скриншоты и Changelog.

2. Архитектура: Задел под Маркетплейс (Сетевой слой)

В директории lib/core/ необходимо создать новый модуль market/, который будет отвечать за связь с твоим бэкендом.

Ожидаемые контракты (Интерфейсы для будущего API):
Мобильный/десктопный клиент должен общаться с маркетом через четкие модели данных. Тебе нужно заложить класс ExtensionManifest, который клиент будет ожидать от бэкенда:
Dart

class ExtensionManifest {
final String id; // e.g., 'reei.cyberpunk-theme'
final String name; // 'Cyberpunk 2077 Theme'
final String type; // 'theme', 'sql-formatter', 'visualizer'
final String version; // '1.0.2'
final String downloadUrl; // Ссылка на .zip или .json в твоем хранилище
final String sha256Checksum; // КРИТИЧНО: Хэш для проверки целостности
}

Абстракция клиента (MarketplaceClient):
Сделай интерфейс, чтобы сейчас его можно было замокать (Mock), а потом просто подставить реальный HTTP-клиент:

Future<List<ExtensionManifest>> fetchTrending()

Future<List<ExtensionManifest>> search(String query)

Future<File> downloadExtension(String downloadUrl)

3. Файловая система и Безопасность (Локальный слой)

Querya Desktop — это клиент базы данных, поэтому безопасность (особенно при скачивании сторонних файлов) — приоритет №1.

Директории: При старте приложение должно проверять и создавать папки в домашней директории пользователя:

Linux/macOS: ~/.querya/extensions/themes/ и ~/.querya/extensions/plugins/

Windows: %APPDATA%\Querya\extensions\

Процесс установки (Флоу):

Пользователь жмет Install.

Приложение скачивает файл во временную папку.

Сверяет sha256 скачанного файла с тем, что отдал API маркета.

Распаковывает в нужную папку внутри ~/.querya/extensions/.

Обновляет локальную базу данных SQLite (таблица installed_extensions).

Изоляция (Sandboxing): На первом этапе (для тем) это просто JSON файлы, они безопасны. Но в ТЗ нужно указать, что исполняемые плагины в будущем должны загружаться как изолированные модули (например, через Dart Isolates или WASM), чтобы плагин не мог украсть креды от БД из ОС.

4. Стейт-менеджмент (Управление состояниями)

Для бесшовного опыта нужно создать ExtensionProvider (или использовать Bloc/Riverpod — в зависимости от того, что у вас в lib/core/).

Отслеживаемые состояния:

isMarketReachable: Проверка, доступен ли сервер маркета (если нет — показываем только вкладку Installed с заглушкой "Marketplace offline").

downloadProgress: Мапа Map<String, double> для отображения прогресс-баров загрузки на кнопках Install.

requireRestart: Флаг. Некоторым темам (или сложным плагинам) может потребоваться перезапуск приложения или сброс кэша редактора. Если флаг true, показываем всплывающий Toast (через shadcn_flutter).

Маркетинговый совет для GitHub (Как использовать маркетплейс для звезд):

Когда ты сделаешь этот раздел, добавь в README.md красивый бейдж:
[🔌 Querya Extension Market: Live]

И напиши блок:

Build your own tools for Querya
Querya Desktop features a built-in Marketplace. Don't like our UI? Download a new theme. Need a specific data visualizer? Write a plugin and publish it to the Querya Market in 5 minutes.

Как тебе такой план? Если концепция ясна, мы можем углубиться в то, как именно ThemeParser (из предыдущего ТЗ) будет автоматически подхватывать свежескачанные JSON-файлы из папки ~/.querya/extensions/themes/ без перезагрузки приложения!
44 changes: 44 additions & 0 deletions docs/planned-0.4.3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Planned release 0.4.3 — theme and extensions follow-ups

**Status:** planning (not started).
**Depends on:** **0.4.2** custom theme registry (TP-01–TP-30, shipped).

This document captures work intentionally deferred from the first custom-theme pass.
See also [theme-parser-github-issues.md](theme-parser-github-issues.md) (TP-F1–TP-F4) and
[market-tech.md](market-tech.md) for the broader extensions marketplace direction.

## Theme folder and discovery

| ID | Scope | Summary |
|----|--------|---------|
| **TP-F1** | `theme`, `filesystem` | **File watcher** for `{appSupport}/themes/` — auto-refresh the registry when files are added, removed, or renamed. Deferred: OS-specific watcher APIs and app lifecycle edge cases. |

## Theme distribution and metadata

| ID | Scope | Summary |
|----|--------|---------|
| **TP-F2** | `theme`, `marketplace` | **Marketplace metadata** on `ThemeDefinition` / manifests — preview image, tags, homepage, license, author. Prerequisite for listing themes in a future Extensions UI. |
| **TP-F4** | `theme`, `network` | **Remote theme install** — download from URL with checksum/trust policy. Requires security review (HTTPS, signatures, user consent). |

## Authoring UX

| ID | Scope | Summary |
|----|--------|---------|
| **TP-F3** | `theme`, `settings` | **Visual theme editor** in Preferences — tweak colors, export `querya.theme.v1`. Larger than parser/import; likely multiple PRs. |

## Extensions marketplace (optional overlap)

If **0.4.3** also starts the extensions shell from [market-tech.md](market-tech.md), align **TP-F2** theme metadata with `ExtensionManifest` so themes can appear as a category in **Explore**. Keep `lib/core/market/` isolated from theme parser internals.

## Suggested PR order (draft)

1. TP-F1 — watcher + debounced `loadAvailableThemes()`
2. TP-F2 — manifest fields + docs (no remote API yet)
3. TP-F3 — minimal editor MVP (export only) or split to **0.4.4**
4. TP-F4 — install-from-URL behind explicit user action

## Out of scope for 0.4.3

- Full marketplace backend and **Extensions** sidebar UI (may land in **0.5.0** per market-tech.md)
- P2 Mongo/Redis semantic token colors ([roadmap.md](roadmap.md))
- `re_editor` / LSP editor replacement
22 changes: 19 additions & 3 deletions docs/release-checklist.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Pre-release checklist (toward 1.0)
# Pre-release checklist (release **0.4.2**)

Use this before tagging or running the **Release** workflow.
Use this before tagging **`0.4.2`** or running the **Release** workflow.
See [tags-and-releases.md](tags-and-releases.md) and [CHANGELOG.md](../CHANGELOG.md).

## Product smoke (manual)

Expand All @@ -10,6 +11,20 @@ Use this before tagging or running the **Release** workflow.
- [ ] **Connection → New Database Connection** from the menu saves and shows in the tree.
- [ ] **Driver Manager** shows only built-in drivers (no misleading JDBC requirement).

## Custom themes (manual QA)

Use **Preferences → Appearance** unless noted. Fixtures for copy/import tests live under
`test/fixtures/themes/`; bundled built-in sample: **Querya Cyberpunk Neon** in the theme picker.

- [ ] **Import valid custom dark** — import `test/fixtures/themes/querya_custom_dark.json` (or copy to themes folder + **Refresh themes**). Theme appears in picker; UI uses custom primary (`#38BDF8`).
- [ ] **Import valid custom light** — import `test/fixtures/themes/querya_custom_light.json`. App switches to light brightness; readable text on cards and sidebar.
- [ ] **Import VS Code JSONC** — import `test/fixtures/themes/querya_custom_jsonc.jsonc` or `themes/samples/cyberpunk-neon.jsonc`. Parser accepts comments/trailing commas; theme applies without crash.
- [ ] **Picker with many themes** — install 50+ themes (copy fixtures with unique ids, or duplicate renamed files) → open theme picker: no overflow, list scrolls, search filters rows.
- [ ] **Restart persists selection** — select a registry theme (not only Querya Dark/Light), quit and relaunch: same theme active, no error in Preferences.
- [ ] **Missing file fallback** — with a registry theme selected, delete its file from `{appSupport}/themes/`, restart: app starts on **Querya Dark**, Preferences shows *Selected theme failed to load. Using Querya Dark.*; saved selection id remains until user picks another theme.
- [ ] **Title bar / window controls** — switch Querya Dark, Querya Light, Cyberpunk Neon, and a custom theme: title bar background and minimize/maximize/close hover colors track the active theme.
- [ ] **SQL / JSON syntax** — open SQL editor with a theme that defines `tokenColors` (e.g. cyberpunk sample): comments, keywords, and strings use distinct colors; changing theme updates highlighting after editor refresh.

## Automated

- [ ] `flutter analyze` — clean (on Linux, if the analyzer crashes with **Too many open files**, try `ulimit -n 8192`; see [CONTRIBUTING.md](../CONTRIBUTING.md)).
Expand All @@ -18,7 +33,8 @@ Use this before tagging or running the **Release** workflow.

## Versioning and release

- [ ] `pubspec.yaml` `version` matches the release you intend to ship.
- [ ] `pubspec.yaml` on **`dev`** is **`0.4.1+7`** before merging to `main` (auto version-bump sets **`0.4.2+8`** on `main`).
- [ ] After merge, confirm GitHub Action **Auto Version Bump** committed **`0.4.2+…`** on `main`.
- [ ] **Tag** is placed on the **commit that includes all fixes** you want in binaries (a tag does not auto-include later commits; see [CONTRIBUTING.md](../CONTRIBUTING.md)).
- [ ] Run the **Release** workflow from GitHub Actions (see [tags-and-releases.md](tags-and-releases.md)).
- [ ] Verify **Linux** and **Windows** zip artifacts and `SHA256SUMS.txt` on the GitHub Release.
Expand Down
Loading
Loading