@republicroad/seal-editor 1.37.0 → 1.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{i18n-DI2s8YGH.js → i18n-C_1qGEri.js} +19 -1
- package/dist/i18n-C_1qGEri.js.map +1 -0
- package/dist/index.d.ts +25 -6
- package/dist/index.js +3015 -2831
- package/dist/index.js.map +1 -1
- package/dist/schema.d.ts +6 -6
- package/dist/{simulate-run-detail-qZE4KheI.js → simulate-run-detail-Rf8UW70X.js} +2 -2
- package/dist/{simulate-run-detail-qZE4KheI.js.map → simulate-run-detail-Rf8UW70X.js.map} +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/i18n-DI2s8YGH.js.map +0 -1
|
@@ -62,6 +62,9 @@ var c = {
|
|
|
62
62
|
"node.delete": "Delete",
|
|
63
63
|
"inspector.close": "Close inspector",
|
|
64
64
|
"dt.runHitStats": "Run hits",
|
|
65
|
+
"dt.rowHit": "Row matched by last simulation run",
|
|
66
|
+
"dt.instantEval.suspended": "Table structure changed — hit badges are paused. Run the simulation to refresh.",
|
|
67
|
+
"dt.instantEval.degraded": "Large table — instant hit badges are off. Run the simulation manually.",
|
|
65
68
|
"spec.dt.title": "Decision table",
|
|
66
69
|
"spec.expression.title": "Expression",
|
|
67
70
|
"spec.common.passthrough": "Passthrough",
|
|
@@ -193,6 +196,11 @@ var c = {
|
|
|
193
196
|
"dg.toolbar.uploadJson": "Upload JSON",
|
|
194
197
|
"dg.toolbar.uploadExcel": "Upload Excel",
|
|
195
198
|
"dg.toolbar.autoLayout": "Auto layout",
|
|
199
|
+
"dg.toolbar.alignToGrid": "Align nodes to grid",
|
|
200
|
+
"dg.toolbar.alignedToGrid": "Nodes aligned to grid",
|
|
201
|
+
"dg.toolbar.lockCanvas": "Lock canvas (prevent dragging and connecting)",
|
|
202
|
+
"dg.toolbar.unlockCanvas": "Unlock canvas",
|
|
203
|
+
"dg.toolbar.snapToGrid": "Snap to grid while dragging",
|
|
196
204
|
"dg.toolbar.downloadJson": "Download JSON",
|
|
197
205
|
"dg.toolbar.downloadExcel": "Download Excel",
|
|
198
206
|
"dg.toolbar.searchNodes": "Search nodes",
|
|
@@ -374,6 +382,7 @@ var c = {
|
|
|
374
382
|
"cf.instanceEmpty": "No instances yet",
|
|
375
383
|
"cf.selectInstance": "Select an instance on the left to edit",
|
|
376
384
|
"cf.noParams": "This function declares no parameters",
|
|
385
|
+
"cf.documentation": "Documentation",
|
|
377
386
|
"cf.unknownFunction": "Function not in scope — pick one from the catalog",
|
|
378
387
|
"cf.result": "Result",
|
|
379
388
|
"cf.lastRunHint": "From the last simulation run — re-run after edits to refresh",
|
|
@@ -427,6 +436,9 @@ var c = {
|
|
|
427
436
|
"node.delete": "删除",
|
|
428
437
|
"inspector.close": "关闭检查器",
|
|
429
438
|
"dt.runHitStats": "Run 命中",
|
|
439
|
+
"dt.rowHit": "上次仿真运行命中的行",
|
|
440
|
+
"dt.instantEval.suspended": "表结构已变更,命中徽章暂停——重新运行仿真以刷新",
|
|
441
|
+
"dt.instantEval.degraded": "大表模式,即时命中已停用——请手动运行仿真",
|
|
430
442
|
"spec.dt.title": "决策表",
|
|
431
443
|
"spec.expression.title": "表达式",
|
|
432
444
|
"spec.common.passthrough": "透传",
|
|
@@ -558,6 +570,11 @@ var c = {
|
|
|
558
570
|
"dg.toolbar.uploadJson": "上传 JSON",
|
|
559
571
|
"dg.toolbar.uploadExcel": "上传 Excel",
|
|
560
572
|
"dg.toolbar.autoLayout": "一键整理",
|
|
573
|
+
"dg.toolbar.alignToGrid": "节点对齐网格",
|
|
574
|
+
"dg.toolbar.alignedToGrid": "节点已对齐网格",
|
|
575
|
+
"dg.toolbar.lockCanvas": "锁定画布(防止拖拽与连线)",
|
|
576
|
+
"dg.toolbar.unlockCanvas": "解锁画布",
|
|
577
|
+
"dg.toolbar.snapToGrid": "拖拽时网格吸附",
|
|
561
578
|
"dg.toolbar.downloadJson": "下载 JSON",
|
|
562
579
|
"dg.toolbar.downloadExcel": "下载 Excel",
|
|
563
580
|
"dg.toolbar.searchNodes": "搜索节点",
|
|
@@ -739,6 +756,7 @@ var c = {
|
|
|
739
756
|
"cf.instanceEmpty": "暂无函数实例",
|
|
740
757
|
"cf.selectInstance": "在左侧选择一个实例进行编辑",
|
|
741
758
|
"cf.noParams": "该函数未声明参数",
|
|
759
|
+
"cf.documentation": "函数文档",
|
|
742
760
|
"cf.unknownFunction": "函数未登记——请从目录重选",
|
|
743
761
|
"cf.result": "返回值",
|
|
744
762
|
"cf.lastRunHint": "上次仿真结果,图变更后重新运行以刷新",
|
|
@@ -804,4 +822,4 @@ var f = () => {
|
|
|
804
822
|
//#endregion
|
|
805
823
|
export { o as i, p as n, f as r, m as t };
|
|
806
824
|
|
|
807
|
-
//# sourceMappingURL=i18n-
|
|
825
|
+
//# sourceMappingURL=i18n-C_1qGEri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-C_1qGEri.js","names":[],"sources":["../src/components/ui/button.tsx","../src/theming/i18n-types.ts","../src/theming/messages/en.ts","../src/theming/messages/zh-CN.ts","../src/theming/i18n.tsx"],"sourcesContent":["import { cn } from '#lib/utils';\nimport { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nconst buttonVariants = cva(\n \"appearance-none border-0 border-solid bg-transparent inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n 'default': 'h-9 px-4 py-2 has-[>svg]:px-3',\n 'xs': \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n 'sm': 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',\n 'lg': 'h-10 rounded-md px-6 has-[>svg]:px-4',\n 'icon': 'size-9',\n 'icon-xs': \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst Button = React.forwardRef<\n React.ComponentRef<typeof ButtonPrimitive>,\n React.ComponentPropsWithoutRef<typeof ButtonPrimitive> & VariantProps<typeof buttonVariants>\n>(function Button({ className, variant = 'default', size = 'default', ...props }, ref) {\n return (\n <ButtonPrimitive\n ref={ref}\n data-slot='button'\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n});\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","/**\n * Zero-dependency i18n infrastructure (Provider injection, roadmap Option A).\n *\n * Design:\n * - English messages are the source of truth (`TranslationKey` derives from it)\n * - `I18nProvider` resolves translations via fallback chain:\n * consumer overrides → locale messages → English → key itself\n * - `useT()` returns a translate function with `{{param}}` interpolation\n * - Locale switching is a simple context value change (no re-render storm)\n */\n\n/** Flat dot-notation message key, e.g. `'dt.toolbar.import'`. */\nexport type TranslationKey = string;\n\n/** Simple `{{param}}` interpolation parameters. */\nexport type InterpolationParams = Record<string, string | number>;\n\n/** Full message catalog for a single locale. */\nexport type MessageCatalog = Record<string, string>;\n\n/** Parse `{{param}}` placeholders in a template string. */\nexport function interpolate(template: string, params?: InterpolationParams): string {\n if (!params) return template;\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) =>\n params[key] !== undefined ? String(params[key]) : `{{${key}}}`,\n );\n}\n","/**\n * English message catalog — source of truth for all user-visible strings.\n * Keys use flat dot notation: `{component}.{context}.{element}`.\n * Chinese translation lives in `zh-CN.ts`.\n */\nexport const en = {\n // ── common ──\n 'builder.currentExpression': 'Currently: Expression. Click for value mode.',\n 'builder.currentValue': 'Currently: Value. Click for expression mode.',\n 'dialog.convertToJsonSchema': 'Convert to JSON Schema',\n 'dialog.mapExcelData': 'Map Excel data',\n 'dialog.reorderFields': 'Reorder fields',\n 'node.copy': 'Copy',\n 'node.duplicate': 'Duplicate',\n 'node.delete': 'Delete',\n 'inspector.close': 'Close inspector',\n 'dt.runHitStats': 'Run hits',\n 'dt.rowHit': 'Row matched by last simulation run',\n 'dt.instantEval.suspended': 'Table structure changed — hit badges are paused. Run the simulation to refresh.',\n 'dt.instantEval.degraded': 'Large table — instant hit badges are off. Run the simulation manually.',\n 'spec.dt.title': 'Decision table',\n 'spec.expression.title': 'Expression',\n 'spec.common.passthrough': 'Passthrough',\n 'spec.common.inputField': 'Input field',\n 'spec.common.outputPath': 'Output path',\n 'spec.common.executionMode': 'Execution mode',\n 'spec.common.single': 'Single',\n 'spec.common.loop': 'Loop',\n 'spec.common.configure': 'Configure',\n 'spec.common.settings': 'Settings',\n 'spec.expression.edit': 'Edit Expression',\n 'spec.dt.edit': 'Edit Table',\n 'spec.function.name': 'Function',\n 'spec.function.deprecation':\n 'Function v1 will be deprecated in one of the upcoming releases. To use a new Function, drag and drop a new Function Node and copy your logic. For more information click \"Documentation\". ',\n 'dataGrid.sortAscending': 'Asc',\n 'dataGrid.sortDescending': 'Desc',\n 'dataGrid.pinColumnStart': 'Pin to left',\n 'dataGrid.pinColumnEnd': 'Pin to right',\n 'dataGrid.moveColumnStart': 'Move to left',\n 'dataGrid.moveColumnEnd': 'Move to right',\n 'dataGrid.columnsMenu': 'Columns',\n 'dataGrid.unpinColumn': 'Unpin {{title}} column',\n 'dataGrid.toggleColumns': 'Toggle Columns',\n 'dataGrid.rowCreate': 'Add row',\n 'dataGrid.pinRow': 'Pin row',\n 'dataGrid.unpinRow': 'Unpin row',\n 'dataGrid.selectRow': 'Select row',\n 'dataGrid.selectAll': 'Select all',\n 'dataGrid.expandRow': 'Expand row',\n 'dataGrid.collapseRow': 'Collapse row',\n 'dataGrid.dragToReorder': 'Drag to reorder',\n 'dataGrid.dragToReorderRow': 'Drag to reorder row',\n 'dataGrid.reorderingUnavailable': 'Reordering unavailable',\n 'dataGrid.loading': 'Loading...',\n 'dataGrid.empty': 'No data available',\n 'dataGrid.allRowsLoaded': 'All records loaded',\n 'dataGrid.rowsPerPage': 'Rows per page',\n 'dataGrid.paginationInfo': '{{from}} - {{to}} of {{count}}',\n 'dataGrid.previousPage': 'Go to previous page',\n 'dataGrid.nextPage': 'Go to next page',\n 'dataGrid.goToPage': 'Go to page {{page}}',\n 'dataGrid.paginationEllipsis': '...',\n 'dataGrid.filterSelectedCount': '{{count}} selected',\n 'dataGrid.filterNoResults': 'No results found.',\n 'dataGrid.filterClear': 'Clear filters',\n 'common.ok': 'OK',\n 'common.cancel': 'Cancel',\n 'common.remove': 'Remove',\n 'common.delete': 'Delete',\n 'common.retry': 'Retry',\n 'common.close': 'Close',\n 'common.update': 'Update',\n 'common.create': 'Create',\n 'common.convert': 'Convert',\n 'common.format': 'Format',\n 'common.recover': 'Recover',\n 'common.copy': 'Copy',\n\n // ── decision table ──\n 'dt.toolbar.import': 'Import Excel',\n 'dt.toolbar.export': 'Export Excel',\n 'dt.toolbar.addRowAbove': 'Add row above',\n 'dt.toolbar.addRowBelow': 'Add row below',\n 'dt.toolbar.removeRow': 'Remove row',\n 'dt.toolbar.toggleColumns': 'Toggle columns',\n 'dt.toolbar.undo': 'Undo cell changes',\n 'dt.toolbar.redo': 'Redo cell changes',\n 'dt.cellsSkipped': 'Skipped {{count}} non-writable cell(s)',\n 'dt.toolbar.removeRowConfirm': 'Remove row?',\n 'dt.table.column': 'Table column',\n 'dt.table.excelColumn': 'Excel column',\n 'dt.table.selectExcelColumn': 'Select Excel column',\n 'dt.table.description': 'Description',\n 'dt.table.selectDescription': 'Select Excel column for description',\n 'dt.table.reorderFields': 'Reorder fields',\n\n // ── field edit ──\n 'dt.field.input.add': 'Add Input',\n 'dt.field.input.label': 'Input Field',\n 'dt.field.output.add': 'Add Output',\n 'dt.field.output.label': 'Output Field',\n 'dt.field.label': 'Field label',\n 'dt.field.browse': 'Browse fields',\n 'dt.field.name': 'Name',\n 'dt.field.type': 'Field Type',\n 'dt.field.outputType': 'Output Type',\n 'dt.field.editColumn': 'Edit column',\n 'dt.field.removeColumn': 'Remove column',\n 'dt.field.removeConfirm': 'Remove this column?',\n 'dt.field.wrapQuotes': 'Wrap values in quotes',\n 'dt.field.selectDictionary': 'Select dictionary...',\n 'dt.field.allowCustomValues': 'Allow custom values',\n 'dt.toolbar.simulationIndex': 'Simulation index:',\n\n // ── excel dialog ──\n 'dt.excel.title': 'Map Excel data',\n 'dt.excel.input': 'Input',\n 'dt.excel.output': 'Output',\n 'dt.excel.enterFieldName': 'Enter field name',\n\n // ── decision graph ──\n 'dg.node.decisionTables': 'Decision Tables',\n 'dg.node.expressions': 'Expressions',\n 'dg.node.functions': 'Functions',\n 'dg.node.editExpression': 'Edit Expression',\n // ── version history (appshell panel, kernel catalog) ──\n 'vh.title': 'Version history',\n 'vh.description.some': '{{count}} version(s). Restoring loads that version as the current one.',\n 'vh.description.none': 'No versions yet. Each save creates one.',\n 'vh.loading': 'Loading…',\n 'vh.filter.label': 'Filter versions',\n 'vh.filter.placeholder': 'Filter by name or revision…',\n 'vh.filter.noMatch': 'No versions match \"{{query}}\".',\n 'vh.noChanges': 'No changes',\n 'vh.changes': 'changes',\n 'vh.diff.tooLarge': 'Change too large for a line-level diff',\n 'vh.diff.noLineChanges': 'No line-level changes',\n 'vh.entry.current': 'current',\n 'vh.entry.auto': 'auto',\n 'vh.entry.pinned': 'pinned',\n 'vh.restore': 'Restore',\n 'vh.rename.title': 'Rename version',\n 'vh.rename.aria': 'Rename version {{revision}}',\n 'vh.name.aria': 'Name version {{revision}}',\n 'vh.name.placeholder': 'Version name',\n 'vh.name.button': 'Name',\n 'vh.pin.title': 'Pin version',\n 'vh.pin.aria': 'Pin version {{revision}}',\n 'vh.unpin.title': 'Unpin version',\n 'vh.unpin.aria': 'Unpin version {{revision}}',\n 'vh.compare.button': 'Compare',\n 'vh.compare.title': 'Compare against this version on the canvas',\n 'vh.compare.aria': 'Compare against version {{revision}}',\n 'vh.compare.exit.button': 'Exit compare',\n 'vh.compare.exit.title': 'Exit compare mode',\n 'vh.compare.exit.aria': 'Exit compare (was against {{revision}})',\n 'vh.compare.entry': 'comparing',\n 'dg.toolbar.uploadJson': 'Upload JSON',\n 'dg.toolbar.uploadExcel': 'Upload Excel',\n 'dg.toolbar.autoLayout': 'Auto layout',\n 'dg.toolbar.alignToGrid': 'Align nodes to grid',\n 'dg.toolbar.alignedToGrid': 'Nodes aligned to grid',\n 'dg.toolbar.lockCanvas': 'Lock canvas (prevent dragging and connecting)',\n 'dg.toolbar.unlockCanvas': 'Unlock canvas',\n 'dg.toolbar.snapToGrid': 'Snap to grid while dragging',\n 'dg.toolbar.downloadJson': 'Download JSON',\n 'dg.toolbar.downloadExcel': 'Download Excel',\n 'dg.toolbar.searchNodes': 'Search nodes',\n 'dg.command.open': 'Open command menu (Ctrl+K)',\n 'dg.command.placeholder': 'Search commands, nodes, panels…',\n 'dg.command.empty': 'No matching commands',\n 'dg.command.groupAdd': 'Add node',\n 'dg.command.groupPanels': 'Panels',\n 'dg.command.groupNodes': 'Canvas nodes',\n 'dg.toolbar.closeClose': 'Close panel',\n 'dg.simulation.toastOk': 'Simulation finished',\n 'dg.simulation.toastErr': 'Simulation failed',\n 'dg.simulation.runsEmpty': 'No runs yet — run a simulation to build history',\n 'dg.simulation.pin': 'Pin run (keep output across reloads)',\n 'dg.simulation.unpin': 'Unpin run',\n 'dg.simulation.copy': 'Copy JSON',\n 'dg.simulation.copied': 'Copied',\n 'dg.simulation.payloadEvicted': 'Run payload evicted (unpinned) — re-run to inspect',\n 'dg.simulation.runsClear': 'Clear history',\n 'dg.toolbar.schema': 'JSON Schema',\n 'dg.tabs.close': 'Close',\n 'dg.tabs.closeAll': 'Close all Tabs',\n 'dg.tabs.closeOthers': 'Close other Tabs',\n 'dg.tabs.closeRight': 'Close Tabs to the right',\n 'dg.tabs.closeLeft': 'Close Tabs to the left',\n 'dg.jsonSchema.title': 'Convert to JSON Schema',\n 'dg.jsonSchema.copyJson': 'Copy JSON',\n 'dg.node.documentation': 'Documentation',\n 'dg.node.duplicate': 'Duplicate',\n 'dg.node.deleteNode': 'Delete node',\n 'dg.schema.formatCode': 'Format code',\n 'dg.schema.importFromJson': 'Import from JSON',\n 'dg.excel.wrapQuotes': 'Wrap value in quotes',\n 'dg.excel.enterFieldName': 'Enter field name',\n 'dg.condition.removeConfirm': 'Remove condition?',\n 'dg.condition.namePlaceholder': 'Path name',\n 'dt.toolbar.rowRemoved': 'Row removed',\n\n // ── expression ──\n 'expression.placeholder': 'Expression',\n 'expression.key': 'Key',\n 'expression.addRowAbove': 'Add row above',\n 'expression.addRowBelow': 'Add row below',\n\n // ── function ──\n 'func.debugger.copy': 'Copy to clipboard',\n 'func.debugger.searchLogs': 'Search logs',\n 'func.debugger.copied': 'Copied to clipboard',\n 'func.debugger.formatCode': 'Format code',\n 'func.debugger.importLibrary': 'Import library',\n 'func.debugger.goToDocs': 'Go to documentation',\n 'func.debugger.msSinceRun': 'Time since start of execution of script.',\n 'misc.search': 'Search...',\n 'func.preview.noResults': 'Run simulation to see the results',\n\n // ── safe boundary ──\n 'safe.title': 'Something went wrong',\n 'safe.retry': 'Retry',\n\n // ── request node ──\n 'request': 'Request',\n 'request.dataLabel': 'Example data',\n 'request.dataSourceSaved': 'Data saved',\n 'request.dataTypeMismatchWarning':\n 'The current request data type does not match the definitions. To change the definition, update it in Definitions.',\n 'request.downloadJsonNoData': 'No data available to download',\n 'request.jsonInvalidError': 'Enter valid JSON or JSON5',\n 'request.jsonObjectError': 'Enter a JSON object',\n 'request.saveDataSourceFailed': 'Failed to save data',\n 'request.selectDataSourceFirst': 'Select a data first',\n 'request.typeArray': 'Array',\n 'request.typeBoolean': 'Boolean',\n 'request.typeDatetime': 'Datetime',\n 'request.typeNumber': 'Number',\n 'request.typeObject': 'Object',\n 'request.typeString': 'String',\n 'request.uploadJsonFailed': 'Failed to upload JSON',\n 'request.uploadJsonObjectRequired': 'Uploaded JSON must be an object',\n 'request.uploadJsonSuccess': 'JSON uploaded successfully',\n\n 'request.key': 'Key',\n 'request.type': 'Type',\n 'request.description': 'Description',\n 'request.save': 'Save',\n 'request.schema': 'Schema',\n 'request.addChildField': 'Add child field',\n 'request.addDataSource': 'Add data',\n 'request.addField': 'Add field',\n 'request.childFieldNamePlaceholder': 'Child field name',\n 'request.createDataSource': 'Create data',\n 'request.definitionsTab': 'Definitions',\n 'request.deleteDataSourceConfirm': 'Delete this data?',\n 'request.deleteFieldConfirm': 'Delete this field?',\n 'request.downloadJsonTooltip': 'Download JSON for the current data ',\n 'request.exampleDescriptionPlaceholder': 'Add example description...',\n 'request.exampleFieldSummary': 'Field summary',\n 'request.exampleFieldSummaryAllMatch': 'Fields match definitions',\n 'request.exampleFieldSummaryConflicts': 'Type conflicts',\n 'request.exampleFieldSummaryDefinitions': 'Defined fields',\n 'request.exampleFieldSummaryExtra': 'Extra fields',\n 'request.exampleFieldSummaryMissing': 'Missing fields',\n 'request.examplesTab': 'Data',\n 'request.fieldDefaultValuePlaceholder': 'Default value',\n 'request.fieldDescriptionPlaceholder': 'Field description',\n 'request.fieldNamePlaceholder': 'Field name',\n 'request.formatSchema': 'Format schema',\n 'request.noDataSources': 'No data',\n 'request.driftSchemaChanged': 'Schema changed since last validation',\n 'request.driftMissing': 'missing',\n 'request.driftExtra': 'extra',\n 'request.driftConflicts': 'type conflicts',\n 'request.driftMigrate': 'Migrate',\n 'request.driftMigrateTooltip': 'Fill missing values from defaults and remove fields that no longer exist',\n 'request.driftMigrateAll': 'Migrate all',\n 'request.driftMigrateAllTooltip': 'Apply the safe migration to every example',\n 'request.driftConfirmValid': 'Mark valid',\n 'request.driftConfirmTooltip': 'The example already matches the current schema - record its fingerprint',\n 'request.driftConstraints': 'constraint violations',\n 'request.importContract': 'Import contract',\n 'request.importContractTooltip': 'Adopt a shared contract envelope (contractVersion + schema + examples)',\n 'request.importContractSuccess': 'Contract envelope imported',\n 'request.importContractInvalidJson': 'The file is not valid JSON',\n 'request.importContractInvalidShape': 'Not a contract envelope (contractVersion + schema + examples are required)',\n 'request.importContractUnsupportedVersion': 'The envelope contractVersion is newer than this version supports',\n 'request.exportContract': 'Export contract',\n 'request.exportContractTooltip': 'Download the contract envelope for sharing (OpenAPI / mock / fixtures)',\n 'request.showRemainingSources': 'Show remaining examples',\n 'request.runAll': 'Run all',\n 'request.runAllTooltip': 'Execute every example against the current graph (runs on the host engine)',\n 'request.runAllFailed': 'Run failed',\n 'request.runAllMatrixTitle': 'Run report',\n 'request.runAllMatrixLabel': 'Run all result matrix',\n 'request.runAllPassed': 'passed',\n 'request.runAllFailedCount': 'failed',\n 'request.outcomePassed': 'passed',\n 'request.outcomeAssertionFailed': 'assertion failed',\n 'request.outcomeExecutionError': 'error',\n 'request.modeDesign': 'Design',\n 'request.modeCode': 'Code',\n 'request.designModeTooltip': 'Structured field editor',\n 'request.examplesSwitcherLabel': 'Examples',\n 'request.selectFieldHint': 'Select a field in the tree to edit it',\n 'request.objectChildrenHint': 'Child fields',\n 'request.arrayCodeHint': 'Array item editing lives in Code mode.',\n 'request.examplePreviewTitle': 'Example',\n 'request.debugInSimulator': 'Debug',\n 'request.fixturesNoInputNode': 'No input node in this graph',\n 'request.fixturesNoExamples': 'The input node has no examples yet',\n 'request.fixturesRunning': 'Running…',\n 'cf.argsDriftTitle': 'Function argument drift',\n 'cf.argsDriftRows': 'row(s)',\n 'cf.dollarFormBand':\n '$.-path args detected — kwargs scope never resolves hBcpaths (always null); migrate to bare paths',\n 'cf.dollarFormMigrate': 'Migrate $. paths',\n 'cf.argsDriftMissing': 'missing',\n 'cf.argsDriftUnrecognized': 'unrecognized',\n 'cf.argsKwargsCollision': 'kwargs envelope ambiguity',\n 'cf.argsDanglingRefs': 'dangling refs',\n 'dollar.inputRefViaDollar':\n '\"{{ref}}\" reads an input field via $ — expression rows only cover row outputs; write \"{{suggestion}}\" (bare name) or the row is silently dropped',\n 'dollar.keyShadowsInput':\n 'Key \"{{name}}\" collides with an input field — expressions keep reading the input while the output overrides the key',\n 'dollar.tableNav':\n '$. references never match in full-expression cells — use \"$root.\" or a bare name ({{count}} cell(s) flagged)',\n 'cf.argsFillMissing': 'Fill missing defaults',\n 'cf.instanceOverview': 'Instances',\n 'cf.parallelHint': 'runs in parallel',\n 'cf.duplicateKeyError': 'Duplicate output key — parallel results will overwrite',\n 'cf.scheduleCycleError': 'Circular dependency detected: {{keys}}',\n 'cf.instanceLayerHint': 'Execution layer {{layer}}',\n 'cf.modeTable': 'Table',\n 'cf.modeCode': 'Code',\n 'cf.codeInvalidJson': 'Invalid JSON',\n 'cf.modeLiteral': 'Value',\n 'cf.modeExpression': 'Expression',\n 'cf.modeReference': 'Reference',\n 'cf.addInstance': 'Add instance',\n 'cf.paramKey': 'Output key',\n 'cf.paramRequired': 'required',\n 'cf.paramSection': 'Parameters',\n 'cf.dependsOn': 'Depends on',\n 'cf.dependsOnAdd': 'Add dependency…',\n 'cf.dependsOnRemove': 'Remove dependency {{dep}}',\n 'cf.dependsOnDangling': 'Depends on missing key \"{{dep}}\" — the entry is ignored by scheduling',\n 'cf.dependsOnUnused': 'Declared but not referenced in args (ordering-only): {{deps}}',\n 'cf.referenceSources': 'Reference sources',\n 'cf.referenceSourcesHint': 'click to copy $. reference — paste into args to build an implicit dependency edge',\n 'request.fixturesSummary': '{{total}} cases: {{passed}} passed, {{failed}} failed, {{ms}}ms total',\n 'dt.constantComparison':\n 'Constant comparison — both sides are literals, so the condition never varies. Confirm this is intentional.',\n 'cf.referenceInsert': 'Insert into {{param}}',\n 'cf.referenceCopy': 'Copy reference',\n 'cf.referenceCopied': 'copied',\n 'cf.instanceEmpty': 'No instances yet',\n 'cf.selectInstance': 'Select an instance on the left to edit',\n 'cf.noParams': 'This function declares no parameters',\n 'cf.documentation': 'Documentation',\n 'cf.unknownFunction': 'Function not in scope — pick one from the catalog',\n 'cf.result': 'Result',\n 'cf.lastRunHint': 'From the last simulation run — re-run after edits to refresh',\n 'cf.noFunctionsInScope': 'No functions in scope — host must provide a function catalog (customFunctions/schema)',\n 'cf.orphanScopeHint': 'Original namespace offline ({{kind}}) — all functions are selectable',\n 'cf.field': 'Field',\n 'cf.fieldInsert': 'Insert field path',\n 'request.noDefinitions': 'No field definitions',\n 'request.schemaPriorityTooltip':\n 'Schema has the highest priority. Definitions and example data sync into schema, but schema remains the source of truth.',\n 'request.simulateTooltip': 'Open simulator',\n 'request.toggleFieldDescriptionsTooltip': 'Toggle field description hints',\n 'request.uploadJsonTooltip': 'Upload JSON for the current data',\n\n // ── custom function ──\n 'cf.key': 'Key',\n 'cf.expression': 'Expression',\n 'cf.function': 'Function',\n 'cf.code': 'Code',\n 'cf.legacy': 'Legacy',\n 'cf.addRow': 'Add Row',\n\n // ── simulator ──\n 'simulator.boundRequestNodeNotFound': 'Bound request node not found',\n 'simulator.requestMustBeObjectToSave': 'The current request must be a JSON object to save',\n 'simulator.description':\n 'Your business context that enters through the Request node, starting the decision process. Supply JSON or JSON5 format.',\n 'simulator.currentBinding': 'Current binding',\n 'simulator.nodeRequired': 'Request node is required to run the graph. Drag-and-drop it from the Components panel.',\n 'simulator.run': 'Run',\n 'simulator.formatSuccess': 'Formatted successfully!',\n 'simulator.formatFailed': 'Failed to format. Invalid JSON format.',\n 'simulator.nothingToCopy': 'Nothing to copy.',\n 'simulator.copiedToClipboard': 'Copied to clipboard!',\n 'simulator.copyFailedInvalidJson': 'Failed to copy. Invalid JSON format.',\n 'simulator.dataRequiredBeforeRun': 'The current request is empty. Please add example data first.',\n 'simulator.invalidFormatTitle': 'Invalid request format',\n 'simulator.invalidFormatDescription': 'Enter a valid JSON or JSON5 object before running.',\n 'simulator.searchPlaceholder': 'Search nodes...',\n 'simulator.clear': 'Clear',\n 'simulator.readyTitle': 'Ready to simulate!',\n 'simulator.readyHint': 'Run a request to see the node trace in action.',\n 'simulator.learnMore': 'Learn more',\n\n // ── misc ──\n 'common.clear': 'Clear',\n 'common.undo': 'Undo',\n 'misc.delete': 'Delete',\n} as const;\n\nexport type TranslationKey = keyof typeof en;\n","/** Chinese (Simplified) message catalog — 全量对译。 */\nexport const zhCN: Record<string, string> = {\n 'builder.currentExpression': '当前:表达式。点击切换为取值模式。',\n 'builder.currentValue': '当前:取值。点击切换为表达式模式。',\n 'dialog.convertToJsonSchema': '转换为 JSON Schema',\n 'dialog.mapExcelData': '映射 Excel 数据',\n 'dialog.reorderFields': '调整字段顺序',\n 'node.copy': '复制',\n 'node.duplicate': '建立副本',\n 'node.delete': '删除',\n 'inspector.close': '关闭检查器',\n 'dt.runHitStats': 'Run 命中',\n 'dt.rowHit': '上次仿真运行命中的行',\n 'dt.instantEval.suspended': '表结构已变更,命中徽章暂停——重新运行仿真以刷新',\n 'dt.instantEval.degraded': '大表模式,即时命中已停用——请手动运行仿真',\n 'spec.dt.title': '决策表',\n 'spec.expression.title': '表达式',\n 'spec.common.passthrough': '透传',\n 'spec.common.inputField': '输入字段',\n 'spec.common.outputPath': '输出路径',\n 'spec.common.executionMode': '执行模式',\n 'spec.common.single': '单次',\n 'spec.common.loop': '循环',\n 'spec.common.configure': '配置',\n 'spec.common.settings': '设置',\n 'spec.expression.edit': '编辑表达式',\n 'spec.dt.edit': '编辑决策表',\n 'spec.function.name': 'Function',\n 'spec.function.deprecation':\n 'Function v1 将在近期版本中弃用。如需使用新的 Function,请拖入新的 Function 节点并复制您的逻辑。更多信息请点击 \"Documentation\"。',\n 'dataGrid.sortAscending': '升序',\n 'dataGrid.sortDescending': '降序',\n 'dataGrid.pinColumnStart': '固定到左侧',\n 'dataGrid.pinColumnEnd': '固定到右侧',\n 'dataGrid.moveColumnStart': '左移',\n 'dataGrid.moveColumnEnd': '右移',\n 'dataGrid.columnsMenu': '列',\n 'dataGrid.unpinColumn': '取消固定「{{title}}」列',\n 'dataGrid.toggleColumns': '切换列显示',\n 'dataGrid.rowCreate': '添加行',\n 'dataGrid.pinRow': '固定行',\n 'dataGrid.unpinRow': '取消固定行',\n 'dataGrid.selectRow': '选择行',\n 'dataGrid.selectAll': '全选',\n 'dataGrid.expandRow': '展开行',\n 'dataGrid.collapseRow': '折叠行',\n 'dataGrid.dragToReorder': '拖动排序',\n 'dataGrid.dragToReorderRow': '拖动整行排序',\n 'dataGrid.reorderingUnavailable': '暂不支持重新排序',\n 'dataGrid.loading': '加载中…',\n 'dataGrid.empty': '暂无数据',\n 'dataGrid.allRowsLoaded': '已加载全部记录',\n 'dataGrid.rowsPerPage': '每页行数',\n 'dataGrid.paginationInfo': '{{from}} - {{to}} 条,共 {{count}} 条',\n 'dataGrid.previousPage': '上一页',\n 'dataGrid.nextPage': '下一页',\n 'dataGrid.goToPage': '第 {{page}} 页',\n 'dataGrid.paginationEllipsis': '…',\n 'dataGrid.filterSelectedCount': '已选 {{count}} 项',\n 'dataGrid.filterNoResults': '未找到结果。',\n 'dataGrid.filterClear': '清除筛选',\n 'common.ok': '确定',\n 'common.cancel': '取消',\n 'common.remove': '移除',\n 'common.delete': '删除',\n 'common.retry': '重试',\n 'common.close': '关闭',\n 'common.update': '更新',\n 'common.create': '创建',\n 'common.convert': '转换',\n 'common.format': '格式化',\n 'common.recover': '恢复',\n 'common.copy': '复制',\n\n 'dt.toolbar.import': '导入 Excel',\n 'dt.toolbar.export': '导出 Excel',\n 'dt.toolbar.addRowAbove': '在上方添加行',\n 'dt.toolbar.addRowBelow': '在下方添加行',\n 'dt.toolbar.removeRow': '删除行',\n 'dt.toolbar.toggleColumns': '显示隐藏列',\n 'dt.toolbar.undo': '撤销格子变更',\n 'dt.toolbar.redo': '重做格子变更',\n 'dt.cellsSkipped': '已跳过 {{count}} 个不可写格',\n 'dt.toolbar.removeRowConfirm': '确定删除该行?',\n 'dt.table.column': '表格列',\n 'dt.table.excelColumn': 'Excel 列',\n 'dt.table.selectExcelColumn': '选择 Excel 列',\n 'dt.table.description': '描述',\n 'dt.table.selectDescription': '选择描述对应的 Excel 列',\n 'dt.table.reorderFields': '调整字段顺序',\n\n 'dt.field.input.add': '添加输入',\n 'dt.field.input.label': '输入字段',\n 'dt.field.output.add': '添加输出',\n 'dt.field.output.label': '输出字段',\n 'dt.field.label': '字段标签',\n 'dt.field.browse': '浏览字段',\n 'dt.field.name': '名称',\n 'dt.field.type': '字段类型',\n 'dt.field.outputType': '输出类型',\n 'dt.field.editColumn': '编辑列',\n 'dt.field.removeColumn': '移除列',\n 'dt.field.removeConfirm': '确定移除该列?',\n 'dt.field.wrapQuotes': '值用引号包裹',\n 'dt.field.selectDictionary': '选择字典...',\n 'dt.field.allowCustomValues': '允许自定义值',\n 'dt.toolbar.simulationIndex': '仿真索引:',\n\n 'dt.excel.title': '映射 Excel 数据',\n 'dt.excel.input': '输入',\n 'dt.excel.output': '输出',\n 'dt.excel.enterFieldName': '输入字段名',\n\n 'dg.node.decisionTables': '决策表',\n 'dg.node.expressions': '表达式',\n 'dg.node.functions': '函数',\n 'dg.node.editExpression': '编辑表达式',\n 'vh.title': '版本历史',\n 'vh.description.some': '{{count}} 个版本。恢复会将该版本载入为当前版本。',\n 'vh.description.none': '暂无版本。保存后创建第一个版本。',\n 'vh.loading': '加载中…',\n 'vh.filter.label': '筛选版本',\n 'vh.filter.placeholder': '按名称或版本号筛选…',\n 'vh.filter.noMatch': '没有匹配“{{query}}”的版本。',\n 'vh.noChanges': '无变化',\n 'vh.changes': '处变更',\n 'vh.diff.tooLarge': '变更过大,已省略行级差异',\n 'vh.diff.noLineChanges': '无行级变更',\n 'vh.entry.current': '当前',\n 'vh.entry.auto': '自动',\n 'vh.entry.pinned': '已钉住',\n 'vh.restore': '恢复',\n 'vh.rename.title': '重命名版本',\n 'vh.rename.aria': '重命名版本 {{revision}}',\n 'vh.name.aria': '命名版本 {{revision}}',\n 'vh.name.placeholder': '版本名称',\n 'vh.name.button': '命名',\n 'vh.pin.title': '钉住版本',\n 'vh.pin.aria': '钉住版本 {{revision}}',\n 'vh.unpin.title': '取消钉住',\n 'vh.unpin.aria': '取消钉住版本 {{revision}}',\n 'vh.compare.button': '对比',\n 'vh.compare.title': '在画布上与该版本对比',\n 'vh.compare.aria': '与版本 {{revision}} 对比',\n 'vh.compare.exit.button': '退出对比',\n 'vh.compare.exit.title': '退出对比模式',\n 'vh.compare.exit.aria': '退出对比(此前对比 {{revision}})',\n 'vh.compare.entry': '对比中',\n 'dg.toolbar.uploadJson': '上传 JSON',\n 'dg.toolbar.uploadExcel': '上传 Excel',\n 'dg.toolbar.autoLayout': '一键整理',\n 'dg.toolbar.alignToGrid': '节点对齐网格',\n 'dg.toolbar.alignedToGrid': '节点已对齐网格',\n 'dg.toolbar.lockCanvas': '锁定画布(防止拖拽与连线)',\n 'dg.toolbar.unlockCanvas': '解锁画布',\n 'dg.toolbar.snapToGrid': '拖拽时网格吸附',\n 'dg.toolbar.downloadJson': '下载 JSON',\n 'dg.toolbar.downloadExcel': '下载 Excel',\n 'dg.toolbar.searchNodes': '搜索节点',\n 'dg.command.open': '打开命令面板(Ctrl+K)',\n 'dg.command.placeholder': '搜索命令、节点、面板…',\n 'dg.command.empty': '没有匹配的命令',\n 'dg.command.groupAdd': '添加节点',\n 'dg.command.groupPanels': '面板',\n 'dg.command.groupNodes': '画布节点',\n 'dg.toolbar.closeClose': '关闭面板',\n 'dg.simulation.toastOk': '仿真完成',\n 'dg.simulation.toastErr': '仿真失败',\n 'dg.simulation.runsEmpty': '暂无运行——跑一次仿真以积累历史',\n 'dg.simulation.pin': '置顶保留(刷新后仍可回看输出)',\n 'dg.simulation.unpin': '取消置顶',\n 'dg.simulation.copy': '复制 JSON',\n 'dg.simulation.copied': '已复制',\n 'dg.simulation.payloadEvicted': '历史载荷已淘汰(未置顶)——重新运行可回看',\n 'dg.simulation.runsClear': '清空历史',\n 'dg.toolbar.schema': 'JSON Schema',\n 'dg.tabs.close': '关闭',\n 'dg.tabs.closeAll': '关闭所有标签页',\n 'dg.tabs.closeOthers': '关闭其他标签页',\n 'dg.tabs.closeRight': '关闭右侧标签页',\n 'dg.tabs.closeLeft': '关闭左侧标签页',\n 'dg.jsonSchema.title': '转换为 JSON Schema',\n 'dg.jsonSchema.copyJson': '复制 JSON',\n 'dg.node.documentation': '文档',\n 'dg.node.duplicate': '复制节点',\n 'dg.node.deleteNode': '删除节点',\n 'dg.schema.formatCode': '格式化代码',\n 'dg.schema.importFromJson': '从 JSON 导入',\n 'dg.excel.wrapQuotes': '值包裹引号',\n 'dg.excel.enterFieldName': '输入字段名',\n 'dg.condition.removeConfirm': '移除此条件?',\n 'dg.condition.namePlaceholder': '路径名',\n 'dt.toolbar.rowRemoved': '已删除该行',\n\n 'expression.placeholder': '表达式',\n 'expression.key': '键名',\n 'expression.addRowAbove': '在上方添加行',\n 'expression.addRowBelow': '在下方添加行',\n\n 'func.debugger.copy': '复制到剪贴板',\n 'func.debugger.searchLogs': '搜索日志',\n 'func.debugger.formatCode': '格式化代码',\n 'func.debugger.importLibrary': '导入库',\n 'func.debugger.goToDocs': '前往文档',\n 'func.debugger.msSinceRun': '脚本开始执行至今的时长。',\n 'misc.search': '搜索...',\n 'func.debugger.copied': '已复制到剪贴板',\n 'func.preview.noResults': '运行模拟器以查看结果',\n\n 'safe.title': '出现问题',\n 'safe.retry': '重试',\n\n // ── request node ──\n 'request': '请求',\n 'request.dataLabel': '用例数据',\n 'request.dataSourceSaved': '用例数据保存成功',\n 'request.dataTypeMismatchWarning': '当前请求数据类型格式与定义不吻合,如需要修改定义,请前往请求定义处修改。',\n 'request.downloadJsonNoData': '当前无可下载的数据内容',\n 'request.jsonInvalidError': '请输入合法的 JSON 或 JSON5',\n 'request.jsonObjectError': '请输入 JSON 对象',\n 'request.saveDataSourceFailed': '当前用例数据保存失败',\n 'request.selectDataSourceFirst': '请先选择一条用例数据',\n 'request.typeArray': 'Array',\n 'request.typeBoolean': 'Boolean',\n 'request.typeDatetime': 'Datetime',\n 'request.typeNumber': 'Number',\n 'request.typeObject': 'Object',\n 'request.typeString': 'String',\n 'request.uploadJsonFailed': 'JSON 上传失败',\n 'request.uploadJsonObjectRequired': '上传的 JSON 必须是对象',\n 'request.uploadJsonSuccess': 'JSON 上传成功',\n\n 'request.key': '键',\n 'request.type': '类型',\n 'request.description': '描述',\n 'request.save': '保存',\n 'request.schema': 'Schema',\n 'request.addChildField': '新增子字段',\n 'request.addDataSource': '新增用例数据',\n 'request.addField': '新增字段',\n 'request.childFieldNamePlaceholder': '子字段名',\n 'request.createDataSource': '创建用例数据',\n 'request.definitionsTab': '类型定义',\n 'request.deleteDataSourceConfirm': '确认删除当前用例数据?',\n 'request.deleteFieldConfirm': '确认删除当前字段?',\n 'request.downloadJsonTooltip': '下载当前用例数据 JSON',\n 'request.exampleDescriptionPlaceholder': '添加示例描述...',\n 'request.exampleFieldSummary': '字段摘要',\n 'request.exampleFieldSummaryAllMatch': '字段与定义一致',\n 'request.exampleFieldSummaryConflicts': '类型冲突',\n 'request.exampleFieldSummaryDefinitions': '定义字段',\n 'request.exampleFieldSummaryExtra': '额外字段',\n 'request.exampleFieldSummaryMissing': '缺失字段',\n 'request.examplesTab': '用例数据',\n 'request.fieldDefaultValuePlaceholder': '默认值',\n 'request.fieldDescriptionPlaceholder': '字段描述',\n 'request.fieldNamePlaceholder': '输入字段名',\n 'request.formatSchema': '格式化 Schema',\n 'request.noDataSources': '暂无用例数据',\n 'request.driftSchemaChanged': 'Schema 已变更,待重新校验',\n 'request.driftMissing': '缺字段',\n 'request.driftExtra': '多余字段',\n 'request.driftConflicts': '类型冲突',\n 'request.driftMigrate': '迁移',\n 'request.driftMigrateTooltip': '按定义默认值补齐缺失字段,并移除已不存在的多余字段',\n 'request.driftMigrateAll': '全部迁移',\n 'request.driftMigrateAllTooltip': '对全部用例执行安全迁移',\n 'request.driftConfirmValid': '确认有效',\n 'request.driftConfirmTooltip': '用例与当前 Schema 相容——记录指纹锚',\n 'request.driftConstraints': '约束违例',\n 'request.importContract': '导入契约',\n 'request.importContractTooltip': '采用分享的契约信封(contractVersion + Schema + 用例)',\n 'request.importContractSuccess': '契约信封已导入',\n 'request.importContractInvalidJson': '文件不是合法的 JSON',\n 'request.importContractInvalidShape': '不是契约信封(需要 contractVersion + schema + examples)',\n 'request.importContractUnsupportedVersion': '信封 contractVersion 高于当前支持的版本',\n 'request.exportContract': '导出契约',\n 'request.exportContractTooltip': '下载契约信封用于分享(OpenAPI / mock / 测试夹具)',\n 'request.showRemainingSources': '显示其余用例',\n 'request.runAll': '全部运行',\n 'request.runAllTooltip': '对全部用例执行整图仿真(宿主引擎执行)',\n 'request.runAllFailed': '运行失败',\n 'request.runAllMatrixTitle': '运行报告',\n 'request.runAllMatrixLabel': '全部运行结果矩阵',\n 'request.runAllPassed': '通过',\n 'request.runAllFailedCount': '失败',\n 'request.outcomePassed': '通过',\n 'request.outcomeAssertionFailed': '断言失败',\n 'request.outcomeExecutionError': '执行错误',\n 'request.modeDesign': '设计',\n 'request.modeCode': '代码',\n 'request.designModeTooltip': '结构化字段编辑器',\n 'request.examplesSwitcherLabel': '用例',\n 'request.selectFieldHint': '在左侧字段树中选择要编辑的字段',\n 'request.objectChildrenHint': '子字段',\n 'request.arrayCodeHint': '数组元素的编辑在 Code 模式进行。',\n 'request.examplePreviewTitle': '用例预览',\n 'request.debugInSimulator': '调试',\n 'request.fixturesNoInputNode': '图中没有输入节点',\n 'request.fixturesNoExamples': '输入节点还没有用例',\n 'request.fixturesRunning': '运行中…',\n 'cf.argsDriftTitle': '函数参数漂移',\n 'cf.argsDriftRows': '行',\n 'cf.dollarFormBand': '检测到 $. 路径形态实参——kwargs 域不解析 hBc路径(恒 null),可迁移为裸路径',\n 'cf.dollarFormMigrate': '迁移 $. 路径',\n 'cf.argsDriftMissing': '缺参',\n 'cf.argsDriftUnrecognized': '未识别键',\n 'cf.argsKwargsCollision': 'kwargs 信封歧义',\n 'cf.argsDanglingRefs': '悬空引用',\n 'dollar.inputRefViaDollar':\n '\"{{ref}}\" 经 $ 引输入字段——表达式行只覆盖行输出;请写裸名 \"{{suggestion}}\",否则该行将被静默丢弃',\n 'dollar.keyShadowsInput': '键 \"{{name}}\" 与输入字段同名——表达式仍读输入值,但输出会覆盖该字段',\n 'dollar.tableNav': '全表达式单元含 \"$.\" 引用恒不命中——请改用 \"$root.\" 或裸名(共 {{count}} 处)',\n 'cf.argsFillMissing': '补缺失默认值',\n 'cf.instanceOverview': '函数实例',\n 'cf.parallelHint': '并行执行',\n 'cf.duplicateKeyError': '输出键重复——并行结果将相互覆盖',\n 'cf.scheduleCycleError': '检测到循环依赖:{{keys}}',\n 'cf.instanceLayerHint': '执行层 {{layer}}',\n 'cf.modeTable': '表格',\n 'cf.modeCode': '代码',\n 'cf.codeInvalidJson': 'JSON 格式错误',\n 'cf.modeLiteral': '值',\n 'cf.modeExpression': '表达式',\n 'cf.modeReference': '引用',\n 'cf.addInstance': '添加实例',\n 'cf.paramKey': '输出键',\n 'cf.paramRequired': '必填',\n 'cf.paramSection': '参数',\n 'cf.dependsOnAdd': '添加依赖…',\n 'cf.dependsOnRemove': '移除依赖 {{dep}}',\n 'cf.dependsOnDangling': '依赖了不存在的键 \"{{dep}}\"——调度将忽略该声明',\n 'cf.dependsOnUnused': '已声明但 args 未引用(仅排序用途):{{deps}}',\n 'cf.referenceSources': '引用源',\n 'cf.referenceSourcesHint': '点击复制 $. 引用——粘贴进 args 即建隐式依赖边',\n 'request.fixturesSummary': '共 {{total}} 条用例:通过 {{passed}} · 失败 {{failed}} · 累计 {{ms}}ms',\n 'dt.constantComparison': '常量比较——两侧均为字面量,条件结果恒定。请确认是否有意为之。',\n 'cf.referenceInsert': '插入到参数 {{param}}',\n 'cf.referenceCopy': '复制引用',\n 'cf.referenceCopied': '已复制',\n 'cf.dependsOn': '依赖',\n 'cf.instanceEmpty': '暂无函数实例',\n 'cf.selectInstance': '在左侧选择一个实例进行编辑',\n 'cf.noParams': '该函数未声明参数',\n 'cf.documentation': '函数文档',\n 'cf.unknownFunction': '函数未登记——请从目录重选',\n 'cf.result': '返回值',\n 'cf.lastRunHint': '上次仿真结果,图变更后重新运行以刷新',\n 'cf.noFunctionsInScope': '作用域内无函数——宿主需提供函数目录(customFunctions/schema)',\n 'cf.orphanScopeHint': '原命名空间已下线({{kind}}),当前可选全部函数',\n 'cf.field': '字段',\n 'cf.fieldInsert': '插入字段路径',\n 'request.noDefinitions': '暂无字段定义',\n 'request.schemaPriorityTooltip': 'Schema 优先级最高。类型定义和用例数据会同步到 Schema。',\n 'request.simulateTooltip': '打开模拟器',\n 'request.toggleFieldDescriptionsTooltip': '开关字段描述提示',\n 'request.uploadJsonTooltip': '上传用例数据 JSON',\n\n // ── simulator ──\n // ── custom function ──\n 'cf.key': '键',\n 'cf.expression': '表达式',\n 'cf.function': '函数',\n 'cf.code': '代码',\n 'cf.legacy': '旧版',\n 'cf.addRow': '添加行',\n\n // ── simulator ──\n 'simulator.boundRequestNodeNotFound': '未找到已绑定的请求节点',\n 'simulator.requestMustBeObjectToSave': '当前请求内容必须是 JSON 对象才能保存',\n 'simulator.description': '通过请求节点进入的业务上下文,启动决策流程。支持 JSON 或 JSON5 格式。',\n 'simulator.currentBinding': '当前绑定',\n 'simulator.nodeRequired': '需要请求节点才能运行图表。从组件面板拖放一个请求节点。',\n 'simulator.run': '运行',\n 'simulator.formatSuccess': '格式化成功!',\n 'simulator.formatFailed': '格式化失败。无效的 JSON 格式。',\n 'simulator.nothingToCopy': '没有可复制的内容。',\n 'simulator.copiedToClipboard': '已复制到剪贴板!',\n 'simulator.copyFailedInvalidJson': '复制失败。无效的 JSON 格式。',\n 'simulator.dataRequiredBeforeRun': '当前请求参数为空,请先添加用例数据',\n 'simulator.invalidFormatTitle': '请求格式无效',\n 'simulator.invalidFormatDescription': '请输入合法的 JSON 或 JSON5 对象后再运行。',\n 'simulator.searchPlaceholder': '搜索节点...',\n 'simulator.clear': '清空',\n 'simulator.readyTitle': '准备就绪,可以开始模拟!',\n 'simulator.readyHint': '运行一次请求即可查看节点执行轨迹。',\n 'simulator.learnMore': '了解更多',\n\n 'common.clear': '清空',\n 'common.undo': '撤销',\n 'misc.delete': '删除',\n};\n","import * as React from 'react';\n\nimport { type InterpolationParams, interpolate } from './i18n-types';\nimport { type TranslationKey, en } from './messages/en';\nimport { zhCN } from './messages/zh-CN';\n\nexport type { TranslationKey };\n\n/** Built-in locale catalogs. */\nconst BUILTIN: Record<string, Record<string, string>> = {\n en,\n 'zh-CN': zhCN,\n};\n\n/** Consumer-supplied overrides keyed by locale. */\nexport type I18nMessages = Record<string, string>;\n\ntype I18nContextValue = {\n locale: string;\n overrides: I18nMessages | undefined;\n};\n\ntype MessageLookup = (key: string) => string | undefined;\n\nconst I18nContext = React.createContext<I18nContextValue | undefined>(undefined);\n\nfunction getLookup(locale: string, overrides: I18nMessages | undefined): MessageLookup {\n const builtin = BUILTIN[locale] ?? BUILTIN[locale.split('-')[0]] ?? BUILTIN.en;\n return (key: string) => overrides?.[key] ?? builtin[key] ?? en[key as TranslationKey];\n}\n\n/**\n * i18n translate hook. Returns a `t(key, params?)` function.\n *\n * Resolution chain: consumer `messages` overrides → locale catalog → English → key.\n * Supports `{{param}}` interpolation.\n *\n * @example\n * const t = useT();\n * t('dt.toolbar.import') // 'Import Excel'\n */\nexport const useT = (): ((key: TranslationKey | string, params?: InterpolationParams) => string) => {\n const ctx = React.useContext(I18nContext);\n return React.useCallback(\n (key: string, params?: InterpolationParams) => {\n if (!ctx) return interpolate(en[key as TranslationKey] ?? key, params);\n const lookup = getLookup(ctx.locale, ctx.overrides);\n return interpolate(lookup(key) ?? key, params);\n },\n [ctx],\n );\n};\n\n/**\n * Creates a standalone translate function (outside React tree, e.g. for\n * non-component utilities). Does NOT react to context changes.\n */\nexport const createT = (locale: string, overrides?: I18nMessages) => {\n const lookup = getLookup(locale, overrides);\n return (key: string, params?: InterpolationParams) => interpolate(lookup(key) ?? key, params);\n};\n\n/** Internal provider — used by JdmConfigProvider to publish locale + overrides. */\nexport const I18nProvider: React.FC<{\n locale: string;\n overrides?: I18nMessages;\n children: React.ReactNode;\n}> = ({ locale, overrides, children }) => {\n const value = React.useMemo(() => ({ locale, overrides }), [locale, overrides]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n};\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -462,8 +462,11 @@ declare type DecisionGraphStoreType = {
|
|
|
462
462
|
activePanel?: string;
|
|
463
463
|
onPanelsChange?: (val?: string) => void;
|
|
464
464
|
simulate?: Simulation;
|
|
465
|
+
simulateRequestTick: number;
|
|
465
466
|
simulateRuns: SimulateRunEntry[];
|
|
466
467
|
commandMenuOpen: boolean;
|
|
468
|
+
canvasLocked: boolean;
|
|
469
|
+
snapToGrid: boolean;
|
|
467
470
|
extraCommands: Array<{
|
|
468
471
|
id: string;
|
|
469
472
|
group: string;
|
|
@@ -523,7 +526,11 @@ declare type DecisionGraphStoreType = {
|
|
|
523
526
|
goToNode: (id: string) => void;
|
|
524
527
|
setActivePanel: (panel?: string) => void;
|
|
525
528
|
pushSimulateRun: (entry: SimulateRunEntry) => void;
|
|
529
|
+
requestSimulation: () => void;
|
|
526
530
|
setCommandMenuOpen: (open: boolean) => void;
|
|
531
|
+
setCanvasLocked: (locked: boolean) => void;
|
|
532
|
+
setSnapToGrid: (on: boolean) => void;
|
|
533
|
+
alignNodesToGrid: () => void;
|
|
527
534
|
setExtraCommands: (commands: Array<{
|
|
528
535
|
id: string;
|
|
529
536
|
group: string;
|
|
@@ -896,6 +903,7 @@ export declare type DecisionTableProps = {
|
|
|
896
903
|
}[];
|
|
897
904
|
total: number;
|
|
898
905
|
} | undefined;
|
|
906
|
+
instantEvalStatus?: InstantEvalStatus;
|
|
899
907
|
} & DecisionTableContextProps & DecisionTableEmptyType;
|
|
900
908
|
|
|
901
909
|
export declare type DecisionTableRunHitStat = {
|
|
@@ -1222,6 +1230,9 @@ declare const en: {
|
|
|
1222
1230
|
readonly 'node.delete': "Delete";
|
|
1223
1231
|
readonly 'inspector.close': "Close inspector";
|
|
1224
1232
|
readonly 'dt.runHitStats': "Run hits";
|
|
1233
|
+
readonly 'dt.rowHit': "Row matched by last simulation run";
|
|
1234
|
+
readonly 'dt.instantEval.suspended': "Table structure changed — hit badges are paused. Run the simulation to refresh.";
|
|
1235
|
+
readonly 'dt.instantEval.degraded': "Large table — instant hit badges are off. Run the simulation manually.";
|
|
1225
1236
|
readonly 'spec.dt.title': "Decision table";
|
|
1226
1237
|
readonly 'spec.expression.title': "Expression";
|
|
1227
1238
|
readonly 'spec.common.passthrough': "Passthrough";
|
|
@@ -1353,6 +1364,11 @@ declare const en: {
|
|
|
1353
1364
|
readonly 'dg.toolbar.uploadJson': "Upload JSON";
|
|
1354
1365
|
readonly 'dg.toolbar.uploadExcel': "Upload Excel";
|
|
1355
1366
|
readonly 'dg.toolbar.autoLayout': "Auto layout";
|
|
1367
|
+
readonly 'dg.toolbar.alignToGrid': "Align nodes to grid";
|
|
1368
|
+
readonly 'dg.toolbar.alignedToGrid': "Nodes aligned to grid";
|
|
1369
|
+
readonly 'dg.toolbar.lockCanvas': "Lock canvas (prevent dragging and connecting)";
|
|
1370
|
+
readonly 'dg.toolbar.unlockCanvas': "Unlock canvas";
|
|
1371
|
+
readonly 'dg.toolbar.snapToGrid': "Snap to grid while dragging";
|
|
1356
1372
|
readonly 'dg.toolbar.downloadJson': "Download JSON";
|
|
1357
1373
|
readonly 'dg.toolbar.downloadExcel': "Download Excel";
|
|
1358
1374
|
readonly 'dg.toolbar.searchNodes': "Search nodes";
|
|
@@ -1534,6 +1550,7 @@ declare const en: {
|
|
|
1534
1550
|
readonly 'cf.instanceEmpty': "No instances yet";
|
|
1535
1551
|
readonly 'cf.selectInstance': "Select an instance on the left to edit";
|
|
1536
1552
|
readonly 'cf.noParams': "This function declares no parameters";
|
|
1553
|
+
readonly 'cf.documentation': "Documentation";
|
|
1537
1554
|
readonly 'cf.unknownFunction': "Function not in scope — pick one from the catalog";
|
|
1538
1555
|
readonly 'cf.result': "Result";
|
|
1539
1556
|
readonly 'cf.lastRunHint': "From the last simulation run — re-run after edits to refresh";
|
|
@@ -2001,6 +2018,8 @@ declare type InstanceSchedule = {
|
|
|
2001
2018
|
keys: string[];
|
|
2002
2019
|
};
|
|
2003
2020
|
|
|
2021
|
+
declare type InstantEvalStatus = 'active' | 'suspended' | 'degraded';
|
|
2022
|
+
|
|
2004
2023
|
declare type InterpolationParams = Record<string, string | number>;
|
|
2005
2024
|
|
|
2006
2025
|
export declare const JdmConfigProvider: default_2.FC<JdmConfigProviderProps>;
|
|
@@ -3036,16 +3055,16 @@ export declare const writeRequestInputContract: (content: RequestContentLike & R
|
|
|
3036
3055
|
export { }
|
|
3037
3056
|
|
|
3038
3057
|
|
|
3039
|
-
declare
|
|
3040
|
-
interface
|
|
3041
|
-
|
|
3058
|
+
declare module '@gorules/zen-engine-wasm' {
|
|
3059
|
+
interface VariableType {
|
|
3060
|
+
__hash: string;
|
|
3042
3061
|
}
|
|
3043
3062
|
}
|
|
3044
3063
|
|
|
3045
3064
|
|
|
3046
|
-
declare
|
|
3047
|
-
interface
|
|
3048
|
-
|
|
3065
|
+
declare global {
|
|
3066
|
+
interface Window {
|
|
3067
|
+
monaco?: Monaco;
|
|
3049
3068
|
}
|
|
3050
3069
|
}
|
|
3051
3070
|
|