diff --git a/ui/src/i18n/.i18n/ar.meta.json b/ui/src/i18n/.i18n/ar.meta.json index 07ed35965549..5f31fd21953c 100644 --- a/ui/src/i18n/.i18n/ar.meta.json +++ b/ui/src/i18n/.i18n/ar.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:11.780Z", + "generatedAt": "2026-06-13T03:39:02.012Z", "locale": "ar", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/de.meta.json b/ui/src/i18n/.i18n/de.meta.json index da4f3bebd7e4..2f4fc9dd2499 100644 --- a/ui/src/i18n/.i18n/de.meta.json +++ b/ui/src/i18n/.i18n/de.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:10.484Z", + "generatedAt": "2026-06-13T03:38:59.718Z", "locale": "de", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/es.meta.json b/ui/src/i18n/.i18n/es.meta.json index e11645569c51..bebbd9c7bab1 100644 --- a/ui/src/i18n/.i18n/es.meta.json +++ b/ui/src/i18n/.i18n/es.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:10.741Z", + "generatedAt": "2026-06-13T03:39:00.183Z", "locale": "es", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/fa.meta.json b/ui/src/i18n/.i18n/fa.meta.json index ea8b8a17c087..61515c24fa0d 100644 --- a/ui/src/i18n/.i18n/fa.meta.json +++ b/ui/src/i18n/.i18n/fa.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:14.091Z", + "generatedAt": "2026-06-13T03:39:07.282Z", "locale": "fa", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/fr.meta.json b/ui/src/i18n/.i18n/fr.meta.json index dc87fb6654cb..8c32b61b0302 100644 --- a/ui/src/i18n/.i18n/fr.meta.json +++ b/ui/src/i18n/.i18n/fr.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:11.517Z", + "generatedAt": "2026-06-13T03:39:01.551Z", "locale": "fr", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/id.meta.json b/ui/src/i18n/.i18n/id.meta.json index e1c471f4eccf..7ce7922cd2e9 100644 --- a/ui/src/i18n/.i18n/id.meta.json +++ b/ui/src/i18n/.i18n/id.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:12.811Z", + "generatedAt": "2026-06-13T03:39:04.043Z", "locale": "id", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/it.meta.json b/ui/src/i18n/.i18n/it.meta.json index 5072056e5e59..db553f305008 100644 --- a/ui/src/i18n/.i18n/it.meta.json +++ b/ui/src/i18n/.i18n/it.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:12.038Z", + "generatedAt": "2026-06-13T03:39:02.458Z", "locale": "it", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/ja-JP.meta.json b/ui/src/i18n/.i18n/ja-JP.meta.json index f45f67a9f521..99c2d2d083f3 100644 --- a/ui/src/i18n/.i18n/ja-JP.meta.json +++ b/ui/src/i18n/.i18n/ja-JP.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:10.997Z", + "generatedAt": "2026-06-13T03:39:00.639Z", "locale": "ja-JP", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/ko.meta.json b/ui/src/i18n/.i18n/ko.meta.json index 9757fe0e8538..ac0ea0697e95 100644 --- a/ui/src/i18n/.i18n/ko.meta.json +++ b/ui/src/i18n/.i18n/ko.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:11.259Z", + "generatedAt": "2026-06-13T03:39:01.114Z", "locale": "ko", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/nl.meta.json b/ui/src/i18n/.i18n/nl.meta.json index aff71ba72c4d..9fdbd384f055 100644 --- a/ui/src/i18n/.i18n/nl.meta.json +++ b/ui/src/i18n/.i18n/nl.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:13.835Z", + "generatedAt": "2026-06-13T03:39:06.373Z", "locale": "nl", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/pl.meta.json b/ui/src/i18n/.i18n/pl.meta.json index 4e555027c29c..089f5481f2a8 100644 --- a/ui/src/i18n/.i18n/pl.meta.json +++ b/ui/src/i18n/.i18n/pl.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:13.065Z", + "generatedAt": "2026-06-13T03:39:04.514Z", "locale": "pl", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/pt-BR.meta.json b/ui/src/i18n/.i18n/pt-BR.meta.json index 20100234075e..2e76af8d843e 100644 --- a/ui/src/i18n/.i18n/pt-BR.meta.json +++ b/ui/src/i18n/.i18n/pt-BR.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:10.230Z", + "generatedAt": "2026-06-13T03:38:59.154Z", "locale": "pt-BR", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/th.meta.json b/ui/src/i18n/.i18n/th.meta.json index cfc3163dead2..0ea8733f5d5c 100644 --- a/ui/src/i18n/.i18n/th.meta.json +++ b/ui/src/i18n/.i18n/th.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:13.322Z", + "generatedAt": "2026-06-13T03:39:05.135Z", "locale": "th", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/tr.meta.json b/ui/src/i18n/.i18n/tr.meta.json index 63ec01c1585c..65f944a9f4f1 100644 --- a/ui/src/i18n/.i18n/tr.meta.json +++ b/ui/src/i18n/.i18n/tr.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:12.297Z", + "generatedAt": "2026-06-13T03:39:02.997Z", "locale": "tr", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/uk.meta.json b/ui/src/i18n/.i18n/uk.meta.json index de5255fe63b5..9c35435a136e 100644 --- a/ui/src/i18n/.i18n/uk.meta.json +++ b/ui/src/i18n/.i18n/uk.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:12.554Z", + "generatedAt": "2026-06-13T03:39:03.555Z", "locale": "uk", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/vi.meta.json b/ui/src/i18n/.i18n/vi.meta.json index 0bddeb953617..5e2a661bb339 100644 --- a/ui/src/i18n/.i18n/vi.meta.json +++ b/ui/src/i18n/.i18n/vi.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:13.580Z", + "generatedAt": "2026-06-13T03:39:05.578Z", "locale": "vi", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/zh-CN.meta.json b/ui/src/i18n/.i18n/zh-CN.meta.json index 20f849537341..5db32ce4b15d 100644 --- a/ui/src/i18n/.i18n/zh-CN.meta.json +++ b/ui/src/i18n/.i18n/zh-CN.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:09.713Z", + "generatedAt": "2026-06-13T03:38:56.901Z", "locale": "zh-CN", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/zh-TW.meta.json b/ui/src/i18n/.i18n/zh-TW.meta.json index f6c6bb170712..949ea5aefac1 100644 --- a/ui/src/i18n/.i18n/zh-TW.meta.json +++ b/ui/src/i18n/.i18n/zh-TW.meta.json @@ -34,12 +34,12 @@ "workboard.unknownStatus", "workboard.viewDetails" ], - "generatedAt": "2026-06-10T18:02:09.977Z", + "generatedAt": "2026-06-13T03:38:58.644Z", "locale": "zh-TW", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "d31dac3a16f784afca7d2c01a614ceeb2d90bb455a67114a0830a3c045210715", - "totalKeys": 1335, - "translatedKeys": 1302, + "sourceHash": "644e37fe678b6c9f31954656d675e2bd8a6f133171ef56c55aabc321ccde5b04", + "totalKeys": 1336, + "translatedKeys": 1303, "workflow": 1 } diff --git a/ui/src/i18n/locales/ar.ts b/ui/src/i18n/locales/ar.ts index b9082a1768f4..49317c0a4f06 100644 --- a/ui/src/i18n/locales/ar.ts +++ b/ui/src/i18n/locales/ar.ts @@ -611,6 +611,7 @@ export const ar: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "البحث في البطاقات", allPriorities: "كل الأولويات", + hideEmptyColumns: "Hide empty columns", emptyColumn: "أفلِت العمل هنا", lifecycleUnlinked: "لا توجد جلسة", lifecycleUnlinkedDetail: "ابدأ جلسة أو اربطها", diff --git a/ui/src/i18n/locales/de.ts b/ui/src/i18n/locales/de.ts index 5b481389940f..b047c49941ae 100644 --- a/ui/src/i18n/locales/de.ts +++ b/ui/src/i18n/locales/de.ts @@ -616,6 +616,7 @@ export const de: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Karten suchen", allPriorities: "Alle Prioritäten", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Arbeit hier ablegen", lifecycleUnlinked: "Keine Sitzung", lifecycleUnlinkedDetail: "Sitzung starten oder verknüpfen", diff --git a/ui/src/i18n/locales/en.ts b/ui/src/i18n/locales/en.ts index d2e4755afdc5..c8f55fc8198d 100644 --- a/ui/src/i18n/locales/en.ts +++ b/ui/src/i18n/locales/en.ts @@ -610,6 +610,7 @@ export const en: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Search cards", allPriorities: "All priorities", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Drop work here", lifecycleUnlinked: "No session", lifecycleUnlinkedDetail: "Start or link a session", diff --git a/ui/src/i18n/locales/es.ts b/ui/src/i18n/locales/es.ts index abeb3d89cb4e..5bec375ea350 100644 --- a/ui/src/i18n/locales/es.ts +++ b/ui/src/i18n/locales/es.ts @@ -613,6 +613,7 @@ export const es: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Buscar tarjetas", allPriorities: "Todas las prioridades", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Suelta el trabajo aquí", lifecycleUnlinked: "Sin sesión", lifecycleUnlinkedDetail: "Inicia o vincula una sesión", diff --git a/ui/src/i18n/locales/fa.ts b/ui/src/i18n/locales/fa.ts index 47f3da008a83..841cbf897433 100644 --- a/ui/src/i18n/locales/fa.ts +++ b/ui/src/i18n/locales/fa.ts @@ -613,6 +613,7 @@ export const fa: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "جستجوی کارت‌ها", allPriorities: "همه اولویت‌ها", + hideEmptyColumns: "Hide empty columns", emptyColumn: "کار را اینجا رها کنید", lifecycleUnlinked: "بدون جلسه", lifecycleUnlinkedDetail: "یک جلسه را شروع یا پیوند کنید", diff --git a/ui/src/i18n/locales/fr.ts b/ui/src/i18n/locales/fr.ts index 5995f1d1dc74..41cb1f022f1a 100644 --- a/ui/src/i18n/locales/fr.ts +++ b/ui/src/i18n/locales/fr.ts @@ -615,6 +615,7 @@ export const fr: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Rechercher des cartes", allPriorities: "Toutes les priorités", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Déposez le travail ici", lifecycleUnlinked: "Aucune session", lifecycleUnlinkedDetail: "Démarrer ou lier une session", diff --git a/ui/src/i18n/locales/id.ts b/ui/src/i18n/locales/id.ts index 8863c28b163f..77414bd67065 100644 --- a/ui/src/i18n/locales/id.ts +++ b/ui/src/i18n/locales/id.ts @@ -612,6 +612,7 @@ export const id: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Cari kartu", allPriorities: "Semua prioritas", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Letakkan pekerjaan di sini", lifecycleUnlinked: "Tidak ada sesi", lifecycleUnlinkedDetail: "Mulai atau tautkan sesi", diff --git a/ui/src/i18n/locales/it.ts b/ui/src/i18n/locales/it.ts index fb6c2df4e1df..b851e55d89fe 100644 --- a/ui/src/i18n/locales/it.ts +++ b/ui/src/i18n/locales/it.ts @@ -614,6 +614,7 @@ export const it: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Cerca schede", allPriorities: "Tutte le priorità", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Rilascia qui il lavoro", lifecycleUnlinked: "Nessuna sessione", lifecycleUnlinkedDetail: "Avvia o collega una sessione", diff --git a/ui/src/i18n/locales/ja-JP.ts b/ui/src/i18n/locales/ja-JP.ts index 8fd64f2acf6e..b808c37f47fa 100644 --- a/ui/src/i18n/locales/ja-JP.ts +++ b/ui/src/i18n/locales/ja-JP.ts @@ -615,6 +615,7 @@ export const ja_JP: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "カードを検索", allPriorities: "すべての優先度", + hideEmptyColumns: "Hide empty columns", emptyColumn: "ここに作業をドロップ", lifecycleUnlinked: "セッションなし", lifecycleUnlinkedDetail: "セッションを開始またはリンク", diff --git a/ui/src/i18n/locales/ko.ts b/ui/src/i18n/locales/ko.ts index dda46396b17b..d4c03450a46d 100644 --- a/ui/src/i18n/locales/ko.ts +++ b/ui/src/i18n/locales/ko.ts @@ -611,6 +611,7 @@ export const ko: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "카드 검색", allPriorities: "모든 우선순위", + hideEmptyColumns: "Hide empty columns", emptyColumn: "여기에 작업을 놓으세요", lifecycleUnlinked: "세션 없음", lifecycleUnlinkedDetail: "세션을 시작하거나 연결하세요", diff --git a/ui/src/i18n/locales/nl.ts b/ui/src/i18n/locales/nl.ts index bce35b7bb306..62eb61f1c70f 100644 --- a/ui/src/i18n/locales/nl.ts +++ b/ui/src/i18n/locales/nl.ts @@ -614,6 +614,7 @@ export const nl: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Kaarten zoeken", allPriorities: "Alle prioriteiten", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Sleep werk hierheen", lifecycleUnlinked: "Geen sessie", lifecycleUnlinkedDetail: "Start of koppel een sessie", diff --git a/ui/src/i18n/locales/pl.ts b/ui/src/i18n/locales/pl.ts index fc27ffc58a51..6dfc0c3b64f1 100644 --- a/ui/src/i18n/locales/pl.ts +++ b/ui/src/i18n/locales/pl.ts @@ -613,6 +613,7 @@ export const pl: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Szukaj kart", allPriorities: "Wszystkie priorytety", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Upuść pracę tutaj", lifecycleUnlinked: "Brak sesji", lifecycleUnlinkedDetail: "Rozpocznij lub połącz sesję", diff --git a/ui/src/i18n/locales/pt-BR.ts b/ui/src/i18n/locales/pt-BR.ts index 0ce81b7b727f..630bcce62e96 100644 --- a/ui/src/i18n/locales/pt-BR.ts +++ b/ui/src/i18n/locales/pt-BR.ts @@ -612,6 +612,7 @@ export const pt_BR: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Pesquisar cartões", allPriorities: "Todas as prioridades", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Solte o trabalho aqui", lifecycleUnlinked: "Nenhuma sessão", lifecycleUnlinkedDetail: "Inicie ou vincule uma sessão", diff --git a/ui/src/i18n/locales/th.ts b/ui/src/i18n/locales/th.ts index 1ce28c145217..1d986a4360ea 100644 --- a/ui/src/i18n/locales/th.ts +++ b/ui/src/i18n/locales/th.ts @@ -610,6 +610,7 @@ export const th: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "ค้นหาการ์ด", allPriorities: "ทุกลำดับความสำคัญ", + hideEmptyColumns: "Hide empty columns", emptyColumn: "วางงานที่นี่", lifecycleUnlinked: "ไม่มีเซสชัน", lifecycleUnlinkedDetail: "เริ่มหรือเชื่อมโยงเซสชัน", diff --git a/ui/src/i18n/locales/tr.ts b/ui/src/i18n/locales/tr.ts index 1d926bad69cd..1a76316376c2 100644 --- a/ui/src/i18n/locales/tr.ts +++ b/ui/src/i18n/locales/tr.ts @@ -615,6 +615,7 @@ export const tr: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Kartlarda ara", allPriorities: "Tüm öncelikler", + hideEmptyColumns: "Hide empty columns", emptyColumn: "İşi buraya bırakın", lifecycleUnlinked: "Oturum yok", lifecycleUnlinkedDetail: "Bir oturum başlatın veya bağlayın", diff --git a/ui/src/i18n/locales/uk.ts b/ui/src/i18n/locales/uk.ts index 7cf2e09d0e54..3041b34a85ee 100644 --- a/ui/src/i18n/locales/uk.ts +++ b/ui/src/i18n/locales/uk.ts @@ -614,6 +614,7 @@ export const uk: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Шукати картки", allPriorities: "Усі пріоритети", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Перетягніть роботу сюди", lifecycleUnlinked: "Немає сесії", lifecycleUnlinkedDetail: "Запустіть або пов’яжіть сесію", diff --git a/ui/src/i18n/locales/vi.ts b/ui/src/i18n/locales/vi.ts index 2705f5430d5f..451cc0518c94 100644 --- a/ui/src/i18n/locales/vi.ts +++ b/ui/src/i18n/locales/vi.ts @@ -613,6 +613,7 @@ export const vi: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "Tìm kiếm thẻ", allPriorities: "Tất cả mức ưu tiên", + hideEmptyColumns: "Hide empty columns", emptyColumn: "Thả công việc vào đây", lifecycleUnlinked: "Không có phiên", lifecycleUnlinkedDetail: "Bắt đầu hoặc liên kết một phiên", diff --git a/ui/src/i18n/locales/zh-CN.ts b/ui/src/i18n/locales/zh-CN.ts index f52a5f2e672b..3c0ca6dfbeb0 100644 --- a/ui/src/i18n/locales/zh-CN.ts +++ b/ui/src/i18n/locales/zh-CN.ts @@ -609,6 +609,7 @@ export const zh_CN: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "搜索卡片", allPriorities: "所有优先级", + hideEmptyColumns: "Hide empty columns", emptyColumn: "将工作拖放到此处", lifecycleUnlinked: "无会话", lifecycleUnlinkedDetail: "启动或关联会话", diff --git a/ui/src/i18n/locales/zh-TW.ts b/ui/src/i18n/locales/zh-TW.ts index f7d4c7ddc27b..32bbd5e5541b 100644 --- a/ui/src/i18n/locales/zh-TW.ts +++ b/ui/src/i18n/locales/zh-TW.ts @@ -609,6 +609,7 @@ export const zh_TW: TranslationMap = { labelsPlaceholder: "ui, docs", searchPlaceholder: "搜尋卡片", allPriorities: "所有優先順序", + hideEmptyColumns: "Hide empty columns", emptyColumn: "將工作拖放到這裡", lifecycleUnlinked: "沒有工作階段", lifecycleUnlinkedDetail: "開始或連結工作階段", diff --git a/ui/src/styles/workboard.css b/ui/src/styles/workboard.css index e8fa17ac69db..4a36417f9aa4 100644 --- a/ui/src/styles/workboard.css +++ b/ui/src/styles/workboard.css @@ -137,6 +137,25 @@ min-width: min(280px, 100%); } +.workboard-toggle { + display: inline-flex; + align-items: center; + gap: 7px; + min-height: var(--workboard-control-height); + color: var(--muted); + font-size: 0.8rem; + font-weight: 600; + line-height: 1.2; + white-space: nowrap; +} + +.workboard-toggle input { + width: 15px; + height: 15px; + margin: 0; + accent-color: var(--accent); +} + .workboard-modal { position: fixed; inset: 0; diff --git a/ui/src/ui/controllers/workboard.ts b/ui/src/ui/controllers/workboard.ts index 12019103a65f..c8dedeaed351 100644 --- a/ui/src/ui/controllers/workboard.ts +++ b/ui/src/ui/controllers/workboard.ts @@ -355,6 +355,7 @@ export type WorkboardUiState = { agentFilter: string; showArchived: boolean; layout: "comfortable" | "compact"; + hideEmptyColumns: boolean; draftOpen: boolean; editingCardId: string | null; draftTitle: string; @@ -402,6 +403,7 @@ function createDefaultState(): WorkboardUiState { agentFilter: "all", showArchived: false, layout: "compact", + hideEmptyColumns: false, draftOpen: false, editingCardId: null, draftTitle: "", diff --git a/ui/src/ui/views/workboard.test.ts b/ui/src/ui/views/workboard.test.ts index e70dec14e1c4..7544fdd33ccf 100644 --- a/ui/src/ui/views/workboard.test.ts +++ b/ui/src/ui/views/workboard.test.ts @@ -81,6 +81,55 @@ describe("renderWorkboard", () => { expect(container.querySelector(".workboard-card__priority")?.textContent).toContain("high"); }); + it("can hide empty columns while keeping populated columns visible", () => { + const host = {}; + const state = getWorkboardState(host); + state.loaded = true; + state.cards = [ + { + id: "card-1", + title: "Keep visible", + status: "todo", + priority: "normal", + labels: [], + position: 1000, + createdAt: 1, + updatedAt: 1, + }, + ]; + const container = document.createElement("div"); + const props = { + host, + client: null, + connected: true, + pluginEnabled: true, + agentsList: null, + sessions: [], + onOpenSession: () => undefined, + onRequestUpdate: () => undefined, + } satisfies WorkboardRenderProps; + + render(renderWorkboard(props), container); + expect(container.querySelectorAll(".workboard-column")).toHaveLength(9); + + const toggle = container.querySelector( + 'input[name="workboard-hide-empty-columns"]', + ); + expect(toggle).toBeInstanceOf(HTMLInputElement); + toggle!.checked = true; + toggle!.dispatchEvent(new Event("change", { bubbles: true })); + render(renderWorkboard(props), container); + + const columnHeadings = Array.from( + container.querySelectorAll(".workboard-column__header h2"), + ).map((heading) => heading.textContent?.trim()); + expect(state.hideEmptyColumns).toBe(true); + expect(container.querySelectorAll(".workboard-column")).toHaveLength(1); + expect(columnHeadings).toEqual(["Todo"]); + expect(container.textContent).toContain("Todo"); + expect(container.textContent).toContain("Keep visible"); + }); + it("does not render Invalid Date for Date-invalid card timestamps", () => { const host = {}; const state = getWorkboardState(host); diff --git a/ui/src/ui/views/workboard.ts b/ui/src/ui/views/workboard.ts index 6350ddb83c9e..a8f2d202f4a2 100644 --- a/ui/src/ui/views/workboard.ts +++ b/ui/src/ui/views/workboard.ts @@ -1884,6 +1884,9 @@ export function renderWorkboard(props: WorkboardProps) { for (const card of filtered) { byStatus.get(card.status)?.push(card); } + const visibleStatuses = state.hideEmptyColumns + ? state.statuses.filter((status) => (byStatus.get(status)?.length ?? 0) > 0) + : state.statuses; const dialogOpen = state.draftOpen || Boolean(getVisibleDetailCard(state)); return html` @@ -1975,6 +1978,18 @@ export function renderWorkboard(props: WorkboardProps) { ${icons.layoutComfortable} +
` : nothing} ${renderDispatchSummary(state)}
- ${state.statuses.map((status) => renderColumn(props, status, byStatus.get(status) ?? []))} + ${visibleStatuses.map((status) => renderColumn(props, status, byStatus.get(status) ?? []))}
${renderCardModal(props)} ${renderCardDetailsPanel(props)}