@tutti-os/workbench-surface 0.0.18 → 0.0.19

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.
@@ -129,6 +129,12 @@
129
129
  backface-visibility: hidden;
130
130
  }
131
131
 
132
+ .workbench-window-shell[data-presentation-visibility="hidden"] {
133
+ visibility: hidden;
134
+ opacity: 0;
135
+ pointer-events: none;
136
+ }
137
+
132
138
  .workbench-window-shell[data-presentation-mode="mission-control"]
133
139
  .workbench-window-shell__content {
134
140
  pointer-events: none;
@@ -1173,12 +1179,33 @@
1173
1179
  animation-name: desktop-dock-minimized-icon-appear-left;
1174
1180
  }
1175
1181
 
1176
- .desktop-dock__slot[data-presence="exiting"],
1182
+ .desktop-dock__slot[data-presence="exiting"] {
1183
+ min-width: 0;
1184
+ animation: desktop-dock-slot-collapse 600ms cubic-bezier(0.4, 0, 0.2, 1) both;
1185
+ pointer-events: none;
1186
+ }
1187
+
1188
+ .desktop-dock[data-dock-placement="left"]
1189
+ .desktop-dock__slot[data-presence="exiting"] {
1190
+ min-height: 0;
1191
+ animation-name: desktop-dock-slot-collapse-left;
1192
+ }
1193
+
1194
+ .desktop-dock__slot[data-presence="exiting"] .desktop-dock__icon-shell {
1195
+ animation: desktop-dock-presence-exit 420ms cubic-bezier(0.4, 0, 0.2, 1) both;
1196
+ }
1197
+
1177
1198
  .desktop-dock__separator[data-presence="exiting"] {
1178
- animation: desktop-dock-presence-exit 600ms cubic-bezier(0.7, 0, 0.84, 0) both;
1199
+ animation: desktop-dock-separator-collapse 600ms cubic-bezier(0.4, 0, 0.2, 1)
1200
+ both;
1179
1201
  pointer-events: none;
1180
1202
  }
1181
1203
 
1204
+ .desktop-dock[data-dock-placement="left"]
1205
+ .desktop-dock__separator[data-presence="exiting"] {
1206
+ animation-name: desktop-dock-separator-collapse-left;
1207
+ }
1208
+
1182
1209
  .desktop-dock__slot--minimized[data-collapsing="true"],
1183
1210
  .desktop-dock__slot--minimized[data-presence="exiting"] {
1184
1211
  min-width: 0;
@@ -1195,6 +1222,11 @@
1195
1222
  animation-name: desktop-dock-minimized-slot-collapse-left;
1196
1223
  }
1197
1224
 
1225
+ .desktop-dock__slot--minimized[data-presence="exiting"]
1226
+ .desktop-dock__icon-shell {
1227
+ animation: none;
1228
+ }
1229
+
1198
1230
  .desktop-dock__slot--minimized[data-collapsing="true"]::before,
1199
1231
  .desktop-dock__slot--minimized[data-presence="exiting"]::before {
1200
1232
  opacity: 0;
@@ -1255,17 +1287,31 @@
1255
1287
 
1256
1288
  .desktop-dock__slot[data-node-state="open"]::before,
1257
1289
  .desktop-dock__slot[data-node-state="minimized"]::before {
1290
+ --desktop-dock-indicator-color: var(--text-tertiary);
1258
1291
  position: absolute;
1259
- bottom: var(--desktop-dock-indicator-offset);
1292
+ bottom: calc(var(--desktop-dock-indicator-offset) - 2px);
1260
1293
  left: 50%;
1261
- width: 4px;
1262
- height: 4px;
1294
+ width: 5px;
1295
+ height: 5px;
1263
1296
  border-radius: 999px;
1264
- background: var(--text-tertiary);
1297
+ background: var(--desktop-dock-indicator-color);
1298
+ box-shadow: 0 0 0 0.5px rgb(0 0 0 / 12%);
1265
1299
  content: "";
1266
1300
  transform: translateX(-50%);
1267
1301
  }
1268
1302
 
1303
+ .desktop-dock__slot[data-node-state="open"][data-wallpaper-tone="dark"]::before,
1304
+ .desktop-dock__slot[data-node-state="minimized"][data-wallpaper-tone="dark"]::before {
1305
+ --desktop-dock-indicator-color: rgb(255 255 255 / 78%);
1306
+ box-shadow: 0 0 0 0.5px rgb(0 0 0 / 42%);
1307
+ }
1308
+
1309
+ .desktop-dock__slot[data-node-state="open"][data-wallpaper-tone="light"]::before,
1310
+ .desktop-dock__slot[data-node-state="minimized"][data-wallpaper-tone="light"]::before {
1311
+ --desktop-dock-indicator-color: rgb(0 0 0 / 46%);
1312
+ box-shadow: 0 0 0 0.5px rgb(255 255 255 / 58%);
1313
+ }
1314
+
1269
1315
  .desktop-dock[data-dock-placement="left"]
1270
1316
  .desktop-dock__slot[data-node-state="open"]::before,
1271
1317
  .desktop-dock[data-dock-placement="left"]
@@ -1273,12 +1319,12 @@
1273
1319
  top: 50%;
1274
1320
  right: auto;
1275
1321
  bottom: auto;
1276
- left: var(--desktop-dock-indicator-offset);
1322
+ left: calc(var(--desktop-dock-indicator-offset) - 2px);
1277
1323
  transform: translateY(-50%);
1278
1324
  }
1279
1325
 
1280
1326
  .desktop-dock__slot[data-node-state="minimized"]::before {
1281
- background: var(--text-tertiary);
1327
+ opacity: 0.72;
1282
1328
  }
1283
1329
 
1284
1330
  .desktop-dock__btn {
@@ -2201,6 +2247,62 @@ body[data-desktop-dock-minimized-stack-open="true"] .desktop-dock {
2201
2247
  }
2202
2248
  }
2203
2249
 
2250
+ @keyframes desktop-dock-slot-collapse {
2251
+ from {
2252
+ width: var(--desktop-dock-size);
2253
+ height: var(--desktop-dock-size);
2254
+ margin-inline: 0;
2255
+ }
2256
+
2257
+ to {
2258
+ width: 0;
2259
+ height: var(--desktop-dock-size);
2260
+ margin-inline: calc(var(--desktop-dock-gap) / -2);
2261
+ }
2262
+ }
2263
+
2264
+ @keyframes desktop-dock-slot-collapse-left {
2265
+ from {
2266
+ width: var(--desktop-dock-size);
2267
+ height: var(--desktop-dock-size);
2268
+ margin-block: 0;
2269
+ }
2270
+
2271
+ to {
2272
+ width: var(--desktop-dock-size);
2273
+ height: 0;
2274
+ margin-block: calc(var(--desktop-dock-gap) / -2);
2275
+ }
2276
+ }
2277
+
2278
+ @keyframes desktop-dock-separator-collapse {
2279
+ from {
2280
+ width: 1px;
2281
+ margin-inline: 4px;
2282
+ opacity: 1;
2283
+ }
2284
+
2285
+ to {
2286
+ width: 0;
2287
+ margin-inline: calc(var(--desktop-dock-gap) / -2);
2288
+ opacity: 0;
2289
+ }
2290
+ }
2291
+
2292
+ @keyframes desktop-dock-separator-collapse-left {
2293
+ from {
2294
+ height: 1px;
2295
+ margin-block: 4px;
2296
+ opacity: 1;
2297
+ }
2298
+
2299
+ to {
2300
+ height: 0;
2301
+ margin-block: calc(var(--desktop-dock-gap) / -2);
2302
+ opacity: 0;
2303
+ }
2304
+ }
2305
+
2204
2306
  @keyframes desktop-dock-minimized-slot-expand {
2205
2307
  from {
2206
2308
  width: 0;
@@ -2411,7 +2513,7 @@ body[data-desktop-dock-minimized-stack-open="true"] .desktop-dock {
2411
2513
  translate: 0 0;
2412
2514
  }
2413
2515
  45% {
2414
- translate: 0 -29px;
2516
+ translate: 0 -14px;
2415
2517
  }
2416
2518
  }
2417
2519
 
@@ -2421,7 +2523,7 @@ body[data-desktop-dock-minimized-stack-open="true"] .desktop-dock {
2421
2523
  translate: 0 0;
2422
2524
  }
2423
2525
  45% {
2424
- translate: 29px 0;
2526
+ translate: 14px 0;
2425
2527
  }
2426
2528
  }
2427
2529
 
@@ -12,6 +12,44 @@ test("floating window bodies do not reserve a right-side content margin", () =>
12
12
  );
13
13
  });
14
14
 
15
+ test("mission control hidden presentation windows are invisible and inert", () => {
16
+ const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
17
+
18
+ assert.match(
19
+ css,
20
+ /\.workbench-window-shell\[data-presentation-visibility="hidden"\]\s*{[^}]*visibility:\s*hidden;[^}]*opacity:\s*0;[^}]*pointer-events:\s*none;/s
21
+ );
22
+ });
23
+
24
+ test("dock retained entry removal animates width and icon exit", () => {
25
+ const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
26
+
27
+ assert.match(
28
+ css,
29
+ /\.desktop-dock-plate\s*{[^}]*transition:\s*width 220ms cubic-bezier\(0\.22, 1, 0\.36, 1\);/s
30
+ );
31
+ assert.match(
32
+ css,
33
+ /\.desktop-dock\[data-dock-placement="left"\]\s*{[^}]*transition:\s*height 600ms cubic-bezier\(0\.16, 1, 0\.3, 1\);/s
34
+ );
35
+ assert.match(
36
+ css,
37
+ /\.desktop-dock__slot\[data-presence="exiting"\]\s*{[^}]*animation:\s*desktop-dock-slot-collapse 600ms cubic-bezier\(0\.4, 0, 0\.2, 1\)[^}]*both;/s
38
+ );
39
+ assert.match(
40
+ css,
41
+ /\.desktop-dock__slot\[data-presence="exiting"\]\s+\.desktop-dock__icon-shell\s*{[^}]*animation:\s*desktop-dock-presence-exit 420ms cubic-bezier\(0\.4, 0, 0\.2, 1\)[^}]*both;/s
42
+ );
43
+ assert.match(
44
+ css,
45
+ /\.desktop-dock__separator\[data-presence="exiting"\]\s*{[^}]*animation:\s*desktop-dock-separator-collapse 600ms/s
46
+ );
47
+ assert.match(css, /@keyframes desktop-dock-slot-collapse/);
48
+ assert.match(css, /@keyframes desktop-dock-slot-collapse-left/);
49
+ assert.match(css, /@keyframes desktop-dock-separator-collapse/);
50
+ assert.match(css, /@keyframes desktop-dock-separator-collapse-left/);
51
+ });
52
+
15
53
  test("left dock placement owns vertical frame and popup placement styles", () => {
16
54
  const css = readFileSync(resolve("src/styles/workbench.css"), "utf8");
17
55
 
@@ -62,7 +100,19 @@ test("left dock placement owns vertical frame and popup placement styles", () =>
62
100
  assert.doesNotMatch(css, /desktop-dock-left-stack-card-fan-in/);
63
101
  assert.match(
64
102
  css,
65
- /\.desktop-dock\[data-dock-placement="left"\]\s+\.desktop-dock__slot\[data-node-state="open"\]::before,[\s\S]*?\.desktop-dock\[data-dock-placement="left"\]\s+\.desktop-dock__slot\[data-node-state="minimized"\]::before\s*{[^}]*right:\s*auto;[^}]*left:\s*var\(--desktop-dock-indicator-offset\);/s
103
+ /\.desktop-dock\[data-dock-placement="left"\]\s+\.desktop-dock__slot\[data-node-state="open"\]::before,[\s\S]*?\.desktop-dock\[data-dock-placement="left"\]\s+\.desktop-dock__slot\[data-node-state="minimized"\]::before\s*{[^}]*right:\s*auto;[^}]*left:\s*calc\(var\(--desktop-dock-indicator-offset\) - 2px\);/s
104
+ );
105
+ assert.match(
106
+ css,
107
+ /\.desktop-dock__slot\[data-node-state="open"\]::before,[\s\S]*?\.desktop-dock__slot\[data-node-state="minimized"\]::before\s*{[^}]*--desktop-dock-indicator-color:\s*var\(--text-tertiary\);[^}]*bottom:\s*calc\(var\(--desktop-dock-indicator-offset\) - 2px\);[^}]*width:\s*5px;[^}]*height:\s*5px;[^}]*background:\s*var\(--desktop-dock-indicator-color\);[^}]*box-shadow:\s*0 0 0 0\.5px rgb\(0 0 0 \/ 12%\);/s
108
+ );
109
+ assert.match(
110
+ css,
111
+ /\.desktop-dock__slot\[data-node-state="open"\]\[data-wallpaper-tone="dark"\]::before,[\s\S]*?\.desktop-dock__slot\[data-node-state="minimized"\]\[data-wallpaper-tone="dark"\]::before\s*{[^}]*--desktop-dock-indicator-color:\s*rgb\(255 255 255 \/ 78%\);[^}]*box-shadow:\s*0 0 0 0\.5px rgb\(0 0 0 \/ 42%\);/s
112
+ );
113
+ assert.match(
114
+ css,
115
+ /\.desktop-dock__slot\[data-node-state="open"\]\[data-wallpaper-tone="light"\]::before,[\s\S]*?\.desktop-dock__slot\[data-node-state="minimized"\]\[data-wallpaper-tone="light"\]::before\s*{[^}]*--desktop-dock-indicator-color:\s*rgb\(0 0 0 \/ 46%\);[^}]*box-shadow:\s*0 0 0 0\.5px rgb\(255 255 255 \/ 58%\);/s
66
116
  );
67
117
  });
68
118
 
@@ -247,6 +297,14 @@ test("dock overflow keeps scroll controls viewport-bound", () => {
247
297
  /\.desktop-dock\[data-dock-hover-panel-open="true"\]\s+\.desktop-dock__items\s*{[^}]*mask-image:\s*none;/s
248
298
  );
249
299
  assert.match(css, /@keyframes desktop-dock-bounce-translate/s);
300
+ assert.match(
301
+ css,
302
+ /@keyframes desktop-dock-bounce-translate\s*{[\s\S]*?45%\s*{[^}]*translate:\s*0 -14px;/s
303
+ );
304
+ assert.match(
305
+ css,
306
+ /@keyframes desktop-dock-bounce-translate-left\s*{[\s\S]*?45%\s*{[^}]*translate:\s*14px 0;/s
307
+ );
250
308
  assert.match(
251
309
  css,
252
310
  /\.desktop-dock__slot\[data-bouncing="true"\]\s+\.desktop-dock__icon-content,/s
@@ -12,7 +12,7 @@ declare const workbenchWindowChromeI18nResources: Record<WorkbenchWindowChromeI1
12
12
  declare function createWorkbenchWindowChromeI18nRuntime(runtime: I18nRuntime<string> | undefined): WorkbenchWindowChromeI18nRuntime;
13
13
 
14
14
  declare const workbenchHostI18nNamespace = "workbenchHost";
15
- type WorkbenchHostI18nKey = "actions.close" | "actions.minimize" | "closeWindow" | "dockLabel" | "launch" | "minimizedWindows" | "newWindow" | "scrollDockDown" | "scrollDockLeft" | "scrollDockRight" | "scrollDockUp" | "windowStatus.active" | "windowStatus.minimized" | "windowStatus.open";
15
+ type WorkbenchHostI18nKey = "actions.close" | "actions.minimize" | "closeWindow" | "dockContextMenu.fullscreen" | "dockContextMenu.hide" | "dockContextMenu.keepInDock" | "dockContextMenu.open" | "dockContextMenu.quit" | "dockContextMenu.removeFromDock" | "dockContextMenu.showAllWindows" | "dockLabel" | "launch" | "minimizedWindows" | "newWindow" | "scrollDockDown" | "scrollDockLeft" | "scrollDockRight" | "scrollDockUp" | "windowStatus.active" | "windowStatus.minimized" | "windowStatus.open";
16
16
  type WorkbenchHostI18nRuntime = I18nRuntime<WorkbenchHostI18nKey>;
17
17
  declare const workbenchHostI18nResources: {
18
18
  readonly en: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/workbench-surface",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -34,10 +34,10 @@
34
34
  "@tutti-os/config-tsconfig": "0.0.0"
35
35
  },
36
36
  "dependencies": {
37
- "@tutti-os/ui-i18n-runtime": "0.0.18",
38
- "@tutti-os/ui-react-hooks": "0.0.18",
39
- "@tutti-os/workbench-snapshot": "0.0.18",
40
- "@tutti-os/ui-system": "0.0.18"
37
+ "@tutti-os/ui-i18n-runtime": "0.0.19",
38
+ "@tutti-os/ui-react-hooks": "0.0.19",
39
+ "@tutti-os/workbench-snapshot": "0.0.19",
40
+ "@tutti-os/ui-system": "0.0.19"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "react": "^19.1.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/react/workbenchWindowI18n.ts","../src/mission-control/workbenchMissionControlI18n.ts","../src/host/workbenchHostI18n.ts"],"sourcesContent":["import {\n createScopedLocaleObjectsI18nModuleManifest,\n createI18nRuntime,\n createScopedI18nRuntime,\n type I18nDictionary,\n type I18nRuntime\n} from \"@tutti-os/ui-i18n-runtime\";\n\ntype WorkbenchWindowChromeI18nLocale = \"en\" | \"zh-CN\";\nexport const workbenchWindowChromeI18nNamespace = \"workbenchWindowChrome\";\nexport const tuttiI18nModule = createScopedLocaleObjectsI18nModuleManifest({\n localeObjectByLocale: {\n en: \"workbenchWindowChromeEn\",\n \"zh-CN\": \"workbenchWindowChromeZhCN\"\n },\n name: \"workbench-window-chrome\",\n namespace: \"workbenchWindowChrome\",\n sourceRoot: \"packages/workbench/surface/src\"\n});\n\nconst workbenchWindowChromeEn = {\n enterFullscreen: \"Full Screen\",\n exitFullscreen: \"Exit Full Screen\"\n} as const satisfies I18nDictionary;\n\nconst workbenchWindowChromeZhCN = {\n enterFullscreen: \"全屏\",\n exitFullscreen: \"取消全屏\"\n} as const satisfies I18nDictionary;\n\nexport type WorkbenchWindowChromeI18nKey = keyof typeof workbenchWindowChromeEn;\n\nexport type WorkbenchWindowChromeI18nRuntime =\n I18nRuntime<WorkbenchWindowChromeI18nKey>;\n\nconst workbenchWindowChromeDefaults: Record<\n WorkbenchWindowChromeI18nLocale,\n I18nDictionary\n> = {\n en: workbenchWindowChromeEn,\n \"zh-CN\": workbenchWindowChromeZhCN\n};\n\nexport const workbenchWindowChromeI18nResources: Record<\n WorkbenchWindowChromeI18nLocale,\n I18nDictionary\n> = {\n en: {\n [workbenchWindowChromeI18nNamespace]: workbenchWindowChromeDefaults.en\n },\n \"zh-CN\": {\n [workbenchWindowChromeI18nNamespace]: workbenchWindowChromeDefaults[\"zh-CN\"]\n }\n};\n\nconst defaultWorkbenchWindowChromeI18n = createI18nRuntime({\n dictionaries: [workbenchWindowChromeI18nResources.en]\n});\n\nexport function createWorkbenchWindowChromeI18nRuntime(\n runtime: I18nRuntime<string> | undefined\n): WorkbenchWindowChromeI18nRuntime {\n return createScopedI18nRuntime<WorkbenchWindowChromeI18nKey>(\n runtime ?? defaultWorkbenchWindowChromeI18n,\n workbenchWindowChromeI18nNamespace\n );\n}\n","import {\n createScopedLocaleObjectsI18nModuleManifest,\n createI18nRuntime,\n createScopedI18nRuntime,\n type I18nDictionary,\n type I18nRuntime\n} from \"@tutti-os/ui-i18n-runtime\";\n\ntype WorkbenchMissionControlI18nLocale = \"en\" | \"zh-CN\";\n\nexport const workbenchMissionControlI18nNamespace = \"workbenchMissionControl\";\n\nexport const tuttiI18nModule = createScopedLocaleObjectsI18nModuleManifest({\n localeObjectByLocale: {\n en: \"workbenchMissionControlEn\",\n \"zh-CN\": \"workbenchMissionControlZhCN\"\n },\n name: \"workbench-mission-control\",\n namespace: \"workbenchMissionControl\",\n sourceRoot: \"packages/workbench/surface/src\"\n});\n\nconst workbenchMissionControlEn = {\n layoutSelectionHint: \"Select multiple windows to arrange\",\n noAvailableLayout: \"No layout fits the selected windows\",\n presets: {\n balanced: \"Balanced layout\",\n column: \"Vertical equal layout\",\n row: \"Horizontal equal layout\"\n }\n} as const satisfies I18nDictionary;\n\nconst workbenchMissionControlZhCN = {\n layoutSelectionHint: \"请选择多个你要整理布局的窗口\",\n noAvailableLayout: \"当前没有可用布局\",\n presets: {\n balanced: \"智能均衡布局\",\n column: \"垂直等分布局\",\n row: \"水平等分布局\"\n }\n} as const satisfies I18nDictionary;\n\nexport type WorkbenchMissionControlI18nKey =\n | \"layoutSelectionHint\"\n | \"noAvailableLayout\"\n | \"presets.balanced\"\n | \"presets.column\"\n | \"presets.row\";\n\nexport type WorkbenchMissionControlI18nRuntime =\n I18nRuntime<WorkbenchMissionControlI18nKey>;\n\nconst workbenchMissionControlDefaults: Record<\n WorkbenchMissionControlI18nLocale,\n I18nDictionary\n> = {\n en: workbenchMissionControlEn,\n \"zh-CN\": workbenchMissionControlZhCN\n};\n\nexport const workbenchMissionControlI18nResources: Record<\n WorkbenchMissionControlI18nLocale,\n I18nDictionary\n> = {\n en: {\n [workbenchMissionControlI18nNamespace]: workbenchMissionControlDefaults.en\n },\n \"zh-CN\": {\n [workbenchMissionControlI18nNamespace]:\n workbenchMissionControlDefaults[\"zh-CN\"]\n }\n};\n\nconst defaultWorkbenchMissionControlI18n = createI18nRuntime({\n dictionaries: [workbenchMissionControlI18nResources.en]\n});\n\nexport function createWorkbenchMissionControlI18nRuntime(\n runtime: I18nRuntime<string> | undefined\n): WorkbenchMissionControlI18nRuntime {\n return createScopedI18nRuntime<WorkbenchMissionControlI18nKey>(\n runtime ?? defaultWorkbenchMissionControlI18n,\n workbenchMissionControlI18nNamespace\n );\n}\n","import {\n createScopedLocaleObjectsI18nModuleManifest,\n createI18nRuntime,\n createScopedI18nRuntime,\n type I18nDictionary,\n type I18nRuntime\n} from \"@tutti-os/ui-i18n-runtime\";\n\ntype WorkbenchHostI18nLocale = \"en\" | \"zh-CN\";\nexport const workbenchHostI18nNamespace = \"workbenchHost\";\nexport const tuttiI18nModule = createScopedLocaleObjectsI18nModuleManifest({\n localeObjectByLocale: {\n en: \"workbenchHostEn\",\n \"zh-CN\": \"workbenchHostZhCN\"\n },\n name: \"workbench-host\",\n namespace: \"workbenchHost\",\n sourceRoot: \"packages/workbench/surface/src\"\n});\n\nconst workbenchHostEn = {\n actions: {\n close: \"Close\",\n minimize: \"Minimize\"\n },\n closeWindow: \"Close {{title}}\",\n dockLabel: \"Workbench dock\",\n launch: \"Open {{title}}\",\n minimizedWindows: \"Minimized windows\",\n newWindow: \"New window\",\n scrollDockDown: \"Scroll dock down\",\n scrollDockLeft: \"Scroll dock left\",\n scrollDockRight: \"Scroll dock right\",\n scrollDockUp: \"Scroll dock up\",\n windowStatus: {\n active: \"Active\",\n minimized: \"Minimized\",\n open: \"Open\"\n }\n} as const satisfies I18nDictionary;\n\nconst workbenchHostZhCN = {\n actions: {\n close: \"关闭\",\n minimize: \"最小化\"\n },\n closeWindow: \"关闭 {{title}}\",\n dockLabel: \"工作台程序坞\",\n launch: \"打开 {{title}}\",\n minimizedWindows: \"已最小化窗口\",\n newWindow: \"新建窗口\",\n scrollDockDown: \"向下滚动程序坞\",\n scrollDockLeft: \"向左滚动程序坞\",\n scrollDockRight: \"向右滚动程序坞\",\n scrollDockUp: \"向上滚动程序坞\",\n windowStatus: {\n active: \"当前窗口\",\n minimized: \"已最小化\",\n open: \"已打开\"\n }\n} as const satisfies I18nDictionary;\n\nexport type WorkbenchHostI18nKey =\n | \"actions.close\"\n | \"actions.minimize\"\n | \"closeWindow\"\n | \"dockLabel\"\n | \"launch\"\n | \"minimizedWindows\"\n | \"newWindow\"\n | \"scrollDockDown\"\n | \"scrollDockLeft\"\n | \"scrollDockRight\"\n | \"scrollDockUp\"\n | \"windowStatus.active\"\n | \"windowStatus.minimized\"\n | \"windowStatus.open\";\n\nexport type WorkbenchHostI18nRuntime = I18nRuntime<WorkbenchHostI18nKey>;\n\nconst workbenchHostDefaults: Record<WorkbenchHostI18nLocale, I18nDictionary> = {\n en: workbenchHostEn,\n \"zh-CN\": workbenchHostZhCN\n};\n\nexport const workbenchHostI18nResources = {\n en: {\n [workbenchHostI18nNamespace]: workbenchHostDefaults.en\n },\n \"zh-CN\": {\n [workbenchHostI18nNamespace]: workbenchHostDefaults[\"zh-CN\"]\n }\n} as const satisfies Record<WorkbenchHostI18nLocale, I18nDictionary>;\n\nconst defaultWorkbenchHostI18n = createI18nRuntime({\n dictionaries: [workbenchHostI18nResources.en]\n});\n\nexport function createWorkbenchHostI18nRuntime(\n runtime: I18nRuntime<string> | undefined\n): WorkbenchHostI18nRuntime {\n return createScopedI18nRuntime<WorkbenchHostI18nKey>(\n runtime ?? defaultWorkbenchHostI18n,\n workbenchHostI18nNamespace\n );\n}\n"],"mappings":"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","names":["createScopedLocaleObjectsI18nModuleManifest","createI18nRuntime","createScopedI18nRuntime","tuttiI18nModule","createScopedLocaleObjectsI18nModuleManifest","createI18nRuntime","createScopedI18nRuntime","tuttiI18nModule"]}