Release v0.11.3
This commit is contained in:
parent
28272ebda0
commit
a20d170956
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "open-pencil-app",
|
||||
"private": true,
|
||||
"version": "0.11.2",
|
||||
"version": "0.11.3",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"workspaces": [
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@open-pencil/cli",
|
||||
"version": "0.11.2",
|
||||
"version": "0.11.3",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"bin": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@open-pencil/core",
|
||||
"version": "0.11.2",
|
||||
"version": "0.11.3",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"sideEffects": false,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@open-pencil/mcp",
|
||||
"version": "0.11.2",
|
||||
"version": "0.11.3",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"main": "./dist/server.js",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@open-pencil/vue",
|
||||
"version": "0.11.2",
|
||||
"version": "0.11.3",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -154,7 +154,13 @@
|
|||
"sizingHugShort": "Содерж.",
|
||||
"sizingFillShort": "Запол.",
|
||||
"sizingFillFr": "Заполнить (fr)",
|
||||
"sizingFixedPx": "Фиксированный (px)"
|
||||
"sizingFixedPx": "Фиксированный (px)",
|
||||
"strokeAlignInside": "Внутри",
|
||||
"strokeAlignCenter": "По центру",
|
||||
"strokeAlignOutside": "Снаружи",
|
||||
"exportPreview": "Предпросмотр",
|
||||
"exportRenderingPreview": "Рендеринг предпросмотра…",
|
||||
"createVariable": "Создать переменную"
|
||||
},
|
||||
"pages": {
|
||||
"newPage": "Новая страница",
|
||||
|
|
|
|||
|
|
@ -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": "新建页面",
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ const variableTypeIcons: Record<string, Component> = {
|
|||
BOOLEAN: IconToggleLeft
|
||||
}
|
||||
|
||||
const { dialogs } = useI18n()
|
||||
const { dialogs, panels } = useI18n()
|
||||
|
||||
const ctx = useVariablesEditor({
|
||||
colorInput: ColorInput,
|
||||
|
|
@ -203,7 +203,7 @@ const ctx = useVariablesEditor({
|
|||
@click="ctx.addVariable"
|
||||
>
|
||||
<icon-lucide-plus class="size-3.5" />
|
||||
Create variable
|
||||
{{ panels.createVariable }}
|
||||
</button>
|
||||
</TabsContent>
|
||||
</TabsRoot>
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ onScopeDispose(() => {
|
|||
:disabled="exporting"
|
||||
@click="doExport"
|
||||
>
|
||||
Export {{ activeName }}
|
||||
{{ panels.export }} {{ activeName }}
|
||||
</button>
|
||||
|
||||
<button
|
||||
|
|
@ -177,7 +177,7 @@ onScopeDispose(() => {
|
|||
>
|
||||
<icon-lucide-chevron-down v-if="showPreview" class="size-3" />
|
||||
<icon-lucide-chevron-right v-else class="size-3" />
|
||||
Preview
|
||||
{{ panels.exportPreview }}
|
||||
</button>
|
||||
|
||||
<div v-if="showPreview && previewUrl" class="mt-1 overflow-hidden rounded border border-border">
|
||||
|
|
@ -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 }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
Loading…
Reference in a new issue