@inf-monkeys-tech/monkeys-design 1.0.11 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/agent-workbench/index.d.mts +57 -2
- package/dist/components/agent-workbench/index.d.ts +57 -2
- package/dist/components/agent-workbench/index.js +669 -43
- package/dist/components/agent-workbench/index.js.map +1 -1
- package/dist/components/agent-workbench/index.mjs +636 -39
- package/dist/components/agent-workbench/index.mjs.map +1 -1
- package/dist/components/base/index.js +32 -0
- package/dist/components/base/index.js.map +1 -1
- package/dist/components/base/index.mjs +32 -0
- package/dist/components/base/index.mjs.map +1 -1
- package/dist/components/data-explorer/index.js +32 -0
- package/dist/components/data-explorer/index.js.map +1 -1
- package/dist/components/data-explorer/index.mjs +32 -0
- package/dist/components/data-explorer/index.mjs.map +1 -1
- package/dist/components/layout/index.js +32 -0
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/index.mjs +32 -0
- package/dist/components/layout/index.mjs.map +1 -1
- package/dist/components/runtime/index.js +32 -0
- package/dist/components/runtime/index.js.map +1 -1
- package/dist/components/runtime/index.mjs +32 -0
- package/dist/components/runtime/index.mjs.map +1 -1
- package/dist/components/toast/index.d.mts +1 -1
- package/dist/components/toast/index.d.ts +1 -1
- package/dist/components/toast/index.js +32 -0
- package/dist/components/toast/index.js.map +1 -1
- package/dist/components/toast/index.mjs +32 -0
- package/dist/components/toast/index.mjs.map +1 -1
- package/dist/components/toolbar/index.js +32 -0
- package/dist/components/toolbar/index.js.map +1 -1
- package/dist/components/toolbar/index.mjs +32 -0
- package/dist/components/toolbar/index.mjs.map +1 -1
- package/dist/components/workbench/index.js +32 -0
- package/dist/components/workbench/index.js.map +1 -1
- package/dist/components/workbench/index.mjs +32 -0
- package/dist/components/workbench/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1021 -386
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +645 -17
- package/dist/index.mjs.map +1 -1
- package/dist/locale/index.d.mts +70 -2
- package/dist/locale/index.d.ts +70 -2
- package/dist/locale/index.js +68 -0
- package/dist/locale/index.js.map +1 -1
- package/dist/locale/index.mjs +68 -0
- package/dist/locale/index.mjs.map +1 -1
- package/dist/provider/index.d.mts +2 -2
- package/dist/provider/index.d.ts +2 -2
- package/dist/provider/index.js +68 -0
- package/dist/provider/index.js.map +1 -1
- package/dist/provider/index.mjs +68 -0
- package/dist/provider/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/{types-3d3e043f0ccb.d.mts → types-37967a434f7c.d.mts} +35 -0
- package/dist/{types-3d3e043f0ccb.d.ts → types-37967a434f7c.d.ts} +35 -0
- package/package.json +3 -3
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { ReactNode, ReactElement } from 'react';
|
|
3
3
|
import { ExternalToast, ToastT, ToastToDismiss, ToasterProps } from 'sonner';
|
|
4
4
|
export { ExternalToast, ToasterProps } from 'sonner';
|
|
5
|
-
import { r as MonkeysToastMessages } from '../../types-
|
|
5
|
+
import { r as MonkeysToastMessages } from '../../types-37967a434f7c.mjs';
|
|
6
6
|
type ToastVariant = 'error' | 'info' | 'success' | 'warning';
|
|
7
7
|
type ToastInput = Omit<ExternalToast, 'description'> & {
|
|
8
8
|
title?: ReactNode;
|
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { ReactNode, ReactElement } from 'react';
|
|
3
3
|
import { ExternalToast, ToastT, ToastToDismiss, ToasterProps } from 'sonner';
|
|
4
4
|
export { ExternalToast, ToasterProps } from 'sonner';
|
|
5
|
-
import { r as MonkeysToastMessages } from '../../types-
|
|
5
|
+
import { r as MonkeysToastMessages } from '../../types-37967a434f7c.js';
|
|
6
6
|
type ToastVariant = 'error' | 'info' | 'success' | 'warning';
|
|
7
7
|
type ToastInput = Omit<ExternalToast, 'description'> & {
|
|
8
8
|
title?: ReactNode;
|
|
@@ -136,6 +136,38 @@ var enUS = {
|
|
|
136
136
|
label: "Context usage",
|
|
137
137
|
context: ({ used, total }) => `${used} / ${total} tokens`
|
|
138
138
|
},
|
|
139
|
+
navigation: {
|
|
140
|
+
search: "Search agents and sessions",
|
|
141
|
+
searchShortcut: "Focus search",
|
|
142
|
+
clearSearch: "Clear search",
|
|
143
|
+
tabsLabel: "Agent workbench navigation",
|
|
144
|
+
agents: "Agents",
|
|
145
|
+
sessions: "Sessions",
|
|
146
|
+
newAgent: "New Agent",
|
|
147
|
+
newSession: "New Session",
|
|
148
|
+
capabilities: "Capabilities & Extensions",
|
|
149
|
+
settings: "Agent Settings",
|
|
150
|
+
allAgents: "All Agents",
|
|
151
|
+
recentSessions: "Recent Sessions",
|
|
152
|
+
builtIn: "Built-in",
|
|
153
|
+
noDescription: "No description",
|
|
154
|
+
loading: "Loading...",
|
|
155
|
+
emptyAgents: "No agents yet",
|
|
156
|
+
emptySessions: "No sessions yet",
|
|
157
|
+
noResults: "No matching results",
|
|
158
|
+
retry: "Retry",
|
|
159
|
+
pin: "Pin",
|
|
160
|
+
unpin: "Unpin",
|
|
161
|
+
rename: "Rename",
|
|
162
|
+
delete: "Delete",
|
|
163
|
+
actions: "Actions",
|
|
164
|
+
save: "Save",
|
|
165
|
+
cancel: "Cancel",
|
|
166
|
+
running: "Running",
|
|
167
|
+
completed: "Completed",
|
|
168
|
+
failed: "Failed",
|
|
169
|
+
contextUsage: ({ percent }) => `${percent}% context used`
|
|
170
|
+
},
|
|
139
171
|
details: {
|
|
140
172
|
title: "Task details",
|
|
141
173
|
description: "Summary and workspace activity",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/locale/en-US.ts","../../../src/locale/resolve-locale.ts","../../../src/provider/context.ts","../../../src/components/toast/index.tsx"],"names":["createContext","useContext","isValidElement","sonnerToast","jsx","SonnerToaster","jsxs","Fragment","useRef","useEffect","useCallback"],"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 },\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 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 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 usage: {\n label: 'Context usage',\n context: ({ used, total }) => `${used} / ${total} tokens`,\n },\n details: {\n title: 'Task details',\n description: 'Summary and workspace activity',\n duration: 'Duration',\n updated: 'Updated',\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: { title: 'Loading task details', description: 'Restoring the latest session activity.' },\n empty: { title: 'No task selected', description: 'Select a task to inspect its details.' },\n error: { title: 'Unable to load task details', description: 'Try again after the session is available.' },\n },\n actions: {\n close: 'Close task details',\n copySummary: 'Copy summary',\n retry: 'Retry',\n retrySummary: 'Retry summary',\n resume: 'Resume',\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: { added: 'Added', modified: 'Modified', deleted: 'Deleted', renamed: 'Renamed' },\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 interactiveTable: {\n ...base.workbench.interactiveTable,\n ...override.workbench?.interactiveTable,\n },\n },\n agentWorkbench: {\n ...base.agentWorkbench,\n ...override.agentWorkbench,\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 usage: {\n ...base.agentWorkbench.usage,\n ...override.agentWorkbench?.usage,\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 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}\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 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 {\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ExternalToast,\n type ToastT,\n type ToastToDismiss,\n type ToasterProps,\n} from 'sonner';\n\nimport type { MonkeysToastMessages } from '../../locale';\nimport { useMonkeysLocaleMessages } from '../../provider/context';\n\nexport type ToastVariant = 'error' | 'warning' | 'success' | 'info';\n\nexport type ToastInput = Omit<ExternalToast, 'description'> & {\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n};\n\nexport type MonkeysToasterProps = ToasterProps & {\n useThemeClassNames?: boolean;\n};\n\nexport type MonkeysToastProviderProps = {\n children: ReactNode;\n toasterProps?: MonkeysToasterProps;\n};\n\ntype ToastValue =\n | Error\n | string\n | {\n message?: unknown;\n title?: unknown;\n }\n | null\n | undefined;\n\ntype ToastResolver<T> = T | ((value: ToastValue) => T);\ntype ToastTranslate = (value: string, params?: Record<string, unknown>) => string;\n\ntype ToastValueOptions = {\n variant?: ToastResolver<ToastVariant | undefined>;\n title?: ToastResolver<string | undefined>;\n description?: ToastResolver<string | undefined>;\n fallbackDescription?: ToastResolver<string | undefined>;\n signature?: ToastResolver<string | undefined>;\n duration?: ToastResolver<number | undefined>;\n translate?: ToastTranslate;\n messages?: Partial<ToastDefaultMessages>;\n};\n\ntype ToastFeedEntry =\n | {\n variant?: ToastVariant;\n title?: string;\n description?: string;\n duration?: number;\n signature?: string;\n }\n | null\n | undefined;\n\ntype ToastDefaultMessages = MonkeysToastMessages;\n\ntype ToastPromiseInput<T = unknown> = Promise<T> | (() => Promise<T>);\ntype ToastPromiseReturn<T = unknown> = string | number | { unwrap: () => Promise<T> };\n\nexport type MonkeysToastApi = {\n (message: ReactNode, options?: ExternalToast): string | number;\n show: (input: ToastInput) => string | number | undefined;\n error: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n success: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n info: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n message: (message: ReactNode, options?: ExternalToast) => string | number;\n promise: <T = unknown>(promise: ToastPromiseInput<T>, data?: unknown) => ToastPromiseReturn<T>;\n dismiss: (id?: number | string) => string | number;\n loading: (message: ReactNode, options?: ExternalToast) => string | number;\n custom: (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number;\n getHistory: () => Array<ToastT | ToastToDismiss>;\n getToasts: () => Array<ToastT | ToastToDismiss>;\n};\n\nconst DEFAULT_TOAST_DURATION = 5200;\nconst TOAST_DEDUPE_WINDOW = 1200;\n\nconst ACTIONABLE_TOAST_PATTERNS = [\n /^(please|select|enter|provide|write|choose|confirm|fill)\\b/i,\n /^(请|请选择|请先|请输入|请填写|请确认|请留意)/,\n];\n\nconst DEFAULT_TOAST_CLASS_NAMES = {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n};\n\nconst recentToastSignatures = new Map<string, number>();\n\nfunction cn(...classNames: Array<string | undefined | false>) {\n return classNames.filter(Boolean).join(' ');\n}\n\nfunction isToastInput(input: unknown): input is ToastInput {\n if (!input || typeof input !== 'object' || isValidElement(input)) {\n return false;\n }\n\n return 'title' in input || 'description' in input || 'variant' in input;\n}\n\nfunction isEmptyToastContent(value: ReactNode) {\n return value == null || (typeof value === 'string' && !value.trim());\n}\n\nfunction normalizeToastInput(input: ReactNode | ToastInput, variant: ToastVariant, options?: ExternalToast): ToastInput {\n const { description: _description, ...baseOptions } = options ?? {};\n\n if (isToastInput(input)) {\n return {\n ...baseOptions,\n ...input,\n variant: input.variant ?? variant,\n };\n }\n\n return {\n ...baseOptions,\n title: input,\n variant,\n };\n}\n\nfunction resolveValue<T>(candidate: ToastResolver<T> | undefined, value: ToastValue) {\n if (typeof candidate === 'function') {\n return (candidate as (input: ToastValue) => T)(value);\n }\n\n return candidate;\n}\n\nfunction shouldEmitToast(signature: string) {\n const now = Date.now();\n\n for (const [key, timestamp] of recentToastSignatures.entries()) {\n if (now - timestamp > TOAST_DEDUPE_WINDOW) {\n recentToastSignatures.delete(key);\n }\n }\n\n const previousTimestamp = recentToastSignatures.get(signature);\n if (previousTimestamp && now - previousTimestamp < TOAST_DEDUPE_WINDOW) {\n return false;\n }\n\n recentToastSignatures.set(signature, now);\n return true;\n}\n\nfunction translateMessage(translate: ToastTranslate | undefined, value: string) {\n return translate ? translate(value, { defaultValue: value }) : value;\n}\n\nfunction getDefaultMessage(\n messages: Partial<ToastDefaultMessages> | undefined,\n localeMessages: ToastDefaultMessages,\n key: keyof ToastDefaultMessages,\n) {\n return messages?.[key] ?? localeMessages[key];\n}\n\nfunction emitToast(input: ToastInput) {\n const { title, description, duration, variant = 'info', ...options } = input;\n const message = isEmptyToastContent(title) ? description : title;\n\n if (isEmptyToastContent(message)) {\n return undefined;\n }\n\n const descriptionValue =\n !isEmptyToastContent(description) && description !== message ? description : undefined;\n const sonnerOptions: ExternalToast = {\n ...options,\n description: descriptionValue,\n duration: duration ?? DEFAULT_TOAST_DURATION,\n };\n\n switch (variant) {\n case 'error':\n return sonnerToast.error(message, sonnerOptions);\n case 'warning':\n return sonnerToast.warning(message, sonnerOptions);\n case 'success':\n return sonnerToast.success(message, sonnerOptions);\n default:\n return sonnerToast(message, sonnerOptions);\n }\n}\n\nexport function extractToastMessage(value: ToastValue, fallback = '') {\n if (!value) return fallback;\n\n if (typeof value === 'string') {\n const nextMessage = value.trim();\n return nextMessage || fallback;\n }\n\n if (value instanceof Error) {\n const nextMessage = String(value.message || '').trim();\n return nextMessage || fallback;\n }\n\n if (typeof value === 'object' && typeof value.message === 'string') {\n const nextMessage = value.message.trim();\n if (nextMessage) return nextMessage;\n }\n\n if (typeof value === 'object' && typeof value.title === 'string') {\n const nextTitle = value.title.trim();\n if (nextTitle) return nextTitle;\n }\n\n return fallback;\n}\n\nexport function resolveToastVariantForMessage(value: ToastValue): ToastVariant {\n const message = extractToastMessage(value);\n\n if (ACTIONABLE_TOAST_PATTERNS.some((pattern) => pattern.test(message))) {\n return 'warning';\n }\n\n return 'error';\n}\n\nexport function MonkeysToaster({\n className,\n closeButton = true,\n position = 'bottom-right',\n richColors = true,\n toastOptions,\n useThemeClassNames = true,\n visibleToasts = 10,\n ...props\n}: MonkeysToasterProps) {\n return (\n <SonnerToaster\n className={cn('pointer-events-auto toaster group', className)}\n closeButton={closeButton}\n position={position}\n richColors={richColors}\n toastOptions={{\n ...toastOptions,\n classNames: useThemeClassNames\n ? {\n ...DEFAULT_TOAST_CLASS_NAMES,\n ...toastOptions?.classNames,\n }\n : toastOptions?.classNames,\n }}\n visibleToasts={visibleToasts}\n {...props}\n />\n );\n}\n\nexport function MonkeysToastProvider({ children, toasterProps }: MonkeysToastProviderProps) {\n return (\n <>\n {children}\n <MonkeysToaster {...toasterProps} />\n </>\n );\n}\n\nexport function useToastOnValue(value: ToastValue, options: ToastValueOptions = {}) {\n const previousSignatureRef = useRef<string | null>(null);\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n\n useEffect(() => {\n if (!value) {\n previousSignatureRef.current = null;\n return;\n }\n\n const variant = resolveValue(options.variant, value) ?? 'error';\n const rawTitle = resolveValue(options.title, value);\n const rawFallbackDescription = resolveValue(options.fallbackDescription, value);\n const rawDescription =\n resolveValue(options.description, value) ?? extractToastMessage(value, rawFallbackDescription || '');\n const title = translateMessage(\n translate,\n rawTitle ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n rawDescription ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = resolveValue(options.signature, value) || [variant, title, description].join('|');\n\n if (previousSignatureRef.current === signature) {\n return;\n }\n\n previousSignatureRef.current = signature;\n\n if (!shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: resolveValue(options.duration, value),\n });\n }, [\n options.description,\n options.duration,\n options.fallbackDescription,\n options.messages,\n options.signature,\n options.title,\n options.variant,\n localeMessages,\n translate,\n value,\n ]);\n}\n\nexport function useToastFeed(items: ToastFeedEntry[], options: Pick<ToastValueOptions, 'messages' | 'translate'> = {}) {\n const previousVisibleSignaturesRef = useRef<Set<string>>(new Set());\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n const emitItem = useCallback(\n (item: NonNullable<ToastFeedEntry>, index: number, visibleSignatures: Set<string>) => {\n const variant = item.variant ?? 'info';\n const title = translateMessage(\n translate,\n item.title ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n item.description ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = item.signature || [variant, title, description, index].join('|');\n\n visibleSignatures.add(signature);\n\n if (previousVisibleSignaturesRef.current.has(signature) || !shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: item.duration,\n });\n },\n [localeMessages, options.messages, translate],\n );\n\n useEffect(() => {\n const visibleSignatures = new Set<string>();\n\n items.forEach((item, index) => {\n if (item) {\n emitItem(item, index, visibleSignatures);\n }\n });\n\n previousVisibleSignaturesRef.current = visibleSignatures;\n }, [emitItem, items]);\n}\n\nexport const toast: MonkeysToastApi = Object.assign(\n (message: ReactNode, options?: ExternalToast) => sonnerToast(message, options),\n {\n show: emitToast,\n error: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'error', options)),\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'warning', options)),\n success: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'success', options)),\n info: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'info', options)),\n message: sonnerToast.message,\n promise: sonnerToast.promise as MonkeysToastApi['promise'],\n dismiss: sonnerToast.dismiss,\n loading: sonnerToast.loading,\n custom: sonnerToast.custom as (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number,\n getHistory: sonnerToast.getHistory,\n getToasts: sonnerToast.getToasts,\n },\n);\n\nexport { MonkeysToaster as Toaster, MonkeysToastProvider as ToastProvider };\nexport type { ExternalToast, ToasterProps };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/locale/en-US.ts","../../../src/locale/resolve-locale.ts","../../../src/provider/context.ts","../../../src/components/toast/index.tsx"],"names":["createContext","useContext","isValidElement","sonnerToast","jsx","SonnerToaster","jsxs","Fragment","useRef","useEffect","useCallback"],"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 },\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 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 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 usage: {\n label: 'Context usage',\n context: ({ used, total }) => `${used} / ${total} tokens`,\n },\n navigation: {\n search: 'Search agents and 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 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 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: { title: 'Loading task details', description: 'Restoring the latest session activity.' },\n empty: { title: 'No task selected', description: 'Select a task to inspect its details.' },\n error: { title: 'Unable to load task details', description: 'Try again after the session is available.' },\n },\n actions: {\n close: 'Close task details',\n copySummary: 'Copy summary',\n retry: 'Retry',\n retrySummary: 'Retry summary',\n resume: 'Resume',\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: { added: 'Added', modified: 'Modified', deleted: 'Deleted', renamed: 'Renamed' },\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 interactiveTable: {\n ...base.workbench.interactiveTable,\n ...override.workbench?.interactiveTable,\n },\n },\n agentWorkbench: {\n ...base.agentWorkbench,\n ...override.agentWorkbench,\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 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 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}\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 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 {\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ExternalToast,\n type ToastT,\n type ToastToDismiss,\n type ToasterProps,\n} from 'sonner';\n\nimport type { MonkeysToastMessages } from '../../locale';\nimport { useMonkeysLocaleMessages } from '../../provider/context';\n\nexport type ToastVariant = 'error' | 'warning' | 'success' | 'info';\n\nexport type ToastInput = Omit<ExternalToast, 'description'> & {\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n};\n\nexport type MonkeysToasterProps = ToasterProps & {\n useThemeClassNames?: boolean;\n};\n\nexport type MonkeysToastProviderProps = {\n children: ReactNode;\n toasterProps?: MonkeysToasterProps;\n};\n\ntype ToastValue =\n | Error\n | string\n | {\n message?: unknown;\n title?: unknown;\n }\n | null\n | undefined;\n\ntype ToastResolver<T> = T | ((value: ToastValue) => T);\ntype ToastTranslate = (value: string, params?: Record<string, unknown>) => string;\n\ntype ToastValueOptions = {\n variant?: ToastResolver<ToastVariant | undefined>;\n title?: ToastResolver<string | undefined>;\n description?: ToastResolver<string | undefined>;\n fallbackDescription?: ToastResolver<string | undefined>;\n signature?: ToastResolver<string | undefined>;\n duration?: ToastResolver<number | undefined>;\n translate?: ToastTranslate;\n messages?: Partial<ToastDefaultMessages>;\n};\n\ntype ToastFeedEntry =\n | {\n variant?: ToastVariant;\n title?: string;\n description?: string;\n duration?: number;\n signature?: string;\n }\n | null\n | undefined;\n\ntype ToastDefaultMessages = MonkeysToastMessages;\n\ntype ToastPromiseInput<T = unknown> = Promise<T> | (() => Promise<T>);\ntype ToastPromiseReturn<T = unknown> = string | number | { unwrap: () => Promise<T> };\n\nexport type MonkeysToastApi = {\n (message: ReactNode, options?: ExternalToast): string | number;\n show: (input: ToastInput) => string | number | undefined;\n error: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n success: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n info: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n message: (message: ReactNode, options?: ExternalToast) => string | number;\n promise: <T = unknown>(promise: ToastPromiseInput<T>, data?: unknown) => ToastPromiseReturn<T>;\n dismiss: (id?: number | string) => string | number;\n loading: (message: ReactNode, options?: ExternalToast) => string | number;\n custom: (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number;\n getHistory: () => Array<ToastT | ToastToDismiss>;\n getToasts: () => Array<ToastT | ToastToDismiss>;\n};\n\nconst DEFAULT_TOAST_DURATION = 5200;\nconst TOAST_DEDUPE_WINDOW = 1200;\n\nconst ACTIONABLE_TOAST_PATTERNS = [\n /^(please|select|enter|provide|write|choose|confirm|fill)\\b/i,\n /^(请|请选择|请先|请输入|请填写|请确认|请留意)/,\n];\n\nconst DEFAULT_TOAST_CLASS_NAMES = {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n};\n\nconst recentToastSignatures = new Map<string, number>();\n\nfunction cn(...classNames: Array<string | undefined | false>) {\n return classNames.filter(Boolean).join(' ');\n}\n\nfunction isToastInput(input: unknown): input is ToastInput {\n if (!input || typeof input !== 'object' || isValidElement(input)) {\n return false;\n }\n\n return 'title' in input || 'description' in input || 'variant' in input;\n}\n\nfunction isEmptyToastContent(value: ReactNode) {\n return value == null || (typeof value === 'string' && !value.trim());\n}\n\nfunction normalizeToastInput(input: ReactNode | ToastInput, variant: ToastVariant, options?: ExternalToast): ToastInput {\n const { description: _description, ...baseOptions } = options ?? {};\n\n if (isToastInput(input)) {\n return {\n ...baseOptions,\n ...input,\n variant: input.variant ?? variant,\n };\n }\n\n return {\n ...baseOptions,\n title: input,\n variant,\n };\n}\n\nfunction resolveValue<T>(candidate: ToastResolver<T> | undefined, value: ToastValue) {\n if (typeof candidate === 'function') {\n return (candidate as (input: ToastValue) => T)(value);\n }\n\n return candidate;\n}\n\nfunction shouldEmitToast(signature: string) {\n const now = Date.now();\n\n for (const [key, timestamp] of recentToastSignatures.entries()) {\n if (now - timestamp > TOAST_DEDUPE_WINDOW) {\n recentToastSignatures.delete(key);\n }\n }\n\n const previousTimestamp = recentToastSignatures.get(signature);\n if (previousTimestamp && now - previousTimestamp < TOAST_DEDUPE_WINDOW) {\n return false;\n }\n\n recentToastSignatures.set(signature, now);\n return true;\n}\n\nfunction translateMessage(translate: ToastTranslate | undefined, value: string) {\n return translate ? translate(value, { defaultValue: value }) : value;\n}\n\nfunction getDefaultMessage(\n messages: Partial<ToastDefaultMessages> | undefined,\n localeMessages: ToastDefaultMessages,\n key: keyof ToastDefaultMessages,\n) {\n return messages?.[key] ?? localeMessages[key];\n}\n\nfunction emitToast(input: ToastInput) {\n const { title, description, duration, variant = 'info', ...options } = input;\n const message = isEmptyToastContent(title) ? description : title;\n\n if (isEmptyToastContent(message)) {\n return undefined;\n }\n\n const descriptionValue =\n !isEmptyToastContent(description) && description !== message ? description : undefined;\n const sonnerOptions: ExternalToast = {\n ...options,\n description: descriptionValue,\n duration: duration ?? DEFAULT_TOAST_DURATION,\n };\n\n switch (variant) {\n case 'error':\n return sonnerToast.error(message, sonnerOptions);\n case 'warning':\n return sonnerToast.warning(message, sonnerOptions);\n case 'success':\n return sonnerToast.success(message, sonnerOptions);\n default:\n return sonnerToast(message, sonnerOptions);\n }\n}\n\nexport function extractToastMessage(value: ToastValue, fallback = '') {\n if (!value) return fallback;\n\n if (typeof value === 'string') {\n const nextMessage = value.trim();\n return nextMessage || fallback;\n }\n\n if (value instanceof Error) {\n const nextMessage = String(value.message || '').trim();\n return nextMessage || fallback;\n }\n\n if (typeof value === 'object' && typeof value.message === 'string') {\n const nextMessage = value.message.trim();\n if (nextMessage) return nextMessage;\n }\n\n if (typeof value === 'object' && typeof value.title === 'string') {\n const nextTitle = value.title.trim();\n if (nextTitle) return nextTitle;\n }\n\n return fallback;\n}\n\nexport function resolveToastVariantForMessage(value: ToastValue): ToastVariant {\n const message = extractToastMessage(value);\n\n if (ACTIONABLE_TOAST_PATTERNS.some((pattern) => pattern.test(message))) {\n return 'warning';\n }\n\n return 'error';\n}\n\nexport function MonkeysToaster({\n className,\n closeButton = true,\n position = 'bottom-right',\n richColors = true,\n toastOptions,\n useThemeClassNames = true,\n visibleToasts = 10,\n ...props\n}: MonkeysToasterProps) {\n return (\n <SonnerToaster\n className={cn('pointer-events-auto toaster group', className)}\n closeButton={closeButton}\n position={position}\n richColors={richColors}\n toastOptions={{\n ...toastOptions,\n classNames: useThemeClassNames\n ? {\n ...DEFAULT_TOAST_CLASS_NAMES,\n ...toastOptions?.classNames,\n }\n : toastOptions?.classNames,\n }}\n visibleToasts={visibleToasts}\n {...props}\n />\n );\n}\n\nexport function MonkeysToastProvider({ children, toasterProps }: MonkeysToastProviderProps) {\n return (\n <>\n {children}\n <MonkeysToaster {...toasterProps} />\n </>\n );\n}\n\nexport function useToastOnValue(value: ToastValue, options: ToastValueOptions = {}) {\n const previousSignatureRef = useRef<string | null>(null);\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n\n useEffect(() => {\n if (!value) {\n previousSignatureRef.current = null;\n return;\n }\n\n const variant = resolveValue(options.variant, value) ?? 'error';\n const rawTitle = resolveValue(options.title, value);\n const rawFallbackDescription = resolveValue(options.fallbackDescription, value);\n const rawDescription =\n resolveValue(options.description, value) ?? extractToastMessage(value, rawFallbackDescription || '');\n const title = translateMessage(\n translate,\n rawTitle ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n rawDescription ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = resolveValue(options.signature, value) || [variant, title, description].join('|');\n\n if (previousSignatureRef.current === signature) {\n return;\n }\n\n previousSignatureRef.current = signature;\n\n if (!shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: resolveValue(options.duration, value),\n });\n }, [\n options.description,\n options.duration,\n options.fallbackDescription,\n options.messages,\n options.signature,\n options.title,\n options.variant,\n localeMessages,\n translate,\n value,\n ]);\n}\n\nexport function useToastFeed(items: ToastFeedEntry[], options: Pick<ToastValueOptions, 'messages' | 'translate'> = {}) {\n const previousVisibleSignaturesRef = useRef<Set<string>>(new Set());\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n const emitItem = useCallback(\n (item: NonNullable<ToastFeedEntry>, index: number, visibleSignatures: Set<string>) => {\n const variant = item.variant ?? 'info';\n const title = translateMessage(\n translate,\n item.title ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n item.description ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = item.signature || [variant, title, description, index].join('|');\n\n visibleSignatures.add(signature);\n\n if (previousVisibleSignaturesRef.current.has(signature) || !shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: item.duration,\n });\n },\n [localeMessages, options.messages, translate],\n );\n\n useEffect(() => {\n const visibleSignatures = new Set<string>();\n\n items.forEach((item, index) => {\n if (item) {\n emitItem(item, index, visibleSignatures);\n }\n });\n\n previousVisibleSignaturesRef.current = visibleSignatures;\n }, [emitItem, items]);\n}\n\nexport const toast: MonkeysToastApi = Object.assign(\n (message: ReactNode, options?: ExternalToast) => sonnerToast(message, options),\n {\n show: emitToast,\n error: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'error', options)),\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'warning', options)),\n success: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'success', options)),\n info: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'info', options)),\n message: sonnerToast.message,\n promise: sonnerToast.promise as MonkeysToastApi['promise'],\n dismiss: sonnerToast.dismiss,\n loading: sonnerToast.loading,\n custom: sonnerToast.custom as (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number,\n getHistory: sonnerToast.getHistory,\n getToasts: sonnerToast.getToasts,\n },\n);\n\nexport { MonkeysToaster as Toaster, MonkeysToastProvider as ToastProvider };\nexport type { ExternalToast, ToasterProps };\n"]}
|
|
@@ -134,6 +134,38 @@ var enUS = {
|
|
|
134
134
|
label: "Context usage",
|
|
135
135
|
context: ({ used, total }) => `${used} / ${total} tokens`
|
|
136
136
|
},
|
|
137
|
+
navigation: {
|
|
138
|
+
search: "Search agents and sessions",
|
|
139
|
+
searchShortcut: "Focus search",
|
|
140
|
+
clearSearch: "Clear search",
|
|
141
|
+
tabsLabel: "Agent workbench navigation",
|
|
142
|
+
agents: "Agents",
|
|
143
|
+
sessions: "Sessions",
|
|
144
|
+
newAgent: "New Agent",
|
|
145
|
+
newSession: "New Session",
|
|
146
|
+
capabilities: "Capabilities & Extensions",
|
|
147
|
+
settings: "Agent Settings",
|
|
148
|
+
allAgents: "All Agents",
|
|
149
|
+
recentSessions: "Recent Sessions",
|
|
150
|
+
builtIn: "Built-in",
|
|
151
|
+
noDescription: "No description",
|
|
152
|
+
loading: "Loading...",
|
|
153
|
+
emptyAgents: "No agents yet",
|
|
154
|
+
emptySessions: "No sessions yet",
|
|
155
|
+
noResults: "No matching results",
|
|
156
|
+
retry: "Retry",
|
|
157
|
+
pin: "Pin",
|
|
158
|
+
unpin: "Unpin",
|
|
159
|
+
rename: "Rename",
|
|
160
|
+
delete: "Delete",
|
|
161
|
+
actions: "Actions",
|
|
162
|
+
save: "Save",
|
|
163
|
+
cancel: "Cancel",
|
|
164
|
+
running: "Running",
|
|
165
|
+
completed: "Completed",
|
|
166
|
+
failed: "Failed",
|
|
167
|
+
contextUsage: ({ percent }) => `${percent}% context used`
|
|
168
|
+
},
|
|
137
169
|
details: {
|
|
138
170
|
title: "Task details",
|
|
139
171
|
description: "Summary and workspace activity",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/locale/en-US.ts","../../../src/locale/resolve-locale.ts","../../../src/provider/context.ts","../../../src/components/toast/index.tsx"],"names":["sonnerToast","SonnerToaster"],"mappings":"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","file":"index.mjs","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 },\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 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 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 usage: {\n label: 'Context usage',\n context: ({ used, total }) => `${used} / ${total} tokens`,\n },\n details: {\n title: 'Task details',\n description: 'Summary and workspace activity',\n duration: 'Duration',\n updated: 'Updated',\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: { title: 'Loading task details', description: 'Restoring the latest session activity.' },\n empty: { title: 'No task selected', description: 'Select a task to inspect its details.' },\n error: { title: 'Unable to load task details', description: 'Try again after the session is available.' },\n },\n actions: {\n close: 'Close task details',\n copySummary: 'Copy summary',\n retry: 'Retry',\n retrySummary: 'Retry summary',\n resume: 'Resume',\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: { added: 'Added', modified: 'Modified', deleted: 'Deleted', renamed: 'Renamed' },\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 interactiveTable: {\n ...base.workbench.interactiveTable,\n ...override.workbench?.interactiveTable,\n },\n },\n agentWorkbench: {\n ...base.agentWorkbench,\n ...override.agentWorkbench,\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 usage: {\n ...base.agentWorkbench.usage,\n ...override.agentWorkbench?.usage,\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 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}\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 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 {\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ExternalToast,\n type ToastT,\n type ToastToDismiss,\n type ToasterProps,\n} from 'sonner';\n\nimport type { MonkeysToastMessages } from '../../locale';\nimport { useMonkeysLocaleMessages } from '../../provider/context';\n\nexport type ToastVariant = 'error' | 'warning' | 'success' | 'info';\n\nexport type ToastInput = Omit<ExternalToast, 'description'> & {\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n};\n\nexport type MonkeysToasterProps = ToasterProps & {\n useThemeClassNames?: boolean;\n};\n\nexport type MonkeysToastProviderProps = {\n children: ReactNode;\n toasterProps?: MonkeysToasterProps;\n};\n\ntype ToastValue =\n | Error\n | string\n | {\n message?: unknown;\n title?: unknown;\n }\n | null\n | undefined;\n\ntype ToastResolver<T> = T | ((value: ToastValue) => T);\ntype ToastTranslate = (value: string, params?: Record<string, unknown>) => string;\n\ntype ToastValueOptions = {\n variant?: ToastResolver<ToastVariant | undefined>;\n title?: ToastResolver<string | undefined>;\n description?: ToastResolver<string | undefined>;\n fallbackDescription?: ToastResolver<string | undefined>;\n signature?: ToastResolver<string | undefined>;\n duration?: ToastResolver<number | undefined>;\n translate?: ToastTranslate;\n messages?: Partial<ToastDefaultMessages>;\n};\n\ntype ToastFeedEntry =\n | {\n variant?: ToastVariant;\n title?: string;\n description?: string;\n duration?: number;\n signature?: string;\n }\n | null\n | undefined;\n\ntype ToastDefaultMessages = MonkeysToastMessages;\n\ntype ToastPromiseInput<T = unknown> = Promise<T> | (() => Promise<T>);\ntype ToastPromiseReturn<T = unknown> = string | number | { unwrap: () => Promise<T> };\n\nexport type MonkeysToastApi = {\n (message: ReactNode, options?: ExternalToast): string | number;\n show: (input: ToastInput) => string | number | undefined;\n error: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n success: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n info: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n message: (message: ReactNode, options?: ExternalToast) => string | number;\n promise: <T = unknown>(promise: ToastPromiseInput<T>, data?: unknown) => ToastPromiseReturn<T>;\n dismiss: (id?: number | string) => string | number;\n loading: (message: ReactNode, options?: ExternalToast) => string | number;\n custom: (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number;\n getHistory: () => Array<ToastT | ToastToDismiss>;\n getToasts: () => Array<ToastT | ToastToDismiss>;\n};\n\nconst DEFAULT_TOAST_DURATION = 5200;\nconst TOAST_DEDUPE_WINDOW = 1200;\n\nconst ACTIONABLE_TOAST_PATTERNS = [\n /^(please|select|enter|provide|write|choose|confirm|fill)\\b/i,\n /^(请|请选择|请先|请输入|请填写|请确认|请留意)/,\n];\n\nconst DEFAULT_TOAST_CLASS_NAMES = {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n};\n\nconst recentToastSignatures = new Map<string, number>();\n\nfunction cn(...classNames: Array<string | undefined | false>) {\n return classNames.filter(Boolean).join(' ');\n}\n\nfunction isToastInput(input: unknown): input is ToastInput {\n if (!input || typeof input !== 'object' || isValidElement(input)) {\n return false;\n }\n\n return 'title' in input || 'description' in input || 'variant' in input;\n}\n\nfunction isEmptyToastContent(value: ReactNode) {\n return value == null || (typeof value === 'string' && !value.trim());\n}\n\nfunction normalizeToastInput(input: ReactNode | ToastInput, variant: ToastVariant, options?: ExternalToast): ToastInput {\n const { description: _description, ...baseOptions } = options ?? {};\n\n if (isToastInput(input)) {\n return {\n ...baseOptions,\n ...input,\n variant: input.variant ?? variant,\n };\n }\n\n return {\n ...baseOptions,\n title: input,\n variant,\n };\n}\n\nfunction resolveValue<T>(candidate: ToastResolver<T> | undefined, value: ToastValue) {\n if (typeof candidate === 'function') {\n return (candidate as (input: ToastValue) => T)(value);\n }\n\n return candidate;\n}\n\nfunction shouldEmitToast(signature: string) {\n const now = Date.now();\n\n for (const [key, timestamp] of recentToastSignatures.entries()) {\n if (now - timestamp > TOAST_DEDUPE_WINDOW) {\n recentToastSignatures.delete(key);\n }\n }\n\n const previousTimestamp = recentToastSignatures.get(signature);\n if (previousTimestamp && now - previousTimestamp < TOAST_DEDUPE_WINDOW) {\n return false;\n }\n\n recentToastSignatures.set(signature, now);\n return true;\n}\n\nfunction translateMessage(translate: ToastTranslate | undefined, value: string) {\n return translate ? translate(value, { defaultValue: value }) : value;\n}\n\nfunction getDefaultMessage(\n messages: Partial<ToastDefaultMessages> | undefined,\n localeMessages: ToastDefaultMessages,\n key: keyof ToastDefaultMessages,\n) {\n return messages?.[key] ?? localeMessages[key];\n}\n\nfunction emitToast(input: ToastInput) {\n const { title, description, duration, variant = 'info', ...options } = input;\n const message = isEmptyToastContent(title) ? description : title;\n\n if (isEmptyToastContent(message)) {\n return undefined;\n }\n\n const descriptionValue =\n !isEmptyToastContent(description) && description !== message ? description : undefined;\n const sonnerOptions: ExternalToast = {\n ...options,\n description: descriptionValue,\n duration: duration ?? DEFAULT_TOAST_DURATION,\n };\n\n switch (variant) {\n case 'error':\n return sonnerToast.error(message, sonnerOptions);\n case 'warning':\n return sonnerToast.warning(message, sonnerOptions);\n case 'success':\n return sonnerToast.success(message, sonnerOptions);\n default:\n return sonnerToast(message, sonnerOptions);\n }\n}\n\nexport function extractToastMessage(value: ToastValue, fallback = '') {\n if (!value) return fallback;\n\n if (typeof value === 'string') {\n const nextMessage = value.trim();\n return nextMessage || fallback;\n }\n\n if (value instanceof Error) {\n const nextMessage = String(value.message || '').trim();\n return nextMessage || fallback;\n }\n\n if (typeof value === 'object' && typeof value.message === 'string') {\n const nextMessage = value.message.trim();\n if (nextMessage) return nextMessage;\n }\n\n if (typeof value === 'object' && typeof value.title === 'string') {\n const nextTitle = value.title.trim();\n if (nextTitle) return nextTitle;\n }\n\n return fallback;\n}\n\nexport function resolveToastVariantForMessage(value: ToastValue): ToastVariant {\n const message = extractToastMessage(value);\n\n if (ACTIONABLE_TOAST_PATTERNS.some((pattern) => pattern.test(message))) {\n return 'warning';\n }\n\n return 'error';\n}\n\nexport function MonkeysToaster({\n className,\n closeButton = true,\n position = 'bottom-right',\n richColors = true,\n toastOptions,\n useThemeClassNames = true,\n visibleToasts = 10,\n ...props\n}: MonkeysToasterProps) {\n return (\n <SonnerToaster\n className={cn('pointer-events-auto toaster group', className)}\n closeButton={closeButton}\n position={position}\n richColors={richColors}\n toastOptions={{\n ...toastOptions,\n classNames: useThemeClassNames\n ? {\n ...DEFAULT_TOAST_CLASS_NAMES,\n ...toastOptions?.classNames,\n }\n : toastOptions?.classNames,\n }}\n visibleToasts={visibleToasts}\n {...props}\n />\n );\n}\n\nexport function MonkeysToastProvider({ children, toasterProps }: MonkeysToastProviderProps) {\n return (\n <>\n {children}\n <MonkeysToaster {...toasterProps} />\n </>\n );\n}\n\nexport function useToastOnValue(value: ToastValue, options: ToastValueOptions = {}) {\n const previousSignatureRef = useRef<string | null>(null);\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n\n useEffect(() => {\n if (!value) {\n previousSignatureRef.current = null;\n return;\n }\n\n const variant = resolveValue(options.variant, value) ?? 'error';\n const rawTitle = resolveValue(options.title, value);\n const rawFallbackDescription = resolveValue(options.fallbackDescription, value);\n const rawDescription =\n resolveValue(options.description, value) ?? extractToastMessage(value, rawFallbackDescription || '');\n const title = translateMessage(\n translate,\n rawTitle ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n rawDescription ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = resolveValue(options.signature, value) || [variant, title, description].join('|');\n\n if (previousSignatureRef.current === signature) {\n return;\n }\n\n previousSignatureRef.current = signature;\n\n if (!shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: resolveValue(options.duration, value),\n });\n }, [\n options.description,\n options.duration,\n options.fallbackDescription,\n options.messages,\n options.signature,\n options.title,\n options.variant,\n localeMessages,\n translate,\n value,\n ]);\n}\n\nexport function useToastFeed(items: ToastFeedEntry[], options: Pick<ToastValueOptions, 'messages' | 'translate'> = {}) {\n const previousVisibleSignaturesRef = useRef<Set<string>>(new Set());\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n const emitItem = useCallback(\n (item: NonNullable<ToastFeedEntry>, index: number, visibleSignatures: Set<string>) => {\n const variant = item.variant ?? 'info';\n const title = translateMessage(\n translate,\n item.title ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n item.description ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = item.signature || [variant, title, description, index].join('|');\n\n visibleSignatures.add(signature);\n\n if (previousVisibleSignaturesRef.current.has(signature) || !shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: item.duration,\n });\n },\n [localeMessages, options.messages, translate],\n );\n\n useEffect(() => {\n const visibleSignatures = new Set<string>();\n\n items.forEach((item, index) => {\n if (item) {\n emitItem(item, index, visibleSignatures);\n }\n });\n\n previousVisibleSignaturesRef.current = visibleSignatures;\n }, [emitItem, items]);\n}\n\nexport const toast: MonkeysToastApi = Object.assign(\n (message: ReactNode, options?: ExternalToast) => sonnerToast(message, options),\n {\n show: emitToast,\n error: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'error', options)),\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'warning', options)),\n success: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'success', options)),\n info: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'info', options)),\n message: sonnerToast.message,\n promise: sonnerToast.promise as MonkeysToastApi['promise'],\n dismiss: sonnerToast.dismiss,\n loading: sonnerToast.loading,\n custom: sonnerToast.custom as (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number,\n getHistory: sonnerToast.getHistory,\n getToasts: sonnerToast.getToasts,\n },\n);\n\nexport { MonkeysToaster as Toaster, MonkeysToastProvider as ToastProvider };\nexport type { ExternalToast, ToasterProps };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/locale/en-US.ts","../../../src/locale/resolve-locale.ts","../../../src/provider/context.ts","../../../src/components/toast/index.tsx"],"names":["sonnerToast","SonnerToaster"],"mappings":"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","file":"index.mjs","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 },\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 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 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 usage: {\n label: 'Context usage',\n context: ({ used, total }) => `${used} / ${total} tokens`,\n },\n navigation: {\n search: 'Search agents and 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 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 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: { title: 'Loading task details', description: 'Restoring the latest session activity.' },\n empty: { title: 'No task selected', description: 'Select a task to inspect its details.' },\n error: { title: 'Unable to load task details', description: 'Try again after the session is available.' },\n },\n actions: {\n close: 'Close task details',\n copySummary: 'Copy summary',\n retry: 'Retry',\n retrySummary: 'Retry summary',\n resume: 'Resume',\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: { added: 'Added', modified: 'Modified', deleted: 'Deleted', renamed: 'Renamed' },\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 interactiveTable: {\n ...base.workbench.interactiveTable,\n ...override.workbench?.interactiveTable,\n },\n },\n agentWorkbench: {\n ...base.agentWorkbench,\n ...override.agentWorkbench,\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 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 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}\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 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 {\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ExternalToast,\n type ToastT,\n type ToastToDismiss,\n type ToasterProps,\n} from 'sonner';\n\nimport type { MonkeysToastMessages } from '../../locale';\nimport { useMonkeysLocaleMessages } from '../../provider/context';\n\nexport type ToastVariant = 'error' | 'warning' | 'success' | 'info';\n\nexport type ToastInput = Omit<ExternalToast, 'description'> & {\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n};\n\nexport type MonkeysToasterProps = ToasterProps & {\n useThemeClassNames?: boolean;\n};\n\nexport type MonkeysToastProviderProps = {\n children: ReactNode;\n toasterProps?: MonkeysToasterProps;\n};\n\ntype ToastValue =\n | Error\n | string\n | {\n message?: unknown;\n title?: unknown;\n }\n | null\n | undefined;\n\ntype ToastResolver<T> = T | ((value: ToastValue) => T);\ntype ToastTranslate = (value: string, params?: Record<string, unknown>) => string;\n\ntype ToastValueOptions = {\n variant?: ToastResolver<ToastVariant | undefined>;\n title?: ToastResolver<string | undefined>;\n description?: ToastResolver<string | undefined>;\n fallbackDescription?: ToastResolver<string | undefined>;\n signature?: ToastResolver<string | undefined>;\n duration?: ToastResolver<number | undefined>;\n translate?: ToastTranslate;\n messages?: Partial<ToastDefaultMessages>;\n};\n\ntype ToastFeedEntry =\n | {\n variant?: ToastVariant;\n title?: string;\n description?: string;\n duration?: number;\n signature?: string;\n }\n | null\n | undefined;\n\ntype ToastDefaultMessages = MonkeysToastMessages;\n\ntype ToastPromiseInput<T = unknown> = Promise<T> | (() => Promise<T>);\ntype ToastPromiseReturn<T = unknown> = string | number | { unwrap: () => Promise<T> };\n\nexport type MonkeysToastApi = {\n (message: ReactNode, options?: ExternalToast): string | number;\n show: (input: ToastInput) => string | number | undefined;\n error: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n success: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n info: (input: ReactNode | ToastInput, options?: ExternalToast) => string | number | undefined;\n message: (message: ReactNode, options?: ExternalToast) => string | number;\n promise: <T = unknown>(promise: ToastPromiseInput<T>, data?: unknown) => ToastPromiseReturn<T>;\n dismiss: (id?: number | string) => string | number;\n loading: (message: ReactNode, options?: ExternalToast) => string | number;\n custom: (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number;\n getHistory: () => Array<ToastT | ToastToDismiss>;\n getToasts: () => Array<ToastT | ToastToDismiss>;\n};\n\nconst DEFAULT_TOAST_DURATION = 5200;\nconst TOAST_DEDUPE_WINDOW = 1200;\n\nconst ACTIONABLE_TOAST_PATTERNS = [\n /^(please|select|enter|provide|write|choose|confirm|fill)\\b/i,\n /^(请|请选择|请先|请输入|请填写|请确认|请留意)/,\n];\n\nconst DEFAULT_TOAST_CLASS_NAMES = {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n};\n\nconst recentToastSignatures = new Map<string, number>();\n\nfunction cn(...classNames: Array<string | undefined | false>) {\n return classNames.filter(Boolean).join(' ');\n}\n\nfunction isToastInput(input: unknown): input is ToastInput {\n if (!input || typeof input !== 'object' || isValidElement(input)) {\n return false;\n }\n\n return 'title' in input || 'description' in input || 'variant' in input;\n}\n\nfunction isEmptyToastContent(value: ReactNode) {\n return value == null || (typeof value === 'string' && !value.trim());\n}\n\nfunction normalizeToastInput(input: ReactNode | ToastInput, variant: ToastVariant, options?: ExternalToast): ToastInput {\n const { description: _description, ...baseOptions } = options ?? {};\n\n if (isToastInput(input)) {\n return {\n ...baseOptions,\n ...input,\n variant: input.variant ?? variant,\n };\n }\n\n return {\n ...baseOptions,\n title: input,\n variant,\n };\n}\n\nfunction resolveValue<T>(candidate: ToastResolver<T> | undefined, value: ToastValue) {\n if (typeof candidate === 'function') {\n return (candidate as (input: ToastValue) => T)(value);\n }\n\n return candidate;\n}\n\nfunction shouldEmitToast(signature: string) {\n const now = Date.now();\n\n for (const [key, timestamp] of recentToastSignatures.entries()) {\n if (now - timestamp > TOAST_DEDUPE_WINDOW) {\n recentToastSignatures.delete(key);\n }\n }\n\n const previousTimestamp = recentToastSignatures.get(signature);\n if (previousTimestamp && now - previousTimestamp < TOAST_DEDUPE_WINDOW) {\n return false;\n }\n\n recentToastSignatures.set(signature, now);\n return true;\n}\n\nfunction translateMessage(translate: ToastTranslate | undefined, value: string) {\n return translate ? translate(value, { defaultValue: value }) : value;\n}\n\nfunction getDefaultMessage(\n messages: Partial<ToastDefaultMessages> | undefined,\n localeMessages: ToastDefaultMessages,\n key: keyof ToastDefaultMessages,\n) {\n return messages?.[key] ?? localeMessages[key];\n}\n\nfunction emitToast(input: ToastInput) {\n const { title, description, duration, variant = 'info', ...options } = input;\n const message = isEmptyToastContent(title) ? description : title;\n\n if (isEmptyToastContent(message)) {\n return undefined;\n }\n\n const descriptionValue =\n !isEmptyToastContent(description) && description !== message ? description : undefined;\n const sonnerOptions: ExternalToast = {\n ...options,\n description: descriptionValue,\n duration: duration ?? DEFAULT_TOAST_DURATION,\n };\n\n switch (variant) {\n case 'error':\n return sonnerToast.error(message, sonnerOptions);\n case 'warning':\n return sonnerToast.warning(message, sonnerOptions);\n case 'success':\n return sonnerToast.success(message, sonnerOptions);\n default:\n return sonnerToast(message, sonnerOptions);\n }\n}\n\nexport function extractToastMessage(value: ToastValue, fallback = '') {\n if (!value) return fallback;\n\n if (typeof value === 'string') {\n const nextMessage = value.trim();\n return nextMessage || fallback;\n }\n\n if (value instanceof Error) {\n const nextMessage = String(value.message || '').trim();\n return nextMessage || fallback;\n }\n\n if (typeof value === 'object' && typeof value.message === 'string') {\n const nextMessage = value.message.trim();\n if (nextMessage) return nextMessage;\n }\n\n if (typeof value === 'object' && typeof value.title === 'string') {\n const nextTitle = value.title.trim();\n if (nextTitle) return nextTitle;\n }\n\n return fallback;\n}\n\nexport function resolveToastVariantForMessage(value: ToastValue): ToastVariant {\n const message = extractToastMessage(value);\n\n if (ACTIONABLE_TOAST_PATTERNS.some((pattern) => pattern.test(message))) {\n return 'warning';\n }\n\n return 'error';\n}\n\nexport function MonkeysToaster({\n className,\n closeButton = true,\n position = 'bottom-right',\n richColors = true,\n toastOptions,\n useThemeClassNames = true,\n visibleToasts = 10,\n ...props\n}: MonkeysToasterProps) {\n return (\n <SonnerToaster\n className={cn('pointer-events-auto toaster group', className)}\n closeButton={closeButton}\n position={position}\n richColors={richColors}\n toastOptions={{\n ...toastOptions,\n classNames: useThemeClassNames\n ? {\n ...DEFAULT_TOAST_CLASS_NAMES,\n ...toastOptions?.classNames,\n }\n : toastOptions?.classNames,\n }}\n visibleToasts={visibleToasts}\n {...props}\n />\n );\n}\n\nexport function MonkeysToastProvider({ children, toasterProps }: MonkeysToastProviderProps) {\n return (\n <>\n {children}\n <MonkeysToaster {...toasterProps} />\n </>\n );\n}\n\nexport function useToastOnValue(value: ToastValue, options: ToastValueOptions = {}) {\n const previousSignatureRef = useRef<string | null>(null);\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n\n useEffect(() => {\n if (!value) {\n previousSignatureRef.current = null;\n return;\n }\n\n const variant = resolveValue(options.variant, value) ?? 'error';\n const rawTitle = resolveValue(options.title, value);\n const rawFallbackDescription = resolveValue(options.fallbackDescription, value);\n const rawDescription =\n resolveValue(options.description, value) ?? extractToastMessage(value, rawFallbackDescription || '');\n const title = translateMessage(\n translate,\n rawTitle ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n rawDescription ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = resolveValue(options.signature, value) || [variant, title, description].join('|');\n\n if (previousSignatureRef.current === signature) {\n return;\n }\n\n previousSignatureRef.current = signature;\n\n if (!shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: resolveValue(options.duration, value),\n });\n }, [\n options.description,\n options.duration,\n options.fallbackDescription,\n options.messages,\n options.signature,\n options.title,\n options.variant,\n localeMessages,\n translate,\n value,\n ]);\n}\n\nexport function useToastFeed(items: ToastFeedEntry[], options: Pick<ToastValueOptions, 'messages' | 'translate'> = {}) {\n const previousVisibleSignaturesRef = useRef<Set<string>>(new Set());\n const localeMessages = useMonkeysLocaleMessages().toast;\n const translate = options.translate;\n const emitItem = useCallback(\n (item: NonNullable<ToastFeedEntry>, index: number, visibleSignatures: Set<string>) => {\n const variant = item.variant ?? 'info';\n const title = translateMessage(\n translate,\n item.title ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'warningTitle' : 'errorTitle',\n ),\n );\n const description = translateMessage(\n translate,\n item.description ||\n getDefaultMessage(\n options.messages,\n localeMessages,\n variant === 'warning' ? 'defaultWarningDescription' : 'defaultErrorDescription',\n ),\n );\n const signature = item.signature || [variant, title, description, index].join('|');\n\n visibleSignatures.add(signature);\n\n if (previousVisibleSignaturesRef.current.has(signature) || !shouldEmitToast(signature)) {\n return;\n }\n\n toast.show({\n variant,\n title,\n description,\n duration: item.duration,\n });\n },\n [localeMessages, options.messages, translate],\n );\n\n useEffect(() => {\n const visibleSignatures = new Set<string>();\n\n items.forEach((item, index) => {\n if (item) {\n emitItem(item, index, visibleSignatures);\n }\n });\n\n previousVisibleSignaturesRef.current = visibleSignatures;\n }, [emitItem, items]);\n}\n\nexport const toast: MonkeysToastApi = Object.assign(\n (message: ReactNode, options?: ExternalToast) => sonnerToast(message, options),\n {\n show: emitToast,\n error: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'error', options)),\n warning: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'warning', options)),\n success: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'success', options)),\n info: (input: ReactNode | ToastInput, options?: ExternalToast) =>\n emitToast(normalizeToastInput(input, 'info', options)),\n message: sonnerToast.message,\n promise: sonnerToast.promise as MonkeysToastApi['promise'],\n dismiss: sonnerToast.dismiss,\n loading: sonnerToast.loading,\n custom: sonnerToast.custom as (jsx: (id: number | string) => ReactElement, data?: ExternalToast) => string | number,\n getHistory: sonnerToast.getHistory,\n getToasts: sonnerToast.getToasts,\n },\n);\n\nexport { MonkeysToaster as Toaster, MonkeysToastProvider as ToastProvider };\nexport type { ExternalToast, ToasterProps };\n"]}
|