@mdwrk/extension-language-pack-studio 1.0.3

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.
Files changed (43) hide show
  1. package/README.md +11 -0
  2. package/dist/components/LanguagePackStudioSettingsPanel.d.ts +10 -0
  3. package/dist/components/LanguagePackStudioSettingsPanel.d.ts.map +1 -0
  4. package/dist/components/LanguagePackStudioSettingsPanel.js +10 -0
  5. package/dist/components/LanguagePackStudioSettingsPanel.js.map +1 -0
  6. package/dist/components/LanguagePackStudioView.d.ts +14 -0
  7. package/dist/components/LanguagePackStudioView.d.ts.map +1 -0
  8. package/dist/components/LanguagePackStudioView.js +140 -0
  9. package/dist/components/LanguagePackStudioView.js.map +1 -0
  10. package/dist/constants.d.ts +5 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +5 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/createLanguagePackStudioBundledEntry.d.ts +4 -0
  15. package/dist/createLanguagePackStudioBundledEntry.d.ts.map +1 -0
  16. package/dist/createLanguagePackStudioBundledEntry.js +59 -0
  17. package/dist/createLanguagePackStudioBundledEntry.js.map +1 -0
  18. package/dist/i18n.d.ts +16 -0
  19. package/dist/i18n.d.ts.map +1 -0
  20. package/dist/i18n.js +24 -0
  21. package/dist/i18n.js.map +1 -0
  22. package/dist/index.d.ts +7 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +7 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/locales/en.d.ts +3 -0
  27. package/dist/locales/en.d.ts.map +1 -0
  28. package/dist/locales/en.js +16 -0
  29. package/dist/locales/en.js.map +1 -0
  30. package/dist/manifest.d.ts +3 -0
  31. package/dist/manifest.d.ts.map +1 -0
  32. package/dist/manifest.js +80 -0
  33. package/dist/manifest.js.map +1 -0
  34. package/dist/types.d.ts +40 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +2 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/version.d.ts +2 -0
  39. package/dist/version.d.ts.map +1 -0
  40. package/dist/version.js +2 -0
  41. package/dist/version.js.map +1 -0
  42. package/package.json +56 -0
  43. package/sample-packs/de.language-pack.json +19 -0
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @mdwrk/extension-language-pack-studio
2
+
3
+ Bundled language-pack studio extension for Markdown Workspace.
4
+
5
+ ## Capabilities
6
+
7
+ - pane-first language-pack management for built-in and installed packs
8
+ - settings-menu summary content that opens the full workspace pane
9
+ - enable / disable all language packs including built-ins
10
+ - IndexedDB-backed persistence for installed packs and built-in disablement
11
+ - single-pane, split-screen, and collapsible workspace-sidebar layouts
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import type { I18nLabel } from "@mdwrk/extension-manifest";
3
+ import type { LanguagePackStudioController } from "../types.js";
4
+ export interface LanguagePackStudioSettingsPanelProps {
5
+ readonly controller: LanguagePackStudioController;
6
+ readonly open: () => Promise<void>;
7
+ readonly formatLabel: (label: I18nLabel | string) => string;
8
+ }
9
+ export declare const LanguagePackStudioSettingsPanel: React.FC<LanguagePackStudioSettingsPanelProps>;
10
+ //# sourceMappingURL=LanguagePackStudioSettingsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguagePackStudioSettingsPanel.d.ts","sourceRoot":"","sources":["../../src/components/LanguagePackStudioSettingsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC;CAC7D;AAED,eAAO,MAAM,+BAA+B,EAAE,KAAK,CAAC,EAAE,CAAC,oCAAoC,CAqC1F,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { useSyncExternalStore } from "react";
4
+ export const LanguagePackStudioSettingsPanel = ({ controller, open, formatLabel, }) => {
5
+ const snapshot = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);
6
+ const builtIns = snapshot.packs.filter((pack) => pack.source === "built-in").length;
7
+ const installed = snapshot.packs.filter((pack) => pack.source === "installed").length;
8
+ return (_jsx("div", { className: "settings-pane", children: _jsxs("div", { className: "settings-card settings-card-stack", children: [_jsxs("div", { style: { display: "grid", gap: 6 }, children: [_jsx("span", { className: "settings-session-label", children: formatLabel("LANGUAGE_PACK_STUDIO") }), _jsx("strong", { style: { fontSize: 13 }, children: formatLabel("Language Pack Studio") }), _jsx("p", { style: { margin: 0, fontSize: 11, color: "var(--fg-muted)", lineHeight: 1.4 }, children: formatLabel("Use the pane workspace for token audits, import/export, built-in enablement, and pack authoring.") })] }), _jsxs("div", { className: "settings-session-grid", children: [_jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "PACKS" }), _jsx("span", { className: "settings-session-value", children: snapshot.packs.length })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "BUILT_IN" }), _jsx("span", { className: "settings-session-value", children: builtIns })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "INSTALLED" }), _jsx("span", { className: "settings-session-value", children: installed })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "ACTIVE" }), _jsx("span", { className: "settings-session-value", children: snapshot.activeLocale })] })] }), _jsxs("div", { className: "settings-chip-row", children: [_jsxs("span", { className: "settings-chip", children: [builtIns, " BUILT_IN"] }), _jsxs("span", { className: "settings-chip", children: [snapshot.packs.filter((pack) => pack.enabled).length, " ENABLED"] }), _jsx("span", { className: "settings-chip", children: "EN_FALLBACK" }), _jsx("span", { className: "settings-chip", children: "INDEXEDDB" })] }), _jsx("div", { className: "settings-action-row", style: { padding: 6 }, children: _jsx("button", { type: "button", className: "modal-btn modal-btn-primary", onClick: () => void open(), children: "OPEN_STUDIO" }) })] }) }));
9
+ };
10
+ //# sourceMappingURL=LanguagePackStudioSettingsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguagePackStudioSettingsPanel.js","sourceRoot":"","sources":["../../src/components/LanguagePackStudioSettingsPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAS7C,MAAM,CAAC,MAAM,+BAA+B,GAAmD,CAAC,EAC9F,UAAU,EACV,IAAI,EACJ,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,oBAAoB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACpF,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAEtF,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC5B,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,aACrC,eAAM,SAAS,EAAC,wBAAwB,YAAE,WAAW,CAAC,sBAAsB,CAAC,GAAQ,EACrF,iBAAQ,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAG,WAAW,CAAC,sBAAsB,CAAC,GAAU,EAC/E,YAAG,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,EAAE,YAC7E,WAAW,CAAC,kGAAkG,CAAC,GAC9G,IACA,EACN,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,sBAAa,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAQ,IAAM,EACzK,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,yBAAgB,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAQ,IAAM,EAC/J,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,0BAAiB,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,SAAS,GAAQ,IAAM,EACjK,eAAK,SAAS,EAAC,uBAAuB,aAAC,eAAM,SAAS,EAAC,wBAAwB,uBAAc,EAAA,eAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,CAAC,YAAY,GAAQ,IAAM,IACtK,EACN,eAAK,SAAS,EAAC,mBAAmB,aAChC,gBAAM,SAAS,EAAC,eAAe,aAAE,QAAQ,iBAAiB,EAC1D,gBAAM,SAAS,EAAC,eAAe,aAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,gBAAgB,EACrG,eAAM,SAAS,EAAC,eAAe,4BAAmB,EAClD,eAAM,SAAS,EAAC,eAAe,0BAAiB,IAC5C,EACN,cAAK,SAAS,EAAC,qBAAqB,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YACxD,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,6BAA6B,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,4BAAsB,GAC1G,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type FC } from "react";
2
+ import type { I18nLabel } from "@mdwrk/extension-manifest";
3
+ import type { LanguagePackStudioController } from "../types.js";
4
+ export interface LanguagePackStudioViewProps {
5
+ readonly controller: LanguagePackStudioController;
6
+ readonly close: () => Promise<void>;
7
+ readonly formatLabel: (label: I18nLabel | string) => string;
8
+ readonly shellSidebarOpen?: boolean;
9
+ readonly onShellSidebarToggle?: (open: boolean) => void;
10
+ readonly embedBrowserInShellSidebar?: boolean;
11
+ }
12
+ export declare const LanguagePackStudioSidebar: FC<Pick<LanguagePackStudioViewProps, "controller">>;
13
+ export declare const LanguagePackStudioView: FC<LanguagePackStudioViewProps>;
14
+ //# sourceMappingURL=LanguagePackStudioView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguagePackStudioView.d.ts","sourceRoot":"","sources":["../../src/components/LanguagePackStudioView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,EAAE,EAAwE,MAAM,OAAO,CAAC;AAC1H,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgB3D,OAAO,KAAK,EAAE,4BAA4B,EAA8B,MAAM,aAAa,CAAC;AAuB5F,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC;IAC5D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;CAC/C;AA+HD,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAGzF,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CA8PlE,CAAC"}
@@ -0,0 +1,140 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useDeferredValue, useEffect, useMemo, useState, useSyncExternalStore } from "react";
3
+ import { Columns2, Download, Languages, PackagePlus, Sidebar, SidebarOpen, Power, PowerOff, Square, SplitSquareHorizontal, Trash2, Upload, X, } from "lucide-react";
4
+ function downloadJson(filename, value) {
5
+ const blob = new Blob([JSON.stringify(value, null, 2)], { type: "application/json" });
6
+ const url = URL.createObjectURL(blob);
7
+ const link = document.createElement("a");
8
+ link.href = url;
9
+ link.download = filename;
10
+ link.click();
11
+ URL.revokeObjectURL(url);
12
+ }
13
+ const denseInputStyle = {
14
+ width: "100%",
15
+ border: "1px solid var(--border-color)",
16
+ background: "var(--bg-panel)",
17
+ color: "var(--fg-primary)",
18
+ borderRadius: 8,
19
+ padding: "8px 10px",
20
+ fontSize: 11,
21
+ lineHeight: 1.4,
22
+ };
23
+ const createLanguageBrowserStore = () => {
24
+ let state = { browserQuery: "", browserFilter: "all", selectedLocale: null };
25
+ const listeners = new Set();
26
+ return {
27
+ getSnapshot: () => state,
28
+ subscribe(listener) {
29
+ listeners.add(listener);
30
+ return () => listeners.delete(listener);
31
+ },
32
+ setState(update) {
33
+ state = { ...state, ...update };
34
+ listeners.forEach((listener) => listener());
35
+ },
36
+ };
37
+ };
38
+ const languageBrowserStores = new WeakMap();
39
+ const getLanguageBrowserStore = (controller) => {
40
+ let store = languageBrowserStores.get(controller);
41
+ if (!store) {
42
+ store = createLanguageBrowserStore();
43
+ languageBrowserStores.set(controller, store);
44
+ }
45
+ return store;
46
+ };
47
+ function useLanguageBrowserState(controller) {
48
+ const store = getLanguageBrowserStore(controller);
49
+ const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);
50
+ return { state, setState: store.setState };
51
+ }
52
+ function LanguagePackBrowserSidebar({ controller, snapshot, }) {
53
+ const { state, setState } = useLanguageBrowserState(controller);
54
+ const deferredBrowserQuery = useDeferredValue(state.browserQuery.trim().toLowerCase());
55
+ const builtInPackCount = snapshot.packs.filter((pack) => pack.source === "built-in").length;
56
+ const installedPackCount = snapshot.packs.filter((pack) => pack.source === "installed").length;
57
+ const filteredPacks = useMemo(() => snapshot.packs.filter((pack) => {
58
+ if (state.browserFilter === "built-in" && pack.source !== "built-in")
59
+ return false;
60
+ if (state.browserFilter === "installed" && pack.source !== "installed")
61
+ return false;
62
+ if (state.browserFilter === "disabled" && pack.enabled)
63
+ return false;
64
+ if (!deferredBrowserQuery)
65
+ return true;
66
+ const haystack = `${pack.locale} ${pack.label} ${pack.source} ${pack.enabled ? "enabled" : "disabled"}`.toLowerCase();
67
+ return haystack.includes(deferredBrowserQuery);
68
+ }), [deferredBrowserQuery, snapshot.packs, state.browserFilter]);
69
+ return (_jsxs("div", { className: "workspace-panel-content", style: { display: "grid", gap: 12, padding: 12 }, children: [_jsxs("div", { className: "settings-card settings-card-stack", children: [_jsxs("div", { className: "settings-session-grid", children: [_jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "PACKS" }), _jsx("span", { className: "settings-session-value", children: snapshot.packs.length })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "ENABLED" }), _jsx("span", { className: "settings-session-value", children: snapshot.packs.filter((pack) => pack.enabled).length })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "BUILT_IN" }), _jsx("span", { className: "settings-session-value", children: builtInPackCount })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "ACTIVE" }), _jsx("span", { className: "settings-session-value", children: snapshot.activeLocale })] })] }), _jsxs("div", { className: "settings-chip-row", children: [_jsx("span", { className: "settings-chip", children: "LANGUAGE_BROWSER" }), _jsx("span", { className: "settings-chip", children: "INDEXEDDB" }), _jsx("span", { className: "settings-chip", children: "BUILT_IN + INSTALLED" })] })] }), _jsxs("div", { className: "settings-card settings-card-stack", style: { gap: 8 }, children: [_jsx("input", { style: denseInputStyle, value: state.browserQuery, onChange: (event) => setState({ browserQuery: event.target.value }), placeholder: "Filter locale, label, source", "aria-label": "Filter language browser" }), _jsx("div", { className: "settings-chip-row", children: [
70
+ ["all", `ALL ${snapshot.packs.length}`],
71
+ ["built-in", `BUILT_IN ${builtInPackCount}`],
72
+ ["installed", `INSTALLED ${installedPackCount}`],
73
+ ["disabled", `DISABLED ${snapshot.packs.filter((pack) => !pack.enabled).length}`],
74
+ ].map(([value, label]) => (_jsx("button", { type: "button", className: `view-toolbar-btn ${state.browserFilter === value ? "active" : ""}`, onClick: () => setState({ browserFilter: value }), children: label }, value))) }), filteredPacks.map((pack) => (_jsxs("button", { type: "button", className: `settings-sidebar-btn ${state.selectedLocale === pack.locale ? "active" : ""}`, onClick: () => setState({ selectedLocale: pack.locale }), style: { justifyContent: "space-between", gap: 10 }, children: [_jsx("span", { style: { textAlign: "left" }, children: pack.label }), _jsx("span", { className: "settings-session-label", children: pack.source === "built-in" ? "BUILT_IN" : pack.enabled ? "INSTALLED" : "DISABLED" })] }, `${pack.source}:${pack.locale}`))), filteredPacks.length === 0 && _jsx("span", { className: "text-[11px] text-[var(--fg-muted)]", children: "No language packs match the current browser filter." })] })] }));
75
+ }
76
+ export const LanguagePackStudioSidebar = ({ controller }) => {
77
+ const snapshot = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);
78
+ return _jsx(LanguagePackBrowserSidebar, { controller: controller, snapshot: snapshot });
79
+ };
80
+ export const LanguagePackStudioView = ({ controller, close, formatLabel: _formatLabel, shellSidebarOpen, onShellSidebarToggle, embedBrowserInShellSidebar = false, }) => {
81
+ const snapshot = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);
82
+ const [importInput, setImportInput] = useState(null);
83
+ const [error, setError] = useState(null);
84
+ const [sidebarOpen, setSidebarOpen] = useState(true);
85
+ const [layoutMode, setLayoutMode] = useState("split");
86
+ const [draftLocale, setDraftLocale] = useState("custom");
87
+ const [draftLabel, setDraftLabel] = useState("Custom Language Pack");
88
+ const [draftMessages, setDraftMessages] = useState('{\n "core.views.settings.title": "System Configuration"\n}');
89
+ const { state: browserState, setState: setBrowserState } = useLanguageBrowserState(controller);
90
+ const effectiveSidebarOpen = embedBrowserInShellSidebar ? (shellSidebarOpen ?? true) : sidebarOpen;
91
+ useEffect(() => {
92
+ if (browserState.selectedLocale && snapshot.packs.some((pack) => pack.locale === browserState.selectedLocale)) {
93
+ return;
94
+ }
95
+ setBrowserState({ selectedLocale: snapshot.packs[0]?.locale ?? null });
96
+ }, [browserState.selectedLocale, setBrowserState, snapshot.packs]);
97
+ const selectedPack = snapshot.packs.find((pack) => pack.locale === browserState.selectedLocale) ?? null;
98
+ const missingKeys = useMemo(() => {
99
+ if (!selectedPack || selectedPack.source === "built-in") {
100
+ return [];
101
+ }
102
+ return snapshot.tokens.filter((token) => !(token.key in selectedPack.messages));
103
+ }, [selectedPack, snapshot.tokens]);
104
+ const handleImport = async (event) => {
105
+ const file = event.target.files?.[0];
106
+ if (!file)
107
+ return;
108
+ try {
109
+ await controller.importArtifact(await file.text());
110
+ setError(null);
111
+ }
112
+ catch (nextError) {
113
+ setError(nextError instanceof Error ? nextError.message : "Failed to import language pack.");
114
+ }
115
+ finally {
116
+ event.target.value = "";
117
+ }
118
+ };
119
+ const handleCreate = async () => {
120
+ try {
121
+ const messages = JSON.parse(draftMessages);
122
+ const pack = await controller.createArtifact({ locale: draftLocale, label: draftLabel, messages, enabled: true });
123
+ downloadJson(`${pack.locale}.language-pack.json`, pack);
124
+ setBrowserState({ selectedLocale: pack.locale });
125
+ setError(null);
126
+ }
127
+ catch (nextError) {
128
+ setError(nextError instanceof Error ? nextError.message : "Failed to create language pack.");
129
+ }
130
+ };
131
+ return (_jsxs("div", { className: "language-pack-studio-pane editor-pane-container", "data-testid": "language-pack-studio-pane", children: [_jsxs("div", { className: "view-toolbar", "aria-label": "Language Pack Studio toolbar", children: [_jsxs("div", { className: "view-toolbar-group", children: [_jsx("button", { type: "button", className: `view-toolbar-btn ${effectiveSidebarOpen ? "active" : ""}`, title: "Toggle sidebar", onClick: () => embedBrowserInShellSidebar ? onShellSidebarToggle?.(!effectiveSidebarOpen) : setSidebarOpen((current) => !current), children: effectiveSidebarOpen ? _jsx(SidebarOpen, { size: 14 }) : _jsx(Sidebar, { size: 14 }) }), _jsx("button", { type: "button", className: `view-toolbar-btn ${layoutMode === "single" ? "active" : ""}`, title: "Single pane", onClick: () => setLayoutMode("single"), children: _jsx(Square, { size: 14 }) }), _jsx("button", { type: "button", className: `view-toolbar-btn ${layoutMode === "split" ? "active" : ""}`, title: "Split screen", onClick: () => setLayoutMode("split"), children: _jsx(SplitSquareHorizontal, { size: 14 }) })] }), _jsxs("div", { className: "view-toolbar-group", children: [_jsx("span", { className: "view-toolbar-divider" }), _jsx("button", { type: "button", className: "view-toolbar-btn", title: "Import pack", onClick: () => importInput?.click(), children: _jsx(Upload, { size: 14 }) }), _jsx("button", { type: "button", className: "view-toolbar-btn", title: "Enable all packs", onClick: () => { void controller.setAllEnabled(true); }, children: _jsx(Power, { size: 14 }) }), _jsx("button", { type: "button", className: "view-toolbar-btn", title: "Disable all packs", onClick: () => { void controller.setAllEnabled(false); }, children: _jsx(PowerOff, { size: 14 }) })] }), _jsxs("div", { className: "view-toolbar-group", style: { justifyContent: "flex-end" }, children: [_jsx("span", { className: "view-toolbar-divider" }), _jsx("button", { type: "button", className: "view-toolbar-btn", title: "Close studio", onClick: () => void close(), children: _jsx(X, { size: 14 }) })] })] }), _jsxs("div", { className: "editor-pane-shell", children: [_jsx("input", { ref: setImportInput, type: "file", accept: "application/json,.json", hidden: true, onChange: handleImport }), _jsxs("div", { className: "editor-pane-body is-split", children: [!embedBrowserInShellSidebar && sidebarOpen && (_jsxs("aside", { className: `workspace-sidebar editor-pane-column ${sidebarOpen ? "" : "is-collapsed"}`, style: { width: "min(320px, 28vw)", padding: 12, gap: 12 }, children: [_jsx(LanguagePackBrowserSidebar, { controller: controller, snapshot: snapshot }), error && _jsx("p", { style: { margin: 0, fontSize: 11, color: "var(--status-error)" }, children: error })] })), _jsxs("div", { className: "editor-pane-column", style: { flex: 1, padding: 16, gap: 16 }, children: [_jsx("div", { className: "settings-card settings-card-stack", style: { gap: 10 }, children: _jsxs("div", { style: { display: "flex", justifyContent: "space-between", gap: 12, alignItems: "center", flexWrap: "wrap" }, children: [_jsxs("div", { style: { display: "grid", gap: 4 }, children: [_jsx("span", { className: "settings-session-label", children: "LANGUAGE_PACK_STUDIO" }), _jsx("strong", { style: { fontSize: 14 }, children: "Workspace language packs" }), _jsx("span", { style: { fontSize: 11, color: "var(--fg-muted)" }, children: "Built-in and installed locale packs share one high-density manager surface." })] }), _jsxs("div", { className: "settings-chip-row", children: [_jsx("span", { className: "settings-chip", children: "INDEXEDDB" }), _jsx("span", { className: "settings-chip", children: "BUILT_IN + INSTALLED" }), _jsx("span", { className: "settings-chip", children: "PANE_ONLY" })] })] }) }), selectedPack && (_jsxs("div", { style: { display: "grid", gap: 16, gridTemplateColumns: layoutMode === "split" ? "minmax(0, 1.15fr) minmax(320px, 0.85fr)" : "minmax(0, 1fr)" }, children: [_jsxs("div", { style: { display: "grid", gap: 16 }, children: [_jsxs("div", { className: "settings-card settings-card-stack", children: [_jsxs("div", { style: { display: "flex", justifyContent: "space-between", gap: 12, flexWrap: "wrap", alignItems: "center" }, children: [_jsxs("div", { children: [_jsx("strong", { style: { fontSize: 14 }, children: selectedPack.label }), _jsxs("p", { style: { margin: "6px 0 0", fontSize: 11, color: "var(--fg-muted)" }, children: [selectedPack.locale, " | ", selectedPack.source.toUpperCase()] })] }), _jsxs("div", { className: "settings-action-row", style: { padding: 8, gap: 8 }, children: [_jsxs("button", { type: "button", className: "modal-btn", onClick: () => { void controller.setEnabled(selectedPack.locale, !selectedPack.enabled); }, children: [selectedPack.enabled ? _jsx(PowerOff, { size: 14 }) : _jsx(Power, { size: 14 }), " ", selectedPack.enabled ? "DISABLE" : "ENABLE"] }), _jsx("button", { type: "button", className: "modal-btn modal-btn-primary", onClick: () => { void controller.activate(selectedPack.locale); }, disabled: !selectedPack.enabled, children: "USE" }), _jsxs("button", { type: "button", className: "modal-btn", onClick: () => {
132
+ const artifact = controller.exportArtifact(selectedPack.locale);
133
+ if (artifact)
134
+ downloadJson(`${selectedPack.locale}.language-pack.json`, artifact);
135
+ }, disabled: selectedPack.source !== "installed", children: [_jsx(Download, { size: 14 }), " EXPORT"] }), _jsxs("button", { type: "button", className: "modal-btn", onClick: () => { void controller.remove(selectedPack.locale); }, disabled: selectedPack.source !== "installed", children: [_jsx(Trash2, { size: 14 }), " REMOVE"] })] })] }), _jsxs("div", { className: "settings-session-grid", children: [_jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "STATUS" }), _jsx("span", { className: "settings-session-value", children: selectedPack.enabled ? "ENABLED" : "DISABLED" })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "SOURCE" }), _jsx("span", { className: "settings-session-value", children: selectedPack.source.toUpperCase() })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "TOKENS" }), _jsx("span", { className: "settings-session-value", children: selectedPack.source === "installed" ? Object.keys(selectedPack.messages).length : "CORE" })] }), _jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "MISSING" }), _jsx("span", { className: "settings-session-value", children: selectedPack.source === "installed" ? missingKeys.length : "N/A" })] })] })] }), _jsxs("div", { className: "settings-card settings-card-stack", children: [_jsx("strong", { style: { fontSize: 12, textTransform: "uppercase", letterSpacing: "0.08em" }, children: "Token Audit" }), selectedPack.source === "built-in" ? (_jsxs("div", { className: "settings-session-item", children: [_jsx("span", { className: "settings-session-label", children: "BUILT_IN_LOCALE" }), _jsx("span", { className: "settings-session-value", children: "Core shell catalogs load through the extension-aware i18n fallback chain." })] })) : snapshot.loadingTokens ? (_jsx("span", { className: "text-[11px] text-[var(--fg-muted)]", children: "Loading tokens..." })) : (_jsx("div", { style: { display: "grid", gap: 8, maxHeight: 420, overflow: "auto" }, children: snapshot.tokens.map((token) => {
136
+ const missing = !(token.key in selectedPack.messages);
137
+ return (_jsxs("div", { className: "settings-session-item", style: { borderColor: missing ? "var(--status-error)" : undefined }, children: [_jsxs("div", { style: { display: "grid", gap: 4 }, children: [_jsx("span", { className: "settings-session-label", children: token.key }), _jsx("span", { className: "text-[11px] text-[var(--fg-muted)]", children: token.source })] }), _jsxs("div", { style: { display: "grid", gap: 4 }, children: [_jsx("span", { className: "settings-session-value", children: missing ? "MISSING" : "PRESENT" }), _jsx("span", { className: "text-[11px] text-[var(--fg-muted)]", children: selectedPack.messages[token.key] ?? token.defaultMessage })] })] }, token.key));
138
+ }) }))] })] }), layoutMode === "split" && (_jsxs("div", { className: "settings-card settings-card-stack", children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [_jsx(Columns2, { size: 14 }), _jsx("strong", { style: { fontSize: 12, textTransform: "uppercase", letterSpacing: "0.08em" }, children: "Create Language Pack" })] }), _jsxs("div", { className: "settings-grid-2", children: [_jsxs("label", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-[10px] font-bold text-[var(--fg-muted)] uppercase", children: "Locale" }), _jsx("input", { style: denseInputStyle, value: draftLocale, onChange: (event) => setDraftLocale(event.target.value) })] }), _jsxs("label", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-[10px] font-bold text-[var(--fg-muted)] uppercase", children: "Label" }), _jsx("input", { style: denseInputStyle, value: draftLabel, onChange: (event) => setDraftLabel(event.target.value) })] })] }), _jsxs("label", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-[10px] font-bold text-[var(--fg-muted)] uppercase", children: "Messages JSON" }), _jsx("textarea", { style: { ...denseInputStyle, minHeight: 220, fontFamily: "var(--font-mono, monospace)" }, value: draftMessages, onChange: (event) => setDraftMessages(event.target.value) })] }), _jsx("div", { className: "settings-action-row", style: { padding: 8 }, children: _jsxs("button", { type: "button", className: "modal-btn modal-btn-primary", onClick: () => void handleCreate(), children: [_jsx(PackagePlus, { size: 14 }), " CREATE_AND_EXPORT"] }) })] }))] })), layoutMode === "single" && (_jsxs("div", { className: "settings-card settings-card-stack", children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [_jsx(Languages, { size: 14 }), _jsx("strong", { style: { fontSize: 12, textTransform: "uppercase", letterSpacing: "0.08em" }, children: "Create Language Pack" })] }), _jsxs("div", { className: "settings-grid-2", children: [_jsxs("label", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-[10px] font-bold text-[var(--fg-muted)] uppercase", children: "Locale" }), _jsx("input", { style: denseInputStyle, value: draftLocale, onChange: (event) => setDraftLocale(event.target.value) })] }), _jsxs("label", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-[10px] font-bold text-[var(--fg-muted)] uppercase", children: "Label" }), _jsx("input", { style: denseInputStyle, value: draftLabel, onChange: (event) => setDraftLabel(event.target.value) })] })] }), _jsxs("label", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-[10px] font-bold text-[var(--fg-muted)] uppercase", children: "Messages JSON" }), _jsx("textarea", { style: { ...denseInputStyle, minHeight: 180, fontFamily: "var(--font-mono, monospace)" }, value: draftMessages, onChange: (event) => setDraftMessages(event.target.value) })] }), _jsx("div", { className: "settings-action-row", style: { padding: 8 }, children: _jsxs("button", { type: "button", className: "modal-btn modal-btn-primary", onClick: () => void handleCreate(), children: [_jsx(PackagePlus, { size: 14 }), " CREATE_AND_EXPORT"] }) })] }))] })] })] })] }));
139
+ };
140
+ //# sourceMappingURL=LanguagePackStudioView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguagePackStudioView.js","sourceRoot":"","sources":["../../src/components/LanguagePackStudioView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const LANGUAGE_PACK_STUDIO_EXTENSION_ID: "core.language-pack-studio";
2
+ export declare const LANGUAGE_PACK_STUDIO_VIEW_ID: "core.language-pack-studio.view";
3
+ export declare const LANGUAGE_PACK_STUDIO_COMMAND_ID: "core.language-pack-studio.open";
4
+ export declare const LANGUAGE_PACK_STUDIO_RAIL_ID: "core.language-pack-studio.rail";
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,EAAG,2BAAoC,CAAC;AACtF,eAAO,MAAM,4BAA4B,kCAAuD,CAAC;AACjG,eAAO,MAAM,+BAA+B,kCAAuD,CAAC;AACpG,eAAO,MAAM,4BAA4B,kCAAuD,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const LANGUAGE_PACK_STUDIO_EXTENSION_ID = "core.language-pack-studio";
2
+ export const LANGUAGE_PACK_STUDIO_VIEW_ID = `${LANGUAGE_PACK_STUDIO_EXTENSION_ID}.view`;
3
+ export const LANGUAGE_PACK_STUDIO_COMMAND_ID = `${LANGUAGE_PACK_STUDIO_EXTENSION_ID}.open`;
4
+ export const LANGUAGE_PACK_STUDIO_RAIL_ID = `${LANGUAGE_PACK_STUDIO_EXTENSION_ID}.rail`;
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iCAAiC,GAAG,2BAAoC,CAAC;AACtF,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,iCAAiC,OAAgB,CAAC;AACjG,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,iCAAiC,OAAgB,CAAC;AACpG,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,iCAAiC,OAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BundledExtensionCatalogEntry } from "@mdwrk/extension-runtime";
2
+ import type { LanguagePackStudioEntryOptions } from "./types.js";
3
+ export declare function createLanguagePackStudioBundledEntry(options: LanguagePackStudioEntryOptions): BundledExtensionCatalogEntry;
4
+ //# sourceMappingURL=createLanguagePackStudioBundledEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createLanguagePackStudioBundledEntry.d.ts","sourceRoot":"","sources":["../src/createLanguagePackStudioBundledEntry.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAU7E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,8BAA8B,GAAG,4BAA4B,CAyE1H"}
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { LanguagePackStudioSidebar, LanguagePackStudioView } from "./components/LanguagePackStudioView.js";
4
+ import { LanguagePackStudioSettingsPanel } from "./components/LanguagePackStudioSettingsPanel.js";
5
+ import { LANGUAGE_PACK_STUDIO_COMMAND_ID, LANGUAGE_PACK_STUDIO_RAIL_ID, LANGUAGE_PACK_STUDIO_VIEW_ID, } from "./constants.js";
6
+ import { languagePackStudioLabels, languagePackStudioLocaleLoader } from "./i18n.js";
7
+ import { languagePackStudioManifest } from "./manifest.js";
8
+ export function createLanguagePackStudioBundledEntry(options) {
9
+ return {
10
+ manifest: languagePackStudioManifest,
11
+ activation: "eager",
12
+ async load() {
13
+ const extension = {
14
+ manifest: languagePackStudioManifest,
15
+ async activate(context) {
16
+ context.registerLocaleCatalogLoader(languagePackStudioLocaleLoader);
17
+ await context.host.i18n.ensureLocale();
18
+ context.registerCommand({
19
+ id: LANGUAGE_PACK_STUDIO_COMMAND_ID,
20
+ title: languagePackStudioLabels.commandOpenTitle,
21
+ description: languagePackStudioLabels.commandOpenDescription,
22
+ icon: { kind: "lucide", name: "Languages" },
23
+ execute: async () => {
24
+ await context.host.views.open(LANGUAGE_PACK_STUDIO_VIEW_ID);
25
+ },
26
+ });
27
+ context.registerView({
28
+ id: LANGUAGE_PACK_STUDIO_VIEW_ID,
29
+ title: languagePackStudioLabels.viewTitle,
30
+ description: languagePackStudioLabels.viewDescription,
31
+ icon: { kind: "lucide", name: "Languages" },
32
+ location: "main",
33
+ allowMultiple: false,
34
+ canBePinned: true,
35
+ render: (props) => (_jsx(LanguagePackStudioView, { controller: options.controller, close: () => props.close(), formatLabel: context.host.i18n.format, shellSidebarOpen: props.workspaceSidebarOpen, onShellSidebarToggle: props.setWorkspaceSidebarOpen, embedBrowserInShellSidebar: Boolean(props.setWorkspaceSidebarOpen) })),
36
+ renderSidebar: () => (_jsx(LanguagePackStudioSidebar, { controller: options.controller })),
37
+ });
38
+ context.registerActionRailItem({
39
+ id: LANGUAGE_PACK_STUDIO_RAIL_ID,
40
+ title: languagePackStudioLabels.railTitle,
41
+ icon: { kind: "lucide", name: "Languages" },
42
+ group: "extensions",
43
+ order: 10,
44
+ target: { kind: "view", viewId: LANGUAGE_PACK_STUDIO_VIEW_ID },
45
+ });
46
+ context.registerSettingsSection({
47
+ id: `${context.extensionId}.settings`,
48
+ title: languagePackStudioLabels.settingsTitle,
49
+ description: languagePackStudioLabels.settingsDescription,
50
+ order: 30,
51
+ render: () => (_jsx(LanguagePackStudioSettingsPanel, { controller: options.controller, open: () => context.host.views.open(LANGUAGE_PACK_STUDIO_VIEW_ID), formatLabel: context.host.i18n.format })),
52
+ });
53
+ },
54
+ };
55
+ return extension;
56
+ },
57
+ };
58
+ }
59
+ //# sourceMappingURL=createLanguagePackStudioBundledEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createLanguagePackStudioBundledEntry.js","sourceRoot":"","sources":["../src/createLanguagePackStudioBundledEntry.tsx"],"names":[],"mappings":"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"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { I18nLabel } from "@mdwrk/extension-manifest";
2
+ import type { ExtensionLocaleCatalogLoader } from "@mdwrk/extension-host";
3
+ export declare const label: (suffix: string, defaultMessage: string) => I18nLabel;
4
+ export declare const languagePackStudioLabels: {
5
+ readonly manifestDisplayName: I18nLabel;
6
+ readonly manifestDescription: I18nLabel;
7
+ readonly commandOpenTitle: I18nLabel;
8
+ readonly commandOpenDescription: I18nLabel;
9
+ readonly viewTitle: I18nLabel;
10
+ readonly viewDescription: I18nLabel;
11
+ readonly railTitle: I18nLabel;
12
+ readonly settingsTitle: I18nLabel;
13
+ readonly settingsDescription: I18nLabel;
14
+ };
15
+ export declare const languagePackStudioLocaleLoader: ExtensionLocaleCatalogLoader;
16
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAG1E,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,EAAE,gBAAgB,MAAM,KAAG,SAG7D,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;CAU3B,CAAC;AAEX,eAAO,MAAM,8BAA8B,EAAE,4BAM5C,CAAC"}
package/dist/i18n.js ADDED
@@ -0,0 +1,24 @@
1
+ const key = (suffix) => `core.language-pack-studio.${suffix}`;
2
+ export const label = (suffix, defaultMessage) => ({
3
+ key: key(suffix),
4
+ defaultMessage,
5
+ });
6
+ export const languagePackStudioLabels = {
7
+ manifestDisplayName: label("manifest.displayName", "Language Pack Studio"),
8
+ manifestDescription: label("manifest.description", "Bundled language-pack studio for importing, exporting, enabling, disabling, activating, creating, and auditing portable language packs."),
9
+ commandOpenTitle: label("commands.open.title", "Open Language Pack Studio"),
10
+ commandOpenDescription: label("commands.open.description", "Open the language-pack studio workspace pane."),
11
+ viewTitle: label("views.main.title", "Language Pack Studio"),
12
+ viewDescription: label("views.main.description", "Browse installed language packs, inspect missing tokens, and create or export locale artifacts."),
13
+ railTitle: label("rail.title", "Language Packs"),
14
+ settingsTitle: label("settings.title", "Language Pack Studio"),
15
+ settingsDescription: label("settings.description", "Language-pack inventory, enablement, token auditing, and workspace authoring shortcuts."),
16
+ };
17
+ export const languagePackStudioLocaleLoader = {
18
+ defaultLocale: "en",
19
+ fallbackLocale: "en",
20
+ loaders: {
21
+ en: async () => (await import("./locales/en.js")).languagePackStudioEnCatalog,
22
+ },
23
+ };
24
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAGA,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,6BAA6B,MAAM,EAAE,CAAC;AACtE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,cAAsB,EAAa,EAAE,CAAC,CAAC;IAC3E,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;IAChB,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,mBAAmB,EAAE,KAAK,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAC1E,mBAAmB,EAAE,KAAK,CAAC,sBAAsB,EAAE,yIAAyI,CAAC;IAC7L,gBAAgB,EAAE,KAAK,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;IAC3E,sBAAsB,EAAE,KAAK,CAAC,2BAA2B,EAAE,+CAA+C,CAAC;IAC3G,SAAS,EAAE,KAAK,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;IAC5D,eAAe,EAAE,KAAK,CAAC,wBAAwB,EAAE,iGAAiG,CAAC;IACnJ,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE,gBAAgB,CAAC;IAChD,aAAa,EAAE,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAC9D,mBAAmB,EAAE,KAAK,CAAC,sBAAsB,EAAE,yFAAyF,CAAC;CACrI,CAAC;AAEX,MAAM,CAAC,MAAM,8BAA8B,GAAiC;IAC1E,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,OAAO,EAAE;QACP,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,2BAA2B;KAC9E;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from "./constants.js";
2
+ export * from "./createLanguagePackStudioBundledEntry.js";
3
+ export * from "./i18n.js";
4
+ export * from "./manifest.js";
5
+ export * from "./types.js";
6
+ export * from "./version.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2CAA2C,CAAC;AAC1D,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from "./constants.js";
2
+ export * from "./createLanguagePackStudioBundledEntry.js";
3
+ export * from "./i18n.js";
4
+ export * from "./manifest.js";
5
+ export * from "./types.js";
6
+ export * from "./version.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2CAA2C,CAAC;AAC1D,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionLocaleCatalog } from "@mdwrk/extension-host";
2
+ export declare const languagePackStudioEnCatalog: ExtensionLocaleCatalog;
3
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,eAAO,MAAM,2BAA2B,EAAE,sBAazC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { languagePackStudioLabels } from "../i18n.js";
2
+ export const languagePackStudioEnCatalog = {
3
+ locale: "en",
4
+ messages: {
5
+ [languagePackStudioLabels.manifestDisplayName.key]: languagePackStudioLabels.manifestDisplayName.defaultMessage,
6
+ [languagePackStudioLabels.manifestDescription.key]: languagePackStudioLabels.manifestDescription.defaultMessage,
7
+ [languagePackStudioLabels.commandOpenTitle.key]: languagePackStudioLabels.commandOpenTitle.defaultMessage,
8
+ [languagePackStudioLabels.commandOpenDescription.key]: languagePackStudioLabels.commandOpenDescription.defaultMessage,
9
+ [languagePackStudioLabels.viewTitle.key]: languagePackStudioLabels.viewTitle.defaultMessage,
10
+ [languagePackStudioLabels.viewDescription.key]: languagePackStudioLabels.viewDescription.defaultMessage,
11
+ [languagePackStudioLabels.railTitle.key]: languagePackStudioLabels.railTitle.defaultMessage,
12
+ [languagePackStudioLabels.settingsTitle.key]: languagePackStudioLabels.settingsTitle.defaultMessage,
13
+ [languagePackStudioLabels.settingsDescription.key]: languagePackStudioLabels.settingsDescription.defaultMessage,
14
+ },
15
+ };
16
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE;QACR,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,cAAc;QAChH,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,cAAc;QAChH,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,cAAc;QAC1G,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,sBAAsB,CAAC,cAAc;QACtH,CAAC,wBAAwB,CAAC,SAAS,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,SAAS,CAAC,cAAc;QAC5F,CAAC,wBAAwB,CAAC,eAAe,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,eAAe,CAAC,cAAc;QACxG,CAAC,wBAAwB,CAAC,SAAS,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,SAAS,CAAC,cAAc;QAC5F,CAAC,wBAAwB,CAAC,aAAa,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,aAAa,CAAC,cAAc;QACpG,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,GAAI,CAAC,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,cAAc;KACjH;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExtensionManifest } from "@mdwrk/extension-manifest";
2
+ export declare const languagePackStudioManifest: ExtensionManifest;
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAUnE,eAAO,MAAM,0BAA0B,EAAE,iBA2ExC,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { LANGUAGE_PACK_STUDIO_COMMAND_ID, LANGUAGE_PACK_STUDIO_EXTENSION_ID, LANGUAGE_PACK_STUDIO_RAIL_ID, LANGUAGE_PACK_STUDIO_VIEW_ID, } from "./constants.js";
2
+ import { languagePackStudioLabels } from "./i18n.js";
3
+ import { LANGUAGE_PACK_STUDIO_VERSION } from "./version.js";
4
+ export const languagePackStudioManifest = {
5
+ manifestVersion: 1,
6
+ id: LANGUAGE_PACK_STUDIO_EXTENSION_ID,
7
+ packageName: "@mdwrk/extension-language-pack-studio",
8
+ version: LANGUAGE_PACK_STUDIO_VERSION,
9
+ displayName: languagePackStudioLabels.manifestDisplayName,
10
+ description: languagePackStudioLabels.manifestDescription,
11
+ kind: "bundled",
12
+ icon: { kind: "lucide", name: "Languages" },
13
+ enabledByDefault: true,
14
+ capabilities: ["view.register", "actionRail.register"],
15
+ compatibility: {
16
+ manifestVersion: 1,
17
+ hostApi: "^1.0.0",
18
+ runtime: "^1.0.0",
19
+ app: ">=1.4.6",
20
+ themeContract: "^1.0.0",
21
+ },
22
+ entry: {
23
+ module: "./index.js",
24
+ export: "createLanguagePackStudioBundledEntry",
25
+ },
26
+ i18n: {
27
+ defaultLocale: "en",
28
+ supportedLocales: ["en"],
29
+ catalogs: [{ locale: "en", path: "./locales/en.js" }],
30
+ },
31
+ contributions: {
32
+ commands: [
33
+ {
34
+ id: LANGUAGE_PACK_STUDIO_COMMAND_ID,
35
+ title: languagePackStudioLabels.commandOpenTitle,
36
+ description: languagePackStudioLabels.commandOpenDescription,
37
+ icon: { kind: "lucide", name: "Languages" },
38
+ }
39
+ ],
40
+ views: [
41
+ {
42
+ id: LANGUAGE_PACK_STUDIO_VIEW_ID,
43
+ title: languagePackStudioLabels.viewTitle,
44
+ description: languagePackStudioLabels.viewDescription,
45
+ icon: { kind: "lucide", name: "Languages" },
46
+ location: "main",
47
+ allowMultiple: false,
48
+ canBePinned: true,
49
+ }
50
+ ],
51
+ components: [],
52
+ actionRail: [
53
+ {
54
+ id: LANGUAGE_PACK_STUDIO_RAIL_ID,
55
+ title: languagePackStudioLabels.railTitle,
56
+ icon: { kind: "lucide", name: "Languages" },
57
+ group: "extensions",
58
+ order: 10,
59
+ target: { kind: "view", viewId: LANGUAGE_PACK_STUDIO_VIEW_ID }
60
+ }
61
+ ],
62
+ settingsSections: [
63
+ {
64
+ id: `${LANGUAGE_PACK_STUDIO_EXTENSION_ID}.settings`,
65
+ title: languagePackStudioLabels.settingsTitle,
66
+ description: languagePackStudioLabels.settingsDescription,
67
+ order: 30,
68
+ schemaPath: "manifest.settingsSchema",
69
+ }
70
+ ]
71
+ },
72
+ settingsSchema: {
73
+ version: 1,
74
+ title: languagePackStudioLabels.settingsTitle,
75
+ description: languagePackStudioLabels.settingsDescription,
76
+ sections: [],
77
+ fields: [],
78
+ }
79
+ };
80
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,eAAe,EAAE,CAAC;IAClB,EAAE,EAAE,iCAAiC;IACrC,WAAW,EAAE,uCAAuC;IACpD,OAAO,EAAE,4BAA4B;IACrC,WAAW,EAAE,wBAAwB,CAAC,mBAAmB;IACzD,WAAW,EAAE,wBAAwB,CAAC,mBAAmB;IACzD,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3C,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;IACtD,aAAa,EAAE;QACb,eAAe,EAAE,CAAC;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,SAAS;QACd,aAAa,EAAE,QAAQ;KACxB;IACD,KAAK,EAAE;QACL,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,sCAAsC;KAC/C;IACD,IAAI,EAAE;QACJ,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,CAAC,IAAI,CAAC;QACxB,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;KACtD;IACD,aAAa,EAAE;QACb,QAAQ,EAAE;YACR;gBACE,EAAE,EAAE,+BAA+B;gBACnC,KAAK,EAAE,wBAAwB,CAAC,gBAAgB;gBAChD,WAAW,EAAE,wBAAwB,CAAC,sBAAsB;gBAC5D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;aAC5C;SACF;QACD,KAAK,EAAE;YACL;gBACE,EAAE,EAAE,4BAA4B;gBAChC,KAAK,EAAE,wBAAwB,CAAC,SAAS;gBACzC,WAAW,EAAE,wBAAwB,CAAC,eAAe;gBACrD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;gBAC3C,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,KAAK;gBACpB,WAAW,EAAE,IAAI;aAClB;SACF;QACD,UAAU,EAAE,EAAE;QACd,UAAU,EAAE;YACV;gBACE,EAAE,EAAE,4BAA4B;gBAChC,KAAK,EAAE,wBAAwB,CAAC,SAAS;gBACzC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;gBAC3C,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,EAAE;aAC/D;SACF;QACD,gBAAgB,EAAE;YAChB;gBACE,EAAE,EAAE,GAAG,iCAAiC,WAAW;gBACnD,KAAK,EAAE,wBAAwB,CAAC,aAAa;gBAC7C,WAAW,EAAE,wBAAwB,CAAC,mBAAmB;gBACzD,KAAK,EAAE,EAAE;gBACT,UAAU,EAAE,yBAAyB;aACtC;SACF;KACF;IACD,cAAc,EAAE;QACd,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,wBAAwB,CAAC,aAAa;QAC7C,WAAW,EAAE,wBAAwB,CAAC,mBAAmB;QACzD,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;KACX;CACF,CAAC"}
@@ -0,0 +1,40 @@
1
+ export interface LanguagePackStudioArtifact {
2
+ readonly kind: 'mdwrk-language-pack';
3
+ readonly version: 1;
4
+ readonly locale: string;
5
+ readonly label: string;
6
+ readonly enabled: boolean;
7
+ readonly messages: Readonly<Record<string, string>>;
8
+ readonly source: 'built-in' | 'installed';
9
+ }
10
+ export interface LanguagePackTokenDefinition {
11
+ readonly key: string;
12
+ readonly defaultMessage: string;
13
+ readonly source: string;
14
+ }
15
+ export interface LanguagePackStudioSnapshot {
16
+ readonly activeLocale: string;
17
+ readonly packs: readonly LanguagePackStudioArtifact[];
18
+ readonly tokens: readonly LanguagePackTokenDefinition[];
19
+ readonly loadingTokens: boolean;
20
+ }
21
+ export interface LanguagePackStudioController {
22
+ getSnapshot(): LanguagePackStudioSnapshot;
23
+ subscribe(listener: () => void): () => void;
24
+ importArtifact(payload: string): Promise<LanguagePackStudioArtifact>;
25
+ createArtifact(input: {
26
+ locale: string;
27
+ label: string;
28
+ messages: Record<string, string>;
29
+ enabled?: boolean;
30
+ }): Promise<LanguagePackStudioArtifact>;
31
+ activate(locale: string): Promise<void>;
32
+ remove(locale: string): Promise<void>;
33
+ setEnabled(locale: string, enabled: boolean): Promise<void>;
34
+ setAllEnabled(enabled: boolean): Promise<void>;
35
+ exportArtifact(locale: string): LanguagePackStudioArtifact | null;
36
+ }
37
+ export interface LanguagePackStudioEntryOptions {
38
+ readonly controller: LanguagePackStudioController;
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,IAAI,0BAA0B,CAAC;IAC1C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACrE,cAAc,CAAC,KAAK,EAAE;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,0BAA0B,GAAG,IAAI,CAAC;CACnE;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;CACnD"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const LANGUAGE_PACK_STUDIO_VERSION = "1.0.3";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const LANGUAGE_PACK_STUDIO_VERSION = "1.0.3";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@mdwrk/extension-language-pack-studio",
3
+ "version": "1.0.3",
4
+ "type": "module",
5
+ "license": "Apache-2.0",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "engines": {
10
+ "node": ">=20 <23"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "README.md",
15
+ "sample-packs"
16
+ ],
17
+ "sideEffects": false,
18
+ "dependencies": {
19
+ "@mdwrk/extension-host": "^1.0.2",
20
+ "@mdwrk/extension-manifest": "^1.0.1",
21
+ "lucide-react": "^0.475.0"
22
+ },
23
+ "peerDependencies": {
24
+ "react": "^19.0.0",
25
+ "react-dom": "^19.0.0"
26
+ },
27
+ "scripts": {
28
+ "build:deps": "npm run build -w @mdwrk/extension-manifest && npm run build -w @mdwrk/extension-host",
29
+ "build": "npm run build:deps && tsc -p tsconfig.json",
30
+ "typecheck": "npm run build:deps && tsc --noEmit -p tsconfig.json"
31
+ },
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js"
36
+ },
37
+ "./version": {
38
+ "types": "./dist/version.d.ts",
39
+ "import": "./dist/version.js"
40
+ },
41
+ "./manifest": {
42
+ "types": "./dist/manifest.d.ts",
43
+ "import": "./dist/manifest.js"
44
+ },
45
+ "./types": {
46
+ "types": "./dist/types.d.ts",
47
+ "import": "./dist/types.js"
48
+ },
49
+ "./bundled": {
50
+ "types": "./dist/createLanguagePackStudioBundledEntry.d.ts",
51
+ "import": "./dist/createLanguagePackStudioBundledEntry.js"
52
+ }
53
+ },
54
+ "main": "./dist/index.js",
55
+ "types": "./dist/index.d.ts"
56
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "kind": "mdwrk-language-pack",
3
+ "version": 1,
4
+ "locale": "de",
5
+ "label": "Deutsch Experimental",
6
+ "enabled": true,
7
+ "messages": {
8
+ "core.views.settings.title": "Systemkonfiguration",
9
+ "core.views.settings.description": "Anwendungs- und Arbeitsbereichseinstellungen.",
10
+ "core.settings.language.title": "Sprache und Gebietsschema",
11
+ "core.settings.language.description": "Wählen Sie die Oberflächensprache des Hauptsystems.",
12
+ "core.commands.new-file": "Neue Datei erstellen",
13
+ "core.commands.new-folder": "Neuen Ordner erstellen",
14
+ "core.commands.toggle-git-pane": "Git-Operationen",
15
+ "core.commands.switch-project": "Projekt wechseln",
16
+ "core.commands.download-workspace": "Arbeitsbereich herunterladen",
17
+ "core.import-markdown.title": "Markdown importieren"
18
+ }
19
+ }