mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat: add shape fill/stroke transparency, RGBA color picker, and dash styles
Closes #193. Shapes now support no-fill and no-stroke toggles for drawing outlines or fill-only shapes. Adds RGBA color picker with opacity control, stroke dash styles (solid/dashed/dotted), and i18n for all shape labels.
This commit is contained in:
@@ -1365,6 +1365,27 @@ export const ar: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "فشل فك الترميز من الخادم",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "الإعدادات",
|
||||
|
||||
@@ -1379,6 +1379,27 @@ export const de: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Server-Dekodierung fehlgeschlagen",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Einstellungen",
|
||||
|
||||
@@ -1324,6 +1324,27 @@ export const en = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Server decode failed",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Settings",
|
||||
|
||||
@@ -1361,6 +1361,27 @@ export const es: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Error de decodificacion del servidor",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Configuracion",
|
||||
|
||||
@@ -1380,6 +1380,27 @@ export const fr: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Echec du decodage serveur",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Parametres",
|
||||
|
||||
@@ -1362,6 +1362,27 @@ export const hi: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "सर्वर डीकोड विफल",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "सेटिंग्स",
|
||||
|
||||
@@ -1374,6 +1374,27 @@ export const id: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Dekoding server gagal",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Pengaturan",
|
||||
|
||||
@@ -1373,6 +1373,27 @@ export const it: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Decodifica del server non riuscita",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Impostazioni",
|
||||
|
||||
@@ -1332,6 +1332,27 @@ export const ja: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "サーバーでのデコードに失敗しました",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "設定",
|
||||
|
||||
@@ -1317,6 +1317,27 @@ export const ko: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "서버 디코딩 실패",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "설정",
|
||||
|
||||
@@ -1376,6 +1376,27 @@ export const nl: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Server-decodering mislukt",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Instellingen",
|
||||
|
||||
@@ -1377,6 +1377,27 @@ export const pl: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Błąd dekodowania na serwerze",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Ustawienia",
|
||||
|
||||
@@ -1373,6 +1373,27 @@ export const ptBR: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Falha na decodificacao do servidor",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Configuracoes",
|
||||
|
||||
@@ -1375,6 +1375,27 @@ export const ru: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Ошибка декодирования на сервере",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Настройки",
|
||||
|
||||
@@ -1372,6 +1372,27 @@ export const sv: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Serveravkodning misslyckades",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Installningar",
|
||||
|
||||
@@ -1354,6 +1354,27 @@ export const th: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "การถอดรหัสจากเซิร์ฟเวอร์ล้มเหลว",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "ตั้งค่า",
|
||||
|
||||
@@ -1377,6 +1377,27 @@ export const tr: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Sunucu çözümleme hatası",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Ayarlar",
|
||||
|
||||
@@ -1375,6 +1375,27 @@ export const uk: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Помилка декодування на сервері",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Налаштування",
|
||||
|
||||
@@ -1374,6 +1374,27 @@ export const vi: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "Máy chủ giải mã thất bại",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "Cài đặt",
|
||||
|
||||
@@ -1306,6 +1306,27 @@ export const zhCN: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "服务器解码失败",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "设置",
|
||||
|
||||
@@ -1304,6 +1304,27 @@ export const zhTW: TranslationKeys = {
|
||||
errors: {
|
||||
serverDecodeFailed: "伺服器解碼失敗",
|
||||
},
|
||||
shapes: {
|
||||
shape: "Shape",
|
||||
fill: "Fill",
|
||||
stroke: "Stroke",
|
||||
strokeWidth: "Width",
|
||||
cornerRadius: "Radius",
|
||||
sides: "Sides",
|
||||
points: "Points",
|
||||
dashStyle: "Dash",
|
||||
solid: "Solid",
|
||||
dashed: "Dashed",
|
||||
dotted: "Dotted",
|
||||
none: "None",
|
||||
opacity: "Opacity",
|
||||
rectangle: "Rectangle",
|
||||
ellipse: "Ellipse",
|
||||
line: "Line",
|
||||
arrow: "Arrow",
|
||||
polygon: "Polygon",
|
||||
star: "Star",
|
||||
},
|
||||
},
|
||||
settings: {
|
||||
heading: "設定",
|
||||
|
||||
Reference in New Issue
Block a user