From a20d170956f0b567b4f48a0f66872e5ec513595a Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Wed, 8 Apr 2026 16:05:47 +0300 Subject: [PATCH] Release v0.11.3 --- CHANGELOG.md | 2 ++ desktop/tauri.conf.json | 2 +- package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/mcp/package.json | 2 +- packages/vue/package.json | 2 +- packages/vue/src/controls/useStrokeControls.ts | 15 ++++++++------- packages/vue/src/i18n/messages.ts | 6 ++++++ packages/vue/src/locales/de.json | 8 +++++++- packages/vue/src/locales/es.json | 8 +++++++- packages/vue/src/locales/fr.json | 8 +++++++- packages/vue/src/locales/it.json | 8 +++++++- packages/vue/src/locales/pl.json | 8 +++++++- packages/vue/src/locales/ru.json | 8 +++++++- packages/vue/src/locales/zh-CN.json | 13 +++++++------ src/components/VariablesDialog.vue | 4 ++-- src/components/properties/ExportSection.vue | 6 +++--- 18 files changed, 76 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c09756540..cebdf0492 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.11.3 — 2026-04-08 + ### Fixes - Show actionable install errors in the chat panel when a required local AI CLI is missing diff --git a/desktop/tauri.conf.json b/desktop/tauri.conf.json index beb502abe..d25ab432a 100644 --- a/desktop/tauri.conf.json +++ b/desktop/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "OpenPencil", - "version": "0.11.2", + "version": "0.11.3", "identifier": "net.dannote.open-pencil", "build": { "beforeDevCommand": "bun run dev", diff --git a/package.json b/package.json index 98898977a..9b8275911 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "open-pencil-app", "private": true, - "version": "0.11.2", + "version": "0.11.3", "license": "MIT", "type": "module", "workspaces": [ diff --git a/packages/cli/package.json b/packages/cli/package.json index fb0623c53..10197f8d8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@open-pencil/cli", - "version": "0.11.2", + "version": "0.11.3", "license": "MIT", "type": "module", "bin": { diff --git a/packages/core/package.json b/packages/core/package.json index 323a66d6f..d9736eabf 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@open-pencil/core", - "version": "0.11.2", + "version": "0.11.3", "license": "MIT", "type": "module", "sideEffects": false, diff --git a/packages/mcp/package.json b/packages/mcp/package.json index ad5e8c71d..d1c8dd838 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@open-pencil/mcp", - "version": "0.11.2", + "version": "0.11.3", "license": "MIT", "type": "module", "main": "./dist/server.js", diff --git a/packages/vue/package.json b/packages/vue/package.json index 2f2dfe762..2dcefe13c 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@open-pencil/vue", - "version": "0.11.2", + "version": "0.11.3", "license": "MIT", "type": "module", "exports": { diff --git a/packages/vue/src/controls/useStrokeControls.ts b/packages/vue/src/controls/useStrokeControls.ts index 3fdf2d555..2ca29220d 100644 --- a/packages/vue/src/controls/useStrokeControls.ts +++ b/packages/vue/src/controls/useStrokeControls.ts @@ -1,17 +1,12 @@ import { ref } from 'vue' import { useEditor } from '@open-pencil/vue/context/editorContext' +import { useI18n } from '@open-pencil/vue/i18n' import type { SceneNode, Stroke } from '@open-pencil/core' type StrokeSides = 'ALL' | 'TOP' | 'BOTTOM' | 'LEFT' | 'RIGHT' | 'CUSTOM' -const ALIGN_OPTIONS: { value: Stroke['align']; label: string }[] = [ - { value: 'INSIDE', label: 'Inside' }, - { value: 'CENTER', label: 'Center' }, - { value: 'OUTSIDE', label: 'Outside' } -] - const SIDE_OPTIONS: { value: StrokeSides; label: string }[] = [ { value: 'ALL', label: 'All' }, { value: 'TOP', label: 'Top' }, @@ -38,7 +33,13 @@ const DEFAULT_STROKE: Stroke = { */ export function useStrokeControls() { const store = useEditor() + const { panels } = useI18n() const sideMenuOpen = ref(false) + const alignOptions = [ + { value: 'INSIDE' as const, label: panels.value.strokeAlignInside }, + { value: 'CENTER' as const, label: panels.value.strokeAlignCenter }, + { value: 'OUTSIDE' as const, label: panels.value.strokeAlignOutside } + ] function updateAlign(align: Stroke['align'], activeNode: SceneNode) { const strokes = activeNode.strokes.map((s) => ({ ...s, align })) @@ -134,7 +135,7 @@ export function useStrokeControls() { } return { - alignOptions: ALIGN_OPTIONS, + alignOptions, sideOptions: SIDE_OPTIONS, borderSides: BORDER_SIDES, sideMenuOpen, diff --git a/packages/vue/src/i18n/messages.ts b/packages/vue/src/i18n/messages.ts index 4dd97410a..c1a27671a 100644 --- a/packages/vue/src/i18n/messages.ts +++ b/packages/vue/src/i18n/messages.ts @@ -135,6 +135,12 @@ export const panelMessages = i18n('panels', { mixedStrokesHelp: 'Click + to replace mixed strokes', mixedEffectsHelp: 'Click + to replace mixed effects', strokeSides: 'Stroke sides', + strokeAlignInside: 'Inside', + strokeAlignCenter: 'Center', + strokeAlignOutside: 'Outside', + exportPreview: 'Preview', + exportRenderingPreview: 'Rendering preview…', + createVariable: 'Create variable', mixed: 'Mixed', layersCount: params('{count} layers'), goToMainComponent: 'Go to Main Component', diff --git a/packages/vue/src/locales/de.json b/packages/vue/src/locales/de.json index c5701dfca..25137c3f2 100644 --- a/packages/vue/src/locales/de.json +++ b/packages/vue/src/locales/de.json @@ -154,7 +154,13 @@ "sizingHugShort": "Inhalt", "sizingFillShort": "Füllen", "sizingFillFr": "Füllen (fr)", - "sizingFixedPx": "Fest (px)" + "sizingFixedPx": "Fest (px)", + "strokeAlignInside": "Innen", + "strokeAlignCenter": "Mitte", + "strokeAlignOutside": "Außen", + "exportPreview": "Vorschau", + "exportRenderingPreview": "Vorschau wird gerendert…", + "createVariable": "Variable erstellen" }, "pages": { "newPage": "Neue Seite", diff --git a/packages/vue/src/locales/es.json b/packages/vue/src/locales/es.json index 3624a408e..0d142353d 100644 --- a/packages/vue/src/locales/es.json +++ b/packages/vue/src/locales/es.json @@ -154,7 +154,13 @@ "sizingHugShort": "Ajust.", "sizingFillShort": "Llenar", "sizingFillFr": "Rellenar (fr)", - "sizingFixedPx": "Fijo (px)" + "sizingFixedPx": "Fijo (px)", + "strokeAlignInside": "Interior", + "strokeAlignCenter": "Centro", + "strokeAlignOutside": "Exterior", + "exportPreview": "Vista previa", + "exportRenderingPreview": "Renderizando vista previa…", + "createVariable": "Crear variable" }, "pages": { "newPage": "Nueva página", diff --git a/packages/vue/src/locales/fr.json b/packages/vue/src/locales/fr.json index 81fa943ac..06a418d93 100644 --- a/packages/vue/src/locales/fr.json +++ b/packages/vue/src/locales/fr.json @@ -154,7 +154,13 @@ "sizingHugShort": "Ajust.", "sizingFillShort": "Remp.", "sizingFillFr": "Remplir (fr)", - "sizingFixedPx": "Fixe (px)" + "sizingFixedPx": "Fixe (px)", + "strokeAlignInside": "Intérieur", + "strokeAlignCenter": "Centré", + "strokeAlignOutside": "Extérieur", + "exportPreview": "Aperçu", + "exportRenderingPreview": "Rendu de l’aperçu…", + "createVariable": "Créer une variable" }, "pages": { "newPage": "Nouvelle page", diff --git a/packages/vue/src/locales/it.json b/packages/vue/src/locales/it.json index f8df6f19f..402abc36a 100644 --- a/packages/vue/src/locales/it.json +++ b/packages/vue/src/locales/it.json @@ -154,7 +154,13 @@ "sizingHugShort": "Adatt.", "sizingFillShort": "Riemp.", "sizingFillFr": "Riempi (fr)", - "sizingFixedPx": "Fisso (px)" + "sizingFixedPx": "Fisso (px)", + "strokeAlignInside": "Interno", + "strokeAlignCenter": "Centro", + "strokeAlignOutside": "Esterno", + "exportPreview": "Anteprima", + "exportRenderingPreview": "Rendering anteprima…", + "createVariable": "Crea variabile" }, "pages": { "newPage": "Nuova pagina", diff --git a/packages/vue/src/locales/pl.json b/packages/vue/src/locales/pl.json index 5c1a02fec..7c604c9bc 100644 --- a/packages/vue/src/locales/pl.json +++ b/packages/vue/src/locales/pl.json @@ -154,7 +154,13 @@ "sizingHugShort": "Dopas.", "sizingFillShort": "Wypełn.", "sizingFillFr": "Wypełnij (fr)", - "sizingFixedPx": "Stały (px)" + "sizingFixedPx": "Stały (px)", + "strokeAlignInside": "Wewnętrzny", + "strokeAlignCenter": "Wyśrodkowany", + "strokeAlignOutside": "Zewnętrzny", + "exportPreview": "Podgląd", + "exportRenderingPreview": "Renderowanie podglądu…", + "createVariable": "Utwórz zmienną" }, "pages": { "newPage": "Nowa strona", diff --git a/packages/vue/src/locales/ru.json b/packages/vue/src/locales/ru.json index 4f4d5b396..19727f334 100644 --- a/packages/vue/src/locales/ru.json +++ b/packages/vue/src/locales/ru.json @@ -154,7 +154,13 @@ "sizingHugShort": "Содерж.", "sizingFillShort": "Запол.", "sizingFillFr": "Заполнить (fr)", - "sizingFixedPx": "Фиксированный (px)" + "sizingFixedPx": "Фиксированный (px)", + "strokeAlignInside": "Внутри", + "strokeAlignCenter": "По центру", + "strokeAlignOutside": "Снаружи", + "exportPreview": "Предпросмотр", + "exportRenderingPreview": "Рендеринг предпросмотра…", + "createVariable": "Создать переменную" }, "pages": { "newPage": "Новая страница", diff --git a/packages/vue/src/locales/zh-CN.json b/packages/vue/src/locales/zh-CN.json index 5f1542293..5c526a74b 100644 --- a/packages/vue/src/locales/zh-CN.json +++ b/packages/vue/src/locales/zh-CN.json @@ -130,12 +130,8 @@ "image": "图片", "stops": "色标", "addStop": "添加色标", - "alignLeft": "左对齐", "alignCenter": "居中", - "alignRight": "右对齐", - "alignTop": "顶部对齐", "alignMiddle": "垂直居中", - "alignBottom": "底部对齐", "clipContent": "裁剪内容", "colorFormatRgb": "RGB", "colorFormatHsl": "HSL", @@ -154,11 +150,16 @@ "rows": "行", "sizingFixed": "固定", "sizingHug": "适应内容", - "sizingFill": "填充", "sizingHugShort": "适应", "sizingFillShort": "填充", "sizingFillFr": "填充 (fr)", - "sizingFixedPx": "固定 (px)" + "sizingFixedPx": "固定 (px)", + "strokeAlignInside": "内部", + "strokeAlignCenter": "居中", + "strokeAlignOutside": "外部", + "exportPreview": "预览", + "exportRenderingPreview": "正在渲染预览…", + "createVariable": "创建变量" }, "pages": { "newPage": "新建页面", diff --git a/src/components/VariablesDialog.vue b/src/components/VariablesDialog.vue index d3065416a..6c484dcda 100644 --- a/src/components/VariablesDialog.vue +++ b/src/components/VariablesDialog.vue @@ -35,7 +35,7 @@ const variableTypeIcons: Record = { BOOLEAN: IconToggleLeft } -const { dialogs } = useI18n() +const { dialogs, panels } = useI18n() const ctx = useVariablesEditor({ colorInput: ColorInput, @@ -203,7 +203,7 @@ const ctx = useVariablesEditor({ @click="ctx.addVariable" > - Create variable + {{ panels.createVariable }} diff --git a/src/components/properties/ExportSection.vue b/src/components/properties/ExportSection.vue index e415fc706..44db4ea60 100644 --- a/src/components/properties/ExportSection.vue +++ b/src/components/properties/ExportSection.vue @@ -166,7 +166,7 @@ onScopeDispose(() => { :disabled="exporting" @click="doExport" > - Export {{ activeName }} + {{ panels.export }} {{ activeName }}
@@ -194,7 +194,7 @@ onScopeDispose(() => { v-else-if="showPreview" class="mt-1 rounded border border-border px-3 py-2 text-[11px] text-muted" > - Rendering preview… + {{ panels.exportRenderingPreview }}