@tutti-os/workbench-surface 0.0.75 → 0.0.76
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/dist/{chunk-B5MSA47V.js → chunk-TIMYSQM7.js} +9 -1
- package/dist/chunk-TIMYSQM7.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.d.ts +48 -2
- package/dist/index.js +906 -320
- package/dist/index.js.map +1 -1
- package/dist/styles/workbench.css +15 -0
- package/package.json +5 -5
- package/dist/chunk-B5MSA47V.js.map +0 -1
|
@@ -63,6 +63,10 @@ var tuttiI18nModule2 = createScopedLocaleObjectsI18nModuleManifest2({
|
|
|
63
63
|
var workbenchMissionControlEn = {
|
|
64
64
|
layoutSelectionHint: "Select multiple windows to arrange",
|
|
65
65
|
noAvailableLayout: "No layout fits the selected windows",
|
|
66
|
+
presetActions: {
|
|
67
|
+
arrangeOnce: "Arrange once",
|
|
68
|
+
lockLayout: "Lock layout"
|
|
69
|
+
},
|
|
66
70
|
presets: {
|
|
67
71
|
balanced: "Balanced layout",
|
|
68
72
|
column: "Vertical equal layout",
|
|
@@ -72,6 +76,10 @@ var workbenchMissionControlEn = {
|
|
|
72
76
|
var workbenchMissionControlZhCN = {
|
|
73
77
|
layoutSelectionHint: "\u8BF7\u9009\u62E9\u591A\u4E2A\u4F60\u8981\u6574\u7406\u5E03\u5C40\u7684\u7A97\u53E3",
|
|
74
78
|
noAvailableLayout: "\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u5E03\u5C40",
|
|
79
|
+
presetActions: {
|
|
80
|
+
arrangeOnce: "\u4E00\u6B21\u6027\u6574\u7406",
|
|
81
|
+
lockLayout: "\u9501\u5B9A\u5E03\u5C40"
|
|
82
|
+
},
|
|
75
83
|
presets: {
|
|
76
84
|
balanced: "\u667A\u80FD\u5747\u8861\u5E03\u5C40",
|
|
77
85
|
column: "\u5782\u76F4\u7B49\u5206\u5E03\u5C40",
|
|
@@ -207,4 +215,4 @@ export {
|
|
|
207
215
|
workbenchHostI18nResources,
|
|
208
216
|
createWorkbenchHostI18nRuntime
|
|
209
217
|
};
|
|
210
|
-
//# sourceMappingURL=chunk-
|
|
218
|
+
//# sourceMappingURL=chunk-TIMYSQM7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 presetActions: {\n arrangeOnce: \"Arrange once\",\n lockLayout: \"Lock layout\"\n },\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 presetActions: {\n arrangeOnce: \"一次性整理\",\n lockLayout: \"锁定布局\"\n },\n presets: {\n balanced: \"智能均衡布局\",\n column: \"垂直等分布局\",\n row: \"水平等分布局\"\n }\n} as const satisfies I18nDictionary;\n\nexport type WorkbenchMissionControlI18nKey =\n | \"layoutSelectionHint\"\n | \"noAvailableLayout\"\n | \"presetActions.arrangeOnce\"\n | \"presetActions.lockLayout\"\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 dockContextMenu: {\n fullscreen: \"Full Screen\",\n hide: \"Minimize\",\n keepInDock: \"Keep in Dock\",\n open: \"Open\",\n quit: \"Quit\",\n removeFromDock: \"Remove from Dock\",\n showAllWindows: \"Show All Similar Windows\"\n },\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 dockContextMenu: {\n fullscreen: \"全屏\",\n hide: \"最小化\",\n keepInDock: \"在程序坞中保留\",\n open: \"打开\",\n quit: \"退出\",\n removeFromDock: \"从程序坞中移除\",\n showAllWindows: \"显示所有同类窗口\"\n },\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 | \"dockContextMenu.fullscreen\"\n | \"dockContextMenu.hide\"\n | \"dockContextMenu.keepInDock\"\n | \"dockContextMenu.open\"\n | \"dockContextMenu.quit\"\n | \"dockContextMenu.removeFromDock\"\n | \"dockContextMenu.showAllWindows\"\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"]}
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { I18nRuntime, I18nDictionary } from '@tutti-os/ui-i18n-runtime';
|
|
|
3
3
|
|
|
4
4
|
type WorkbenchMissionControlI18nLocale = "en" | "zh-CN";
|
|
5
5
|
declare const workbenchMissionControlI18nNamespace = "workbenchMissionControl";
|
|
6
|
-
type WorkbenchMissionControlI18nKey = "layoutSelectionHint" | "noAvailableLayout" | "presets.balanced" | "presets.column" | "presets.row";
|
|
6
|
+
type WorkbenchMissionControlI18nKey = "layoutSelectionHint" | "noAvailableLayout" | "presetActions.arrangeOnce" | "presetActions.lockLayout" | "presets.balanced" | "presets.column" | "presets.row";
|
|
7
7
|
type WorkbenchMissionControlI18nRuntime = I18nRuntime<WorkbenchMissionControlI18nKey>;
|
|
8
8
|
declare const workbenchMissionControlI18nResources: Record<WorkbenchMissionControlI18nLocale, I18nDictionary>;
|
|
9
9
|
declare function createWorkbenchMissionControlI18nRuntime(runtime: I18nRuntime<string> | undefined): WorkbenchMissionControlI18nRuntime;
|
package/dist/i18n/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
workbenchMissionControlI18nResources,
|
|
9
9
|
workbenchWindowChromeI18nNamespace,
|
|
10
10
|
workbenchWindowChromeI18nResources
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-TIMYSQM7.js";
|
|
12
12
|
export {
|
|
13
13
|
createWorkbenchHostI18nRuntime,
|
|
14
14
|
createWorkbenchMissionControlI18nRuntime,
|
package/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,24 @@ type WorkbenchLayoutPreset = {
|
|
|
26
26
|
} | {
|
|
27
27
|
kind: "column";
|
|
28
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* A layout preset that stays "locked" onto a set of nodes: whenever the surface
|
|
31
|
+
* is resized the layout is re-applied to these nodes so they keep scaling
|
|
32
|
+
* proportionally. Dragging a locked node swaps grid slots and resizing a
|
|
33
|
+
* locked node moves the shared grid dividers; the lock is only released
|
|
34
|
+
* explicitly (titlebar button) or by programmatic moves.
|
|
35
|
+
*/
|
|
36
|
+
interface WorkbenchLockedLayout {
|
|
37
|
+
preset: WorkbenchLayoutPreset;
|
|
38
|
+
nodeIDs: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Custom slot geometry created when the user resizes a locked window,
|
|
41
|
+
* normalized (0..1) against the safe layout rect. When present it takes
|
|
42
|
+
* precedence over the preset frames; when absent the slots derive from the
|
|
43
|
+
* preset.
|
|
44
|
+
*/
|
|
45
|
+
normalizedFrames?: Record<string, WorkbenchFrame>;
|
|
46
|
+
}
|
|
29
47
|
interface WorkbenchNode<TData = unknown> {
|
|
30
48
|
id: string;
|
|
31
49
|
kind: string;
|
|
@@ -50,6 +68,7 @@ interface WorkbenchState<TData = unknown> {
|
|
|
50
68
|
activeSnapTarget: WorkbenchSnapTarget;
|
|
51
69
|
surfaceSize: WorkbenchSize;
|
|
52
70
|
layoutConstraints: WorkbenchLayoutConstraints;
|
|
71
|
+
lockedLayout: WorkbenchLockedLayout | null;
|
|
53
72
|
}
|
|
54
73
|
interface WorkbenchLayoutConstraints {
|
|
55
74
|
minWidth: number;
|
|
@@ -96,9 +115,33 @@ type WorkbenchAction<TData = unknown> = {
|
|
|
96
115
|
type: "applyLayoutPreset";
|
|
97
116
|
nodeIDs: string[];
|
|
98
117
|
preset: WorkbenchLayoutPreset;
|
|
118
|
+
/**
|
|
119
|
+
* When true, remember this preset + node set so it is re-applied on every
|
|
120
|
+
* surface resize (proportional scaling) until the user manually moves a
|
|
121
|
+
* node. Defaults to a one-off arrangement.
|
|
122
|
+
*/
|
|
123
|
+
lock?: boolean;
|
|
99
124
|
} | {
|
|
100
125
|
type: "applyVisibleLayoutPreset";
|
|
101
126
|
preset: WorkbenchLayoutPreset;
|
|
127
|
+
} | {
|
|
128
|
+
/**
|
|
129
|
+
* Ends a drag of a node that belongs to the locked layout: if the node
|
|
130
|
+
* was dropped over another locked node's slot the two swap slots,
|
|
131
|
+
* otherwise the node snaps back to its own slot.
|
|
132
|
+
*/
|
|
133
|
+
type: "settleLockedDrag";
|
|
134
|
+
nodeID: string;
|
|
135
|
+
} | {
|
|
136
|
+
/**
|
|
137
|
+
* Swaps a locked node with its nearest neighbor slot in the given
|
|
138
|
+
* direction (window snapping shortcuts while a layout is locked).
|
|
139
|
+
*/
|
|
140
|
+
type: "moveLockedNode";
|
|
141
|
+
nodeID: string;
|
|
142
|
+
direction: "left" | "right" | "up" | "down";
|
|
143
|
+
} | {
|
|
144
|
+
type: "releaseLockedLayout";
|
|
102
145
|
} | {
|
|
103
146
|
type: "applyActiveSnapTarget";
|
|
104
147
|
nodeID: string;
|
|
@@ -150,8 +193,11 @@ interface WorkbenchCommands<TData = unknown> {
|
|
|
150
193
|
enterFullscreen(nodeID: string): void;
|
|
151
194
|
exitFullscreen(nodeID: string): void;
|
|
152
195
|
applyQuickLayout(nodeID: string, target: WorkbenchQuickLayoutTarget): void;
|
|
153
|
-
applyLayoutPreset(nodeIDs: string[], preset: WorkbenchLayoutPreset): void;
|
|
196
|
+
applyLayoutPreset(nodeIDs: string[], preset: WorkbenchLayoutPreset, lock?: boolean): void;
|
|
154
197
|
applyVisibleLayoutPreset(preset: WorkbenchLayoutPreset): void;
|
|
198
|
+
settleLockedDrag(nodeID: string): void;
|
|
199
|
+
moveLockedNode(nodeID: string, direction: "left" | "right" | "up" | "down"): void;
|
|
200
|
+
releaseLockedLayout(): void;
|
|
155
201
|
applyActiveSnapTarget(nodeID: string): void;
|
|
156
202
|
applySnapTarget(nodeID: string, snapTarget: WorkbenchSnapTarget): void;
|
|
157
203
|
dragNode(nodeID: string, frame: WorkbenchFrame): void;
|
|
@@ -197,7 +243,7 @@ interface WorkbenchMissionControlSnapshot<TData = unknown> {
|
|
|
197
243
|
visibleNodes: readonly WorkbenchNode<TData>[];
|
|
198
244
|
}
|
|
199
245
|
interface WorkbenchMissionControlAdapter<TData = unknown> {
|
|
200
|
-
applyLayoutPreset(nodeIds: string[], preset: WorkbenchLayoutPreset): void;
|
|
246
|
+
applyLayoutPreset(nodeIds: string[], preset: WorkbenchLayoutPreset, lock?: boolean): void;
|
|
201
247
|
focusNode(nodeId: string): void;
|
|
202
248
|
getSnapshot(): WorkbenchMissionControlSnapshot<TData>;
|
|
203
249
|
subscribe(listener: () => void): () => void;
|