@lvce-editor/title-bar-worker 2.4.0 → 2.6.0
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/titleBarWorkerMain.js +240 -188
- package/package.json +5 -2
|
@@ -61,7 +61,7 @@ class AssertionError extends Error {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
const Object$1 = 1;
|
|
64
|
-
const Number = 2;
|
|
64
|
+
const Number$1 = 2;
|
|
65
65
|
const Array$1 = 3;
|
|
66
66
|
const String = 4;
|
|
67
67
|
const Boolean$1 = 5;
|
|
@@ -71,7 +71,7 @@ const Unknown$1 = 8;
|
|
|
71
71
|
const getType = value => {
|
|
72
72
|
switch (typeof value) {
|
|
73
73
|
case 'number':
|
|
74
|
-
return Number;
|
|
74
|
+
return Number$1;
|
|
75
75
|
case 'function':
|
|
76
76
|
return Function;
|
|
77
77
|
case 'string':
|
|
@@ -98,7 +98,7 @@ const object = value => {
|
|
|
98
98
|
};
|
|
99
99
|
const number = value => {
|
|
100
100
|
const type = getType(value);
|
|
101
|
-
if (type !== Number) {
|
|
101
|
+
if (type !== Number$1) {
|
|
102
102
|
throw new AssertionError('expected value to be of type number');
|
|
103
103
|
}
|
|
104
104
|
};
|
|
@@ -108,18 +108,6 @@ const array = value => {
|
|
|
108
108
|
throw new AssertionError('expected value to be of type array');
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
|
-
const string = value => {
|
|
112
|
-
const type = getType(value);
|
|
113
|
-
if (type !== String) {
|
|
114
|
-
throw new AssertionError('expected value to be of type string');
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
const boolean = value => {
|
|
118
|
-
const type = getType(value);
|
|
119
|
-
if (type !== Boolean$1) {
|
|
120
|
-
throw new AssertionError('expected value to be of type boolean');
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
111
|
|
|
124
112
|
const isMessagePort = value => {
|
|
125
113
|
return value && value instanceof MessagePort;
|
|
@@ -903,6 +891,109 @@ const WebWorkerRpcClient = {
|
|
|
903
891
|
__proto__: null,
|
|
904
892
|
create: create$3
|
|
905
893
|
};
|
|
894
|
+
const createMockRpc = ({
|
|
895
|
+
commandMap
|
|
896
|
+
}) => {
|
|
897
|
+
const invocations = [];
|
|
898
|
+
const invoke = (method, ...params) => {
|
|
899
|
+
invocations.push([method, ...params]);
|
|
900
|
+
const command = commandMap[method];
|
|
901
|
+
if (!command) {
|
|
902
|
+
throw new Error(`command ${method} not found`);
|
|
903
|
+
}
|
|
904
|
+
return command(...params);
|
|
905
|
+
};
|
|
906
|
+
const mockRpc = {
|
|
907
|
+
invoke,
|
|
908
|
+
invokeAndTransfer: invoke,
|
|
909
|
+
invocations
|
|
910
|
+
};
|
|
911
|
+
return mockRpc;
|
|
912
|
+
};
|
|
913
|
+
|
|
914
|
+
const toCommandId = key => {
|
|
915
|
+
const dotIndex = key.indexOf('.');
|
|
916
|
+
return key.slice(dotIndex + 1);
|
|
917
|
+
};
|
|
918
|
+
const create$2 = () => {
|
|
919
|
+
const states = Object.create(null);
|
|
920
|
+
const commandMapRef = {};
|
|
921
|
+
return {
|
|
922
|
+
get(uid) {
|
|
923
|
+
return states[uid];
|
|
924
|
+
},
|
|
925
|
+
set(uid, oldState, newState) {
|
|
926
|
+
states[uid] = {
|
|
927
|
+
oldState,
|
|
928
|
+
newState
|
|
929
|
+
};
|
|
930
|
+
},
|
|
931
|
+
dispose(uid) {
|
|
932
|
+
delete states[uid];
|
|
933
|
+
},
|
|
934
|
+
getKeys() {
|
|
935
|
+
return Object.keys(states).map(key => {
|
|
936
|
+
return Number.parseInt(key);
|
|
937
|
+
});
|
|
938
|
+
},
|
|
939
|
+
clear() {
|
|
940
|
+
for (const key of Object.keys(states)) {
|
|
941
|
+
delete states[key];
|
|
942
|
+
}
|
|
943
|
+
},
|
|
944
|
+
wrapCommand(fn) {
|
|
945
|
+
const wrapped = async (uid, ...args) => {
|
|
946
|
+
const {
|
|
947
|
+
newState
|
|
948
|
+
} = states[uid];
|
|
949
|
+
const newerState = await fn(newState, ...args);
|
|
950
|
+
if (newState === newerState) {
|
|
951
|
+
return;
|
|
952
|
+
}
|
|
953
|
+
const latest = states[uid];
|
|
954
|
+
states[uid] = {
|
|
955
|
+
oldState: latest.oldState,
|
|
956
|
+
newState: newerState
|
|
957
|
+
};
|
|
958
|
+
};
|
|
959
|
+
return wrapped;
|
|
960
|
+
},
|
|
961
|
+
wrapGetter(fn) {
|
|
962
|
+
const wrapped = (uid, ...args) => {
|
|
963
|
+
const {
|
|
964
|
+
newState
|
|
965
|
+
} = states[uid];
|
|
966
|
+
return fn(newState, ...args);
|
|
967
|
+
};
|
|
968
|
+
return wrapped;
|
|
969
|
+
},
|
|
970
|
+
diff(uid, modules, numbers) {
|
|
971
|
+
const {
|
|
972
|
+
oldState,
|
|
973
|
+
newState
|
|
974
|
+
} = states[uid];
|
|
975
|
+
const diffResult = [];
|
|
976
|
+
for (let i = 0; i < modules.length; i++) {
|
|
977
|
+
const fn = modules[i];
|
|
978
|
+
if (!fn(oldState, newState)) {
|
|
979
|
+
diffResult.push(numbers[i]);
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
return diffResult;
|
|
983
|
+
},
|
|
984
|
+
getCommandIds() {
|
|
985
|
+
const keys = Object.keys(commandMapRef);
|
|
986
|
+
const ids = keys.map(toCommandId);
|
|
987
|
+
return ids;
|
|
988
|
+
},
|
|
989
|
+
registerCommands(commandMap) {
|
|
990
|
+
Object.assign(commandMapRef, commandMap);
|
|
991
|
+
}
|
|
992
|
+
};
|
|
993
|
+
};
|
|
994
|
+
const terminate = () => {
|
|
995
|
+
globalThis.close();
|
|
996
|
+
};
|
|
906
997
|
|
|
907
998
|
const RenderEntries = 1;
|
|
908
999
|
const RenderFocusedIndex = 2;
|
|
@@ -937,24 +1028,10 @@ const diff = (oldState, newState) => {
|
|
|
937
1028
|
return diffResult;
|
|
938
1029
|
};
|
|
939
1030
|
|
|
940
|
-
const create$2 = () => {
|
|
941
|
-
const states = Object.create(null);
|
|
942
|
-
return {
|
|
943
|
-
get(uid) {
|
|
944
|
-
return states[uid];
|
|
945
|
-
},
|
|
946
|
-
set(uid, oldState, newState) {
|
|
947
|
-
states[uid] = {
|
|
948
|
-
oldState,
|
|
949
|
-
newState
|
|
950
|
-
};
|
|
951
|
-
}
|
|
952
|
-
};
|
|
953
|
-
};
|
|
954
|
-
|
|
955
1031
|
const {
|
|
956
1032
|
get: get$1,
|
|
957
|
-
set: set$3
|
|
1033
|
+
set: set$3,
|
|
1034
|
+
wrapCommand
|
|
958
1035
|
} = create$2();
|
|
959
1036
|
|
|
960
1037
|
const diff2 = uid => {
|
|
@@ -971,7 +1048,19 @@ const getCommandIds = () => {
|
|
|
971
1048
|
return commandsIds;
|
|
972
1049
|
};
|
|
973
1050
|
|
|
1051
|
+
const Menu$1 = 'menu';
|
|
1052
|
+
const MenuBar = 'menubar';
|
|
1053
|
+
const MenuItem$1 = 'menuitem';
|
|
1054
|
+
const MenuItemCheckBox = 'menuitemcheckbox';
|
|
1055
|
+
const None$1 = 'none';
|
|
1056
|
+
const Separator$1 = 'separator';
|
|
1057
|
+
|
|
1058
|
+
const Button = 1;
|
|
1059
|
+
const Div = 4;
|
|
1060
|
+
const Span = 8;
|
|
974
1061
|
const Text = 12;
|
|
1062
|
+
const I = 16;
|
|
1063
|
+
const Img = 17;
|
|
975
1064
|
|
|
976
1065
|
const Escape$2 = 8;
|
|
977
1066
|
const Space$2 = 9;
|
|
@@ -992,6 +1081,10 @@ const mergeClassNames = (...classNames) => {
|
|
|
992
1081
|
return classNames.filter(Boolean).join(' ');
|
|
993
1082
|
};
|
|
994
1083
|
|
|
1084
|
+
const px = value => {
|
|
1085
|
+
return `${value}px`;
|
|
1086
|
+
};
|
|
1087
|
+
|
|
995
1088
|
const text = data => {
|
|
996
1089
|
return {
|
|
997
1090
|
type: Text,
|
|
@@ -1114,8 +1207,8 @@ const Terminal$1 = 14;
|
|
|
1114
1207
|
const TitleBar = 15;
|
|
1115
1208
|
const View$1 = 16;
|
|
1116
1209
|
|
|
1117
|
-
const Separator
|
|
1118
|
-
const None
|
|
1210
|
+
const Separator = 1;
|
|
1211
|
+
const None = 0;
|
|
1119
1212
|
const SubMenu = 4;
|
|
1120
1213
|
const Checked = 2;
|
|
1121
1214
|
const Unchecked = 3;
|
|
@@ -1126,7 +1219,7 @@ const Ignore = 7;
|
|
|
1126
1219
|
const menuEntrySeparator = {
|
|
1127
1220
|
id: 'separator',
|
|
1128
1221
|
label: '',
|
|
1129
|
-
flags: Separator
|
|
1222
|
+
flags: Separator,
|
|
1130
1223
|
command: ''
|
|
1131
1224
|
};
|
|
1132
1225
|
|
|
@@ -1145,27 +1238,27 @@ const getMenuEntries$d = () => {
|
|
|
1145
1238
|
}, menuEntrySeparator, {
|
|
1146
1239
|
id: 'cut',
|
|
1147
1240
|
label: cut(),
|
|
1148
|
-
flags: None
|
|
1241
|
+
flags: None,
|
|
1149
1242
|
command: /* Editor.cut */'Editor.cut'
|
|
1150
1243
|
}, {
|
|
1151
1244
|
id: 'copy',
|
|
1152
1245
|
label: copy(),
|
|
1153
|
-
flags: None
|
|
1246
|
+
flags: None,
|
|
1154
1247
|
command: /* Editor.copy */'Editor.copy'
|
|
1155
1248
|
}, {
|
|
1156
1249
|
id: 'paste',
|
|
1157
1250
|
label: paste(),
|
|
1158
|
-
flags: None
|
|
1251
|
+
flags: None,
|
|
1159
1252
|
command: /* Editor.paste */'Editor.paste'
|
|
1160
1253
|
}, menuEntrySeparator, {
|
|
1161
1254
|
id: 'toggle-line-comment',
|
|
1162
1255
|
label: toggleLineComment(),
|
|
1163
|
-
flags: None
|
|
1256
|
+
flags: None,
|
|
1164
1257
|
command: /* Editor.toggleLineComment */'Editor.toggleLineComment'
|
|
1165
1258
|
}, {
|
|
1166
1259
|
id: 'toggle-block-comment',
|
|
1167
1260
|
label: toggleBlockComment(),
|
|
1168
|
-
flags: None
|
|
1261
|
+
flags: None,
|
|
1169
1262
|
command: /* Editor.toggleBlockComment */'Editor.toggleBlockComment'
|
|
1170
1263
|
}];
|
|
1171
1264
|
};
|
|
@@ -1223,17 +1316,17 @@ const getMenuEntries$c = platform => {
|
|
|
1223
1316
|
const entries = [{
|
|
1224
1317
|
id: 'newFile',
|
|
1225
1318
|
label: newFile(),
|
|
1226
|
-
flags: None
|
|
1319
|
+
flags: None,
|
|
1227
1320
|
command: '-1'
|
|
1228
1321
|
}, {
|
|
1229
1322
|
id: 'newWindow',
|
|
1230
1323
|
label: newWindow(),
|
|
1231
|
-
flags: None
|
|
1324
|
+
flags: None,
|
|
1232
1325
|
command: /* Window.openNew */'Window.openNew'
|
|
1233
1326
|
}, menuEntrySeparator, {
|
|
1234
1327
|
id: 'openFile',
|
|
1235
1328
|
label: openFile(),
|
|
1236
|
-
flags: None
|
|
1329
|
+
flags: None,
|
|
1237
1330
|
command: 'Dialog.openFile'
|
|
1238
1331
|
}, {
|
|
1239
1332
|
id: 'openFolder',
|
|
@@ -1248,12 +1341,12 @@ const getMenuEntries$c = platform => {
|
|
|
1248
1341
|
}, menuEntrySeparator, {
|
|
1249
1342
|
id: 'save',
|
|
1250
1343
|
label: save(),
|
|
1251
|
-
flags: None
|
|
1344
|
+
flags: None,
|
|
1252
1345
|
command: 'Main.save'
|
|
1253
1346
|
}, {
|
|
1254
1347
|
id: 'saveAll',
|
|
1255
1348
|
label: saveAll(),
|
|
1256
|
-
flags: None
|
|
1349
|
+
flags: None,
|
|
1257
1350
|
command: 'Main.saveAll'
|
|
1258
1351
|
}];
|
|
1259
1352
|
if (platform === Electron) {
|
|
@@ -1330,7 +1423,7 @@ const getMenuEntries$a = async platform => {
|
|
|
1330
1423
|
entries.push({
|
|
1331
1424
|
id: 'toggleDeveloperTools',
|
|
1332
1425
|
label: toggleDeveloperTools(),
|
|
1333
|
-
flags: None
|
|
1426
|
+
flags: None,
|
|
1334
1427
|
command: 'Developer.toggleDeveloperTools'
|
|
1335
1428
|
}, {
|
|
1336
1429
|
id: 'openProcessExplorer',
|
|
@@ -1353,7 +1446,7 @@ const getMenuEntries$a = async platform => {
|
|
|
1353
1446
|
entries.push({
|
|
1354
1447
|
id: 'about',
|
|
1355
1448
|
label: about(),
|
|
1356
|
-
flags: None
|
|
1449
|
+
flags: None,
|
|
1357
1450
|
command: 'About.showAbout'
|
|
1358
1451
|
});
|
|
1359
1452
|
return entries;
|
|
@@ -1459,6 +1552,11 @@ const sendMessagePortToMarkdownWorker = async (port, rpcId) => {
|
|
|
1459
1552
|
// @ts-ignore
|
|
1460
1553
|
await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToMarkdownWorker', port, command, rpcId);
|
|
1461
1554
|
};
|
|
1555
|
+
const sendMessagePortToIconThemeWorker = async (port, rpcId) => {
|
|
1556
|
+
const command = 'IconTheme.handleMessagePort';
|
|
1557
|
+
// @ts-ignore
|
|
1558
|
+
await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToIconThemeWorker', port, command, rpcId);
|
|
1559
|
+
};
|
|
1462
1560
|
const sendMessagePortToFileSystemWorker = async (port, rpcId) => {
|
|
1463
1561
|
const command = 'FileSystem.handleMessagePort';
|
|
1464
1562
|
// @ts-ignore
|
|
@@ -1658,6 +1756,13 @@ const getLogsDir = async () => {
|
|
|
1658
1756
|
// @ts-ignore
|
|
1659
1757
|
return invoke$1('PlatformPaths.getLogsDir');
|
|
1660
1758
|
};
|
|
1759
|
+
const registerMockRpc = commandMap => {
|
|
1760
|
+
const mockRpc = createMockRpc({
|
|
1761
|
+
commandMap
|
|
1762
|
+
});
|
|
1763
|
+
set$1(mockRpc);
|
|
1764
|
+
return mockRpc;
|
|
1765
|
+
};
|
|
1661
1766
|
|
|
1662
1767
|
const RendererWorker = {
|
|
1663
1768
|
__proto__: null,
|
|
@@ -1707,6 +1812,7 @@ const RendererWorker = {
|
|
|
1707
1812
|
openUrl,
|
|
1708
1813
|
openWidget,
|
|
1709
1814
|
readFile,
|
|
1815
|
+
registerMockRpc,
|
|
1710
1816
|
registerWebViewInterceptor,
|
|
1711
1817
|
renderMarkdown,
|
|
1712
1818
|
rerenderEditor,
|
|
@@ -1717,6 +1823,7 @@ const RendererWorker = {
|
|
|
1717
1823
|
sendMessagePortToErrorWorker,
|
|
1718
1824
|
sendMessagePortToExtensionHostWorker,
|
|
1719
1825
|
sendMessagePortToFileSystemWorker,
|
|
1826
|
+
sendMessagePortToIconThemeWorker,
|
|
1720
1827
|
sendMessagePortToMarkdownWorker,
|
|
1721
1828
|
sendMessagePortToRendererProcess,
|
|
1722
1829
|
sendMessagePortToSearchProcess,
|
|
@@ -1776,7 +1883,7 @@ const toMenuItem = folder => {
|
|
|
1776
1883
|
const label = getTitle(homeDir, folder);
|
|
1777
1884
|
return {
|
|
1778
1885
|
label,
|
|
1779
|
-
flags: None
|
|
1886
|
+
flags: None,
|
|
1780
1887
|
command: 'Workspace.setPath',
|
|
1781
1888
|
args: [folder]
|
|
1782
1889
|
};
|
|
@@ -1792,12 +1899,12 @@ const getMenuEntries$9 = async () => {
|
|
|
1792
1899
|
items.push({
|
|
1793
1900
|
id: 'more',
|
|
1794
1901
|
label: moreDot(),
|
|
1795
|
-
flags: None
|
|
1902
|
+
flags: None,
|
|
1796
1903
|
command: 'QuickPick.showRecent'
|
|
1797
1904
|
}, menuEntrySeparator, {
|
|
1798
1905
|
id: 'clearRecentlyOpened',
|
|
1799
1906
|
label: clearRecentlyOpened(),
|
|
1800
|
-
flags: None
|
|
1907
|
+
flags: None,
|
|
1801
1908
|
command: 'RecentlyOpened.clearRecentlyOpened'
|
|
1802
1909
|
});
|
|
1803
1910
|
return items;
|
|
@@ -1825,17 +1932,17 @@ const getMenuEntries$7 = () => {
|
|
|
1825
1932
|
return [{
|
|
1826
1933
|
id: 'selectAll',
|
|
1827
1934
|
label: selectAll(),
|
|
1828
|
-
flags: None
|
|
1935
|
+
flags: None,
|
|
1829
1936
|
command: 'Editor.selectAll'
|
|
1830
1937
|
}, {
|
|
1831
1938
|
id: 'copyLineUp',
|
|
1832
1939
|
label: copyLineUp(),
|
|
1833
|
-
flags: None
|
|
1940
|
+
flags: None,
|
|
1834
1941
|
command: 'Editor.copyLineUp'
|
|
1835
1942
|
}, {
|
|
1836
1943
|
id: 'copyLineDown',
|
|
1837
1944
|
label: copyLineDown(),
|
|
1838
|
-
flags: None
|
|
1945
|
+
flags: None,
|
|
1839
1946
|
command: 'Editor.copyLineDown'
|
|
1840
1947
|
}, {
|
|
1841
1948
|
id: 'moveLineUp',
|
|
@@ -1871,7 +1978,7 @@ const getMenuEntries$6 = () => {
|
|
|
1871
1978
|
return [{
|
|
1872
1979
|
id: 'newTerminal',
|
|
1873
1980
|
label: newTerminal(),
|
|
1874
|
-
flags: None
|
|
1981
|
+
flags: None,
|
|
1875
1982
|
command: 'Layout.togglePanel',
|
|
1876
1983
|
args: ['Terminal']
|
|
1877
1984
|
}];
|
|
@@ -1960,27 +2067,27 @@ const getMenuEntries$4 = () => {
|
|
|
1960
2067
|
return [{
|
|
1961
2068
|
id: File$2,
|
|
1962
2069
|
label: file(),
|
|
1963
|
-
flags: None
|
|
2070
|
+
flags: None
|
|
1964
2071
|
}, {
|
|
1965
2072
|
id: Edit$1,
|
|
1966
2073
|
label: edit(),
|
|
1967
|
-
flags: None
|
|
2074
|
+
flags: None
|
|
1968
2075
|
}, {
|
|
1969
2076
|
id: Selection$1,
|
|
1970
2077
|
label: selection(),
|
|
1971
|
-
flags: None
|
|
2078
|
+
flags: None
|
|
1972
2079
|
}, {
|
|
1973
2080
|
id: View$1,
|
|
1974
2081
|
label: view(),
|
|
1975
|
-
flags: None
|
|
2082
|
+
flags: None
|
|
1976
2083
|
}, {
|
|
1977
2084
|
id: Go$1,
|
|
1978
2085
|
label: go(),
|
|
1979
|
-
flags: None
|
|
2086
|
+
flags: None
|
|
1980
2087
|
}, {
|
|
1981
2088
|
id: Help$1,
|
|
1982
2089
|
label: help(),
|
|
1983
|
-
flags: None
|
|
2090
|
+
flags: None
|
|
1984
2091
|
}];
|
|
1985
2092
|
};
|
|
1986
2093
|
|
|
@@ -2073,8 +2180,8 @@ const getTitleBarButtons = (platform, controlsOverlayEnabled, titleBarStyleCusto
|
|
|
2073
2180
|
};
|
|
2074
2181
|
|
|
2075
2182
|
const MaskIconCheck = 'MaskIconCheck';
|
|
2076
|
-
const Menu
|
|
2077
|
-
const MenuItem
|
|
2183
|
+
const Menu = 'Menu';
|
|
2184
|
+
const MenuItem = 'MenuItem';
|
|
2078
2185
|
const MenuItemCheckMark = 'MenuItemCheckMark';
|
|
2079
2186
|
const MenuItemCheckmarkIcon = 'MenuItemCheckmarkIcon';
|
|
2080
2187
|
const MenuItemFocused = 'MenuItemFocused';
|
|
@@ -2092,24 +2199,11 @@ const TitleBarTopLevelEntry = 'TitleBarTopLevelEntry';
|
|
|
2092
2199
|
const TitleBarTopLevelEntryLabel = 'TitleBarTopLevelEntryLabel';
|
|
2093
2200
|
const Viewlet = 'Viewlet';
|
|
2094
2201
|
|
|
2095
|
-
const Menu = 'menu';
|
|
2096
|
-
const MenuBar = 'menubar';
|
|
2097
|
-
const MenuItem = 'menuitem';
|
|
2098
|
-
const MenuItemCheckBox = 'menuitemcheckbox';
|
|
2099
|
-
const None = 'none';
|
|
2100
|
-
const Separator = 'separator';
|
|
2101
|
-
|
|
2102
|
-
const Button = 1;
|
|
2103
|
-
const Div = 4;
|
|
2104
|
-
const I = 16;
|
|
2105
|
-
const Img = 17;
|
|
2106
|
-
const Span = 8;
|
|
2107
|
-
|
|
2108
2202
|
const getIconVirtualDom = (icon, type = Div) => {
|
|
2109
2203
|
return {
|
|
2110
2204
|
type,
|
|
2111
2205
|
className: `MaskIcon MaskIcon${icon}`,
|
|
2112
|
-
role: None,
|
|
2206
|
+
role: None$1,
|
|
2113
2207
|
childCount: 0
|
|
2114
2208
|
};
|
|
2115
2209
|
};
|
|
@@ -2140,12 +2234,13 @@ const getTitleBarButtonsVirtualDom = buttons => {
|
|
|
2140
2234
|
return dom;
|
|
2141
2235
|
};
|
|
2142
2236
|
|
|
2237
|
+
const parentNode = {
|
|
2238
|
+
type: Div,
|
|
2239
|
+
className: mergeClassNames(Viewlet, TitleBarIcon),
|
|
2240
|
+
childCount: 1
|
|
2241
|
+
};
|
|
2143
2242
|
const getTitleBarIconVirtualDom = iconSrc => {
|
|
2144
|
-
return [{
|
|
2145
|
-
type: Div,
|
|
2146
|
-
className: mergeClassNames(Viewlet, TitleBarIcon),
|
|
2147
|
-
childCount: 1
|
|
2148
|
-
}, {
|
|
2243
|
+
return [parentNode, {
|
|
2149
2244
|
type: Img,
|
|
2150
2245
|
className: TitleBarIconIcon,
|
|
2151
2246
|
src: iconSrc,
|
|
@@ -2154,16 +2249,16 @@ const getTitleBarIconVirtualDom = iconSrc => {
|
|
|
2154
2249
|
}];
|
|
2155
2250
|
};
|
|
2156
2251
|
|
|
2157
|
-
const HandleClick =
|
|
2158
|
-
const HandleClickMinimize =
|
|
2159
|
-
const HandleClickToggleClose =
|
|
2160
|
-
const HandleClickToggleMaximize =
|
|
2161
|
-
const HandleFocusIn =
|
|
2162
|
-
const HandleFocusOut =
|
|
2163
|
-
const HandlePointerOut =
|
|
2164
|
-
const HandlePointerOver =
|
|
2165
|
-
const HandleMenuClick =
|
|
2166
|
-
const HandleMenuMouseOver =
|
|
2252
|
+
const HandleClick = 1;
|
|
2253
|
+
const HandleClickMinimize = 2;
|
|
2254
|
+
const HandleClickToggleClose = 3;
|
|
2255
|
+
const HandleClickToggleMaximize = 4;
|
|
2256
|
+
const HandleFocusIn = 5;
|
|
2257
|
+
const HandleFocusOut = 6;
|
|
2258
|
+
const HandlePointerOut = 7;
|
|
2259
|
+
const HandlePointerOver = 8;
|
|
2260
|
+
const HandleMenuClick = 9;
|
|
2261
|
+
const HandleMenuMouseOver = 10;
|
|
2167
2262
|
|
|
2168
2263
|
const getItemVirtualDom = item => {
|
|
2169
2264
|
// @ts-ignore
|
|
@@ -2173,13 +2268,14 @@ const getItemVirtualDom = item => {
|
|
|
2173
2268
|
isOpen,
|
|
2174
2269
|
isFocused
|
|
2175
2270
|
} = item;
|
|
2271
|
+
// TODO avoid mutation
|
|
2176
2272
|
const dom = [];
|
|
2177
2273
|
dom.push({
|
|
2178
2274
|
type: Div,
|
|
2179
2275
|
className: TitleBarTopLevelEntry,
|
|
2180
2276
|
ariaHasPopup: true,
|
|
2181
2277
|
ariaExpanded: isOpen,
|
|
2182
|
-
role: MenuItem,
|
|
2278
|
+
role: MenuItem$1,
|
|
2183
2279
|
childCount: 1,
|
|
2184
2280
|
ariaKeyShortcuts: keyboardShortCut
|
|
2185
2281
|
});
|
|
@@ -2252,7 +2348,8 @@ const handleClickToggleMaximize = async state => {
|
|
|
2252
2348
|
return state;
|
|
2253
2349
|
};
|
|
2254
2350
|
|
|
2255
|
-
|
|
2351
|
+
// TODO use button name property
|
|
2352
|
+
const handleClick$1 = async (state, className) => {
|
|
2256
2353
|
if (className.includes('Minimize')) {
|
|
2257
2354
|
return handleClickMinimize(state);
|
|
2258
2355
|
}
|
|
@@ -2298,7 +2395,7 @@ const getMenuHeight = items => {
|
|
|
2298
2395
|
let height = CONTEXT_MENU_PADDING;
|
|
2299
2396
|
for (const item of items) {
|
|
2300
2397
|
switch (item.flags) {
|
|
2301
|
-
case Separator
|
|
2398
|
+
case Separator:
|
|
2302
2399
|
height += CONTEXT_MENU_SEPARATOR_HEIGHT;
|
|
2303
2400
|
break;
|
|
2304
2401
|
default:
|
|
@@ -2354,7 +2451,7 @@ const getIndexToFocusPrevious = menu => {
|
|
|
2354
2451
|
};
|
|
2355
2452
|
const canBeFocused = item => {
|
|
2356
2453
|
switch (item.flags) {
|
|
2357
|
-
case Separator
|
|
2454
|
+
case Separator:
|
|
2358
2455
|
case Disabled:
|
|
2359
2456
|
return false;
|
|
2360
2457
|
default:
|
|
@@ -2487,7 +2584,7 @@ const handlePointerOut = (state, clientX, clientY) => {
|
|
|
2487
2584
|
if (index === -1) {
|
|
2488
2585
|
return state;
|
|
2489
2586
|
}
|
|
2490
|
-
return handleMouseOut(state
|
|
2587
|
+
return handleMouseOut(state);
|
|
2491
2588
|
};
|
|
2492
2589
|
|
|
2493
2590
|
const handleMouseOverMenuClosed = (state, index) => {
|
|
@@ -2511,74 +2608,46 @@ const handlePointerOver = (state, clientX, clientY) => {
|
|
|
2511
2608
|
return handleMouseOver(state, index);
|
|
2512
2609
|
};
|
|
2513
2610
|
|
|
2514
|
-
const
|
|
2515
|
-
return `${fontWeight} ${fontSize}px ${fontFamily}`;
|
|
2516
|
-
};
|
|
2517
|
-
|
|
2518
|
-
const createTextMeasureContext = () => {
|
|
2611
|
+
const createTextMeasureContext = (letterSpacing, font) => {
|
|
2519
2612
|
const canvas = new OffscreenCanvas(0, 0);
|
|
2520
2613
|
const ctx = canvas.getContext('2d');
|
|
2521
2614
|
if (!ctx) {
|
|
2522
2615
|
throw new Error('Failed to get canvas context 2d');
|
|
2523
2616
|
}
|
|
2617
|
+
ctx.letterSpacing = letterSpacing;
|
|
2618
|
+
ctx.font = font;
|
|
2524
2619
|
return ctx;
|
|
2525
2620
|
};
|
|
2526
2621
|
|
|
2527
|
-
const
|
|
2528
|
-
|
|
2529
|
-
};
|
|
2530
|
-
const getOrCreate = createCtx => {
|
|
2531
|
-
if (state.ctx) {
|
|
2532
|
-
return state.ctx;
|
|
2533
|
-
}
|
|
2534
|
-
state.ctx = createCtx();
|
|
2535
|
-
return state.ctx;
|
|
2536
|
-
};
|
|
2537
|
-
|
|
2538
|
-
const getContext = () => {
|
|
2539
|
-
const ctx = getOrCreate(createTextMeasureContext);
|
|
2540
|
-
return ctx;
|
|
2541
|
-
};
|
|
2542
|
-
|
|
2543
|
-
const px = value => {
|
|
2544
|
-
return `${value}px`;
|
|
2622
|
+
const getFontString = (fontWeight, fontSize, fontFamily) => {
|
|
2623
|
+
return `${fontWeight} ${fontSize}px ${fontFamily}`;
|
|
2545
2624
|
};
|
|
2546
2625
|
|
|
2547
|
-
const
|
|
2548
|
-
return px(letterSpacing);
|
|
2549
|
-
};
|
|
2550
|
-
const measureTextWidth = (text, fontWeight, fontSize, fontFamily, letterSpacing, isMonoSpaceFont, charWidth) => {
|
|
2551
|
-
string(text);
|
|
2552
|
-
number(fontWeight);
|
|
2553
|
-
number(fontSize);
|
|
2554
|
-
string(fontFamily);
|
|
2555
|
-
boolean(isMonoSpaceFont);
|
|
2556
|
-
number(charWidth);
|
|
2626
|
+
const measureTextWidths = (texts, fontWeight, fontSize, fontFamily, letterSpacing) => {
|
|
2557
2627
|
if (typeof letterSpacing !== 'number') {
|
|
2558
2628
|
throw new TypeError('letterSpacing must be of type number');
|
|
2559
2629
|
}
|
|
2560
|
-
const letterSpacingString =
|
|
2630
|
+
const letterSpacingString = px(letterSpacing);
|
|
2561
2631
|
const fontString = getFontString(fontWeight, fontSize, fontFamily);
|
|
2562
|
-
const ctx =
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
}
|
|
2571
|
-
|
|
2572
|
-
const measureTitleBarEntryWidth = (label, fontWeight, fontSize, fontFamily, letterSpacing) => {
|
|
2573
|
-
const isMonospaceFont = false;
|
|
2574
|
-
const charWidth = 0;
|
|
2575
|
-
return measureTextWidth(label, fontWeight, fontSize, fontFamily, letterSpacing, isMonospaceFont, charWidth);
|
|
2632
|
+
const ctx = createTextMeasureContext(letterSpacingString, fontString);
|
|
2633
|
+
const widths = [];
|
|
2634
|
+
for (const text of texts) {
|
|
2635
|
+
const metrics = ctx.measureText(text);
|
|
2636
|
+
const {
|
|
2637
|
+
width
|
|
2638
|
+
} = metrics;
|
|
2639
|
+
widths.push(width);
|
|
2640
|
+
}
|
|
2641
|
+
return widths;
|
|
2576
2642
|
};
|
|
2577
2643
|
|
|
2578
2644
|
const addWidths = (entries, labelPadding, fontWeight, fontSize, fontFamily, letterSpacing) => {
|
|
2645
|
+
const labels = entries.map(entry => entry.label);
|
|
2646
|
+
const widths = measureTextWidths(labels, fontWeight, fontSize, fontFamily, letterSpacing);
|
|
2579
2647
|
const withWidths = [];
|
|
2580
|
-
for (
|
|
2581
|
-
const
|
|
2648
|
+
for (let i = 0; i < entries.length; i++) {
|
|
2649
|
+
const entry = entries[i];
|
|
2650
|
+
const textWidth = widths[i];
|
|
2582
2651
|
const width = textWidth + labelPadding * 2;
|
|
2583
2652
|
withWidths.push({
|
|
2584
2653
|
...entry,
|
|
@@ -2658,7 +2727,7 @@ const renderFocusedIndex = (oldState, newState) => {
|
|
|
2658
2727
|
|
|
2659
2728
|
const checkboxChecked = {
|
|
2660
2729
|
type: Div,
|
|
2661
|
-
className: mergeClassNames(MenuItem
|
|
2730
|
+
className: mergeClassNames(MenuItem, MenuItemCheckMark),
|
|
2662
2731
|
role: MenuItemCheckBox,
|
|
2663
2732
|
ariaChecked: true,
|
|
2664
2733
|
tabIndex: -1,
|
|
@@ -2966,21 +3035,25 @@ const parseKey = rawKey => {
|
|
|
2966
3035
|
};
|
|
2967
3036
|
};
|
|
2968
3037
|
|
|
3038
|
+
const classNameFocused = mergeClassNames(MenuItem, MenuItemFocused);
|
|
3039
|
+
const getMenuItemClassName = isFocused => {
|
|
3040
|
+
if (isFocused) {
|
|
3041
|
+
return classNameFocused;
|
|
3042
|
+
}
|
|
3043
|
+
return MenuItem;
|
|
3044
|
+
};
|
|
2969
3045
|
const getMenuItemDefaultDom = menuItem => {
|
|
2970
3046
|
const {
|
|
2971
3047
|
label,
|
|
2972
3048
|
isFocused,
|
|
2973
3049
|
key
|
|
2974
3050
|
} = menuItem;
|
|
2975
|
-
|
|
2976
|
-
if (isFocused) {
|
|
2977
|
-
className += ' ' + MenuItemFocused;
|
|
2978
|
-
}
|
|
3051
|
+
const className = getMenuItemClassName(isFocused);
|
|
2979
3052
|
const dom = [];
|
|
2980
3053
|
dom.push({
|
|
2981
3054
|
type: Div,
|
|
2982
3055
|
className,
|
|
2983
|
-
role: MenuItem,
|
|
3056
|
+
role: MenuItem$1,
|
|
2984
3057
|
tabIndex: -1,
|
|
2985
3058
|
childCount: 1
|
|
2986
3059
|
}, text(label));
|
|
@@ -2999,8 +3072,8 @@ const getMenuItemDefaultDom = menuItem => {
|
|
|
2999
3072
|
|
|
3000
3073
|
const disabled = {
|
|
3001
3074
|
type: Div,
|
|
3002
|
-
className: MenuItem
|
|
3003
|
-
role: MenuItem,
|
|
3075
|
+
className: MenuItem,
|
|
3076
|
+
role: MenuItem$1,
|
|
3004
3077
|
tabIndex: -1,
|
|
3005
3078
|
disabled: true,
|
|
3006
3079
|
childCount: 1
|
|
@@ -3019,7 +3092,7 @@ const getMenuItemsNoopDom = () => {
|
|
|
3019
3092
|
const separator = {
|
|
3020
3093
|
type: Div,
|
|
3021
3094
|
className: MenuItemSeparator,
|
|
3022
|
-
role: Separator,
|
|
3095
|
+
role: Separator$1,
|
|
3023
3096
|
childCount: 1
|
|
3024
3097
|
};
|
|
3025
3098
|
const separatorLine = {
|
|
@@ -3043,7 +3116,7 @@ const getMenuItemSubMenuDom = menuItem => {
|
|
|
3043
3116
|
isExpanded,
|
|
3044
3117
|
level
|
|
3045
3118
|
} = menuItem;
|
|
3046
|
-
let className = MenuItem
|
|
3119
|
+
let className = MenuItem;
|
|
3047
3120
|
className += ' ' + MenuItemSubMenu;
|
|
3048
3121
|
if (isFocused) {
|
|
3049
3122
|
className += ' ' + MenuItemFocused;
|
|
@@ -3051,7 +3124,7 @@ const getMenuItemSubMenuDom = menuItem => {
|
|
|
3051
3124
|
return [{
|
|
3052
3125
|
type: Div,
|
|
3053
3126
|
className,
|
|
3054
|
-
role: MenuItem,
|
|
3127
|
+
role: MenuItem$1,
|
|
3055
3128
|
tabIndex: -1,
|
|
3056
3129
|
ariaHasPopup: true,
|
|
3057
3130
|
ariaExpanded: isExpanded,
|
|
@@ -3062,7 +3135,7 @@ const getMenuItemSubMenuDom = menuItem => {
|
|
|
3062
3135
|
|
|
3063
3136
|
const checkboxUnchecked = {
|
|
3064
3137
|
type: Div,
|
|
3065
|
-
className: MenuItem
|
|
3138
|
+
className: MenuItem,
|
|
3066
3139
|
role: MenuItemCheckBox,
|
|
3067
3140
|
ariaChecked: false,
|
|
3068
3141
|
tabIndex: -1,
|
|
@@ -3077,11 +3150,11 @@ const getMenuItemUncheckedDom = menuItem => {
|
|
|
3077
3150
|
|
|
3078
3151
|
const getMenuItemRenderer = flags => {
|
|
3079
3152
|
switch (flags) {
|
|
3080
|
-
case None
|
|
3153
|
+
case None:
|
|
3081
3154
|
case RestoreFocus:
|
|
3082
3155
|
case Ignore:
|
|
3083
3156
|
return getMenuItemDefaultDom;
|
|
3084
|
-
case Separator
|
|
3157
|
+
case Separator:
|
|
3085
3158
|
return getMenuItemSeparatorDom;
|
|
3086
3159
|
case Checked:
|
|
3087
3160
|
return getMenuItemCheckedDom;
|
|
@@ -3107,8 +3180,8 @@ const getMenuItemVirtualDom = menuItem => {
|
|
|
3107
3180
|
const getMenuVirtualDom = menuItems => {
|
|
3108
3181
|
const dom = [{
|
|
3109
3182
|
type: Div,
|
|
3110
|
-
className: Menu
|
|
3111
|
-
role: Menu,
|
|
3183
|
+
className: Menu,
|
|
3184
|
+
role: Menu$1,
|
|
3112
3185
|
tabIndex: -1,
|
|
3113
3186
|
childCount: menuItems.length
|
|
3114
3187
|
}, ...menuItems.flatMap(getMenuItemVirtualDom)];
|
|
@@ -3240,10 +3313,6 @@ const saveState = uid => {
|
|
|
3240
3313
|
};
|
|
3241
3314
|
};
|
|
3242
3315
|
|
|
3243
|
-
const terminate = () => {
|
|
3244
|
-
globalThis.close();
|
|
3245
|
-
};
|
|
3246
|
-
|
|
3247
3316
|
const create = (id, uri, x, y, width, height) => {
|
|
3248
3317
|
const state = {
|
|
3249
3318
|
uid: id,
|
|
@@ -3260,7 +3329,8 @@ const create = (id, uri, x, y, width, height) => {
|
|
|
3260
3329
|
x,
|
|
3261
3330
|
y,
|
|
3262
3331
|
width,
|
|
3263
|
-
height
|
|
3332
|
+
height,
|
|
3333
|
+
iconWidth: 30
|
|
3264
3334
|
};
|
|
3265
3335
|
set$3(id, state, state);
|
|
3266
3336
|
return state;
|
|
@@ -3377,10 +3447,7 @@ const handleFocusOut = async state => {
|
|
|
3377
3447
|
return state;
|
|
3378
3448
|
};
|
|
3379
3449
|
|
|
3380
|
-
|
|
3381
|
-
* @param {boolean} focus
|
|
3382
|
-
*/
|
|
3383
|
-
const openMenu = (state, focus) => {
|
|
3450
|
+
const openMenu = async (state, focus) => {
|
|
3384
3451
|
const {
|
|
3385
3452
|
focusedIndex
|
|
3386
3453
|
} = state;
|
|
@@ -3433,7 +3500,7 @@ const closeOneMenu = state => {
|
|
|
3433
3500
|
};
|
|
3434
3501
|
};
|
|
3435
3502
|
|
|
3436
|
-
const handleKeyArrowLeftMenuOpen = state => {
|
|
3503
|
+
const handleKeyArrowLeftMenuOpen = async state => {
|
|
3437
3504
|
const {
|
|
3438
3505
|
menus
|
|
3439
3506
|
} = state;
|
|
@@ -3650,7 +3717,7 @@ const handleMenuClick = async (state, level, index) => {
|
|
|
3650
3717
|
return state;
|
|
3651
3718
|
}
|
|
3652
3719
|
switch (item.flags) {
|
|
3653
|
-
case None
|
|
3720
|
+
case None:
|
|
3654
3721
|
return selectIndexNone(state, item);
|
|
3655
3722
|
case SubMenu:
|
|
3656
3723
|
return selectIndexSubMenu(state, menu, index);
|
|
@@ -3738,7 +3805,7 @@ const handleMenuMouseOver = async (state, level, index) => {
|
|
|
3738
3805
|
};
|
|
3739
3806
|
};
|
|
3740
3807
|
|
|
3741
|
-
const toggleMenu = state => {
|
|
3808
|
+
const toggleMenu = async state => {
|
|
3742
3809
|
const {
|
|
3743
3810
|
isMenuOpen
|
|
3744
3811
|
} = state;
|
|
@@ -3748,21 +3815,6 @@ const toggleMenu = state => {
|
|
|
3748
3815
|
return openMenu(state, /* focus */false);
|
|
3749
3816
|
};
|
|
3750
3817
|
|
|
3751
|
-
const wrapCommand = fn => {
|
|
3752
|
-
const wrapped = async (uid, ...args) => {
|
|
3753
|
-
const {
|
|
3754
|
-
newState
|
|
3755
|
-
} = get$1(uid);
|
|
3756
|
-
const newerState = await fn(newState, ...args);
|
|
3757
|
-
if (newState === newerState) {
|
|
3758
|
-
return;
|
|
3759
|
-
}
|
|
3760
|
-
const latest = get$1(uid);
|
|
3761
|
-
set$3(uid, latest.oldState, newerState);
|
|
3762
|
-
};
|
|
3763
|
-
return wrapped;
|
|
3764
|
-
};
|
|
3765
|
-
|
|
3766
3818
|
const commandMap = {
|
|
3767
3819
|
'TitleBar.getButtonsVirtualDom': getTitleBarButtonsVirtualDom,
|
|
3768
3820
|
'TitleBar.getIconVirtualDom': getTitleBarIconVirtualDom,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/title-bar-worker",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Title Bar Worker",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,5 +9,8 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"author": "Lvce Editor",
|
|
11
11
|
"type": "module",
|
|
12
|
-
"main": "dist/titleBarWorkerMain.js"
|
|
12
|
+
"main": "dist/titleBarWorkerMain.js",
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@lvce-editor/viewlet-registry": "^1.4.0"
|
|
15
|
+
}
|
|
13
16
|
}
|