@workbench-kit/shell-react 0.0.2-prototype.0.2.32 → 0.0.2-prototype.0.2.34
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/README.md +32 -0
- package/package.json +9 -9
- package/src/commands/use-command-descriptors.ts +7 -3
- package/src/commands/use-extension-registry-command-descriptors.ts +23 -6
- package/src/devtools/use-workbench-devtools-snapshot.ts +39 -14
- package/src/devtools/workbench-devtools-snapshot.ts +32 -13
- package/src/editor/area.tsx +3 -2
- package/src/editor/state-storage.ts +31 -0
- package/src/editor/tab-context-menu.ts +8 -8
- package/src/editor/use-editor.ts +6 -6
- package/src/explorer/context-menu.ts +8 -4
- package/src/explorer/view.tsx +4 -3
- package/src/extensions/canonical-extension-descriptions.ts +58 -0
- package/src/extensions/context-menu.ts +9 -6
- package/src/extensions/extension-enablement-context.ts +15 -0
- package/src/extensions/extension-enablement-controller.ts +453 -0
- package/src/extensions/management-model.ts +111 -47
- package/src/extensions/theme-selection-protection.ts +98 -0
- package/src/extensions/uninstall-eligibility.ts +103 -0
- package/src/extensions/use-extension-management.ts +151 -67
- package/src/extensions/view.tsx +4 -0
- package/src/field-remap/chrome-labels.ts +87 -2
- package/src/field-remap/convert-palette.tsx +164 -18
- package/src/field-remap/demo.tsx +48 -3
- package/src/field-remap/detail-panel.tsx +6 -5
- package/src/field-remap/flow.tsx +341 -155
- package/src/field-remap/history.ts +99 -0
- package/src/field-remap/index.ts +9 -1
- package/src/field-remap/panel.tsx +388 -97
- package/src/field-remap/preview-controller.ts +122 -0
- package/src/field-remap/preview.tsx +171 -0
- package/src/field-remap/view.css +154 -2
- package/src/index.ts +16 -1
- package/src/management/keybinding-overrides-storage.ts +28 -0
- package/src/management/preference-settings-storage.ts +28 -0
- package/src/management/settings.tsx +2 -0
- package/src/management/use-command-management.ts +31 -26
- package/src/management/use-keybinding-management.ts +25 -12
- package/src/shell/focused-extension-services.ts +138 -0
- package/src/shell/host-shell.tsx +13 -10
- package/src/shell/persistence-diagnostic-context.ts +11 -0
- package/src/shell/provider.tsx +373 -69
- package/src/shell/settings.tsx +25 -16
- package/src/shell/shell.tsx +119 -78
- package/src/shell/view-host.tsx +23 -22
- package/src/storage/local-json-storage.ts +43 -29
- package/src/storage/persistence-diagnostics.ts +72 -0
- package/src/workbench/appearance-storage.ts +28 -0
- package/src/workbench/command-host.tsx +19 -22
- package/src/workbench/command-palette.ts +14 -13
- package/src/workbench/layout-storage.ts +52 -5
- package/src/workbench/use-persisted-appearance.ts +38 -12
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { MappingEdge, MappingOperator } from '@workbench-kit/field-remap';
|
|
2
|
+
|
|
3
|
+
export interface FieldRemapHistorySnapshot {
|
|
4
|
+
readonly edges: readonly MappingEdge[];
|
|
5
|
+
readonly operators: readonly MappingOperator[];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface FieldRemapHistoryState {
|
|
9
|
+
readonly past: readonly FieldRemapHistorySnapshot[];
|
|
10
|
+
readonly future: readonly FieldRemapHistorySnapshot[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const FIELD_REMAP_HISTORY_LIMIT = 100;
|
|
14
|
+
|
|
15
|
+
export function createFieldRemapHistorySnapshot(
|
|
16
|
+
edges: readonly MappingEdge[],
|
|
17
|
+
operators: readonly MappingOperator[],
|
|
18
|
+
): FieldRemapHistorySnapshot {
|
|
19
|
+
return Object.freeze({
|
|
20
|
+
edges: Object.freeze([...edges]),
|
|
21
|
+
operators: Object.freeze([...operators]),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function createFieldRemapHistoryState(): FieldRemapHistoryState {
|
|
26
|
+
return { past: [], future: [] };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function sameItems<T>(left: readonly T[], right: readonly T[]): boolean {
|
|
30
|
+
return left.length === right.length && left.every((item, index) => item === right[index]);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function areFieldRemapHistorySnapshotsEqual(
|
|
34
|
+
left: FieldRemapHistorySnapshot,
|
|
35
|
+
right: FieldRemapHistorySnapshot,
|
|
36
|
+
): boolean {
|
|
37
|
+
return sameItems(left.edges, right.edges) && sameItems(left.operators, right.operators);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function appendBounded(
|
|
41
|
+
snapshots: readonly FieldRemapHistorySnapshot[],
|
|
42
|
+
snapshot: FieldRemapHistorySnapshot,
|
|
43
|
+
): readonly FieldRemapHistorySnapshot[] {
|
|
44
|
+
return [...snapshots.slice(-(FIELD_REMAP_HISTORY_LIMIT - 1)), snapshot];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function recordFieldRemapHistory(
|
|
48
|
+
state: FieldRemapHistoryState,
|
|
49
|
+
current: FieldRemapHistorySnapshot,
|
|
50
|
+
next: FieldRemapHistorySnapshot,
|
|
51
|
+
): FieldRemapHistoryState {
|
|
52
|
+
if (areFieldRemapHistorySnapshotsEqual(current, next)) {
|
|
53
|
+
return state;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
past: appendBounded(
|
|
57
|
+
state.past,
|
|
58
|
+
createFieldRemapHistorySnapshot(current.edges, current.operators),
|
|
59
|
+
),
|
|
60
|
+
future: [],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function undoFieldRemapHistory(
|
|
65
|
+
state: FieldRemapHistoryState,
|
|
66
|
+
current: FieldRemapHistorySnapshot,
|
|
67
|
+
): { readonly state: FieldRemapHistoryState; readonly snapshot: FieldRemapHistorySnapshot } | null {
|
|
68
|
+
const snapshot = state.past[state.past.length - 1];
|
|
69
|
+
if (!snapshot) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
state: {
|
|
74
|
+
past: state.past.slice(0, -1),
|
|
75
|
+
future: [createFieldRemapHistorySnapshot(current.edges, current.operators), ...state.future],
|
|
76
|
+
},
|
|
77
|
+
snapshot,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function redoFieldRemapHistory(
|
|
82
|
+
state: FieldRemapHistoryState,
|
|
83
|
+
current: FieldRemapHistorySnapshot,
|
|
84
|
+
): { readonly state: FieldRemapHistoryState; readonly snapshot: FieldRemapHistorySnapshot } | null {
|
|
85
|
+
const snapshot = state.future[0];
|
|
86
|
+
if (!snapshot) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
state: {
|
|
91
|
+
past: appendBounded(
|
|
92
|
+
state.past,
|
|
93
|
+
createFieldRemapHistorySnapshot(current.edges, current.operators),
|
|
94
|
+
),
|
|
95
|
+
future: state.future.slice(1),
|
|
96
|
+
},
|
|
97
|
+
snapshot,
|
|
98
|
+
};
|
|
99
|
+
}
|
package/src/field-remap/index.ts
CHANGED
|
@@ -6,12 +6,20 @@
|
|
|
6
6
|
* (Flow also side-imports the same stylesheet).
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
export {
|
|
9
|
+
export {
|
|
10
|
+
FieldRemapPanel,
|
|
11
|
+
type FieldRemapHistoryActions,
|
|
12
|
+
type FieldRemapHistoryAvailability,
|
|
13
|
+
type FieldRemapHistoryOwner,
|
|
14
|
+
type FieldRemapHistorySnapshot,
|
|
15
|
+
type FieldRemapPanelProps,
|
|
16
|
+
} from './panel.js';
|
|
10
17
|
export {
|
|
11
18
|
FieldRemapFlowMapper,
|
|
12
19
|
type FieldRemapFlowActions,
|
|
13
20
|
type FieldRemapFlowMapperProps,
|
|
14
21
|
} from './flow.js';
|
|
22
|
+
export type { FieldRemapPreviewState } from './preview.js';
|
|
15
23
|
export {
|
|
16
24
|
defaultFieldRemapChromeLabels,
|
|
17
25
|
fieldRemapChromeLabelKeys,
|