@celestia-island/hikari 0.55.193 → 0.55.194
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/HkTitleBar.test.tsx +24 -0
- package/src/components/HkTitleBar.tsx +14 -6
- package/src/i18n/locales/ar/components.json +5 -1
- package/src/i18n/locales/de/components.json +5 -1
- package/src/i18n/locales/en/components.json +5 -1
- package/src/i18n/locales/es/components.json +5 -1
- package/src/i18n/locales/fr/components.json +5 -1
- package/src/i18n/locales/ja/components.json +5 -1
- package/src/i18n/locales/ko/components.json +5 -1
- package/src/i18n/locales/pt/components.json +5 -1
- package/src/i18n/locales/ru/components.json +5 -1
- package/src/i18n/locales/zh-Hans/components.json +5 -1
- package/src/i18n/locales/zh-Hant/components.json +5 -1
package/package.json
CHANGED
|
@@ -6,6 +6,8 @@ import { compile } from "sass";
|
|
|
6
6
|
import { afterEach, describe, expect, it } from "vitest";
|
|
7
7
|
import { createApp, h, nextTick, ref } from "vue";
|
|
8
8
|
|
|
9
|
+
import { setLocale } from "../i18n/context";
|
|
10
|
+
|
|
9
11
|
import HkTitleBar from "./HkTitleBar";
|
|
10
12
|
|
|
11
13
|
/**
|
|
@@ -83,6 +85,28 @@ describe("HkTitleBar", () => {
|
|
|
83
85
|
const maximized = mount(h(HkTitleBar, { title: "App", maximized: true }));
|
|
84
86
|
expect(maximized.querySelector('[title="Restore"]')).toBeTruthy();
|
|
85
87
|
});
|
|
88
|
+
|
|
89
|
+
it("localizes the caption tooltips through the preset i18n keys", async () => {
|
|
90
|
+
// The bar is window chrome: its captions must follow the host's
|
|
91
|
+
// setLocale (the strings live in the preset locale bundles, not in
|
|
92
|
+
// props). en is the fallback locale a host that never calls
|
|
93
|
+
// setLocale gets — pinned here because the assertions above rely on
|
|
94
|
+
// the literals.
|
|
95
|
+
const windowed = mount(h(HkTitleBar, { title: "App", maximized: false }));
|
|
96
|
+
expect(windowed.querySelector('[title="Close"]')).toBeTruthy();
|
|
97
|
+
expect(windowed.querySelector('[title="Minimize"]')).toBeTruthy();
|
|
98
|
+
|
|
99
|
+
await setLocale("zh-Hans");
|
|
100
|
+
await nextTick();
|
|
101
|
+
expect(windowed.querySelector('[title="最小化"]')).toBeTruthy();
|
|
102
|
+
expect(windowed.querySelector('[title="最大化"]')).toBeTruthy();
|
|
103
|
+
expect(windowed.querySelector('[title="关闭"]')).toBeTruthy();
|
|
104
|
+
|
|
105
|
+
await setLocale("en");
|
|
106
|
+
await nextTick();
|
|
107
|
+
expect(windowed.querySelector('[title="Maximize"]')).toBeTruthy();
|
|
108
|
+
expect(windowed.querySelector('[title="关闭"]')).toBeNull();
|
|
109
|
+
});
|
|
86
110
|
});
|
|
87
111
|
|
|
88
112
|
describe("HkTitleBar stylesheet contract", () => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defineComponent, onBeforeUnmount, onMounted, ref } from "vue";
|
|
2
|
+
import { useI18n } from "../i18n/context";
|
|
2
3
|
|
|
3
4
|
import "./HkTitleBar.scss";
|
|
4
5
|
|
|
@@ -26,6 +27,12 @@ import "./HkTitleBar.scss";
|
|
|
26
27
|
* component swaps the maximize/restore glyph and squares the close button's
|
|
27
28
|
* window corner radius (a maximized frame has no rounded corner to follow)
|
|
28
29
|
* — no shell probing inside.
|
|
30
|
+
*
|
|
31
|
+
* The caption tooltips (minimize / maximize / restore / close) resolve
|
|
32
|
+
* through the preset i18n keys (`hikari::titleBar.*`): the bar is window
|
|
33
|
+
* chrome, so it follows the host's `setLocale` instead of receiving copy
|
|
34
|
+
* through props — with the English strings as the t() fallback for hosts
|
|
35
|
+
* that never set a locale.
|
|
29
36
|
*/
|
|
30
37
|
export default defineComponent({
|
|
31
38
|
name: "HkTitleBar",
|
|
@@ -52,6 +59,7 @@ export default defineComponent({
|
|
|
52
59
|
action: (_id: string) => true,
|
|
53
60
|
},
|
|
54
61
|
setup(props, { emit, slots }) {
|
|
62
|
+
const { t } = useI18n();
|
|
55
63
|
return () => (
|
|
56
64
|
<div
|
|
57
65
|
class="hk-titlebar"
|
|
@@ -89,8 +97,8 @@ export default defineComponent({
|
|
|
89
97
|
<button
|
|
90
98
|
type="button"
|
|
91
99
|
class="hk-titlebar-btn"
|
|
92
|
-
title="Minimize"
|
|
93
|
-
aria-label="Minimize"
|
|
100
|
+
title={t("hikari::titleBar.minimize", "Minimize")}
|
|
101
|
+
aria-label={t("hikari::titleBar.minimize", "Minimize")}
|
|
94
102
|
onClick={(e: MouseEvent) => {
|
|
95
103
|
e.stopPropagation();
|
|
96
104
|
emit("minimize");
|
|
@@ -103,8 +111,8 @@ export default defineComponent({
|
|
|
103
111
|
<button
|
|
104
112
|
type="button"
|
|
105
113
|
class="hk-titlebar-btn"
|
|
106
|
-
title={props.maximized ? "Restore" : "Maximize"}
|
|
107
|
-
aria-label={props.maximized ? "Restore" : "Maximize"}
|
|
114
|
+
title={props.maximized ? t("hikari::titleBar.restore", "Restore") : t("hikari::titleBar.maximize", "Maximize")}
|
|
115
|
+
aria-label={props.maximized ? t("hikari::titleBar.restore", "Restore") : t("hikari::titleBar.maximize", "Maximize")}
|
|
108
116
|
onClick={(e: MouseEvent) => {
|
|
109
117
|
e.stopPropagation();
|
|
110
118
|
emit("toggle-maximize");
|
|
@@ -121,8 +129,8 @@ export default defineComponent({
|
|
|
121
129
|
<button
|
|
122
130
|
type="button"
|
|
123
131
|
class="hk-titlebar-btn hk-titlebar-btn-close"
|
|
124
|
-
title="Close"
|
|
125
|
-
aria-label="Close"
|
|
132
|
+
title={t("hikari::titleBar.close", "Close")}
|
|
133
|
+
aria-label={t("hikari::titleBar.close", "Close")}
|
|
126
134
|
onClick={(e: MouseEvent) => {
|
|
127
135
|
e.stopPropagation();
|
|
128
136
|
emit("close");
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "بحث",
|
|
285
285
|
"hikari::search.clear": "مسح البحث",
|
|
286
286
|
"hikari::search.apply": "تطبيق",
|
|
287
|
-
"hikari::statusBar.idle": "جاهز"
|
|
287
|
+
"hikari::statusBar.idle": "جاهز",
|
|
288
|
+
"hikari::titleBar.minimize": "تصغير",
|
|
289
|
+
"hikari::titleBar.maximize": "تكبير",
|
|
290
|
+
"hikari::titleBar.restore": "استعادة",
|
|
291
|
+
"hikari::titleBar.close": "إغلاق"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "Suchen",
|
|
285
285
|
"hikari::search.clear": "Suche löschen",
|
|
286
286
|
"hikari::search.apply": "Anwenden",
|
|
287
|
-
"hikari::statusBar.idle": "Bereit"
|
|
287
|
+
"hikari::statusBar.idle": "Bereit",
|
|
288
|
+
"hikari::titleBar.minimize": "Minimieren",
|
|
289
|
+
"hikari::titleBar.maximize": "Maximieren",
|
|
290
|
+
"hikari::titleBar.restore": "Wiederherstellen",
|
|
291
|
+
"hikari::titleBar.close": "Schließen"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "Search",
|
|
285
285
|
"hikari::search.clear": "Clear search",
|
|
286
286
|
"hikari::search.apply": "Apply",
|
|
287
|
-
"hikari::statusBar.idle": "Ready"
|
|
287
|
+
"hikari::statusBar.idle": "Ready",
|
|
288
|
+
"hikari::titleBar.minimize": "Minimize",
|
|
289
|
+
"hikari::titleBar.maximize": "Maximize",
|
|
290
|
+
"hikari::titleBar.restore": "Restore",
|
|
291
|
+
"hikari::titleBar.close": "Close"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "Buscar",
|
|
285
285
|
"hikari::search.clear": "Borrar búsqueda",
|
|
286
286
|
"hikari::search.apply": "Aplicar",
|
|
287
|
-
"hikari::statusBar.idle": "Listo"
|
|
287
|
+
"hikari::statusBar.idle": "Listo",
|
|
288
|
+
"hikari::titleBar.minimize": "Minimizar",
|
|
289
|
+
"hikari::titleBar.maximize": "Maximizar",
|
|
290
|
+
"hikari::titleBar.restore": "Restaurar",
|
|
291
|
+
"hikari::titleBar.close": "Cerrar"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "Rechercher",
|
|
285
285
|
"hikari::search.clear": "Effacer la recherche",
|
|
286
286
|
"hikari::search.apply": "Appliquer",
|
|
287
|
-
"hikari::statusBar.idle": "Prêt"
|
|
287
|
+
"hikari::statusBar.idle": "Prêt",
|
|
288
|
+
"hikari::titleBar.minimize": "Réduire",
|
|
289
|
+
"hikari::titleBar.maximize": "Agrandir",
|
|
290
|
+
"hikari::titleBar.restore": "Restaurer",
|
|
291
|
+
"hikari::titleBar.close": "Fermer"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "検索",
|
|
285
285
|
"hikari::search.clear": "検索をクリア",
|
|
286
286
|
"hikari::search.apply": "適用",
|
|
287
|
-
"hikari::statusBar.idle": "準備完了"
|
|
287
|
+
"hikari::statusBar.idle": "準備完了",
|
|
288
|
+
"hikari::titleBar.minimize": "最小化",
|
|
289
|
+
"hikari::titleBar.maximize": "最大化",
|
|
290
|
+
"hikari::titleBar.restore": "元に戻す",
|
|
291
|
+
"hikari::titleBar.close": "閉じる"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "검색",
|
|
285
285
|
"hikari::search.clear": "검색 지우기",
|
|
286
286
|
"hikari::search.apply": "적용",
|
|
287
|
-
"hikari::statusBar.idle": "준비됨"
|
|
287
|
+
"hikari::statusBar.idle": "준비됨",
|
|
288
|
+
"hikari::titleBar.minimize": "최소화",
|
|
289
|
+
"hikari::titleBar.maximize": "최대화",
|
|
290
|
+
"hikari::titleBar.restore": "복원",
|
|
291
|
+
"hikari::titleBar.close": "닫기"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "Pesquisar",
|
|
285
285
|
"hikari::search.clear": "Limpar pesquisa",
|
|
286
286
|
"hikari::search.apply": "Aplicar",
|
|
287
|
-
"hikari::statusBar.idle": "Pronto"
|
|
287
|
+
"hikari::statusBar.idle": "Pronto",
|
|
288
|
+
"hikari::titleBar.minimize": "Minimizar",
|
|
289
|
+
"hikari::titleBar.maximize": "Maximizar",
|
|
290
|
+
"hikari::titleBar.restore": "Restaurar",
|
|
291
|
+
"hikari::titleBar.close": "Fechar"
|
|
288
292
|
}
|
|
@@ -284,5 +284,9 @@
|
|
|
284
284
|
"hikari::search.trigger": "Поиск",
|
|
285
285
|
"hikari::search.clear": "Очистить поиск",
|
|
286
286
|
"hikari::search.apply": "Применить",
|
|
287
|
-
"hikari::statusBar.idle": "Готово"
|
|
287
|
+
"hikari::statusBar.idle": "Готово",
|
|
288
|
+
"hikari::titleBar.minimize": "Свернуть",
|
|
289
|
+
"hikari::titleBar.maximize": "Развернуть",
|
|
290
|
+
"hikari::titleBar.restore": "Восстановить",
|
|
291
|
+
"hikari::titleBar.close": "Закрыть"
|
|
288
292
|
}
|
|
@@ -288,5 +288,9 @@
|
|
|
288
288
|
"hikari::search.trigger": "搜索",
|
|
289
289
|
"hikari::search.clear": "清除搜索",
|
|
290
290
|
"hikari::search.apply": "应用",
|
|
291
|
-
"hikari::statusBar.idle": "就绪"
|
|
291
|
+
"hikari::statusBar.idle": "就绪",
|
|
292
|
+
"hikari::titleBar.minimize": "最小化",
|
|
293
|
+
"hikari::titleBar.maximize": "最大化",
|
|
294
|
+
"hikari::titleBar.restore": "还原",
|
|
295
|
+
"hikari::titleBar.close": "关闭"
|
|
292
296
|
}
|
|
@@ -288,5 +288,9 @@
|
|
|
288
288
|
"hikari::search.trigger": "搜尋",
|
|
289
289
|
"hikari::search.clear": "清除搜尋",
|
|
290
290
|
"hikari::search.apply": "套用",
|
|
291
|
-
"hikari::statusBar.idle": "就緒"
|
|
291
|
+
"hikari::statusBar.idle": "就緒",
|
|
292
|
+
"hikari::titleBar.minimize": "最小化",
|
|
293
|
+
"hikari::titleBar.maximize": "最大化",
|
|
294
|
+
"hikari::titleBar.restore": "還原",
|
|
295
|
+
"hikari::titleBar.close": "關閉"
|
|
292
296
|
}
|