openxiangda 2.60.1 → 2.61.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/browser/application.d.ts +4 -2
  2. package/dist/browser/application.d.ts.map +1 -1
  3. package/dist/browser/application.js +2 -2
  4. package/dist/browser/application.js.map +1 -1
  5. package/dist/browser/components/platform-fields/MobileFieldLayout.d.ts +1 -1
  6. package/dist/browser/components/platform-fields/MobileFieldLayout.d.ts.map +1 -1
  7. package/dist/browser/components/platform-fields/MobileFieldLayout.js +3 -1
  8. package/dist/browser/components/platform-fields/MobileFieldLayout.js.map +1 -1
  9. package/dist/browser/components/platform-fields/RichTextField.d.ts +9 -2
  10. package/dist/browser/components/platform-fields/RichTextField.d.ts.map +1 -1
  11. package/dist/browser/components/platform-fields/RichTextField.js +119 -153
  12. package/dist/browser/components/platform-fields/RichTextField.js.map +1 -1
  13. package/dist/browser/components/platform-fields/rich-text-extensions.d.ts +5 -0
  14. package/dist/browser/components/platform-fields/rich-text-extensions.d.ts.map +1 -0
  15. package/dist/browser/components/platform-fields/rich-text-extensions.js +82 -0
  16. package/dist/browser/components/platform-fields/rich-text-extensions.js.map +1 -0
  17. package/dist/browser/components/platform-fields/rich-text-value.d.ts +5 -7
  18. package/dist/browser/components/platform-fields/rich-text-value.d.ts.map +1 -1
  19. package/dist/browser/components/platform-fields/rich-text-value.js +17 -79
  20. package/dist/browser/components/platform-fields/rich-text-value.js.map +1 -1
  21. package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -1
  22. package/dist/browser/components/resource/SurfaceFields.js +2 -2
  23. package/dist/browser/components/resource/SurfaceFields.js.map +1 -1
  24. package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -1
  25. package/dist/browser/components/workflow/StandardWorkflowPages.js +6 -17
  26. package/dist/browser/components/workflow/StandardWorkflowPages.js.map +1 -1
  27. package/dist/browser/components/workflow/workflow-detail-fields.d.ts +12 -0
  28. package/dist/browser/components/workflow/workflow-detail-fields.d.ts.map +1 -0
  29. package/dist/browser/components/workflow/workflow-detail-fields.js +25 -0
  30. package/dist/browser/components/workflow/workflow-detail-fields.js.map +1 -0
  31. package/dist/browser/styles.css +38 -0
  32. package/dist/browser/workflow-definitions.d.ts +17 -1
  33. package/dist/browser/workflow-definitions.d.ts.map +1 -1
  34. package/dist/browser/workflow-definitions.js +6 -2
  35. package/dist/browser/workflow-definitions.js.map +1 -1
  36. package/dist/field-kit.d.ts +1 -0
  37. package/dist/field-kit.d.ts.map +1 -1
  38. package/dist/field-kit.js +1 -0
  39. package/dist/field-kit.js.map +1 -1
  40. package/dist/rich-text.d.ts +3 -0
  41. package/dist/rich-text.d.ts.map +1 -0
  42. package/dist/rich-text.js +3 -0
  43. package/dist/rich-text.js.map +1 -0
  44. package/documentation/application-foundation.md +1 -1
  45. package/documentation/backend.md +14 -0
  46. package/documentation/field-components.md +37 -2
  47. package/documentation/getting-started.md +30 -31
  48. package/documentation/manifest.json +6 -6
  49. package/documentation/workflow-events.md +22 -1
  50. package/package.json +41 -24
  51. package/releases/2.20.1.json +30 -0
  52. package/releases/2.20.2.json +30 -0
  53. package/releases/2.20.3.json +29 -0
  54. package/releases/2.20.4.json +30 -0
  55. package/releases/2.31.5.json +33 -0
  56. package/releases/2.59.3.json +36 -0
  57. package/releases/2.61.0.json +39 -0
  58. package/releases/2.61.1.json +37 -0
  59. package/skills/manifest.json +1 -1
  60. package/skills/openxiangda-v2/SKILL.md +4 -4
  61. package/skills/openxiangda-v2/references/application-foundation.md +1 -1
  62. package/skills/openxiangda-v2/references/backend.md +14 -0
  63. package/skills/openxiangda-v2/references/field-components.md +37 -2
  64. package/skills/openxiangda-v2/references/getting-started.md +30 -31
  65. package/skills/openxiangda-v2/references/workflow-events.md +22 -1
  66. package/releases/2.60.1.json +0 -35
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-detail-fields.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/workflow/workflow-detail-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE;IAClF,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,GAAG,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;CACpG;;;IAmBA"}
@@ -0,0 +1,25 @@
1
+ /** Group only the readable detail surface; conditions cannot conceal old data. */
2
+ export function workflowDetailGroups(detail, presentation) {
3
+ const groups = new Map();
4
+ for (const key of detail.surface?.detail?.fieldOrder || []) {
5
+ const field = detail.surface?.fields[key];
6
+ if (!field || field.system === true)
7
+ continue;
8
+ const value = detail.record[key];
9
+ const empty = value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0);
10
+ if (empty && !((detail.subtables[key]?.total ?? 0) > 0) && presentation?.behavior?.fieldVisibility) {
11
+ try {
12
+ if (presentation.behavior.fieldVisibility({ ...presentation.context,
13
+ resourceCode: detail.resourceCode, fieldCode: key, record: detail.record }) === false)
14
+ continue;
15
+ }
16
+ catch {
17
+ // A presentation error must not make readable historical data disappear.
18
+ }
19
+ }
20
+ const section = field.section || '申请信息';
21
+ groups.set(section, [...(groups.get(section) || []), { key, ...field }]);
22
+ }
23
+ return [...groups.entries()].map(([section, fields]) => ({ section, fields }));
24
+ }
25
+ //# sourceMappingURL=workflow-detail-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-detail-fields.js","sourceRoot":"","sources":["../../../../src/browser/components/workflow/workflow-detail-fields.ts"],"names":[],"mappings":"AAIA,kFAAkF;AAClF,MAAM,UAAU,oBAAoB,CAAC,MAA8B,EAAE,YAGpE;IACC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;YAAE,SAAS;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QACpH,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;YACnG,IAAI,CAAC;gBACH,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,YAAY,CAAC,OAAO;oBACjE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK;oBAAE,SAAS;YACpG,CAAC;YAAC,MAAM,CAAC;gBACP,yEAAyE;YAC3E,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC"}
@@ -2362,6 +2362,25 @@
2362
2362
  grid-template-columns: minmax(0, 1fr);
2363
2363
  }
2364
2364
 
2365
+ .oxa-rich-text-fullscreen:popover-open {
2366
+ position: fixed;
2367
+ inset: 8px;
2368
+ margin: 0;
2369
+ width: calc(100% - 16px);
2370
+ height: calc(100dvh - 16px);
2371
+ box-sizing: border-box;
2372
+ padding: 12px;
2373
+ border: 1px solid var(--ant-color-border);
2374
+ background: var(--ant-color-bg-container);
2375
+ color: var(--ant-color-text);
2376
+ align-content: start;
2377
+ overflow: auto;
2378
+ }
2379
+
2380
+ .oxa-rich-text-fullscreen .oxa-rich-text-editor {
2381
+ min-height: 55dvh;
2382
+ }
2383
+
2365
2384
  .oxa-rich-text-editor img,
2366
2385
  .oxa-rich-text-value img {
2367
2386
  height: auto;
@@ -3154,3 +3173,22 @@
3154
3173
  .oxa-workflow-record-history-person { margin-top: 8px; }
3155
3174
  .oxa-workflow-record-history[data-device="mobile"] button { min-height: 44px; }
3156
3175
  .oxa-workflow-history-collapse { margin-top: 16px; }
3176
+
3177
+ /* Rich text styles are scoped; no host document reset. */
3178
+ .oxa-rich-text-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
3179
+ .oxa-rich-text-choice { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; }
3180
+ .oxa-rich-text-choice select { max-width: 140px; padding: 3px; }
3181
+ .oxa-rich-text-choice input[type="color"] { width: 26px; height: 26px; padding: 1px; }
3182
+ .oxa-rich-text-editor table, .oxa-rich-text-value table { border-collapse: collapse; max-width: 100%; table-layout: fixed; }
3183
+ .oxa-rich-text-editor td, .oxa-rich-text-editor th, .oxa-rich-text-value td, .oxa-rich-text-value th { border: 1px solid #d9d9d9; padding: 6px 8px; min-width: 40px; }
3184
+ .oxa-rich-text-editor .tableWrapper, .oxa-rich-text-value { overflow-x: auto; }
3185
+ .oxa-rich-text-editor .selectedCell { background: #e6f4ff; }
3186
+ .oxa-rich-text-editor .column-resize-handle { position: absolute; right: -2px; top: 0; bottom: 0; width: 4px; background: #1677ff; pointer-events: none; }
3187
+ .oxa-rich-text-editor td, .oxa-rich-text-editor th { position: relative; }
3188
+ .oxa-rich-text-editor video, .oxa-rich-text-value video { max-width: 100%; }
3189
+ .oxa-rich-text-editor ul[data-type="taskList"], .oxa-rich-text-value ul[data-type="taskList"] { list-style: none; padding-left: 8px; }
3190
+ .oxa-rich-text-editor li[data-type="taskItem"], .oxa-rich-text-value li[data-type="taskItem"] { display: flex; align-items: flex-start; gap: 8px; }
3191
+ .oxa-rich-text-editor li[data-type="taskItem"] > div, .oxa-rich-text-value li[data-type="taskItem"] > div { flex: 1; }
3192
+ .oxa-rich-text-editor pre, .oxa-rich-text-value pre { overflow-x: auto; background: #f5f5f5; padding: 12px; border-radius: 4px; }
3193
+ .oxa-mobile-rich-text-field .oxa-rich-text-toolbar { max-height: 160px; overflow-y: auto; }
3194
+ .oxa-mobile-rich-text-field .oxa-rich-text-toolbar button { min-height: 32px; }
@@ -72,12 +72,28 @@ export interface WorkflowTaskFormBehavior {
72
72
  valueLinkage?: (changed: Readonly<JsonObject>, values: Readonly<JsonObject>, context: Readonly<WorkflowTaskFormLinkageContext>) => JsonObject;
73
73
  }
74
74
  export type WorkflowTaskFormBehaviors = Readonly<Record<string, WorkflowTaskFormBehavior>>;
75
- export declare function OpenXiangdaWorkflowDefinitionsProvider({ children, definitions, taskForms, }: {
75
+ export interface WorkflowDetailFieldContext {
76
+ workflowCode: string;
77
+ definitionVersion: number;
78
+ bindingVersion: number;
79
+ resourceCode: string | null;
80
+ fieldCode: string;
81
+ /** Only the platform's readable projection, never hidden record fields. */
82
+ record: Readonly<Record<string, unknown>>;
83
+ }
84
+ export interface WorkflowDetailBehavior {
85
+ /** Presentation only. False hides an empty field; historical values remain. */
86
+ fieldVisibility?: (context: Readonly<WorkflowDetailFieldContext>) => boolean | undefined;
87
+ }
88
+ export type WorkflowDetailBehaviors = Readonly<Record<string, WorkflowDetailBehavior>>;
89
+ export declare function OpenXiangdaWorkflowDefinitionsProvider({ children, definitions, taskForms, details, }: {
76
90
  children: ReactNode;
77
91
  definitions: StandardWorkflowDefinitionsInput;
78
92
  taskForms?: WorkflowTaskFormBehaviors;
93
+ details?: WorkflowDetailBehaviors;
79
94
  }): import("react/jsx-runtime").JSX.Element;
80
95
  export declare function useWorkflowTaskFormBehavior(code: string): WorkflowTaskFormBehavior | undefined;
96
+ export declare function useWorkflowDetailBehavior(code: string): WorkflowDetailBehavior | undefined;
81
97
  export declare function useWorkflowDefinitions(): ReadonlyMap<string, GeneratedWorkflowDefinition>;
82
98
  export declare function useWorkflowDefinition(code: string): GeneratedWorkflowDefinition | undefined;
83
99
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-definitions.d.ts","sourceRoot":"","sources":["../../src/browser/workflow-definitions.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-definitions.d.ts","sourceRoot":"","sources":["../../src/browser/workflow-definitions.tsx"],"names":[],"mappings":"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"}
@@ -59,13 +59,17 @@ export function normalizeWorkflowDefinitions(input) {
59
59
  }
60
60
  const WorkflowDefinitionsContext = createContext(new Map());
61
61
  const WorkflowTaskFormsContext = createContext({});
62
- export function OpenXiangdaWorkflowDefinitionsProvider({ children, definitions, taskForms = {}, }) {
62
+ const WorkflowDetailsContext = createContext({});
63
+ export function OpenXiangdaWorkflowDefinitionsProvider({ children, definitions, taskForms = {}, details = {}, }) {
63
64
  const normalized = useMemo(() => normalizeWorkflowDefinitions(definitions), [definitions]);
64
- return (_jsx(WorkflowDefinitionsContext.Provider, { value: normalized, children: _jsx(WorkflowTaskFormsContext.Provider, { value: taskForms, children: children }) }));
65
+ return (_jsx(WorkflowDefinitionsContext.Provider, { value: normalized, children: _jsx(WorkflowTaskFormsContext.Provider, { value: taskForms, children: _jsx(WorkflowDetailsContext.Provider, { value: details, children: children }) }) }));
65
66
  }
66
67
  export function useWorkflowTaskFormBehavior(code) {
67
68
  return useContext(WorkflowTaskFormsContext)[code];
68
69
  }
70
+ export function useWorkflowDetailBehavior(code) {
71
+ return useContext(WorkflowDetailsContext)[code];
72
+ }
69
73
  export function useWorkflowDefinitions() {
70
74
  return useContext(WorkflowDefinitionsContext);
71
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-definitions.js","sourceRoot":"","sources":["../../src/browser/workflow-definitions.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-definitions.js","sourceRoot":"","sources":["../../src/browser/workflow-definitions.tsx"],"names":[],"mappings":"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"}
@@ -26,4 +26,5 @@ export * from './browser/components/resource/ResourceFormFrame';
26
26
  export * from './browser/components/resource/resource-import';
27
27
  export { uploadOperationManagedFile } from './browser/platform-client';
28
28
  export * from './browser/components/platform-fields/MobileFieldControls';
29
+ export { createRichTextExtensions } from './browser/components/platform-fields/rich-text-extensions';
29
30
  //# sourceMappingURL=field-kit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-kit.d.ts","sourceRoot":"","sources":["../src/field-kit.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,mDAAmD,CAAC;AAClE,cAAc,yDAAyD,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yDAAyD,CAAC;AAC3F,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAChG,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC;AACrE,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,0DAA0D,CAAC"}
1
+ {"version":3,"file":"field-kit.d.ts","sourceRoot":"","sources":["../src/field-kit.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,mDAAmD,CAAC;AAClE,cAAc,yDAAyD,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yDAAyD,CAAC;AAC3F,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAChG,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC;AACrE,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,0DAA0D,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC"}
package/dist/field-kit.js CHANGED
@@ -25,4 +25,5 @@ export * from './browser/components/resource/ResourceFormFrame';
25
25
  export * from './browser/components/resource/resource-import';
26
26
  export { uploadOperationManagedFile } from './browser/platform-client';
27
27
  export * from './browser/components/platform-fields/MobileFieldControls';
28
+ export { createRichTextExtensions } from './browser/components/platform-fields/rich-text-extensions';
28
29
  //# sourceMappingURL=field-kit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-kit.js","sourceRoot":"","sources":["../src/field-kit.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,mDAAmD,CAAC;AAClE,cAAc,yDAAyD,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yDAAyD,CAAC;AAC3F,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AAEnE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC;AACrE,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,0DAA0D,CAAC"}
1
+ {"version":3,"file":"field-kit.js","sourceRoot":"","sources":["../src/field-kit.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,mDAAmD,CAAC;AAClE,cAAc,yDAAyD,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yDAAyD,CAAC;AAC3F,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AAEnE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC;AACrE,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,0DAA0D,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** DOM-independent policy shared by browser editors and Nest publication actions. */
2
+ export * from 'openxiangda-contracts/rich-text';
3
+ //# sourceMappingURL=rich-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-text.d.ts","sourceRoot":"","sources":["../src/rich-text.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** DOM-independent policy shared by browser editors and Nest publication actions. */
2
+ export * from 'openxiangda-contracts/rich-text';
3
+ //# sourceMappingURL=rich-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-text.js","sourceRoot":"","sources":["../src/rich-text.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,cAAc,iCAAiC,CAAC"}
@@ -125,7 +125,7 @@ crud: [{
125
125
 
126
126
  `hidden` 仅控制展示。`system` 表示由服务端维护,默认隐藏;业务需要展示的流水号、状态可显式 `hidden: false`。隐藏不会撤销 Data API 的读写授权;授权仍用现有字段 `access` 与行策略。普通必填字段不能从可新增表单中漏掉;内部必填值应有清晰的服务端赋值责任,不能靠隐藏字段绕过数据约束。
127
127
 
128
- 业务组件优先使用 `openxiangda/field-kit`,PC 补充使用 `antd`,移动端使用 `openxiangda/mobile` 封装的 Ant Design Mobile 控件。移动控件已覆盖文本、长文本、数字、布尔、静态选项、日期时间,以及人员/部门目录、动态资源引用和级联选择。选择弹层支持逐层浏览、搜索、翻页和已选项管理,点击确定才写回表单,关闭放弃本次修改。附件、图片、地址、子表和签名已提供移动交互,富文本在手机使用纯文本编辑并保留未修改 HTML;能力边界见[字段组件](./field-components.md)。共享值协议和表单控制器,不共享桌面弹层交互。
128
+ 业务组件优先使用 `openxiangda/field-kit`,PC 补充使用 `antd`,移动端使用 `openxiangda/mobile` 封装的 Ant Design Mobile 控件。移动控件已覆盖文本、长文本、数字、布尔、静态选项、日期时间,以及人员/部门目录、动态资源引用和级联选择。选择弹层支持逐层浏览、搜索、翻页和已选项管理,点击确定才写回表单,关闭放弃本次修改。附件、图片、地址、子表和签名已提供移动交互,富文本在手机使用完整格式编辑与统一安全 HTML 协议;能力边界见[字段组件](./field-components.md)。共享值协议和表单控制器,不共享桌面弹层交互。
129
129
 
130
130
  ```tsx
131
131
  import { MobileSurface, Input, Button } from 'openxiangda/mobile';
@@ -608,3 +608,17 @@ CAS与写后范围检查同事务执行。应用仍负责业务规则和字典gu
608
608
 
609
609
  保存与核对共用同一operation,首次业务读取前先resolveOriginalCommand;not_observed只表示观察时未见回执,
610
610
  不自动重试或换键。管理员资料修改不会重写已完成意见、已走路径或已派审批人,后续任务按平台原Native修订协议处理。
611
+
612
+ ### 已选部门的实时解析
613
+
614
+ 业务动作需要将部门选择器结果保存为业务快照时,声明
615
+ `platformAccess: { selectedDepartments: { fields: ['name', 'path', 'parent', 'fullPath'], maxIds: 8 } }`,
616
+ 调用 `businessDirectory.selectedDepartments(ids)`。仅提交不重复的部门 ID;必须声明 `name`,
617
+ 最多解析 50 个部门,返回值按输入顺序给出真实 `value`、`label` 及声明的可选路径字段。
618
+ 目标平台需要 `directory.selected-departments` 1.0.0;编译器自动派生该能力。
619
+
620
+ 此接口要求已验证的用户 Named Action,并复核发起人、环境 Head、租户及现有
621
+ `app:<appCode>:directory:read` 权限。部门范围沿平台现有部门选择器的租户及未删除关系,
622
+ 没有新增独立的部门可见范围策略。任何部门不存在或已删除时,整组失败,不按姓名匹配,
623
+ 不接受客户端标签,也不回退到应用内复制的组织表。`snapshotRevision` 描述返回事实,
624
+ `resolvedAt` 来自数据库时间;快照不能替代后续业务事务的权限检查。
@@ -320,8 +320,7 @@ ISO instant)与 `minuteStep`(1 到 60 且整除 60)。设置步长后只
320
320
  - 子表单使用每页十行的行内字段,手机支持折叠、添加和删除;父表提交校验所有行,包括折叠及未显示页的行。分页保留完整输入和草稿,任务完成校验会定位到错误行所在页;有待处理上传时先完成或移除文件,再翻页。
321
321
  权限、最大行数、原子事务和已存行的 revision 继续由原有资源契约约束。
322
322
  - 签名在底部画布手写并保存;图片、签名和附件仍通过托管文件接口上传与鉴权读取。
323
- - 手机富文本编辑降级为多行文本。未修改时保留已有 HTML;修改后将纯文本转为转义后的
324
- 段落 HTML,继续使用原有 `text.rich` 数据类型。
323
+ - 手机富文本使用同一 Tiptap 引擎和安全格式协议;工具栏支持触控和滚动,保留已有排版。
325
324
 
326
325
  评分是整数的可选控件,默认五颗星,声明示例:
327
326
 
@@ -346,3 +345,39 @@ ISO instant)与 `minuteStep`(1 到 60 且整除 60)。设置步长后只
346
345
  普通新建即使省略表也检查;编辑只检查本次提交的表。任务草稿/保存允许不足,
347
346
  完成时对可见可写表检查最终行数,删除标记不算行。旧固定声明不隐式补造数据。
348
347
  标准PC/移动表单显示下限并保留字段校验;应用可提供初始空行,平台不生成可信资料。
348
+
349
+
350
+ ### 完整富文本与受管视频
351
+
352
+ `RichTextField` 默认采用 Tiptap / ProseMirror,支持标题、字体/字号、对齐、首行缩进、行高、
353
+ 文字/背景色、基础强调、上下标、引用、代码、分隔线、列表/待办、表格、表情选择、撤销/重做与全屏编辑。
354
+ PC 和手机保存同一 HTML 字符串。平台 `data.rich-text` 能力和配套服务端必须先升级。
355
+
356
+ ```tsx
357
+ import { RichTextField, RichTextValueDisplay, uploadOperationManagedFile } from 'openxiangda/field-kit';
358
+ <RichTextField resourceCode="articles" value={body} onChange={setBody}
359
+ onUpload={file => uploadOperationManagedFile({ operationCode: 'save-article', resourceCode: 'articles', fieldCode: 'body', intent: 'create', file })} />
360
+ <RichTextValueDisplay resourceCode="articles" value={body} />
361
+ ```
362
+
363
+ 具名动作声明 `managedFiles` 对应资源/富文本字段,普通 CRUD/任务页面沿用其上传适配器。
364
+ 图片只支持 PNG/JPEG/WebP/GIF(每值20张,每张10MiB),视频只支持 MP4/WebM(每值4个,
365
+ 每个100MiB;实际仍受租户存储上传额度限制)。服务器核验真实图片/视频容器,权限路由支持
366
+ Range 流式读取。无转码、外站视频、iframe 和自动播放;浏览器编解码器可能不同。
367
+
368
+ 前端、写入和公开投影统一消费 `openxiangda-contracts/rich-text`;
369
+ 应用浏览器及 Nest 通过 `openxiangda/rich-text` 使用相同无 DOM 规则,避免后端加载 UI 包。`sanitizeRichText` 用于展示,
370
+ `sanitizeRichTextHtml` 默认只接受 Native 受管媒体,`display:true` 才接受平台匿名公共媒体路径。
371
+ 不要保存 blob、data、OSS 签名 URL,禁止关闭清洗。外部编辑器可以使用该协议,样式仍受
372
+ 版本化白名单与数值上限约束。`createRichTextExtensions` 提供同一官方免费节点集合。
373
+
374
+ 需要替换全部标准字段的编辑器时,使用 `RichTextEditorProvider` 注入
375
+ `ComponentType<RichTextFieldProps>`;自定义组件接收当前资源、字段、recordId、workflowBinding
376
+ 及同一 onUpload/onChange/disabled/mobile。必须遵守统一清洗和受管文件协议。需要默认实现
377
+ 时渲染 `DefaultRichTextField`,不要在 Provider 中递归调用 `RichTextField`。上传跨记录/字段
378
+ 切换时丢弃旧完成回调,不将新文件插入另一个表单。
379
+
380
+ 跨资源发布声明原有 `managedFileCopies` 的同型 `text.rich` 字段对,对每个媒体调用
381
+ `copyManagedFile`,收到 `succeeded` 回执后用 `sanitizeRichTextHtml(html, { rewriteMedia })` 重写为
382
+ 目标资源的 canonical 路径,再执行业务事务。复制后源文件不变,目标独立引用并参与清理。
383
+ 立即/定时发布共用同一服务动作;不能直接复用另一个资源的 file ID。
@@ -68,10 +68,10 @@ MCP 服务随项目根包一起安装,AI 客户端的 stdio 连接仍需配置
68
68
  以下命令的版本占位符由随包资料替换为该根包的精确版本。网站源码阅读者应先确认要使用的发行版本。
69
69
 
70
70
  ```bash
71
- pnpm dlx openxiangda@2.60.1 skill install --force
72
- pnpm dlx openxiangda@2.60.1 auth status --base-url <平台地址> --json
73
- pnpm dlx openxiangda@2.60.1 login --cwd my-app --base-url https://platform.example.com
74
- pnpm dlx openxiangda@2.60.1 create my-app --base-url https://platform.example.com
71
+ pnpm dlx openxiangda@2.61.1 skill install --force
72
+ pnpm dlx openxiangda@2.61.1 auth status --base-url <平台地址> --json
73
+ pnpm dlx openxiangda@2.61.1 login --cwd my-app --base-url https://platform.example.com
74
+ pnpm dlx openxiangda@2.61.1 create my-app --base-url https://platform.example.com
75
75
  cd my-app
76
76
  pnpm openxiangda context --json
77
77
  pnpm openxiangda dev
@@ -121,30 +121,29 @@ AppSpec 随开发持续维护:测试发布前补齐总纲、关联变更与验
121
121
 
122
122
  前端启动使用根目录 `dev:web`。声明了后端的应用同时运行配置的 `backend.root` 包内的 `dev`,无需增加根目录 `dev:server`;纯前端应用只启动 Web 和代理。已有前端测试版本后,可以启用本地 Nest 联调,不必先构建或发布后端镜像。平台返回的活动应用版本和开发会话绑定本次联调,环境版本变化导致会话不一致时,停止后重新运行 `dev`。
123
123
 
124
- 在已有测试环境的应用中,`dev` 先将当前完整资源、权限、具名操作和固定流程配置
125
- 提交给平台。平台使用同源编译器校验配置与契约,保存真实配置版本和同步回执,
126
- 选择该应用 test 的配置 Head,然后 CLI 重新读取环境并创建开发会话。这个过程
127
- 不运行应用 `build`、打包或容器部署;代码继续在本机运行。相同配置与契约再次启动
128
- 时复用当前版本;旧 Head 的开发会话失效,需要重新启动。新增模型和流程可以在
129
- 同一批开发中联调,不需要每次冻结 SDK 和正式部署应用。
130
-
131
- 完整开发配置要求平台提供 `application.development-configuration` 1.0.0,并且
132
- 应用已有 test Native Head;当前尚不支持无测试基线的新应用直接同步。同步会改变
133
- test 的配置选择,历史正式版本、数据和原运行保留。开发配置不能用于生产晋级、
134
- 正式部署或回滚候选。
135
-
136
- 声明后端的应用还要求 `application.development-backend-events` 1.0.0。CLI自动连接
137
- 当前test开发版本,把平台已签名的后台事件和流程业务步骤投递到本机Nest源码,
138
- 并复用平台的持久执行回执与失败恢复。应用运行凭据只进入本地Nest环境,不传入Web、
139
- 页面或终端状态。开发连接关闭或失联时,事件保留在平台队列,不回退到旧后端制品;
140
- 同一测试环境同时只能连接一个开发会话,环境版本变化后重新运行dev。
141
- 临时运输故障会在20秒内恢复原连接;已执行处理器的回复只重发原响应,不重复执行业务。
142
- 授权、环境版本或连接归属变化会立即停止;超过恢复窗口则保留平台原执行记录,重新运行dev继续。
143
-
144
- 开发连接会启用当前后台事件订阅,保留手工暂停;正常关闭时暂停本连接开启的订阅。
145
- Timer和DateTrigger继续暂停,日期提醒仍须确认测试副作用意图并完成专门验收。
146
- 当前投递范围是标准后台事件与流程业务步骤;自定义审批人provider、managed-command
147
- planner等调用仍须正式后端或后续能力。不要把本地开发者联调视为普通角色验收。
124
+ 在已有测试环境的应用中,`dev` 将当前配置与契约提交给平台。平台使用同源编译器校验,
125
+ 保存独立的开发 AppVersion 和准备回执,由开发会话引用。**开发会话不会选择或切换 test 的发布 Head**;
126
+ 线上前端、后端、权限、流程、订阅与调度仍由已部署版本拥有。代码继续在本机运行,不构建或部署应用制品。
127
+
128
+ 该模式要求平台提供 `application.development-configuration` 2.0.0 和一个已部署的 test Native 基线。
129
+ 旧平台需要先升级配套版本;旧 SDK 在协商失败时必须先升级,不能使用旧的 dev 同步路径。
130
+ 开发 AppVersion 不能用于生产晋级、部署或回滚候选。发布或授权基线变化时,停止并重新运行 dev,
131
+ 平台不会自动把旧会话改绑到新版本。
132
+
133
+ 已有模型上的新增字段使用可空物理列 overlay(必填约束仅由开发请求契约校验);页面和具名操作读取开发会话的独立配置。
134
+ 已有字段类型、约束、数据策略、新模型以及角色或流程定义的变更须先在独立测试环境正式部署。
135
+ 不兼容声明会明确报错,不能把旧流程偷偷当作本地新流程。共享测试数据的真实写入仍会影响同一数据集,
136
+ 配置隔离不等于数据隔离。
137
+
138
+ 本地 Nest 使用开发会话自身的短期 OAuth 凭证,凭证只进入 Nest 环境。
139
+ 它不会读取、旋转或撤销已部署后端的凭证。普通浏览器联调保留实际登录人的身份与角色;
140
+ loopback 代理仅注入配置选择证明,平台和 Nest 将该证明与签名调用中的 sessionId 核对。
141
+ 同一环境可以存在多个会话,源码连接、响应、关闭和撤销按 sessionId 隔离,并保留环境总并发上限。
142
+
143
+ 只有显式选择开发会话的请求会到本机源码。开发连接断开时,该请求报连接错误;普通线上请求、
144
+ 发布回调和后台事件继续到部署制品。启动和退出 dev 都不会启停环境订阅、Timer 或 DateTrigger。
145
+ 后台事件和业务日期调度仍通过正式部署批次验收,本次回执明确 `backendEventsAvailable=false`。
146
+ 浏览器文件流操作要求部署制品;本地联调会明确提示该能力边界。
148
147
 
149
148
  同步失败保留原配置运行 ID;相同输入重试复用原回执与版本,并由平台锁和 Head
150
149
  CAS 判断是否允许继续。并发请求返回进行中;服务重启释放锁后允许恢复原运行。
@@ -204,9 +203,9 @@ MCP 的 `docs_read` 可以读取本说明,当前没有独立的源码操作 MC
204
203
  无需本地工作区,使用本 Skill 随包精确版本或已安装的对应 CLI:
205
204
 
206
205
  ```bash
207
- pnpm dlx openxiangda@2.60.1 auth status --base-url <平台> --json
208
- pnpm dlx openxiangda@2.60.1 source resolve <仓库URL> --base-url <平台> --json
209
- pnpm dlx openxiangda@2.60.1 source clone <仓库URL> <新目录> --base-url <平台> --json
206
+ pnpm dlx openxiangda@2.61.1 auth status --base-url <平台> --json
207
+ pnpm dlx openxiangda@2.61.1 source resolve <仓库URL> --base-url <平台> --json
208
+ pnpm dlx openxiangda@2.61.1 source clone <仓库URL> <新目录> --base-url <平台> --json
210
209
  ```
211
210
 
212
211
  登录缺失或站点不匹配时,先按该平台执行 login。resolve 根据平台已经登记的绑定返回
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "schemaVersion": "openxiangda.documentation/v1",
3
- "version": "2.60.1",
3
+ "version": "2.61.1",
4
4
  "topics": [
5
5
  {
6
6
  "id": "getting-started",
7
7
  "title": "安装与开始开发",
8
8
  "file": "getting-started.md",
9
- "sha256": "da7b192207cadf9b1c62c4564aaad1630db9f13c571c4c5af5d1ec455791d911"
9
+ "sha256": "1f2927ffba8d6bc4e7d8b6b8a2d08b62a23e46962b96b55712f48eb11f4f1d74"
10
10
  },
11
11
  {
12
12
  "id": "product-design",
@@ -42,7 +42,7 @@
42
42
  "id": "application-foundation",
43
43
  "title": "业务模型与标准 CRUD",
44
44
  "file": "application-foundation.md",
45
- "sha256": "de924d29286bea2fdb2f3f7bef4eeb8c56a9b5e8e9f87ffdcda57e5127063f5c"
45
+ "sha256": "fed292882cae449f0fed3fdcbd2878499a9a59f7a412d4776fd1c3a829203fa1"
46
46
  },
47
47
  {
48
48
  "id": "appspec",
@@ -66,7 +66,7 @@
66
66
  "id": "field-components",
67
67
  "title": "字段、表单与移动控件",
68
68
  "file": "field-components.md",
69
- "sha256": "492cace0b00a0c43f5c3098616c3441e25ffdb825c7531b207ac7e46b755ac36"
69
+ "sha256": "5d76266c583e43bdeaa6af055c2c02df221e539e4578fbedbc71b5fdee1e9eb0"
70
70
  },
71
71
  {
72
72
  "id": "data-authz",
@@ -84,13 +84,13 @@
84
84
  "id": "workflow-events",
85
85
  "title": "审批、事件与通知",
86
86
  "file": "workflow-events.md",
87
- "sha256": "8ba415778a40ea79ad90714bc8cebc4173929565628d61a85287915d003c2e4d"
87
+ "sha256": "8e53cd8f7931346a8de2c34eed2421cbd9f5bf80e8470c8e0aa0e07f72283e5d"
88
88
  },
89
89
  {
90
90
  "id": "backend",
91
91
  "title": "按需后端与业务动作",
92
92
  "file": "backend.md",
93
- "sha256": "51a329e8b30df0f2e164a1e311e1798b9e76912f8f6f2c554a61e95b29479dd7"
93
+ "sha256": "e3ac14a8ba787947f6253792d0574c3a580b94c848cfca16c9a6cfb4d5d2382f"
94
94
  },
95
95
  {
96
96
  "id": "agent-cards",
@@ -931,7 +931,7 @@ const readyFile = await completeWorkflowTaskFileUpload(taskId, input.id);
931
931
  原 PNG 字节不改,仍受任务值1MiB限制。这些是业务采集信息,不代表平台认证的签署人、
932
932
  可信时间或法律电子签章。
933
933
 
934
- 富文本保存清洗后的 HTML 和 Native 稳定托管图片地址,支持最多20图、单图10MiB、100MP。
934
+ 富文本保存统一清洗后的 HTML 和 Native 稳定受管图片/视频地址,支持最多20图(单图10MiB、100MP)、4个视频(MP4/WebM、单个100MiB)。视频通过同源任务文件路由流式读取,不下载完整 blob。
935
935
  PC/手机保留格式、图片和前后文字;插图未知时锁住编辑,恢复采用原插入位置并只插入一次。
936
936
  `blob:` 仅用于授权预览,不进入保存值。新任务签名/富文本图片完成时核验实际图片解码与
937
937
  声明格式。完整值经 Native 校验后,草稿和正式审批共用排序文件锁、引用验证、保留期及事务。
@@ -1189,3 +1189,24 @@ subject update和来源guards提交实际改变的派生字段;普通补填仍
1189
1189
  至周日7)。这只控制新选择,保留已有值,不能当成服务端提交门禁。
1190
1190
  `formOptions.fieldHints(values)` 返回按已匹配字段的提示内容,用于时段或业务说明,
1191
1191
  它不改变必填和数据;PC/手机均显示在字段旁。未知字段和无效约束阻止新表单。
1192
+
1193
+ ### 详情的条件显示
1194
+
1195
+ `OpenXiangdaApplication` 的可选 `workflowDetails` 按流程编码提供详情展示规则:
1196
+
1197
+ ```tsx
1198
+ <OpenXiangdaApplication {...applicationProps} workflowDetails={{
1199
+ 'expense-request': { fieldVisibility: ({ fieldCode, record, definitionVersion }) => {
1200
+ if (definitionVersion !== 1 || !Object.hasOwn(record, 'expenseType')) return undefined;
1201
+ if (fieldCode === 'travelBudget') return record.expenseType === 'travel';
1202
+ return undefined;
1203
+ } },
1204
+ }} />
1205
+ ```
1206
+
1207
+ 复用应用已有的字段条件,条件依赖没有包含在可读投影中时返回 `undefined`。
1208
+ 回调还可读取 `workflowCode`、`bindingVersion` 和 `resourceCode`。返回 `false`
1209
+ 只省略空字段;已有文本、0、false、引用值和非空子表仍显示,避免隐藏历史内容。
1210
+ 缺少规则、返回 `undefined` 或回调失败均保持原显示。PC/手机共用这一规则,
1211
+ 最后一个字段被省略后对应空分组也消失。这是同步展示扩展,不发请求、不写数据,
1212
+ 不改变字段授权、审批参数或流程版本;不提供该选项的应用保持既有行为。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openxiangda",
3
- "version": "2.60.1",
3
+ "version": "2.61.1",
4
4
  "description": "OpenXiangda 2.0 的统一命令、应用 SDK、MCP 与中文 AI 技能资料。",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -26,6 +26,10 @@
26
26
  "types": "./dist/field-kit.d.ts",
27
27
  "import": "./dist/field-kit.js"
28
28
  },
29
+ "./rich-text": {
30
+ "types": "./dist/rich-text.d.ts",
31
+ "import": "./dist/rich-text.js"
32
+ },
29
33
  "./react": {
30
34
  "types": "./dist/react.d.ts",
31
35
  "import": "./dist/react.js"
@@ -67,18 +71,29 @@
67
71
  "@noble/hashes": "2.0.1",
68
72
  "@rc-component/async-validator": "6.0.0",
69
73
  "@rc-component/picker": "1.10.0",
74
+ "@tiptap/core": "3.31.4",
75
+ "@tiptap/extension-image": "3.31.4",
76
+ "@tiptap/extension-list": "3.31.4",
77
+ "@tiptap/extension-subscript": "3.31.4",
78
+ "@tiptap/extension-superscript": "3.31.4",
79
+ "@tiptap/extension-table": "3.31.4",
80
+ "@tiptap/extension-text-align": "3.31.4",
81
+ "@tiptap/extension-text-style": "3.31.4",
82
+ "@tiptap/pm": "3.31.4",
83
+ "@tiptap/react": "3.31.4",
84
+ "@tiptap/starter-kit": "3.31.4",
70
85
  "@xyflow/react": "12.12.0",
71
86
  "antd-mobile": "5.42.3",
72
87
  "dayjs": "1.11.18",
73
88
  "docx-preview": "0.3.7",
74
89
  "elkjs": "0.12.0",
75
- "openxiangda-cli": "2.8.6",
76
- "openxiangda-contracts": "2.74.0",
77
- "openxiangda-devkit-core": "2.56.0",
90
+ "openxiangda-cli": "2.8.9",
91
+ "openxiangda-contracts": "2.77.0",
92
+ "openxiangda-devkit-core": "2.58.0",
78
93
  "openxiangda-legacy": "npm:openxiangda@1.0.269",
79
- "openxiangda-mcp": "2.1.5",
80
- "openxiangda-nest": "2.16.6",
81
- "openxiangda-skill-kit": "2.3.96",
94
+ "openxiangda-mcp": "2.1.8",
95
+ "openxiangda-nest": "2.17.2",
96
+ "openxiangda-skill-kit": "2.3.99",
82
97
  "xlsx": "https://github.com/1377385356/openxiangda/releases/download/vendor-mirror/xlsx-0.20.3.tgz"
83
98
  },
84
99
  "peerDependencies": {
@@ -144,38 +159,40 @@
144
159
  },
145
160
  "openxiangdaRelease": {
146
161
  "schemaVersion": "openxiangda.release-notes/v1",
147
- "version": "2.60.1",
162
+ "version": "2.61.1",
148
163
  "status": "reviewed",
149
- "title": "OpenXiangda 2.60.1:显式父资源读取策略",
150
- "summary": "新增原生子表父资源读取策略,保持同一有效成员关系内的完整授权链;本次同时物化完整主线中已存在的六项工作流界面与查询维护。",
164
+ "title": "连接开发与已部署预发版本隔离",
165
+ "summary": "修复启动本地连接开发后预发页面变为未部署的问题。开发配置通过独立会话选择,已部署前后端与权限、流程、订阅和调度保持原发布选择。",
151
166
  "newFeatures": [
152
- "原生子表可声明 parentRead,由平台绑定唯一父资源与子表字段,并以同一有效成员关系同时核验子、父、范围与读取视角。",
153
- "公开 contracts/devkit 提供同源解析器与能力协商,根包及 CLI 模板传播精确配套版本。"
167
+ "开发会话引用独立配置快照,源码连接和短期工作负载凭证按会话隔离。"
154
168
  ],
155
169
  "fixes": [
156
- "收录主线已有工作流画布缩放、面板、受控选中和按钮点击/键盘命中整理。",
157
- "收录主线已有工作中心服务端分页搜索及流程不可读取/不存在状态的中文呈现。"
170
+ "dev 不再切换共享预发 Head,不再清空已部署的前后端制品指针。",
171
+ "普通线上请求不会被导向开发者本地 Nest;关闭、过期和撤销只影响对应开发会话。",
172
+ "普通浏览器配置选择证明绑定签名会话与实际登录用户,不能借用开发者权限。"
158
173
  ],
159
174
  "affectedUsers": [
160
- "需要通过父记录权限读取 owned 子表的 V2 应用开发者,以及使用标准工作流界面和工作中心的用户。"
175
+ "使用 openxiangda dev 的应用开发者及同一应用的预发使用者。"
161
176
  ],
162
177
  "upgradeSteps": [
163
- "按正式版本组合升级平台 SQL 与服务器,再按锁文件安装精确工具包并刷新同版本资料。",
164
- "启用 parentRead 前核验 data.parent-read-policy 能力,保留原业务 UUID、父子外键和 Head 回执。"
178
+ "先升级配套平台,确认 application.development-configuration 契约为 2.0.0。",
179
+ "更新工作区至 openxiangda 2.61.1,重新运行 dev 创建独立开发会话。",
180
+ "历史已被开发配置切换的预发版本,通过正常 rollback 恢复已部署版本。"
165
181
  ],
166
182
  "knownLimitations": [
167
- "仅支持只读、唯一父资源、单层 owned 子表;禁止应用自定义外键、多跳、循环及借读取扩大写权限。",
168
- "隔离 PG15 实际 kernel 与合成授权测试不替代学校真实角色、页面、文件及性能验收。",
169
- "本次包含完整既有 master 维护,不是只发布 G04 源码;后续 selected-department 与 managed-file 契约仍各自独立发布。"
183
+ "共享测试数据的业务写入仍然真实生效;本次隔离配置和运行选择,不隔离数据。",
184
+ "新模型、已发布角色及流程结构的变更需要独立测试环境或正式部署;已有模型的新增字段只增加可空物理列。",
185
+ "开发启动不激活后台订阅、定时或业务日期调度,后台链路仍通过正式部署批次验收。",
186
+ "浏览器文件流操作需要部署制品。"
170
187
  ],
171
188
  "compatibility": {
172
189
  "node": ">=24",
173
- "platform": "启用 parentRead 需要配套 data.parent-read-policy 与正式 SQL 迁移",
174
- "v1": "V1 不消费新增 V2 parentRead 契约。"
190
+ "platform": "application.development-configuration 2.0.0",
191
+ "generation": "OpenXiangda Native V2"
175
192
  },
176
193
  "issues": [],
177
- "sha256": "1ac76bbd7c06e6a4aeb1613004b6a521fb44d0ad385f96fa5b81fb2f3ac60a35",
178
- "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.60.1"
194
+ "sha256": "acfeb841fe4e2107fb13cf3e0ef92c1c35bad7b1836b61ac3e6028bf97ff589e",
195
+ "url": "https://github.com/1377385356/openxiangda/releases/tag/v2.61.1"
179
196
  },
180
197
  "scripts": {
181
198
  "build": "node ../../scripts/prune-package-dist.mjs && tsc -p tsconfig.json && node scripts/copy-assets.mjs",