@inf-monkeys-tech/monkeys-design 1.0.113 → 2.0.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.
@@ -1,8 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- type DarkModeValue$1 = 'auto' | 'dark' | 'light';
2
+ type DarkModeValue = 'auto' | 'dark' | 'light';
3
3
  interface DarkModeSelectorProps {
4
- mode: DarkModeValue$1;
5
- onModeChange: (mode: DarkModeValue$1) => void;
4
+ mode: DarkModeValue;
5
+ onModeChange: (mode: DarkModeValue) => void;
6
6
  labels?: {
7
7
  auto?: string;
8
8
  light?: string;
@@ -13,8 +13,8 @@ interface DarkModeSelectorProps {
13
13
  }
14
14
  declare function DarkModeSelector({ mode, onModeChange, labels, tooltip, className, }: DarkModeSelectorProps): react_jsx_runtime.JSX.Element;
15
15
  interface DarkModeSubMenuProps {
16
- mode: DarkModeValue$1;
17
- onModeChange: (mode: DarkModeValue$1) => void;
16
+ mode: DarkModeValue;
17
+ onModeChange: (mode: DarkModeValue) => void;
18
18
  label?: string;
19
19
  labels?: {
20
20
  auto?: string;
@@ -52,15 +52,4 @@ interface I18nSubMenuProps {
52
52
  * Must be rendered as a child of DropdownMenu.Group / DropdownMenu.Content.
53
53
  */
54
54
  declare function I18nSubMenu({ languages, currentLanguage, onLanguageChange, label, }: I18nSubMenuProps): react_jsx_runtime.JSX.Element;
55
- type DarkModeValue = 'auto' | 'dark' | 'light';
56
- interface UseDarkModeReturn {
57
- mode: DarkModeValue;
58
- setMode: (mode: DarkModeValue) => void;
59
- resolvedMode: 'dark' | 'light';
60
- }
61
- /**
62
- * Reads/writes dark-mode preference to localStorage, listens to
63
- * `prefers-color-scheme` for auto mode, and toggles `.dark` on `<html>`.
64
- */
65
- declare function useDarkMode(): UseDarkModeReturn;
66
- export { DarkModeSelector, type DarkModeSelectorProps, DarkModeSubMenu, type DarkModeSubMenuProps, type DarkModeValue, type I18nLanguage, I18nSelector, type I18nSelectorProps, I18nSubMenu, type I18nSubMenuProps, type UseDarkModeReturn, useDarkMode };
55
+ export { DarkModeSelector, type DarkModeSelectorProps, DarkModeSubMenu, type DarkModeSubMenuProps, type DarkModeValue, type I18nLanguage, I18nSelector, type I18nSelectorProps, I18nSubMenu, type I18nSubMenuProps };
@@ -1,8 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- type DarkModeValue$1 = 'auto' | 'dark' | 'light';
2
+ type DarkModeValue = 'auto' | 'dark' | 'light';
3
3
  interface DarkModeSelectorProps {
4
- mode: DarkModeValue$1;
5
- onModeChange: (mode: DarkModeValue$1) => void;
4
+ mode: DarkModeValue;
5
+ onModeChange: (mode: DarkModeValue) => void;
6
6
  labels?: {
7
7
  auto?: string;
8
8
  light?: string;
@@ -13,8 +13,8 @@ interface DarkModeSelectorProps {
13
13
  }
14
14
  declare function DarkModeSelector({ mode, onModeChange, labels, tooltip, className, }: DarkModeSelectorProps): react_jsx_runtime.JSX.Element;
15
15
  interface DarkModeSubMenuProps {
16
- mode: DarkModeValue$1;
17
- onModeChange: (mode: DarkModeValue$1) => void;
16
+ mode: DarkModeValue;
17
+ onModeChange: (mode: DarkModeValue) => void;
18
18
  label?: string;
19
19
  labels?: {
20
20
  auto?: string;
@@ -52,15 +52,4 @@ interface I18nSubMenuProps {
52
52
  * Must be rendered as a child of DropdownMenu.Group / DropdownMenu.Content.
53
53
  */
54
54
  declare function I18nSubMenu({ languages, currentLanguage, onLanguageChange, label, }: I18nSubMenuProps): react_jsx_runtime.JSX.Element;
55
- type DarkModeValue = 'auto' | 'dark' | 'light';
56
- interface UseDarkModeReturn {
57
- mode: DarkModeValue;
58
- setMode: (mode: DarkModeValue) => void;
59
- resolvedMode: 'dark' | 'light';
60
- }
61
- /**
62
- * Reads/writes dark-mode preference to localStorage, listens to
63
- * `prefers-color-scheme` for auto mode, and toggles `.dark` on `<html>`.
64
- */
65
- declare function useDarkMode(): UseDarkModeReturn;
66
- export { DarkModeSelector, type DarkModeSelectorProps, DarkModeSubMenu, type DarkModeSubMenuProps, type DarkModeValue, type I18nLanguage, I18nSelector, type I18nSelectorProps, I18nSubMenu, type I18nSubMenuProps, type UseDarkModeReturn, useDarkMode };
55
+ export { DarkModeSelector, type DarkModeSelectorProps, DarkModeSubMenu, type DarkModeSubMenuProps, type DarkModeValue, type I18nLanguage, I18nSelector, type I18nSelectorProps, I18nSubMenu, type I18nSubMenuProps };
@@ -726,60 +726,10 @@ function I18nSubMenu({
726
726
  ) })
727
727
  ] });
728
728
  }
729
- var STORAGE_KEY = "monkeys-dark-mode";
730
- function getStoredMode() {
731
- if (typeof window === "undefined") return "auto";
732
- const stored = localStorage.getItem(STORAGE_KEY);
733
- if (stored === "light" || stored === "dark" || stored === "auto") return stored;
734
- return "auto";
735
- }
736
- function getSystemPrefersDark() {
737
- if (typeof window === "undefined") return false;
738
- return window.matchMedia("(prefers-color-scheme: dark)").matches;
739
- }
740
- function resolve(mode) {
741
- if (mode === "auto") return getSystemPrefersDark() ? "dark" : "light";
742
- return mode;
743
- }
744
- function applyClass(resolved) {
745
- const el = document.documentElement;
746
- if (resolved === "dark") {
747
- el.classList.add("dark");
748
- } else {
749
- el.classList.remove("dark");
750
- }
751
- }
752
- function useDarkMode() {
753
- const [mode, setModeState] = react.useState(getStoredMode);
754
- const [resolvedMode, setResolvedMode] = react.useState(() => resolve(mode));
755
- const setMode = react.useCallback((next) => {
756
- localStorage.setItem(STORAGE_KEY, next);
757
- setModeState(next);
758
- const r = resolve(next);
759
- setResolvedMode(r);
760
- applyClass(r);
761
- }, []);
762
- react.useEffect(() => {
763
- applyClass(resolvedMode);
764
- }, []);
765
- react.useEffect(() => {
766
- if (mode !== "auto") return;
767
- const mql = window.matchMedia("(prefers-color-scheme: dark)");
768
- const handler = (e) => {
769
- const r = e.matches ? "dark" : "light";
770
- setResolvedMode(r);
771
- applyClass(r);
772
- };
773
- mql.addEventListener("change", handler);
774
- return () => mql.removeEventListener("change", handler);
775
- }, [mode]);
776
- return { mode, setMode, resolvedMode };
777
- }
778
729
 
779
730
  exports.DarkModeSelector = DarkModeSelector;
780
731
  exports.DarkModeSubMenu = DarkModeSubMenu;
781
732
  exports.I18nSelector = I18nSelector;
782
733
  exports.I18nSubMenu = I18nSubMenu;
783
- exports.useDarkMode = useDarkMode;
784
734
  //# sourceMappingURL=index.js.map
785
735
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/locale/en-US.ts","../../../src/locale/resolve-locale.ts","../../../src/provider/context.ts","../../../src/components/toolbar/DarkModeSelector.tsx","../../../src/components/toolbar/I18nSelector.tsx","../../../src/components/toolbar/useDarkMode.ts"],"names":["createContext","useContext","useMemo","jsxs","jsx","DropdownMenu","Tooltip","cn","DropdownMenu2","Tooltip2","useState","useCallback","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { MonkeysLocale } from \"./types\";\n\nexport const enUS = {\n locale: \"en-US\",\n messages: {\n pagination: {\n navigation: \"Pagination\",\n first: \"First\",\n previous: \"Previous\",\n next: \"Next\",\n last: \"Last\",\n page: ({ page, pageCount }) => `Page ${page} of ${pageCount}`,\n currentPage: ({ page, pageCount }) =>\n `Page ${page} of ${pageCount}, current page`,\n emptyResults: \"0 results\",\n range: ({ start, end, total }) => `${start}-${end} of ${total}`,\n selected: ({ count }) => `${count} selected`,\n pageSize: \"Items per page\",\n },\n dialog: {\n close: \"Close dialog\",\n },\n dropdownMenu: {\n actions: \"Actions\",\n },\n loading: {\n spinner: \"Loading\",\n },\n layout: {\n resizePanels: \"Resize panels\",\n },\n steps: {\n label: \"Progress\",\n current: \"Current\",\n completed: \"Completed\",\n error: \"Error\",\n disabled: \"Disabled\",\n },\n numberInput: {\n increment: \"Increase value\",\n decrement: \"Decrease value\",\n },\n passwordInput: {\n showPassword: \"Show password\",\n hidePassword: \"Hide password\",\n },\n multiSelect: {\n placeholder: \"Select options\",\n empty: \"No options\",\n removeOption: ({ value }) => `Remove ${value}`,\n },\n table: {\n dragColumn: ({ columnId }) => `Drag column ${columnId}`,\n resizeColumn: ({ columnId }) => `Resize column ${columnId}`,\n sortColumn: ({ columnId }) =>\n columnId ? `Sort column ${columnId}` : \"Sort column\",\n loadingRow: \"Loading table row\",\n },\n toolbar: {\n theme: {\n label: \"Appearance\",\n toggle: \"Toggle theme\",\n auto: \"Auto\",\n light: \"Light\",\n dark: \"Dark\",\n },\n language: {\n label: \"Language\",\n switch: \"Switch language\",\n },\n },\n toast: {\n errorTitle: \"Error\",\n warningTitle: \"Warning\",\n defaultErrorDescription: \"Something went wrong.\",\n defaultWarningDescription: \"Please check and try again.\",\n },\n dataExplorer: {\n viewTree: {\n actions: \"More actions\",\n expand: \"Expand\",\n collapse: \"Collapse\",\n loading: \"Loading...\",\n empty: \"No views\",\n error: \"Unable to load views\",\n },\n },\n workbench: {\n collection: {\n label: \"Collection\",\n loading: \"Loading items\",\n empty: \"No items\",\n loadError: \"Unable to load items\",\n refreshError: \"Unable to refresh items\",\n retry: \"Retry\",\n loadingMore: \"Loading more items\",\n permission: \"You do not have permission to view this content\",\n offline: \"You appear to be offline\",\n requestAccess: \"Request access\",\n },\n interactiveTable: {\n columnActions: \"Column actions\",\n freezeColumn: \"Freeze to left\",\n freezeEndColumn: \"Freeze to right\",\n unfreezeColumn: \"Unfreeze from left\",\n unfreezeEndColumn: \"Unfreeze from right\",\n unfreezeAllColumns: \"Unfreeze all columns\",\n resetColumnWidth: \"Reset column width\",\n frozenColumnTitle: \"Frozen column\",\n },\n },\n agentWorkbench: {\n label: \"Session activity\",\n reasoning: \"Reasoning\",\n plan: \"Plan\",\n taskNoDetail: \"No additional details\",\n modes: { chat: \"Chat\", work: \"Work\" },\n composer: {\n send: \"Send message\",\n stop: \"Stop generating\",\n queue: \"Queue message\",\n attach: \"Add photos or files\",\n voice: \"Start voice input\",\n webSearch: \"Web search\",\n chatMode: \"Chat mode\",\n model: \"Model\",\n reasoning: \"Reasoning effort\",\n permissions: \"Permissions\",\n removeAttachment: \"Remove attachment\",\n editQueued: \"Edit queued message\",\n deleteQueued: \"Delete queued message\",\n moveUp: \"Move message up\",\n moveDown: \"Move message down\",\n queued: \"Queued messages\",\n uploading: \"Uploading\",\n uploadFailed: \"Upload failed\",\n retryAttachment: \"Retry attachment upload\",\n noModels: \"No models available\",\n message: \"Message\",\n attachmentOnly: \"Attachment\",\n reasoningOptions: {\n low: \"Low\",\n medium: \"Medium\",\n high: \"High\",\n xhigh: \"Extra high\",\n },\n permissionOptions: {\n \"approval-required\": \"Approval required\",\n \"auto-approve\": \"Auto approve\",\n \"full-access\": \"Full access\",\n },\n },\n quickStart: {\n label: \"Quick start\",\n back: \"Back\",\n addFile: \"Add file\",\n },\n tool: {\n input: \"Input\",\n output: \"Output\",\n status: {\n pending: \"Pending\",\n running: \"Running\",\n completed: \"Completed\",\n failed: \"Error\",\n denied: \"Denied\",\n },\n },\n approval: {\n approve: \"Approve\",\n reject: \"Reject\",\n approved: \"Approved\",\n rejected: \"Rejected\",\n },\n artifact: {\n pending: \"Preparing\",\n ready: \"Ready\",\n failed: \"Failed\",\n open: ({ name }) => `Open ${name}`,\n },\n run: {\n stopping: \"Stopping...\",\n stoppedAfter: ({ duration }) => `You stopped after ${duration}`,\n },\n process: {\n running: \"Working\",\n queued: \"Queued\",\n waitingApproval: \"Waiting for approval\",\n failed: \"Failed\",\n stopped: \"Stopped\",\n processed: \"Processed\",\n processedFor: ({ duration }) => `Worked for ${duration}`,\n completedCount: ({ completed, total }) =>\n `${completed}/${total} completed`,\n },\n artifactWorkspace: {\n outputs: \"Outputs\",\n sources: \"Sources\",\n viewAll: \"View all\",\n toggleSummary: \"Toggle files\",\n tabs: \"Open files\",\n closeTab: ({ name }) => `Close ${name}`,\n closeWorkspace: \"Close workspace\",\n download: ({ name }) => `Download ${name}`,\n openExternal: ({ name }) => `Open ${name} in a new window`,\n loading: \"Loading preview...\",\n failed: \"Preview unavailable\",\n retry: \"Try again\",\n },\n usage: {\n label: \"Context usage\",\n context: ({ used, total }) => `${used} / ${total} tokens`,\n },\n navigation: {\n search: \"Search agents and sessions\",\n searchSessions: \"Search sessions\",\n searchShortcut: \"Focus search\",\n clearSearch: \"Clear search\",\n tabsLabel: \"Agent workbench navigation\",\n agents: \"Agents\",\n sessions: \"Sessions\",\n newAgent: \"New Agent\",\n newSession: \"New Session\",\n capabilities: \"Capabilities & Extensions\",\n settings: \"Agent Settings\",\n allAgents: \"All Agents\",\n recentSessions: \"Recent Sessions\",\n chat: \"Chat\",\n work: \"Work\",\n chats: \"Chats\",\n builtIn: \"Built-in\",\n noDescription: \"No description\",\n loading: \"Loading...\",\n emptyAgents: \"No agents yet\",\n emptySessions: \"No sessions yet\",\n noResults: \"No matching results\",\n retry: \"Retry\",\n pin: \"Pin\",\n unpin: \"Unpin\",\n rename: \"Rename\",\n delete: \"Delete\",\n actions: \"Actions\",\n save: \"Save\",\n cancel: \"Cancel\",\n running: \"Running\",\n completed: \"Completed\",\n failed: \"Failed\",\n contextUsage: ({ percent }) => `${percent}% context used`,\n },\n details: {\n title: \"Task details\",\n description: \"Summary and workspace activity\",\n duration: \"Duration\",\n updated: \"Updated\",\n model: \"Model\",\n mode: \"Mode\",\n permissions: \"Permissions\",\n tokenUsage: \"Token usage\",\n summary: \"Summary\",\n summaryEmpty: \"No summary is available yet.\",\n summaryFailed: \"The summary could not be generated.\",\n highlights: \"Highlights\",\n pendingItems: \"Pending items\",\n tabs: {\n label: \"Task detail views\",\n summary: \"Summary\",\n workspace: \"Workspace\",\n },\n status: {\n queued: \"Queued\",\n running: \"Running\",\n waiting_approval: \"Waiting for approval\",\n stopping: \"Stopping\",\n stopped: \"Stopped\",\n completed: \"Completed\",\n failed: \"Failed\",\n },\n state: {\n loading: {\n title: \"Loading task details\",\n description: \"Restoring the latest session activity.\",\n },\n empty: {\n title: \"No task selected\",\n description: \"Select a task to inspect its details.\",\n },\n error: {\n title: \"Unable to load task details\",\n description: \"Try again after the session is available.\",\n },\n },\n actions: {\n close: \"Close task details\",\n copySummary: \"Copy summary\",\n retry: \"Retry\",\n retrySummary: \"Retry summary\",\n resume: \"Resume\",\n continueInNewTask: \"Continue in new task\",\n editAndRerun: \"Edit and rerun\",\n export: \"Export\",\n },\n workspace: {\n diffs: \"Code changes\",\n files: \"Files\",\n terminals: \"Terminals\",\n tests: \"Tests\",\n artifacts: \"Artifacts\",\n exitCode: ({ code }) => `Exit code ${code}`,\n diffStatus: {\n added: \"Added\",\n modified: \"Modified\",\n deleted: \"Deleted\",\n renamed: \"Renamed\",\n },\n fileOperation: { upsert: \"Updated\", delete: \"Deleted\" },\n },\n },\n },\n },\n} satisfies MonkeysLocale;\n","import { enUS } from './en-US';\nimport type {\n MonkeysBuiltInLocaleId,\n MonkeysLocale,\n MonkeysLocaleInput,\n MonkeysLocaleMessages,\n MonkeysLocaleMessagesOverride,\n MonkeysResolvedLocale,\n} from './types';\nimport { zhCN } from './zh-CN';\n\nconst BUILT_IN_LOCALES: Record<MonkeysBuiltInLocaleId, MonkeysLocale> = {\n 'en-US': enUS,\n 'zh-CN': zhCN,\n};\n\nfunction normalizeLocaleId(locale: unknown): string {\n if (typeof locale !== 'string' || !locale.trim()) {\n throw new TypeError('Monkeys locale must be a non-empty BCP 47 string.');\n }\n\n try {\n return Intl.getCanonicalLocales(locale)[0];\n } catch {\n throw new RangeError(\n `Monkeys locale \"${locale}\" is not a valid BCP 47 identifier.`,\n );\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction validateMessageOverride(\n value: unknown,\n schema: unknown,\n path: string,\n) {\n if (!isRecord(value) || !isRecord(schema)) {\n throw new TypeError(`${path} must be an object.`);\n }\n\n for (const [key, candidate] of Object.entries(value)) {\n if (candidate === undefined) continue;\n if (!(key in schema)) {\n throw new TypeError(`${path}.${key} is not a supported Monkeys message.`);\n }\n\n const expected = schema[key];\n const candidatePath = `${path}.${key}`;\n if (typeof expected === 'function') {\n if (typeof candidate !== 'function') {\n throw new TypeError(`${candidatePath} must be a function.`);\n }\n } else if (typeof expected === 'string') {\n if (typeof candidate !== 'string') {\n throw new TypeError(`${candidatePath} must be a string.`);\n }\n } else {\n validateMessageOverride(candidate, expected, candidatePath);\n }\n }\n}\n\nfunction assertMessagesOverride(\n value: unknown,\n path: string,\n): asserts value is MonkeysLocaleMessagesOverride {\n validateMessageOverride(value, enUS.messages, path);\n}\n\nfunction isBuiltInLocale(locale: string): locale is MonkeysBuiltInLocaleId {\n return locale === 'en-US' || locale === 'zh-CN';\n}\n\nfunction normalizeLocaleInput(input: MonkeysLocaleInput | undefined): {\n locale: string | undefined;\n messages: MonkeysLocaleMessagesOverride | undefined;\n hasExplicitLocale: boolean;\n} {\n if (input === undefined) {\n return {\n locale: undefined,\n messages: undefined,\n hasExplicitLocale: false,\n };\n }\n\n if (typeof input === 'string') {\n const locale = normalizeLocaleId(input);\n if (!isBuiltInLocale(locale)) {\n throw new RangeError(\n `Unsupported built-in Monkeys locale \"${locale}\". Provide a locale pack object for custom locales.`,\n );\n }\n return { locale, messages: undefined, hasExplicitLocale: true };\n }\n\n if (!input || typeof input !== 'object' || Array.isArray(input)) {\n throw new TypeError('Monkeys locale must be a locale id or locale pack object.');\n }\n\n const locale = normalizeLocaleId(input.locale);\n assertMessagesOverride(input.messages, 'Monkeys locale messages');\n\n return {\n locale,\n messages: input.messages,\n hasExplicitLocale: true,\n };\n}\n\nexport function mergeMonkeysLocaleMessages(\n base: MonkeysLocaleMessages,\n override?: MonkeysLocaleMessagesOverride,\n): MonkeysLocaleMessages {\n if (!override) return base;\n\n return {\n pagination: { ...base.pagination, ...override.pagination },\n dialog: { ...base.dialog, ...override.dialog },\n dropdownMenu: { ...base.dropdownMenu, ...override.dropdownMenu },\n loading: { ...base.loading, ...override.loading },\n layout: { ...base.layout, ...override.layout },\n steps: { ...base.steps, ...override.steps },\n numberInput: { ...base.numberInput, ...override.numberInput },\n passwordInput: { ...base.passwordInput, ...override.passwordInput },\n multiSelect: { ...base.multiSelect, ...override.multiSelect },\n table: { ...base.table, ...override.table },\n toolbar: {\n theme: { ...base.toolbar.theme, ...override.toolbar?.theme },\n language: { ...base.toolbar.language, ...override.toolbar?.language },\n },\n toast: { ...base.toast, ...override.toast },\n dataExplorer: {\n viewTree: {\n ...base.dataExplorer.viewTree,\n ...override.dataExplorer?.viewTree,\n },\n },\n workbench: {\n collection: {\n ...base.workbench.collection,\n ...override.workbench?.collection,\n },\n interactiveTable: {\n ...base.workbench.interactiveTable,\n ...override.workbench?.interactiveTable,\n },\n },\n agentWorkbench: {\n ...base.agentWorkbench,\n ...override.agentWorkbench,\n modes: {\n ...base.agentWorkbench.modes,\n ...override.agentWorkbench?.modes,\n },\n composer: {\n ...base.agentWorkbench.composer,\n ...override.agentWorkbench?.composer,\n },\n quickStart: {\n ...base.agentWorkbench.quickStart,\n ...override.agentWorkbench?.quickStart,\n },\n tool: {\n ...base.agentWorkbench.tool,\n ...override.agentWorkbench?.tool,\n status: {\n ...base.agentWorkbench.tool.status,\n ...override.agentWorkbench?.tool?.status,\n },\n },\n approval: {\n ...base.agentWorkbench.approval,\n ...override.agentWorkbench?.approval,\n },\n artifact: {\n ...base.agentWorkbench.artifact,\n ...override.agentWorkbench?.artifact,\n },\n run: {\n ...base.agentWorkbench.run,\n ...override.agentWorkbench?.run,\n },\n process: {\n ...base.agentWorkbench.process,\n ...override.agentWorkbench?.process,\n },\n artifactWorkspace: {\n ...base.agentWorkbench.artifactWorkspace,\n ...override.agentWorkbench?.artifactWorkspace,\n },\n usage: {\n ...base.agentWorkbench.usage,\n ...override.agentWorkbench?.usage,\n },\n navigation: {\n ...base.agentWorkbench.navigation,\n ...override.agentWorkbench?.navigation,\n },\n details: {\n ...base.agentWorkbench.details,\n ...override.agentWorkbench?.details,\n tabs: {\n ...base.agentWorkbench.details.tabs,\n ...override.agentWorkbench?.details?.tabs,\n },\n status: {\n ...base.agentWorkbench.details.status,\n ...override.agentWorkbench?.details?.status,\n },\n state: {\n loading: {\n ...base.agentWorkbench.details.state.loading,\n ...override.agentWorkbench?.details?.state?.loading,\n },\n empty: {\n ...base.agentWorkbench.details.state.empty,\n ...override.agentWorkbench?.details?.state?.empty,\n },\n error: {\n ...base.agentWorkbench.details.state.error,\n ...override.agentWorkbench?.details?.state?.error,\n },\n },\n actions: {\n ...base.agentWorkbench.details.actions,\n ...override.agentWorkbench?.details?.actions,\n },\n workspace: {\n ...base.agentWorkbench.details.workspace,\n ...override.agentWorkbench?.details?.workspace,\n diffStatus: {\n ...base.agentWorkbench.details.workspace.diffStatus,\n ...override.agentWorkbench?.details?.workspace?.diffStatus,\n },\n fileOperation: {\n ...base.agentWorkbench.details.workspace.fileOperation,\n ...override.agentWorkbench?.details?.workspace?.fileOperation,\n },\n },\n },\n },\n };\n}\n\nexport const defaultMonkeysLocale: MonkeysResolvedLocale = {\n locale: enUS.locale,\n messages: mergeMonkeysLocaleMessages(\n enUS.messages as MonkeysLocaleMessages,\n ),\n};\n\nexport function resolveMonkeysLocale(\n input?: MonkeysLocaleInput,\n override?: MonkeysLocaleMessagesOverride,\n parent?: MonkeysResolvedLocale,\n): MonkeysResolvedLocale {\n if (override !== undefined) {\n assertMessagesOverride(override, 'MonkeysProvider messages');\n }\n const normalized = normalizeLocaleInput(input);\n const locale = normalized.locale ?? parent?.locale ?? enUS.locale;\n const builtInMessages = isBuiltInLocale(locale)\n ? BUILT_IN_LOCALES[locale].messages\n : undefined;\n let messages = mergeMonkeysLocaleMessages(\n enUS.messages as MonkeysLocaleMessages,\n builtInMessages,\n );\n\n if (parent && (!normalized.hasExplicitLocale || parent.locale === locale)) {\n messages = mergeMonkeysLocaleMessages(messages, parent.messages);\n }\n\n messages = mergeMonkeysLocaleMessages(messages, normalized.messages);\n messages = mergeMonkeysLocaleMessages(messages, override);\n\n return { locale, messages };\n}\n","import {\n createContext,\n useContext,\n useMemo,\n type Context,\n} from 'react';\n\nimport type { BaseAppearance } from '../components/base/types';\nimport type { DataExplorerAppearance } from '../components/data-explorer/types';\nimport {\n defaultMonkeysLocale,\n type MonkeysLocaleMessages,\n type MonkeysResolvedLocale,\n} from '../locale';\nimport type { CompiledThemeTokens } from '../theme-system';\n\nexport type MonkeysDirection = 'ltr' | 'rtl';\n\nexport interface MonkeysEnvironment {\n getDocument?: () => Document | null;\n getWindow?: () => Window | null;\n}\n\nexport type MonkeysPortalContainer =\n | Element\n | null\n | (() => Element | null);\n\nexport interface MonkeysPortalOptions {\n container?: MonkeysPortalContainer;\n disabled?: boolean;\n}\n\nexport type MonkeysLoadingStateVariant = 'spinner' | 'skeleton';\nexport type MonkeysEmptyStateVariant = 'default' | 'compact';\nexport type MonkeysStatusStateDensity = 'compact' | 'default' | 'comfortable';\n\nexport type MonkeysListFooterPaginationMode = 'auto' | 'pages' | 'compact';\nexport type MonkeysListFooterAlignment = 'start' | 'end' | 'space-between';\n\nexport interface MonkeysListFooterConfig {\n showTotal?: boolean;\n showPageSize?: boolean;\n pageSizeOptions?: number[];\n paginationMode?: MonkeysListFooterPaginationMode;\n alignment?: MonkeysListFooterAlignment;\n density?: MonkeysStatusStateDensity;\n}\n\nexport interface MonkeysStatusStatesConfig {\n loading?: { variant?: MonkeysLoadingStateVariant };\n empty?: { variant?: MonkeysEmptyStateVariant };\n error?: { showRetry?: boolean };\n permission?: { showRequestAccess?: boolean };\n density?: MonkeysStatusStateDensity;\n}\n\nexport interface MonkeysComponentAttributes {\n dir?: MonkeysDirection;\n 'data-monkeys-direction'?: MonkeysDirection;\n 'data-monkeys-locale'?: string;\n 'data-monkeys-theme'?: string;\n 'data-monkeys-theme-mode'?: string;\n}\n\ninterface MonkeysLocaleContextValue extends MonkeysResolvedLocale {\n provided: boolean;\n}\n\ninterface MonkeysThemeContextValue {\n provided: boolean;\n resolvedTheme?: CompiledThemeTokens;\n themeId?: string;\n baseAppearance?: BaseAppearance;\n dataExplorerAppearance?: DataExplorerAppearance;\n statusStates?: MonkeysStatusStatesConfig;\n listFooter?: MonkeysListFooterConfig;\n}\n\ninterface MonkeysDirectionContextValue {\n provided: boolean;\n direction?: MonkeysDirection;\n}\n\ninterface MonkeysEnvironmentContextValue {\n provided: boolean;\n environment: MonkeysEnvironment;\n portal: MonkeysPortalOptions;\n}\n\nconst EMPTY_ENVIRONMENT = Object.freeze({}) satisfies MonkeysEnvironment;\nconst EMPTY_PORTAL = Object.freeze({}) satisfies MonkeysPortalOptions;\n\ninterface MonkeysProviderContexts {\n locale: Context<MonkeysLocaleContextValue>;\n theme: Context<MonkeysThemeContextValue>;\n direction: Context<MonkeysDirectionContextValue>;\n environment: Context<MonkeysEnvironmentContextValue>;\n}\n\n// Every bundled public entry contains this module. Keep only the Context\n// identities in a realm-wide registry so root, provider, and component\n// subpaths interoperate in both CJS and ESM builds. Provider values remain in\n// React trees, so SSR requests are isolated. Bump the contract key only when\n// these Context value shapes become intentionally incompatible.\nconst MONKEYS_PROVIDER_CONTEXTS_KEY = Symbol.for(\n '@inf-monkeys-tech/monkeys-design/provider-context@1',\n);\n\ntype MonkeysProviderContextHost = typeof globalThis & {\n [MONKEYS_PROVIDER_CONTEXTS_KEY]?: MonkeysProviderContexts;\n};\n\nfunction createMonkeysProviderContexts(): MonkeysProviderContexts {\n return Object.freeze({\n locale: createContext<MonkeysLocaleContextValue>({\n ...defaultMonkeysLocale,\n provided: false,\n }),\n theme: createContext<MonkeysThemeContextValue>({\n provided: false,\n }),\n direction: createContext<MonkeysDirectionContextValue>({\n provided: false,\n }),\n environment: createContext<MonkeysEnvironmentContextValue>({\n provided: false,\n environment: EMPTY_ENVIRONMENT,\n portal: EMPTY_PORTAL,\n }),\n });\n}\n\nfunction getMonkeysProviderContexts(): MonkeysProviderContexts {\n const host = globalThis as MonkeysProviderContextHost;\n const existing = host[MONKEYS_PROVIDER_CONTEXTS_KEY];\n if (existing) return existing;\n\n const contexts = createMonkeysProviderContexts();\n Object.defineProperty(host, MONKEYS_PROVIDER_CONTEXTS_KEY, {\n value: contexts,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return contexts;\n}\n\nconst providerContexts = getMonkeysProviderContexts();\n\nexport const MonkeysLocaleContext = providerContexts.locale;\n\nexport const MonkeysThemeContext = providerContexts.theme;\n\nexport const MonkeysDirectionContext = providerContexts.direction;\n\nexport const MonkeysEnvironmentContext = providerContexts.environment;\n\nfunction mergeAppearance<T extends { slots?: object; styles?: object }>(\n inherited: T | undefined,\n explicit: T | undefined,\n): T | undefined {\n if (explicit === undefined) return inherited;\n if (inherited === undefined) return explicit;\n\n return {\n ...inherited,\n ...explicit,\n slots:\n inherited.slots || explicit.slots\n ? { ...inherited.slots, ...explicit.slots }\n : undefined,\n styles:\n inherited.styles || explicit.styles\n ? { ...inherited.styles, ...explicit.styles }\n : undefined,\n };\n}\n\nexport function useMonkeysLocale() {\n return useContext(MonkeysLocaleContext);\n}\n\nexport function useMonkeysLocaleMessages(): MonkeysLocaleMessages {\n return useContext(MonkeysLocaleContext).messages;\n}\n\nexport function useMonkeysResolvedTheme() {\n return useContext(MonkeysThemeContext).resolvedTheme;\n}\n\nexport function useMonkeysBaseAppearance(\n explicit?: BaseAppearance,\n): BaseAppearance | undefined {\n const inherited = useContext(MonkeysThemeContext).baseAppearance;\n return useMemo(\n () => mergeAppearance(inherited, explicit),\n [explicit, inherited],\n );\n}\n\nexport function useMonkeysDataExplorerAppearance(\n explicit?: DataExplorerAppearance,\n): DataExplorerAppearance | undefined {\n const inherited = useContext(MonkeysThemeContext).dataExplorerAppearance;\n return useMemo(\n () => mergeAppearance(inherited, explicit),\n [explicit, inherited],\n );\n}\n\nexport function useMonkeysStatusStates(): MonkeysStatusStatesConfig {\n return useContext(MonkeysThemeContext).statusStates ?? {};\n}\n\nexport function useMonkeysListFooter(): MonkeysListFooterConfig {\n return useContext(MonkeysThemeContext).listFooter ?? {};\n}\n\nexport function useMonkeysDirection() {\n return useContext(MonkeysDirectionContext).direction;\n}\n\nexport function useMonkeysEnvironment() {\n return useContext(MonkeysEnvironmentContext).environment;\n}\n\nexport function useMonkeysPortalOptions() {\n return useContext(MonkeysEnvironmentContext).portal;\n}\n\nexport function useMonkeysComponentAttributes(): MonkeysComponentAttributes {\n const locale = useContext(MonkeysLocaleContext);\n const theme = useContext(MonkeysThemeContext);\n const direction = useContext(MonkeysDirectionContext);\n const providerActive = locale.provided || theme.provided || direction.provided;\n\n return useMemo(\n () =>\n providerActive\n ? {\n dir: direction.direction,\n 'data-monkeys-direction': direction.direction,\n 'data-monkeys-locale': locale.locale,\n 'data-monkeys-theme': theme.themeId,\n 'data-monkeys-theme-mode': theme.resolvedTheme?.colorMode,\n }\n : {},\n [\n direction.direction,\n locale.locale,\n providerActive,\n theme.resolvedTheme?.colorMode,\n theme.themeId,\n ],\n );\n}\n","import * as React from 'react';\nimport * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport * as Tooltip from '@radix-ui/react-tooltip';\n\nimport {\n useMonkeysComponentAttributes,\n useMonkeysLocale,\n} from '../../provider/context';\n\nfunction cn(...inputs: (string | undefined | null | false)[]): string {\n return inputs.filter(Boolean).join(' ');\n}\n\n// ---------- Inline SVG Icons ----------\n\nfunction SunIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" /><path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" /><path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" /><path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" /><path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n );\n}\n\nfunction MoonIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n );\n}\n\nfunction MonitorIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\" />\n <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\" />\n <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\" />\n </svg>\n );\n}\n\n// ---------- Component ----------\n\nexport type DarkModeValue = 'auto' | 'light' | 'dark';\n\nexport interface DarkModeSelectorProps {\n mode: DarkModeValue;\n onModeChange: (mode: DarkModeValue) => void;\n labels?: { auto?: string; light?: string; dark?: string };\n tooltip?: string;\n className?: string;\n}\n\nconst triggerIconMap: Record<DarkModeValue, React.FC<{ className?: string }>> = {\n light: SunIcon,\n dark: MoonIcon,\n auto: MonitorIcon,\n};\n\nexport function DarkModeSelector({\n mode,\n onModeChange,\n labels = {},\n tooltip,\n className,\n}: DarkModeSelectorProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const localeLabels = locale.messages.toolbar.theme;\n const TriggerIcon = triggerIconMap[mode];\n const resolvedLabels = {\n auto: labels.auto ?? localeLabels.auto,\n light: labels.light ?? localeLabels.light,\n dark: labels.dark ?? localeLabels.dark,\n };\n\n const options: { value: DarkModeValue; label: string; Icon: React.FC<{ className?: string }> }[] = [\n { value: 'auto', label: resolvedLabels.auto, Icon: MonitorIcon },\n { value: 'light', label: resolvedLabels.light, Icon: SunIcon },\n { value: 'dark', label: resolvedLabels.dark, Icon: MoonIcon },\n ];\n\n const trigger = (\n <DropdownMenu.Trigger asChild>\n <button\n {...componentAttributes}\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-[hsl(var(--foreground))] hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] transition-colors focus-visible:outline-none',\n className,\n )}\n >\n <TriggerIcon />\n <span className=\"sr-only\">{tooltip ?? localeLabels.toggle}</span>\n </button>\n </DropdownMenu.Trigger>\n );\n\n return (\n <DropdownMenu.Root>\n {tooltip ? (\n <Tooltip.Provider delayDuration={300}>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{trigger}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n className=\"rounded-md bg-[hsl(var(--popover))] px-3 py-1.5 text-xs text-[hsl(var(--popover-foreground))] shadow-md border border-[hsl(var(--border))] animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n >\n {tooltip}\n <Tooltip.Arrow className=\"fill-[hsl(var(--popover))]\" />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n ) : (\n trigger\n )}\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n align=\"end\"\n >\n {options.map(({ value, label, Icon }) => (\n <DropdownMenu.Item\n key={value}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))]',\n mode === value && 'bg-[hsl(var(--accent))]',\n )}\n onSelect={() => onModeChange(value)}\n >\n <Icon className=\"h-4 w-4\" />\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n}\n\n// ---------- Sub-menu variant (for embedding in user dropdown) ----------\n\nfunction SunMoonIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <path d=\"M12 8a2.83 2.83 0 0 0 4 4 4 4 0 1 1-4-4\" />\n <path d=\"M12 2v2\" /><path d=\"M12 20v2\" />\n <path d=\"m4.9 4.9 1.4 1.4\" /><path d=\"m17.7 17.7 1.4 1.4\" />\n <path d=\"M2 12h2\" /><path d=\"M20 12h2\" />\n <path d=\"m6.3 17.7-1.4 1.4\" /><path d=\"m19.1 4.9-1.4 1.4\" />\n </svg>\n );\n}\n\nexport interface DarkModeSubMenuProps {\n mode: DarkModeValue;\n onModeChange: (mode: DarkModeValue) => void;\n label?: string;\n labels?: { auto?: string; light?: string; dark?: string };\n}\n\n/**\n * A DropdownMenuSub component for embedding dark mode selector\n * inside a Radix DropdownMenu (e.g. user avatar menu).\n * Must be rendered as a child of DropdownMenu.Group / DropdownMenu.Content.\n */\nexport function DarkModeSubMenu({\n mode,\n onModeChange,\n label,\n labels = {},\n}: DarkModeSubMenuProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const localeLabels = locale.messages.toolbar.theme;\n const fallbackLabels = locale.provided\n ? localeLabels\n : {\n label: '外观',\n auto: '跟随系统',\n light: '浅色模式',\n dark: '深色模式',\n };\n const resolvedLabels = {\n auto: labels.auto ?? fallbackLabels.auto,\n light: labels.light ?? fallbackLabels.light,\n dark: labels.dark ?? fallbackLabels.dark,\n };\n\n const currentLabel = mode === 'auto' ? resolvedLabels.auto : mode === 'dark' ? resolvedLabels.dark : resolvedLabels.light;\n\n const options: { value: DarkModeValue; label: string; Icon: React.FC<{ className?: string }> }[] = [\n { value: 'auto', label: resolvedLabels.auto, Icon: MonitorIcon },\n { value: 'light', label: resolvedLabels.light, Icon: SunIcon },\n { value: 'dark', label: resolvedLabels.dark, Icon: MoonIcon },\n ];\n\n return (\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger\n {...componentAttributes}\n className=\"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[state=open]:bg-[hsl(var(--accent))]\"\n >\n <SunMoonIcon className=\"h-4 w-4\" />\n <span>{label ?? fallbackLabels.label}</span>\n <span className=\"ml-auto text-xs text-[hsl(var(--muted-foreground))]\">{currentLabel}</span>\n </DropdownMenu.SubTrigger>\n <DropdownMenu.Portal>\n <DropdownMenu.SubContent\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={8}\n >\n {options.map(({ value, label: optLabel, Icon }) => (\n <DropdownMenu.CheckboxItem\n key={value}\n checked={mode === value}\n disabled={mode === value}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 pl-7 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n )}\n onCheckedChange={() => onModeChange(value)}\n >\n <DropdownMenu.ItemIndicator className=\"absolute left-2 inline-flex items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>\n </DropdownMenu.ItemIndicator>\n <Icon className=\"h-4 w-4\" />\n {optLabel}\n </DropdownMenu.CheckboxItem>\n ))}\n </DropdownMenu.SubContent>\n </DropdownMenu.Portal>\n </DropdownMenu.Sub>\n );\n}\n","import * as React from 'react';\nimport * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport * as Tooltip from '@radix-ui/react-tooltip';\n\nimport {\n useMonkeysComponentAttributes,\n useMonkeysLocale,\n} from '../../provider/context';\n\nfunction cn(...inputs: (string | undefined | null | false)[]): string {\n return inputs.filter(Boolean).join(' ');\n}\n\n// ---------- Inline SVG Icon ----------\n\nfunction GlobeIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n );\n}\n\n// ---------- Component ----------\n\nexport interface I18nLanguage {\n code: string;\n label: string;\n}\n\nexport interface I18nSelectorProps {\n languages: I18nLanguage[];\n currentLanguage: string;\n onLanguageChange: (code: string) => void;\n tooltip?: string;\n className?: string;\n}\n\nexport function I18nSelector({\n languages,\n currentLanguage,\n onLanguageChange,\n tooltip,\n className,\n}: I18nSelectorProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const trigger = (\n <DropdownMenu.Trigger asChild>\n <button\n {...componentAttributes}\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-[hsl(var(--foreground))] hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] transition-colors focus-visible:outline-none',\n className,\n )}\n >\n <GlobeIcon />\n <span className=\"sr-only\">\n {tooltip ?? locale.messages.toolbar.language.switch}\n </span>\n </button>\n </DropdownMenu.Trigger>\n );\n\n return (\n <DropdownMenu.Root>\n {tooltip ? (\n <Tooltip.Provider delayDuration={300}>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{trigger}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n className=\"rounded-md bg-[hsl(var(--popover))] px-3 py-1.5 text-xs text-[hsl(var(--popover-foreground))] shadow-md border border-[hsl(var(--border))] animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n >\n {tooltip}\n <Tooltip.Arrow className=\"fill-[hsl(var(--popover))]\" />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n ) : (\n trigger\n )}\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n align=\"end\"\n >\n {languages.map(({ code, label }) => (\n <DropdownMenu.Item\n key={code}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))]',\n currentLanguage === code && 'bg-[hsl(var(--accent))]',\n )}\n onSelect={() => onLanguageChange(code)}\n >\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n}\n\n// ---------- Sub-menu variant (for embedding in user dropdown) ----------\n\nexport interface I18nSubMenuProps {\n languages: I18nLanguage[];\n currentLanguage: string;\n onLanguageChange: (code: string) => void;\n label?: string;\n}\n\n/**\n * A DropdownMenuSub component for embedding language selector\n * inside a Radix DropdownMenu (e.g. user avatar menu).\n * Must be rendered as a child of DropdownMenu.Group / DropdownMenu.Content.\n */\nexport function I18nSubMenu({\n languages,\n currentLanguage,\n onLanguageChange,\n label,\n}: I18nSubMenuProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const fallbackLabel = locale.provided\n ? locale.messages.toolbar.language.label\n : '语言';\n const currentLabel = languages.find((l) => l.code === currentLanguage)?.label ?? currentLanguage;\n\n return (\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger\n {...componentAttributes}\n className=\"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[state=open]:bg-[hsl(var(--accent))]\"\n >\n <GlobeIcon className=\"h-4 w-4\" />\n <span>{label ?? fallbackLabel}</span>\n <span className=\"ml-auto text-xs text-[hsl(var(--muted-foreground))]\">{currentLabel}</span>\n </DropdownMenu.SubTrigger>\n <DropdownMenu.Portal>\n <DropdownMenu.SubContent\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={8}\n >\n {languages.map(({ code, label: langLabel }) => (\n <DropdownMenu.CheckboxItem\n key={code}\n checked={currentLanguage === code}\n disabled={currentLanguage === code}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 pl-7 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n )}\n onCheckedChange={() => onLanguageChange(code)}\n >\n <DropdownMenu.ItemIndicator className=\"absolute left-2 inline-flex items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>\n </DropdownMenu.ItemIndicator>\n {langLabel}\n </DropdownMenu.CheckboxItem>\n ))}\n </DropdownMenu.SubContent>\n </DropdownMenu.Portal>\n </DropdownMenu.Sub>\n );\n}\n","import { useEffect, useState, useCallback } from 'react';\n\nexport type DarkModeValue = 'auto' | 'light' | 'dark';\n\nconst STORAGE_KEY = 'monkeys-dark-mode';\n\nfunction getStoredMode(): DarkModeValue {\n if (typeof window === 'undefined') return 'auto';\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored === 'light' || stored === 'dark' || stored === 'auto') return stored;\n return 'auto';\n}\n\nfunction getSystemPrefersDark(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n}\n\nfunction resolve(mode: DarkModeValue): 'light' | 'dark' {\n if (mode === 'auto') return getSystemPrefersDark() ? 'dark' : 'light';\n return mode;\n}\n\nfunction applyClass(resolved: 'light' | 'dark') {\n const el = document.documentElement;\n if (resolved === 'dark') {\n el.classList.add('dark');\n } else {\n el.classList.remove('dark');\n }\n}\n\nexport interface UseDarkModeReturn {\n mode: DarkModeValue;\n setMode: (mode: DarkModeValue) => void;\n resolvedMode: 'light' | 'dark';\n}\n\n/**\n * Reads/writes dark-mode preference to localStorage, listens to\n * `prefers-color-scheme` for auto mode, and toggles `.dark` on `<html>`.\n */\nexport function useDarkMode(): UseDarkModeReturn {\n const [mode, setModeState] = useState<DarkModeValue>(getStoredMode);\n const [resolvedMode, setResolvedMode] = useState<'light' | 'dark'>(() => resolve(mode));\n\n const setMode = useCallback((next: DarkModeValue) => {\n localStorage.setItem(STORAGE_KEY, next);\n setModeState(next);\n const r = resolve(next);\n setResolvedMode(r);\n applyClass(r);\n }, []);\n\n // Apply on mount\n useEffect(() => {\n applyClass(resolvedMode);\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Listen to system preference changes for auto mode\n useEffect(() => {\n if (mode !== 'auto') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => {\n const r = e.matches ? 'dark' : 'light';\n setResolvedMode(r);\n applyClass(r);\n };\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [mode]);\n\n return { mode, setMode, resolvedMode };\n}\n"]}
1
+ {"version":3,"sources":["../../../src/locale/en-US.ts","../../../src/locale/resolve-locale.ts","../../../src/provider/context.ts","../../../src/components/toolbar/DarkModeSelector.tsx","../../../src/components/toolbar/I18nSelector.tsx"],"names":["createContext","useContext","useMemo","jsxs","jsx","DropdownMenu","Tooltip","cn","DropdownMenu2","Tooltip2"],"mappings":"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","file":"index.js","sourcesContent":["import type { MonkeysLocale } from \"./types\";\n\nexport const enUS = {\n locale: \"en-US\",\n messages: {\n pagination: {\n navigation: \"Pagination\",\n first: \"First\",\n previous: \"Previous\",\n next: \"Next\",\n last: \"Last\",\n page: ({ page, pageCount }) => `Page ${page} of ${pageCount}`,\n currentPage: ({ page, pageCount }) =>\n `Page ${page} of ${pageCount}, current page`,\n emptyResults: \"0 results\",\n range: ({ start, end, total }) => `${start}-${end} of ${total}`,\n selected: ({ count }) => `${count} selected`,\n pageSize: \"Items per page\",\n },\n dialog: {\n close: \"Close dialog\",\n },\n dropdownMenu: {\n actions: \"Actions\",\n },\n loading: {\n spinner: \"Loading\",\n },\n layout: {\n resizePanels: \"Resize panels\",\n },\n steps: {\n label: \"Progress\",\n current: \"Current\",\n completed: \"Completed\",\n error: \"Error\",\n disabled: \"Disabled\",\n },\n numberInput: {\n increment: \"Increase value\",\n decrement: \"Decrease value\",\n },\n passwordInput: {\n showPassword: \"Show password\",\n hidePassword: \"Hide password\",\n },\n multiSelect: {\n placeholder: \"Select options\",\n empty: \"No options\",\n removeOption: ({ value }) => `Remove ${value}`,\n },\n table: {\n dragColumn: ({ columnId }) => `Drag column ${columnId}`,\n resizeColumn: ({ columnId }) => `Resize column ${columnId}`,\n sortColumn: ({ columnId }) =>\n columnId ? `Sort column ${columnId}` : \"Sort column\",\n loadingRow: \"Loading table row\",\n },\n toolbar: {\n theme: {\n label: \"Appearance\",\n toggle: \"Toggle theme\",\n auto: \"Auto\",\n light: \"Light\",\n dark: \"Dark\",\n },\n language: {\n label: \"Language\",\n switch: \"Switch language\",\n },\n },\n toast: {\n errorTitle: \"Error\",\n warningTitle: \"Warning\",\n defaultErrorDescription: \"Something went wrong.\",\n defaultWarningDescription: \"Please check and try again.\",\n },\n dataExplorer: {\n viewTree: {\n actions: \"More actions\",\n expand: \"Expand\",\n collapse: \"Collapse\",\n loading: \"Loading...\",\n empty: \"No views\",\n error: \"Unable to load views\",\n },\n },\n workbench: {\n collection: {\n label: \"Collection\",\n loading: \"Loading items\",\n empty: \"No items\",\n loadError: \"Unable to load items\",\n refreshError: \"Unable to refresh items\",\n retry: \"Retry\",\n loadingMore: \"Loading more items\",\n permission: \"You do not have permission to view this content\",\n offline: \"You appear to be offline\",\n requestAccess: \"Request access\",\n },\n interactiveTable: {\n columnActions: \"Column actions\",\n freezeColumn: \"Freeze to left\",\n freezeEndColumn: \"Freeze to right\",\n unfreezeColumn: \"Unfreeze from left\",\n unfreezeEndColumn: \"Unfreeze from right\",\n unfreezeAllColumns: \"Unfreeze all columns\",\n resetColumnWidth: \"Reset column width\",\n frozenColumnTitle: \"Frozen column\",\n },\n },\n agentWorkbench: {\n label: \"Session activity\",\n reasoning: \"Reasoning\",\n plan: \"Plan\",\n taskNoDetail: \"No additional details\",\n modes: { chat: \"Chat\", work: \"Work\" },\n composer: {\n send: \"Send message\",\n stop: \"Stop generating\",\n queue: \"Queue message\",\n attach: \"Add photos or files\",\n voice: \"Start voice input\",\n webSearch: \"Web search\",\n chatMode: \"Chat mode\",\n model: \"Model\",\n reasoning: \"Reasoning effort\",\n permissions: \"Permissions\",\n removeAttachment: \"Remove attachment\",\n editQueued: \"Edit queued message\",\n deleteQueued: \"Delete queued message\",\n moveUp: \"Move message up\",\n moveDown: \"Move message down\",\n queued: \"Queued messages\",\n uploading: \"Uploading\",\n uploadFailed: \"Upload failed\",\n retryAttachment: \"Retry attachment upload\",\n noModels: \"No models available\",\n message: \"Message\",\n attachmentOnly: \"Attachment\",\n reasoningOptions: {\n low: \"Low\",\n medium: \"Medium\",\n high: \"High\",\n xhigh: \"Extra high\",\n },\n permissionOptions: {\n \"approval-required\": \"Approval required\",\n \"auto-approve\": \"Auto approve\",\n \"full-access\": \"Full access\",\n },\n },\n quickStart: {\n label: \"Quick start\",\n back: \"Back\",\n addFile: \"Add file\",\n },\n tool: {\n input: \"Input\",\n output: \"Output\",\n status: {\n pending: \"Pending\",\n running: \"Running\",\n completed: \"Completed\",\n failed: \"Error\",\n denied: \"Denied\",\n },\n },\n approval: {\n approve: \"Approve\",\n reject: \"Reject\",\n approved: \"Approved\",\n rejected: \"Rejected\",\n },\n artifact: {\n pending: \"Preparing\",\n ready: \"Ready\",\n failed: \"Failed\",\n open: ({ name }) => `Open ${name}`,\n },\n run: {\n stopping: \"Stopping...\",\n stoppedAfter: ({ duration }) => `You stopped after ${duration}`,\n },\n process: {\n running: \"Working\",\n queued: \"Queued\",\n waitingApproval: \"Waiting for approval\",\n failed: \"Failed\",\n stopped: \"Stopped\",\n processed: \"Processed\",\n processedFor: ({ duration }) => `Worked for ${duration}`,\n completedCount: ({ completed, total }) =>\n `${completed}/${total} completed`,\n },\n artifactWorkspace: {\n outputs: \"Outputs\",\n sources: \"Sources\",\n viewAll: \"View all\",\n toggleSummary: \"Toggle files\",\n tabs: \"Open files\",\n closeTab: ({ name }) => `Close ${name}`,\n closeWorkspace: \"Close workspace\",\n download: ({ name }) => `Download ${name}`,\n openExternal: ({ name }) => `Open ${name} in a new window`,\n loading: \"Loading preview...\",\n failed: \"Preview unavailable\",\n retry: \"Try again\",\n },\n usage: {\n label: \"Context usage\",\n context: ({ used, total }) => `${used} / ${total} tokens`,\n },\n navigation: {\n search: \"Search agents and sessions\",\n searchSessions: \"Search sessions\",\n searchShortcut: \"Focus search\",\n clearSearch: \"Clear search\",\n tabsLabel: \"Agent workbench navigation\",\n agents: \"Agents\",\n sessions: \"Sessions\",\n newAgent: \"New Agent\",\n newSession: \"New Session\",\n capabilities: \"Capabilities & Extensions\",\n settings: \"Agent Settings\",\n allAgents: \"All Agents\",\n recentSessions: \"Recent Sessions\",\n chat: \"Chat\",\n work: \"Work\",\n chats: \"Chats\",\n builtIn: \"Built-in\",\n noDescription: \"No description\",\n loading: \"Loading...\",\n emptyAgents: \"No agents yet\",\n emptySessions: \"No sessions yet\",\n noResults: \"No matching results\",\n retry: \"Retry\",\n pin: \"Pin\",\n unpin: \"Unpin\",\n rename: \"Rename\",\n delete: \"Delete\",\n actions: \"Actions\",\n save: \"Save\",\n cancel: \"Cancel\",\n running: \"Running\",\n completed: \"Completed\",\n failed: \"Failed\",\n contextUsage: ({ percent }) => `${percent}% context used`,\n },\n details: {\n title: \"Task details\",\n description: \"Summary and workspace activity\",\n duration: \"Duration\",\n updated: \"Updated\",\n model: \"Model\",\n mode: \"Mode\",\n permissions: \"Permissions\",\n tokenUsage: \"Token usage\",\n summary: \"Summary\",\n summaryEmpty: \"No summary is available yet.\",\n summaryFailed: \"The summary could not be generated.\",\n highlights: \"Highlights\",\n pendingItems: \"Pending items\",\n tabs: {\n label: \"Task detail views\",\n summary: \"Summary\",\n workspace: \"Workspace\",\n },\n status: {\n queued: \"Queued\",\n running: \"Running\",\n waiting_approval: \"Waiting for approval\",\n stopping: \"Stopping\",\n stopped: \"Stopped\",\n completed: \"Completed\",\n failed: \"Failed\",\n },\n state: {\n loading: {\n title: \"Loading task details\",\n description: \"Restoring the latest session activity.\",\n },\n empty: {\n title: \"No task selected\",\n description: \"Select a task to inspect its details.\",\n },\n error: {\n title: \"Unable to load task details\",\n description: \"Try again after the session is available.\",\n },\n },\n actions: {\n close: \"Close task details\",\n copySummary: \"Copy summary\",\n retry: \"Retry\",\n retrySummary: \"Retry summary\",\n resume: \"Resume\",\n continueInNewTask: \"Continue in new task\",\n editAndRerun: \"Edit and rerun\",\n export: \"Export\",\n },\n workspace: {\n diffs: \"Code changes\",\n files: \"Files\",\n terminals: \"Terminals\",\n tests: \"Tests\",\n artifacts: \"Artifacts\",\n exitCode: ({ code }) => `Exit code ${code}`,\n diffStatus: {\n added: \"Added\",\n modified: \"Modified\",\n deleted: \"Deleted\",\n renamed: \"Renamed\",\n },\n fileOperation: { upsert: \"Updated\", delete: \"Deleted\" },\n },\n },\n },\n },\n} satisfies MonkeysLocale;\n","import { enUS } from './en-US';\nimport type {\n MonkeysBuiltInLocaleId,\n MonkeysLocale,\n MonkeysLocaleInput,\n MonkeysLocaleMessages,\n MonkeysLocaleMessagesOverride,\n MonkeysResolvedLocale,\n} from './types';\nimport { zhCN } from './zh-CN';\n\nconst BUILT_IN_LOCALES: Record<MonkeysBuiltInLocaleId, MonkeysLocale> = {\n 'en-US': enUS,\n 'zh-CN': zhCN,\n};\n\nfunction normalizeLocaleId(locale: unknown): string {\n if (typeof locale !== 'string' || !locale.trim()) {\n throw new TypeError('Monkeys locale must be a non-empty BCP 47 string.');\n }\n\n try {\n return Intl.getCanonicalLocales(locale)[0];\n } catch {\n throw new RangeError(\n `Monkeys locale \"${locale}\" is not a valid BCP 47 identifier.`,\n );\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction validateMessageOverride(\n value: unknown,\n schema: unknown,\n path: string,\n) {\n if (!isRecord(value) || !isRecord(schema)) {\n throw new TypeError(`${path} must be an object.`);\n }\n\n for (const [key, candidate] of Object.entries(value)) {\n if (candidate === undefined) continue;\n if (!(key in schema)) {\n throw new TypeError(`${path}.${key} is not a supported Monkeys message.`);\n }\n\n const expected = schema[key];\n const candidatePath = `${path}.${key}`;\n if (typeof expected === 'function') {\n if (typeof candidate !== 'function') {\n throw new TypeError(`${candidatePath} must be a function.`);\n }\n } else if (typeof expected === 'string') {\n if (typeof candidate !== 'string') {\n throw new TypeError(`${candidatePath} must be a string.`);\n }\n } else {\n validateMessageOverride(candidate, expected, candidatePath);\n }\n }\n}\n\nfunction assertMessagesOverride(\n value: unknown,\n path: string,\n): asserts value is MonkeysLocaleMessagesOverride {\n validateMessageOverride(value, enUS.messages, path);\n}\n\nfunction isBuiltInLocale(locale: string): locale is MonkeysBuiltInLocaleId {\n return locale === 'en-US' || locale === 'zh-CN';\n}\n\nfunction normalizeLocaleInput(input: MonkeysLocaleInput | undefined): {\n locale: string | undefined;\n messages: MonkeysLocaleMessagesOverride | undefined;\n hasExplicitLocale: boolean;\n} {\n if (input === undefined) {\n return {\n locale: undefined,\n messages: undefined,\n hasExplicitLocale: false,\n };\n }\n\n if (typeof input === 'string') {\n const locale = normalizeLocaleId(input);\n if (!isBuiltInLocale(locale)) {\n throw new RangeError(\n `Unsupported built-in Monkeys locale \"${locale}\". Provide a locale pack object for custom locales.`,\n );\n }\n return { locale, messages: undefined, hasExplicitLocale: true };\n }\n\n if (!input || typeof input !== 'object' || Array.isArray(input)) {\n throw new TypeError('Monkeys locale must be a locale id or locale pack object.');\n }\n\n const locale = normalizeLocaleId(input.locale);\n assertMessagesOverride(input.messages, 'Monkeys locale messages');\n\n return {\n locale,\n messages: input.messages,\n hasExplicitLocale: true,\n };\n}\n\nexport function mergeMonkeysLocaleMessages(\n base: MonkeysLocaleMessages,\n override?: MonkeysLocaleMessagesOverride,\n): MonkeysLocaleMessages {\n if (!override) return base;\n\n return {\n pagination: { ...base.pagination, ...override.pagination },\n dialog: { ...base.dialog, ...override.dialog },\n dropdownMenu: { ...base.dropdownMenu, ...override.dropdownMenu },\n loading: { ...base.loading, ...override.loading },\n layout: { ...base.layout, ...override.layout },\n steps: { ...base.steps, ...override.steps },\n numberInput: { ...base.numberInput, ...override.numberInput },\n passwordInput: { ...base.passwordInput, ...override.passwordInput },\n multiSelect: { ...base.multiSelect, ...override.multiSelect },\n table: { ...base.table, ...override.table },\n toolbar: {\n theme: { ...base.toolbar.theme, ...override.toolbar?.theme },\n language: { ...base.toolbar.language, ...override.toolbar?.language },\n },\n toast: { ...base.toast, ...override.toast },\n dataExplorer: {\n viewTree: {\n ...base.dataExplorer.viewTree,\n ...override.dataExplorer?.viewTree,\n },\n },\n workbench: {\n collection: {\n ...base.workbench.collection,\n ...override.workbench?.collection,\n },\n interactiveTable: {\n ...base.workbench.interactiveTable,\n ...override.workbench?.interactiveTable,\n },\n },\n agentWorkbench: {\n ...base.agentWorkbench,\n ...override.agentWorkbench,\n modes: {\n ...base.agentWorkbench.modes,\n ...override.agentWorkbench?.modes,\n },\n composer: {\n ...base.agentWorkbench.composer,\n ...override.agentWorkbench?.composer,\n },\n quickStart: {\n ...base.agentWorkbench.quickStart,\n ...override.agentWorkbench?.quickStart,\n },\n tool: {\n ...base.agentWorkbench.tool,\n ...override.agentWorkbench?.tool,\n status: {\n ...base.agentWorkbench.tool.status,\n ...override.agentWorkbench?.tool?.status,\n },\n },\n approval: {\n ...base.agentWorkbench.approval,\n ...override.agentWorkbench?.approval,\n },\n artifact: {\n ...base.agentWorkbench.artifact,\n ...override.agentWorkbench?.artifact,\n },\n run: {\n ...base.agentWorkbench.run,\n ...override.agentWorkbench?.run,\n },\n process: {\n ...base.agentWorkbench.process,\n ...override.agentWorkbench?.process,\n },\n artifactWorkspace: {\n ...base.agentWorkbench.artifactWorkspace,\n ...override.agentWorkbench?.artifactWorkspace,\n },\n usage: {\n ...base.agentWorkbench.usage,\n ...override.agentWorkbench?.usage,\n },\n navigation: {\n ...base.agentWorkbench.navigation,\n ...override.agentWorkbench?.navigation,\n },\n details: {\n ...base.agentWorkbench.details,\n ...override.agentWorkbench?.details,\n tabs: {\n ...base.agentWorkbench.details.tabs,\n ...override.agentWorkbench?.details?.tabs,\n },\n status: {\n ...base.agentWorkbench.details.status,\n ...override.agentWorkbench?.details?.status,\n },\n state: {\n loading: {\n ...base.agentWorkbench.details.state.loading,\n ...override.agentWorkbench?.details?.state?.loading,\n },\n empty: {\n ...base.agentWorkbench.details.state.empty,\n ...override.agentWorkbench?.details?.state?.empty,\n },\n error: {\n ...base.agentWorkbench.details.state.error,\n ...override.agentWorkbench?.details?.state?.error,\n },\n },\n actions: {\n ...base.agentWorkbench.details.actions,\n ...override.agentWorkbench?.details?.actions,\n },\n workspace: {\n ...base.agentWorkbench.details.workspace,\n ...override.agentWorkbench?.details?.workspace,\n diffStatus: {\n ...base.agentWorkbench.details.workspace.diffStatus,\n ...override.agentWorkbench?.details?.workspace?.diffStatus,\n },\n fileOperation: {\n ...base.agentWorkbench.details.workspace.fileOperation,\n ...override.agentWorkbench?.details?.workspace?.fileOperation,\n },\n },\n },\n },\n };\n}\n\nexport const defaultMonkeysLocale: MonkeysResolvedLocale = {\n locale: enUS.locale,\n messages: mergeMonkeysLocaleMessages(\n enUS.messages as MonkeysLocaleMessages,\n ),\n};\n\nexport function resolveMonkeysLocale(\n input?: MonkeysLocaleInput,\n override?: MonkeysLocaleMessagesOverride,\n parent?: MonkeysResolvedLocale,\n): MonkeysResolvedLocale {\n if (override !== undefined) {\n assertMessagesOverride(override, 'MonkeysProvider messages');\n }\n const normalized = normalizeLocaleInput(input);\n const locale = normalized.locale ?? parent?.locale ?? enUS.locale;\n const builtInMessages = isBuiltInLocale(locale)\n ? BUILT_IN_LOCALES[locale].messages\n : undefined;\n let messages = mergeMonkeysLocaleMessages(\n enUS.messages as MonkeysLocaleMessages,\n builtInMessages,\n );\n\n if (parent && (!normalized.hasExplicitLocale || parent.locale === locale)) {\n messages = mergeMonkeysLocaleMessages(messages, parent.messages);\n }\n\n messages = mergeMonkeysLocaleMessages(messages, normalized.messages);\n messages = mergeMonkeysLocaleMessages(messages, override);\n\n return { locale, messages };\n}\n","import {\n createContext,\n useContext,\n useMemo,\n type Context,\n} from 'react';\n\nimport type { BaseAppearance } from '../components/base/types';\nimport type { DataExplorerAppearance } from '../components/data-explorer/types';\nimport {\n defaultMonkeysLocale,\n type MonkeysLocaleMessages,\n type MonkeysResolvedLocale,\n} from '../locale';\nimport type { CompiledThemeTokens } from '../theme-system';\n\nexport type MonkeysDirection = 'ltr' | 'rtl';\n\nexport interface MonkeysEnvironment {\n getDocument?: () => Document | null;\n getWindow?: () => Window | null;\n}\n\nexport type MonkeysPortalContainer =\n | Element\n | null\n | (() => Element | null);\n\nexport interface MonkeysPortalOptions {\n container?: MonkeysPortalContainer;\n disabled?: boolean;\n}\n\nexport type MonkeysLoadingStateVariant = 'spinner' | 'skeleton';\nexport type MonkeysEmptyStateVariant = 'default' | 'compact';\nexport type MonkeysStatusStateDensity = 'compact' | 'default' | 'comfortable';\n\nexport type MonkeysListFooterPaginationMode = 'auto' | 'pages' | 'compact';\nexport type MonkeysListFooterAlignment = 'start' | 'end' | 'space-between';\n\nexport interface MonkeysListFooterConfig {\n showTotal?: boolean;\n showPageSize?: boolean;\n pageSizeOptions?: number[];\n paginationMode?: MonkeysListFooterPaginationMode;\n alignment?: MonkeysListFooterAlignment;\n density?: MonkeysStatusStateDensity;\n}\n\nexport interface MonkeysStatusStatesConfig {\n loading?: { variant?: MonkeysLoadingStateVariant };\n empty?: { variant?: MonkeysEmptyStateVariant };\n error?: { showRetry?: boolean };\n permission?: { showRequestAccess?: boolean };\n density?: MonkeysStatusStateDensity;\n}\n\nexport interface MonkeysComponentAttributes {\n dir?: MonkeysDirection;\n 'data-monkeys-direction'?: MonkeysDirection;\n 'data-monkeys-locale'?: string;\n 'data-monkeys-theme'?: string;\n 'data-monkeys-theme-mode'?: string;\n}\n\ninterface MonkeysLocaleContextValue extends MonkeysResolvedLocale {\n provided: boolean;\n}\n\ninterface MonkeysThemeContextValue {\n provided: boolean;\n resolvedTheme?: CompiledThemeTokens;\n themeId?: string;\n baseAppearance?: BaseAppearance;\n dataExplorerAppearance?: DataExplorerAppearance;\n statusStates?: MonkeysStatusStatesConfig;\n listFooter?: MonkeysListFooterConfig;\n}\n\ninterface MonkeysDirectionContextValue {\n provided: boolean;\n direction?: MonkeysDirection;\n}\n\ninterface MonkeysEnvironmentContextValue {\n provided: boolean;\n environment: MonkeysEnvironment;\n portal: MonkeysPortalOptions;\n}\n\nconst EMPTY_ENVIRONMENT = Object.freeze({}) satisfies MonkeysEnvironment;\nconst EMPTY_PORTAL = Object.freeze({}) satisfies MonkeysPortalOptions;\n\ninterface MonkeysProviderContexts {\n locale: Context<MonkeysLocaleContextValue>;\n theme: Context<MonkeysThemeContextValue>;\n direction: Context<MonkeysDirectionContextValue>;\n environment: Context<MonkeysEnvironmentContextValue>;\n}\n\n// Every bundled public entry contains this module. Keep only the Context\n// identities in a realm-wide registry so root, provider, and component\n// subpaths interoperate in both CJS and ESM builds. Provider values remain in\n// React trees, so SSR requests are isolated. Bump the contract key only when\n// these Context value shapes become intentionally incompatible.\nconst MONKEYS_PROVIDER_CONTEXTS_KEY = Symbol.for(\n '@inf-monkeys-tech/monkeys-design/provider-context@1',\n);\n\ntype MonkeysProviderContextHost = typeof globalThis & {\n [MONKEYS_PROVIDER_CONTEXTS_KEY]?: MonkeysProviderContexts;\n};\n\nfunction createMonkeysProviderContexts(): MonkeysProviderContexts {\n return Object.freeze({\n locale: createContext<MonkeysLocaleContextValue>({\n ...defaultMonkeysLocale,\n provided: false,\n }),\n theme: createContext<MonkeysThemeContextValue>({\n provided: false,\n }),\n direction: createContext<MonkeysDirectionContextValue>({\n provided: false,\n }),\n environment: createContext<MonkeysEnvironmentContextValue>({\n provided: false,\n environment: EMPTY_ENVIRONMENT,\n portal: EMPTY_PORTAL,\n }),\n });\n}\n\nfunction getMonkeysProviderContexts(): MonkeysProviderContexts {\n const host = globalThis as MonkeysProviderContextHost;\n const existing = host[MONKEYS_PROVIDER_CONTEXTS_KEY];\n if (existing) return existing;\n\n const contexts = createMonkeysProviderContexts();\n Object.defineProperty(host, MONKEYS_PROVIDER_CONTEXTS_KEY, {\n value: contexts,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return contexts;\n}\n\nconst providerContexts = getMonkeysProviderContexts();\n\nexport const MonkeysLocaleContext = providerContexts.locale;\n\nexport const MonkeysThemeContext = providerContexts.theme;\n\nexport const MonkeysDirectionContext = providerContexts.direction;\n\nexport const MonkeysEnvironmentContext = providerContexts.environment;\n\nfunction mergeAppearance<T extends { slots?: object; styles?: object }>(\n inherited: T | undefined,\n explicit: T | undefined,\n): T | undefined {\n if (explicit === undefined) return inherited;\n if (inherited === undefined) return explicit;\n\n return {\n ...inherited,\n ...explicit,\n slots:\n inherited.slots || explicit.slots\n ? { ...inherited.slots, ...explicit.slots }\n : undefined,\n styles:\n inherited.styles || explicit.styles\n ? { ...inherited.styles, ...explicit.styles }\n : undefined,\n };\n}\n\nexport function useMonkeysLocale() {\n return useContext(MonkeysLocaleContext);\n}\n\nexport function useMonkeysLocaleMessages(): MonkeysLocaleMessages {\n return useContext(MonkeysLocaleContext).messages;\n}\n\nexport function useMonkeysResolvedTheme() {\n return useContext(MonkeysThemeContext).resolvedTheme;\n}\n\nexport function useMonkeysBaseAppearance(\n explicit?: BaseAppearance,\n): BaseAppearance | undefined {\n const inherited = useContext(MonkeysThemeContext).baseAppearance;\n return useMemo(\n () => mergeAppearance(inherited, explicit),\n [explicit, inherited],\n );\n}\n\nexport function useMonkeysDataExplorerAppearance(\n explicit?: DataExplorerAppearance,\n): DataExplorerAppearance | undefined {\n const inherited = useContext(MonkeysThemeContext).dataExplorerAppearance;\n return useMemo(\n () => mergeAppearance(inherited, explicit),\n [explicit, inherited],\n );\n}\n\nexport function useMonkeysStatusStates(): MonkeysStatusStatesConfig {\n return useContext(MonkeysThemeContext).statusStates ?? {};\n}\n\nexport function useMonkeysListFooter(): MonkeysListFooterConfig {\n return useContext(MonkeysThemeContext).listFooter ?? {};\n}\n\nexport function useMonkeysDirection() {\n return useContext(MonkeysDirectionContext).direction;\n}\n\nexport function useMonkeysEnvironment() {\n return useContext(MonkeysEnvironmentContext).environment;\n}\n\nexport function useMonkeysPortalOptions() {\n return useContext(MonkeysEnvironmentContext).portal;\n}\n\nexport function useMonkeysComponentAttributes(): MonkeysComponentAttributes {\n const locale = useContext(MonkeysLocaleContext);\n const theme = useContext(MonkeysThemeContext);\n const direction = useContext(MonkeysDirectionContext);\n const providerActive = locale.provided || theme.provided || direction.provided;\n\n return useMemo(\n () =>\n providerActive\n ? {\n dir: direction.direction,\n 'data-monkeys-direction': direction.direction,\n 'data-monkeys-locale': locale.locale,\n 'data-monkeys-theme': theme.themeId,\n 'data-monkeys-theme-mode': theme.resolvedTheme?.colorMode,\n }\n : {},\n [\n direction.direction,\n locale.locale,\n providerActive,\n theme.resolvedTheme?.colorMode,\n theme.themeId,\n ],\n );\n}\n","import * as React from 'react';\nimport * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport * as Tooltip from '@radix-ui/react-tooltip';\n\nimport {\n useMonkeysComponentAttributes,\n useMonkeysLocale,\n} from '../../provider/context';\n\nfunction cn(...inputs: (string | undefined | null | false)[]): string {\n return inputs.filter(Boolean).join(' ');\n}\n\n// ---------- Inline SVG Icons ----------\n\nfunction SunIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" /><path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" /><path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" /><path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" /><path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n );\n}\n\nfunction MoonIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n );\n}\n\nfunction MonitorIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\" />\n <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\" />\n <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\" />\n </svg>\n );\n}\n\n// ---------- Component ----------\n\nexport type DarkModeValue = 'auto' | 'light' | 'dark';\n\nexport interface DarkModeSelectorProps {\n mode: DarkModeValue;\n onModeChange: (mode: DarkModeValue) => void;\n labels?: { auto?: string; light?: string; dark?: string };\n tooltip?: string;\n className?: string;\n}\n\nconst triggerIconMap: Record<DarkModeValue, React.FC<{ className?: string }>> = {\n light: SunIcon,\n dark: MoonIcon,\n auto: MonitorIcon,\n};\n\nexport function DarkModeSelector({\n mode,\n onModeChange,\n labels = {},\n tooltip,\n className,\n}: DarkModeSelectorProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const localeLabels = locale.messages.toolbar.theme;\n const TriggerIcon = triggerIconMap[mode];\n const resolvedLabels = {\n auto: labels.auto ?? localeLabels.auto,\n light: labels.light ?? localeLabels.light,\n dark: labels.dark ?? localeLabels.dark,\n };\n\n const options: { value: DarkModeValue; label: string; Icon: React.FC<{ className?: string }> }[] = [\n { value: 'auto', label: resolvedLabels.auto, Icon: MonitorIcon },\n { value: 'light', label: resolvedLabels.light, Icon: SunIcon },\n { value: 'dark', label: resolvedLabels.dark, Icon: MoonIcon },\n ];\n\n const trigger = (\n <DropdownMenu.Trigger asChild>\n <button\n {...componentAttributes}\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-[hsl(var(--foreground))] hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] transition-colors focus-visible:outline-none',\n className,\n )}\n >\n <TriggerIcon />\n <span className=\"sr-only\">{tooltip ?? localeLabels.toggle}</span>\n </button>\n </DropdownMenu.Trigger>\n );\n\n return (\n <DropdownMenu.Root>\n {tooltip ? (\n <Tooltip.Provider delayDuration={300}>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{trigger}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n className=\"rounded-md bg-[hsl(var(--popover))] px-3 py-1.5 text-xs text-[hsl(var(--popover-foreground))] shadow-md border border-[hsl(var(--border))] animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n >\n {tooltip}\n <Tooltip.Arrow className=\"fill-[hsl(var(--popover))]\" />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n ) : (\n trigger\n )}\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n align=\"end\"\n >\n {options.map(({ value, label, Icon }) => (\n <DropdownMenu.Item\n key={value}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))]',\n mode === value && 'bg-[hsl(var(--accent))]',\n )}\n onSelect={() => onModeChange(value)}\n >\n <Icon className=\"h-4 w-4\" />\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n}\n\n// ---------- Sub-menu variant (for embedding in user dropdown) ----------\n\nfunction SunMoonIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <path d=\"M12 8a2.83 2.83 0 0 0 4 4 4 4 0 1 1-4-4\" />\n <path d=\"M12 2v2\" /><path d=\"M12 20v2\" />\n <path d=\"m4.9 4.9 1.4 1.4\" /><path d=\"m17.7 17.7 1.4 1.4\" />\n <path d=\"M2 12h2\" /><path d=\"M20 12h2\" />\n <path d=\"m6.3 17.7-1.4 1.4\" /><path d=\"m19.1 4.9-1.4 1.4\" />\n </svg>\n );\n}\n\nexport interface DarkModeSubMenuProps {\n mode: DarkModeValue;\n onModeChange: (mode: DarkModeValue) => void;\n label?: string;\n labels?: { auto?: string; light?: string; dark?: string };\n}\n\n/**\n * A DropdownMenuSub component for embedding dark mode selector\n * inside a Radix DropdownMenu (e.g. user avatar menu).\n * Must be rendered as a child of DropdownMenu.Group / DropdownMenu.Content.\n */\nexport function DarkModeSubMenu({\n mode,\n onModeChange,\n label,\n labels = {},\n}: DarkModeSubMenuProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const localeLabels = locale.messages.toolbar.theme;\n const fallbackLabels = locale.provided\n ? localeLabels\n : {\n label: '外观',\n auto: '跟随系统',\n light: '浅色模式',\n dark: '深色模式',\n };\n const resolvedLabels = {\n auto: labels.auto ?? fallbackLabels.auto,\n light: labels.light ?? fallbackLabels.light,\n dark: labels.dark ?? fallbackLabels.dark,\n };\n\n const currentLabel = mode === 'auto' ? resolvedLabels.auto : mode === 'dark' ? resolvedLabels.dark : resolvedLabels.light;\n\n const options: { value: DarkModeValue; label: string; Icon: React.FC<{ className?: string }> }[] = [\n { value: 'auto', label: resolvedLabels.auto, Icon: MonitorIcon },\n { value: 'light', label: resolvedLabels.light, Icon: SunIcon },\n { value: 'dark', label: resolvedLabels.dark, Icon: MoonIcon },\n ];\n\n return (\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger\n {...componentAttributes}\n className=\"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[state=open]:bg-[hsl(var(--accent))]\"\n >\n <SunMoonIcon className=\"h-4 w-4\" />\n <span>{label ?? fallbackLabels.label}</span>\n <span className=\"ml-auto text-xs text-[hsl(var(--muted-foreground))]\">{currentLabel}</span>\n </DropdownMenu.SubTrigger>\n <DropdownMenu.Portal>\n <DropdownMenu.SubContent\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={8}\n >\n {options.map(({ value, label: optLabel, Icon }) => (\n <DropdownMenu.CheckboxItem\n key={value}\n checked={mode === value}\n disabled={mode === value}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 pl-7 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n )}\n onCheckedChange={() => onModeChange(value)}\n >\n <DropdownMenu.ItemIndicator className=\"absolute left-2 inline-flex items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>\n </DropdownMenu.ItemIndicator>\n <Icon className=\"h-4 w-4\" />\n {optLabel}\n </DropdownMenu.CheckboxItem>\n ))}\n </DropdownMenu.SubContent>\n </DropdownMenu.Portal>\n </DropdownMenu.Sub>\n );\n}\n","import * as React from 'react';\nimport * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport * as Tooltip from '@radix-ui/react-tooltip';\n\nimport {\n useMonkeysComponentAttributes,\n useMonkeysLocale,\n} from '../../provider/context';\n\nfunction cn(...inputs: (string | undefined | null | false)[]): string {\n return inputs.filter(Boolean).join(' ');\n}\n\n// ---------- Inline SVG Icon ----------\n\nfunction GlobeIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n );\n}\n\n// ---------- Component ----------\n\nexport interface I18nLanguage {\n code: string;\n label: string;\n}\n\nexport interface I18nSelectorProps {\n languages: I18nLanguage[];\n currentLanguage: string;\n onLanguageChange: (code: string) => void;\n tooltip?: string;\n className?: string;\n}\n\nexport function I18nSelector({\n languages,\n currentLanguage,\n onLanguageChange,\n tooltip,\n className,\n}: I18nSelectorProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const trigger = (\n <DropdownMenu.Trigger asChild>\n <button\n {...componentAttributes}\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-[hsl(var(--foreground))] hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] transition-colors focus-visible:outline-none',\n className,\n )}\n >\n <GlobeIcon />\n <span className=\"sr-only\">\n {tooltip ?? locale.messages.toolbar.language.switch}\n </span>\n </button>\n </DropdownMenu.Trigger>\n );\n\n return (\n <DropdownMenu.Root>\n {tooltip ? (\n <Tooltip.Provider delayDuration={300}>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{trigger}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n className=\"rounded-md bg-[hsl(var(--popover))] px-3 py-1.5 text-xs text-[hsl(var(--popover-foreground))] shadow-md border border-[hsl(var(--border))] animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n >\n {tooltip}\n <Tooltip.Arrow className=\"fill-[hsl(var(--popover))]\" />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n ) : (\n trigger\n )}\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n align=\"end\"\n >\n {languages.map(({ code, label }) => (\n <DropdownMenu.Item\n key={code}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))]',\n currentLanguage === code && 'bg-[hsl(var(--accent))]',\n )}\n onSelect={() => onLanguageChange(code)}\n >\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n}\n\n// ---------- Sub-menu variant (for embedding in user dropdown) ----------\n\nexport interface I18nSubMenuProps {\n languages: I18nLanguage[];\n currentLanguage: string;\n onLanguageChange: (code: string) => void;\n label?: string;\n}\n\n/**\n * A DropdownMenuSub component for embedding language selector\n * inside a Radix DropdownMenu (e.g. user avatar menu).\n * Must be rendered as a child of DropdownMenu.Group / DropdownMenu.Content.\n */\nexport function I18nSubMenu({\n languages,\n currentLanguage,\n onLanguageChange,\n label,\n}: I18nSubMenuProps) {\n const locale = useMonkeysLocale();\n const componentAttributes = useMonkeysComponentAttributes();\n const fallbackLabel = locale.provided\n ? locale.messages.toolbar.language.label\n : '语言';\n const currentLabel = languages.find((l) => l.code === currentLanguage)?.label ?? currentLanguage;\n\n return (\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger\n {...componentAttributes}\n className=\"relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[state=open]:bg-[hsl(var(--accent))]\"\n >\n <GlobeIcon className=\"h-4 w-4\" />\n <span>{label ?? fallbackLabel}</span>\n <span className=\"ml-auto text-xs text-[hsl(var(--muted-foreground))]\">{currentLabel}</span>\n </DropdownMenu.SubTrigger>\n <DropdownMenu.Portal>\n <DropdownMenu.SubContent\n className=\"z-50 min-w-[8rem] rounded-md border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-1 text-[hsl(var(--popover-foreground))] shadow-md animate-in fade-in-0 zoom-in-95\"\n sideOffset={8}\n >\n {languages.map(({ code, label: langLabel }) => (\n <DropdownMenu.CheckboxItem\n key={code}\n checked={currentLanguage === code}\n disabled={currentLanguage === code}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 pl-7 text-sm outline-none transition-colors hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n )}\n onCheckedChange={() => onLanguageChange(code)}\n >\n <DropdownMenu.ItemIndicator className=\"absolute left-2 inline-flex items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>\n </DropdownMenu.ItemIndicator>\n {langLabel}\n </DropdownMenu.CheckboxItem>\n ))}\n </DropdownMenu.SubContent>\n </DropdownMenu.Portal>\n </DropdownMenu.Sub>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
2
2
  import * as Tooltip from '@radix-ui/react-tooltip';
3
- import { createContext, useState, useCallback, useEffect, useContext, useMemo } from 'react';
3
+ import { createContext, useContext, useMemo } from 'react';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
5
5
 
6
6
  // src/components/toolbar/DarkModeSelector.tsx
@@ -703,56 +703,7 @@ function I18nSubMenu({
703
703
  ) })
704
704
  ] });
705
705
  }
706
- var STORAGE_KEY = "monkeys-dark-mode";
707
- function getStoredMode() {
708
- if (typeof window === "undefined") return "auto";
709
- const stored = localStorage.getItem(STORAGE_KEY);
710
- if (stored === "light" || stored === "dark" || stored === "auto") return stored;
711
- return "auto";
712
- }
713
- function getSystemPrefersDark() {
714
- if (typeof window === "undefined") return false;
715
- return window.matchMedia("(prefers-color-scheme: dark)").matches;
716
- }
717
- function resolve(mode) {
718
- if (mode === "auto") return getSystemPrefersDark() ? "dark" : "light";
719
- return mode;
720
- }
721
- function applyClass(resolved) {
722
- const el = document.documentElement;
723
- if (resolved === "dark") {
724
- el.classList.add("dark");
725
- } else {
726
- el.classList.remove("dark");
727
- }
728
- }
729
- function useDarkMode() {
730
- const [mode, setModeState] = useState(getStoredMode);
731
- const [resolvedMode, setResolvedMode] = useState(() => resolve(mode));
732
- const setMode = useCallback((next) => {
733
- localStorage.setItem(STORAGE_KEY, next);
734
- setModeState(next);
735
- const r = resolve(next);
736
- setResolvedMode(r);
737
- applyClass(r);
738
- }, []);
739
- useEffect(() => {
740
- applyClass(resolvedMode);
741
- }, []);
742
- useEffect(() => {
743
- if (mode !== "auto") return;
744
- const mql = window.matchMedia("(prefers-color-scheme: dark)");
745
- const handler = (e) => {
746
- const r = e.matches ? "dark" : "light";
747
- setResolvedMode(r);
748
- applyClass(r);
749
- };
750
- mql.addEventListener("change", handler);
751
- return () => mql.removeEventListener("change", handler);
752
- }, [mode]);
753
- return { mode, setMode, resolvedMode };
754
- }
755
706
 
756
- export { DarkModeSelector, DarkModeSubMenu, I18nSelector, I18nSubMenu, useDarkMode };
707
+ export { DarkModeSelector, DarkModeSubMenu, I18nSelector, I18nSubMenu };
757
708
  //# sourceMappingURL=index.mjs.map
758
709
  //# sourceMappingURL=index.mjs.map