openxiangda 1.0.264 → 2.0.0-alpha.2
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/README.md +11 -666
- package/bin/run.js +11 -0
- package/dist/browser/AuthoritativeSelector.d.ts +37 -0
- package/dist/browser/AuthoritativeSelector.d.ts.map +1 -0
- package/dist/browser/AuthoritativeSelector.js +357 -0
- package/dist/browser/AuthoritativeSelector.js.map +1 -0
- package/dist/browser/FilePreviewPage.d.ts +2 -0
- package/dist/browser/FilePreviewPage.d.ts.map +1 -0
- package/dist/browser/FilePreviewPage.js +191 -0
- package/dist/browser/FilePreviewPage.js.map +1 -0
- package/dist/browser/Shell.d.ts +6 -0
- package/dist/browser/Shell.d.ts.map +1 -0
- package/dist/browser/Shell.js +198 -0
- package/dist/browser/Shell.js.map +1 -0
- package/dist/browser/appearance.d.ts +12 -0
- package/dist/browser/appearance.d.ts.map +1 -0
- package/dist/browser/appearance.js +100 -0
- package/dist/browser/appearance.js.map +1 -0
- package/dist/browser/application.d.ts +8 -0
- package/dist/browser/application.d.ts.map +1 -0
- package/dist/browser/application.js +42 -0
- package/dist/browser/application.js.map +1 -0
- package/dist/browser/components/platform-fields/AddressField.d.ts +12 -0
- package/dist/browser/components/platform-fields/AddressField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/AddressField.js +179 -0
- package/dist/browser/components/platform-fields/AddressField.js.map +1 -0
- package/dist/browser/components/platform-fields/AttachmentFileList.d.ts +9 -0
- package/dist/browser/components/platform-fields/AttachmentFileList.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/AttachmentFileList.js +164 -0
- package/dist/browser/components/platform-fields/AttachmentFileList.js.map +1 -0
- package/dist/browser/components/platform-fields/CascadeField.d.ts +13 -0
- package/dist/browser/components/platform-fields/CascadeField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/CascadeField.js +14 -0
- package/dist/browser/components/platform-fields/CascadeField.js.map +1 -0
- package/dist/browser/components/platform-fields/DateTimeField.d.ts +16 -0
- package/dist/browser/components/platform-fields/DateTimeField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/DateTimeField.js +51 -0
- package/dist/browser/components/platform-fields/DateTimeField.js.map +1 -0
- package/dist/browser/components/platform-fields/JsonField.d.ts +11 -0
- package/dist/browser/components/platform-fields/JsonField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/JsonField.js +40 -0
- package/dist/browser/components/platform-fields/JsonField.js.map +1 -0
- package/dist/browser/components/platform-fields/LocationField.d.ts +11 -0
- package/dist/browser/components/platform-fields/LocationField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/LocationField.js +73 -0
- package/dist/browser/components/platform-fields/LocationField.js.map +1 -0
- package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts +12 -0
- package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js +269 -0
- package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js.map +1 -0
- package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts +12 -0
- package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/ResourceReferenceField.js +22 -0
- package/dist/browser/components/platform-fields/ResourceReferenceField.js.map +1 -0
- package/dist/browser/components/platform-fields/RichTextField.d.ts +14 -0
- package/dist/browser/components/platform-fields/RichTextField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/RichTextField.js +214 -0
- package/dist/browser/components/platform-fields/RichTextField.js.map +1 -0
- package/dist/browser/components/platform-fields/SignatureField.d.ts +15 -0
- package/dist/browser/components/platform-fields/SignatureField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/SignatureField.js +179 -0
- package/dist/browser/components/platform-fields/SignatureField.js.map +1 -0
- package/dist/browser/components/platform-fields/SubtableField.d.ts +18 -0
- package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/SubtableField.js +236 -0
- package/dist/browser/components/platform-fields/SubtableField.js.map +1 -0
- package/dist/browser/components/platform-fields/address-value.d.ts +13 -0
- package/dist/browser/components/platform-fields/address-value.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/address-value.js +70 -0
- package/dist/browser/components/platform-fields/address-value.js.map +1 -0
- package/dist/browser/components/platform-fields/cascade-value.d.ts +6 -0
- package/dist/browser/components/platform-fields/cascade-value.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/cascade-value.js +47 -0
- package/dist/browser/components/platform-fields/cascade-value.js.map +1 -0
- package/dist/browser/components/platform-fields/directory-value.d.ts +7 -0
- package/dist/browser/components/platform-fields/directory-value.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/directory-value.js +35 -0
- package/dist/browser/components/platform-fields/directory-value.js.map +1 -0
- package/dist/browser/components/platform-fields/field-form-codec.d.ts +10 -0
- package/dist/browser/components/platform-fields/field-form-codec.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/field-form-codec.js +82 -0
- package/dist/browser/components/platform-fields/field-form-codec.js.map +1 -0
- package/dist/browser/components/platform-fields/location-value.d.ts +20 -0
- package/dist/browser/components/platform-fields/location-value.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/location-value.js +57 -0
- package/dist/browser/components/platform-fields/location-value.js.map +1 -0
- package/dist/browser/components/platform-fields/resource-query.d.ts +14 -0
- package/dist/browser/components/platform-fields/resource-query.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/resource-query.js +102 -0
- package/dist/browser/components/platform-fields/resource-query.js.map +1 -0
- package/dist/browser/components/platform-fields/rich-text-value.d.ts +12 -0
- package/dist/browser/components/platform-fields/rich-text-value.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/rich-text-value.js +83 -0
- package/dist/browser/components/platform-fields/rich-text-value.js.map +1 -0
- package/dist/browser/components/platform-fields/subtable-value.d.ts +31 -0
- package/dist/browser/components/platform-fields/subtable-value.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/subtable-value.js +120 -0
- package/dist/browser/components/platform-fields/subtable-value.js.map +1 -0
- package/dist/browser/components/resource/GeneratedResourceCrud.d.ts +8 -0
- package/dist/browser/components/resource/GeneratedResourceCrud.d.ts.map +1 -0
- package/dist/browser/components/resource/GeneratedResourceCrud.js +580 -0
- package/dist/browser/components/resource/GeneratedResourceCrud.js.map +1 -0
- package/dist/browser/components/resource/ResourceBatchActions.d.ts +25 -0
- package/dist/browser/components/resource/ResourceBatchActions.d.ts.map +1 -0
- package/dist/browser/components/resource/ResourceBatchActions.js +168 -0
- package/dist/browser/components/resource/ResourceBatchActions.js.map +1 -0
- package/dist/browser/components/resource/StandardResourcePages.d.ts +57 -0
- package/dist/browser/components/resource/StandardResourcePages.d.ts.map +1 -0
- package/dist/browser/components/resource/StandardResourcePages.js +89 -0
- package/dist/browser/components/resource/StandardResourcePages.js.map +1 -0
- package/dist/browser/components/resource/SurfaceFields.d.ts +88 -0
- package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -0
- package/dist/browser/components/resource/SurfaceFields.js +497 -0
- package/dist/browser/components/resource/SurfaceFields.js.map +1 -0
- package/dist/browser/components/resource/generated-resource-definition.d.ts +19 -0
- package/dist/browser/components/resource/generated-resource-definition.d.ts.map +1 -0
- package/dist/browser/components/resource/generated-resource-definition.js +2 -0
- package/dist/browser/components/resource/generated-resource-definition.js.map +1 -0
- package/dist/browser/components/resource/resource-import.d.ts +15 -0
- package/dist/browser/components/resource/resource-import.d.ts.map +1 -0
- package/dist/browser/components/resource/resource-import.js +197 -0
- package/dist/browser/components/resource/resource-import.js.map +1 -0
- package/dist/browser/data-provider.d.ts +4 -0
- package/dist/browser/data-provider.d.ts.map +1 -0
- package/dist/browser/data-provider.js +45 -0
- package/dist/browser/data-provider.js.map +1 -0
- package/dist/browser/platform-client.d.ts +81 -0
- package/dist/browser/platform-client.d.ts.map +1 -0
- package/dist/browser/platform-client.js +422 -0
- package/dist/browser/platform-client.js.map +1 -0
- package/dist/browser/resource-definitions.d.ts +8 -0
- package/dist/browser/resource-definitions.d.ts.map +1 -0
- package/dist/browser/resource-definitions.js +14 -0
- package/dist/browser/resource-definitions.js.map +1 -0
- package/dist/browser/runtime-meta.d.ts +22 -0
- package/dist/browser/runtime-meta.d.ts.map +1 -0
- package/dist/browser/runtime-meta.js +79 -0
- package/dist/browser/runtime-meta.js.map +1 -0
- package/dist/browser/runtime.d.ts +13 -0
- package/dist/browser/runtime.d.ts.map +1 -0
- package/dist/browser/runtime.js +47 -0
- package/dist/browser/runtime.js.map +1 -0
- package/dist/browser/styles.css +1941 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/core.d.ts +6 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +4 -0
- package/dist/core.js.map +1 -0
- package/dist/field-kit.d.ts +22 -0
- package/dist/field-kit.d.ts.map +1 -0
- package/dist/field-kit.js +22 -0
- package/dist/field-kit.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/nest.d.ts +10 -0
- package/dist/nest.d.ts.map +1 -0
- package/dist/nest.js +9 -0
- package/dist/nest.js.map +1 -0
- package/dist/react.d.ts +12 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +11 -0
- package/dist/react.js.map +1 -0
- package/dist/testing.d.ts +4 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +4 -0
- package/dist/testing.js.map +1 -0
- package/package.json +95 -200
- package/skills/manifest.json +10 -0
- package/skills/openxiangda-v2/SKILL.md +55 -0
- package/skills/openxiangda-v2/references/architecture.md +7 -0
- package/skills/openxiangda-v2/references/backend.md +116 -0
- package/skills/openxiangda-v2/references/data-authz.md +93 -0
- package/skills/openxiangda-v2/references/delivery.md +11 -0
- package/skills/openxiangda-v2/references/discovery.md +15 -0
- package/skills/openxiangda-v2/references/frontend.md +10 -0
- package/skills/openxiangda-v2/references/testing.md +16 -0
- package/skills/openxiangda-v2/references/workflow-notification.md +69 -0
- package/skills/openxiangda-v2/references/workspace.md +21 -0
- package/bin/openxiangda.js +0 -26
- package/lib/app-function-invoke.js +0 -28
- package/lib/application-environments.js +0 -1134
- package/lib/change-baseline.js +0 -1359
- package/lib/cli.js +0 -31084
- package/lib/config.js +0 -450
- package/lib/content-cache.js +0 -97
- package/lib/delivery-v2-cli.js +0 -329
- package/lib/delivery-v2-executor.js +0 -1703
- package/lib/delivery-v2-package.js +0 -1176
- package/lib/dependency-capsule.js +0 -246
- package/lib/design-gates.js +0 -668
- package/lib/design-review.js +0 -220
- package/lib/developer-center.js +0 -160
- package/lib/form-field-contract.js +0 -79
- package/lib/form-schema-loader.js +0 -181
- package/lib/git-remote-identity.js +0 -89
- package/lib/http.js +0 -196
- package/lib/integration-bundle.js +0 -225
- package/lib/js-code-build.js +0 -175
- package/lib/open-api.js +0 -256
- package/lib/policy.js +0 -137
- package/lib/publish-context.js +0 -98
- package/lib/publish-lease-heartbeat.js +0 -182
- package/lib/publish-lease.js +0 -221
- package/lib/release-error-classification.js +0 -41
- package/lib/release-explain.js +0 -75
- package/lib/release-mainline.js +0 -654
- package/lib/release-plan.js +0 -550
- package/lib/release-telemetry.js +0 -182
- package/lib/resource-binding-contract.js +0 -210
- package/lib/role-resolution.js +0 -57
- package/lib/runtime-lineage.js +0 -326
- package/lib/sdd.js +0 -3306
- package/lib/skills.js +0 -453
- package/lib/source-dependencies.js +0 -921
- package/lib/task-status.js +0 -330
- package/lib/utils.js +0 -178
- package/lib/workspace-bootstrap.js +0 -268
- package/lib/workspace-init.js +0 -202
- package/lib/worktree-cleanup.js +0 -631
- package/lib/worktree-owner.js +0 -354
- package/openxiangda-skills/SKILL.md +0 -226
- package/openxiangda-skills/references/architecture-design.md +0 -409
- package/openxiangda-skills/references/architecture-patterns.md +0 -264
- package/openxiangda-skills/references/automation-v3.md +0 -349
- package/openxiangda-skills/references/best-practices.md +0 -272
- package/openxiangda-skills/references/component-guide.md +0 -287
- package/openxiangda-skills/references/connector-resources.md +0 -80
- package/openxiangda-skills/references/data-views.md +0 -360
- package/openxiangda-skills/references/forms/component-registry.md +0 -90
- package/openxiangda-skills/references/forms/form-schema.md +0 -146
- package/openxiangda-skills/references/forms/layout-and-rules.md +0 -24
- package/openxiangda-skills/references/notifications.md +0 -227
- package/openxiangda-skills/references/openxiangda-api.md +0 -971
- package/openxiangda-skills/references/pages/app-shell.md +0 -66
- package/openxiangda-skills/references/pages/page-sdk.md +0 -401
- package/openxiangda-skills/references/pages/publish-flow.md +0 -84
- package/openxiangda-skills/references/pages/workspace-structure.md +0 -41
- package/openxiangda-skills/references/permission-design-patterns.md +0 -313
- package/openxiangda-skills/references/permissions-settings.md +0 -468
- package/openxiangda-skills/references/platform-data-model.md +0 -340
- package/openxiangda-skills/references/resource-manifest-cheatsheet.md +0 -936
- package/openxiangda-skills/references/school-contact-relations.md +0 -224
- package/openxiangda-skills/references/style-system.md +0 -218
- package/openxiangda-skills/references/troubleshooting.md +0 -271
- package/openxiangda-skills/references/workflow-v3.md +0 -441
- package/openxiangda-skills/references/workspace-state.md +0 -115
- package/openxiangda-skills/skills/openxiangda-app/SKILL.md +0 -118
- package/openxiangda-skills/skills/openxiangda-architecture-design/SKILL.md +0 -137
- package/openxiangda-skills/skills/openxiangda-core/SKILL.md +0 -222
- package/openxiangda-skills/skills/openxiangda-form/SKILL.md +0 -184
- package/openxiangda-skills/skills/openxiangda-inspect/SKILL.md +0 -63
- package/openxiangda-skills/skills/openxiangda-open-api/SKILL.md +0 -57
- package/openxiangda-skills/skills/openxiangda-open-api/agents/openai.yaml +0 -4
- package/openxiangda-skills/skills/openxiangda-open-api/references/backend-authentication.md +0 -63
- package/openxiangda-skills/skills/openxiangda-open-api/references/dingtalk-api.openapi.json +0 -15653
- package/openxiangda-skills/skills/openxiangda-page/SKILL.md +0 -154
- package/openxiangda-skills/skills/openxiangda-permission-settings/SKILL.md +0 -209
- package/openxiangda-skills/skills/openxiangda-workflow-automation/SKILL.md +0 -201
- package/packages/sdk/bin/lowcode-workspace.mjs +0 -4
- package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.mts +0 -1292
- package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.ts +0 -1292
- package/packages/sdk/dist/build/index.cjs +0 -1
- package/packages/sdk/dist/build/index.d.mts +0 -60
- package/packages/sdk/dist/build/index.d.ts +0 -60
- package/packages/sdk/dist/build/index.mjs +0 -1
- package/packages/sdk/dist/components/index.cjs +0 -148
- package/packages/sdk/dist/components/index.d.mts +0 -970
- package/packages/sdk/dist/components/index.d.ts +0 -970
- package/packages/sdk/dist/components/index.mjs +0 -148
- package/packages/sdk/dist/dataManagementApi-Ro9itwm8.d.ts +0 -142
- package/packages/sdk/dist/dataManagementApi-p_HOhQnA.d.mts +0 -142
- package/packages/sdk/dist/runtime/index.cjs +0 -148
- package/packages/sdk/dist/runtime/index.d.mts +0 -171
- package/packages/sdk/dist/runtime/index.d.ts +0 -171
- package/packages/sdk/dist/runtime/index.mjs +0 -148
- package/packages/sdk/dist/runtime/react.cjs +0 -148
- package/packages/sdk/dist/runtime/react.d.mts +0 -3202
- package/packages/sdk/dist/runtime/react.d.ts +0 -3202
- package/packages/sdk/dist/runtime/react.mjs +0 -148
- package/packages/sdk/dist/styles/antd-theme.cjs +0 -1
- package/packages/sdk/dist/styles/antd-theme.d.mts +0 -6
- package/packages/sdk/dist/styles/antd-theme.d.ts +0 -6
- package/packages/sdk/dist/styles/antd-theme.mjs +0 -1
- package/packages/sdk/dist/styles/tailwind-preset.cjs +0 -1
- package/packages/sdk/dist/styles/tailwind-preset.d.mts +0 -74
- package/packages/sdk/dist/styles/tailwind-preset.d.ts +0 -74
- package/packages/sdk/dist/styles/tailwind-preset.mjs +0 -1
- package/packages/sdk/dist/styles/tokens.css +0 -74
- package/packages/sdk/dist/workflow/index.cjs +0 -3
- package/packages/sdk/dist/workflow/index.d.mts +0 -291
- package/packages/sdk/dist/workflow/index.d.ts +0 -291
- package/packages/sdk/dist/workflow/index.mjs +0 -3
- package/packages/sdk/source/admin-list/AdminList.tsx +0 -1734
- package/packages/sdk/source/admin-list/README.md +0 -12
- package/packages/sdk/source/admin-list/dataSources.ts +0 -345
- package/packages/sdk/source/admin-list/index.ts +0 -42
- package/packages/sdk/source/admin-list/preferences.ts +0 -174
- package/packages/sdk/source/admin-list/types.ts +0 -273
- package/packages/sdk/src/build-source/README.md +0 -9
- package/packages/sdk/src/build-source/bin/lowcode-workspace.mjs +0 -7
- package/packages/sdk/src/build-source/package.json +0 -34
- package/packages/sdk/src/build-source/scripts/build-forms.mjs +0 -1129
- package/packages/sdk/src/build-source/scripts/build-pages.mjs +0 -897
- package/packages/sdk/src/build-source/scripts/build-workspace.mjs +0 -89
- package/packages/sdk/src/build-source/scripts/publish-all.mjs +0 -190
- package/packages/sdk/src/build-source/scripts/publish-oss.mjs +0 -144
- package/packages/sdk/src/build-source/scripts/register-bundle.mjs +0 -1
- package/packages/sdk/src/build-source/scripts/register.mjs +0 -362
- package/packages/sdk/src/build-source/scripts/sync-schema.mjs +0 -381
- package/packages/sdk/src/build-source/scripts/utils/form-api.mjs +0 -1058
- package/packages/sdk/src/build-source/scripts/utils/form-runtime-assets.mjs +0 -57
- package/packages/sdk/src/build-source/scripts/utils/incremental.mjs +0 -348
- package/packages/sdk/src/build-source/scripts/utils/load-config.mjs +0 -331
- package/packages/sdk/src/build-source/scripts/utils/mime-types.mjs +0 -70
- package/packages/sdk/src/build-source/scripts/utils/namespace-css.mjs +0 -77
- package/packages/sdk/src/build-source/scripts/utils/oss-client.mjs +0 -128
- package/packages/sdk/src/build-source/scripts/utils/pages.mjs +0 -150
- package/packages/sdk/src/build-source/scripts/utils/progress.mjs +0 -57
- package/packages/sdk/src/build-source/scripts/utils/publish-oss-patterns.mjs +0 -20
- package/packages/sdk/src/build-source/scripts/utils/register-payload.mjs +0 -90
- package/packages/sdk/src/build-source/scripts/utils/runtime-css-check.mjs +0 -44
- package/packages/sdk/src/build-source/scripts/utils/schema-transform.mjs +0 -142
- package/packages/sdk/src/build-source/scripts/utils/static-assets.mjs +0 -165
- package/packages/sdk/src/build-source/scripts/utils/tailwind-config.mjs +0 -283
- package/packages/sdk/src/build-source/scripts/utils/tailwind-token-warnings.mjs +0 -146
- package/packages/sdk/src/build-source/scripts/utils/workspace-style-entry.mjs +0 -29
- package/packages/sdk/src/build-source/src/cli.mjs +0 -735
- package/policy/openxiangda-policy.json +0 -72
- package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-form.mdc +0 -24
- package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-page.mdc +0 -25
- package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-resources.mdc +0 -32
- package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-workflow-automation.mdc +0 -26
- package/templates/openxiangda-react-spa/.cursor/rules/openxiangda.mdc +0 -68
- package/templates/openxiangda-react-spa/.env.example +0 -4
- package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-form.md +0 -37
- package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-page.md +0 -29
- package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-resources.md +0 -32
- package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-workflow-automation.md +0 -34
- package/templates/openxiangda-react-spa/.qoder/rules/openxiangda.md +0 -66
- package/templates/openxiangda-react-spa/AGENTS.md +0 -192
- package/templates/openxiangda-react-spa/DELIVERY.md +0 -43
- package/templates/openxiangda-react-spa/app-workspace.config.ts +0 -50
- package/templates/openxiangda-react-spa/index.html +0 -12
- package/templates/openxiangda-react-spa/package.json +0 -53
- package/templates/openxiangda-react-spa/postcss.config.cjs +0 -6
- package/templates/openxiangda-react-spa/scripts/build-js-code.mjs +0 -600
- package/templates/openxiangda-react-spa/scripts/deploy.mjs +0 -18
- package/templates/openxiangda-react-spa/scripts/guard-publish.mjs +0 -21
- package/templates/openxiangda-react-spa/src/app/navigation.ts +0 -73
- package/templates/openxiangda-react-spa/src/app/router.tsx +0 -146
- package/templates/openxiangda-react-spa/src/app/starter-content.ts +0 -144
- package/templates/openxiangda-react-spa/src/forms/.gitkeep +0 -1
- package/templates/openxiangda-react-spa/src/layouts/AdminShell.tsx +0 -570
- package/templates/openxiangda-react-spa/src/main.tsx +0 -21
- package/templates/openxiangda-react-spa/src/pages/admin/AdminDashboardPage.tsx +0 -170
- package/templates/openxiangda-react-spa/src/pages/admin/LoginLogPage.tsx +0 -425
- package/templates/openxiangda-react-spa/src/pages/defaults/DataRoutePage.tsx +0 -36
- package/templates/openxiangda-react-spa/src/pages/defaults/FilePreviewRoutePage.tsx +0 -65
- package/templates/openxiangda-react-spa/src/pages/defaults/FormRoutePage.tsx +0 -235
- package/templates/openxiangda-react-spa/src/pages/public/PublicRegisterPage.tsx +0 -15
- package/templates/openxiangda-react-spa/src/pages/states/NotFoundPage.tsx +0 -31
- package/templates/openxiangda-react-spa/src/resources/menus/menus.json +0 -22
- package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/app-admin.json +0 -8
- package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/public-visitor.json +0 -8
- package/templates/openxiangda-react-spa/src/resources/public-access/public-register.json +0 -14
- package/templates/openxiangda-react-spa/src/resources/roles/roles.json +0 -15
- package/templates/openxiangda-react-spa/src/resources/routes/public-register.json +0 -8
- package/templates/openxiangda-react-spa/src/runtime/default-page-overrides.tsx +0 -35
- package/templates/openxiangda-react-spa/src/runtime/default-routes.ts +0 -16
- package/templates/openxiangda-react-spa/src/shared/form-schema.ts +0 -135
- package/templates/openxiangda-react-spa/src/shared/mac-admin.tsx +0 -651
- package/templates/openxiangda-react-spa/src/shared/ui.tsx +0 -22
- package/templates/openxiangda-react-spa/src/styles/index.css +0 -105
- package/templates/openxiangda-react-spa/tailwind.config.cjs +0 -37
- package/templates/openxiangda-react-spa/tsconfig.app.json +0 -36
- package/templates/openxiangda-react-spa/tsconfig.js-code-nodes.json +0 -19
- package/templates/openxiangda-react-spa/tsconfig.json +0 -7
- package/templates/openxiangda-react-spa/tsconfig.node.json +0 -10
- package/templates/openxiangda-react-spa/vite.config.ts +0 -209
- package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-form.mdc +0 -24
- package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-page.mdc +0 -21
- package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-resources.mdc +0 -40
- package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-workflow-automation.mdc +0 -21
- package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda.mdc +0 -81
- package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-form.md +0 -38
- package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-page.md +0 -39
- package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-resources.md +0 -59
- package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-workflow-automation.md +0 -46
- package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda.md +0 -82
- package/templates/sy-lowcode-app-workspace/AGENTS.md +0 -158
- package/templates/sy-lowcode-app-workspace/DELIVERY.md +0 -43
- package/templates/sy-lowcode-app-workspace/app-workspace.config.ts +0 -51
- package/templates/sy-lowcode-app-workspace/examples/best-practices/README.md +0 -43
- package/templates/sy-lowcode-app-workspace/examples/best-practices/access-governance.md +0 -239
- package/templates/sy-lowcode-app-workspace/examples/best-practices/catalog.json +0 -99
- package/templates/sy-lowcode-app-workspace/examples/best-practices/decision-guide.md +0 -94
- package/templates/sy-lowcode-app-workspace/examples/best-practices/design-style.md +0 -91
- package/templates/sy-lowcode-app-workspace/examples/best-practices/module-structure.md +0 -48
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/index.ts +0 -2
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.test.ts +0 -52
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.ts +0 -37
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/types.ts +0 -19
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/index.ts +0 -4
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.test.ts +0 -42
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.ts +0 -25
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.test.ts +0 -63
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.ts +0 -73
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.test.ts +0 -34
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.ts +0 -73
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/types.ts +0 -66
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/page.tsx +0 -1
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/schema.ts +0 -109
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/page.tsx +0 -1
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/schema.ts +0 -92
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/page.tsx +0 -1
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/schema.ts +0 -153
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/page.tsx +0 -1
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/schema.ts +0 -65
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/daily_ticket_digest/index.ts +0 -44
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/sync_roles_to_platform/index.ts +0 -33
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/App.tsx +0 -8
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/GlassHomeDashboard.tsx +0 -232
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/page.config.ts +0 -14
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/styles.css +0 -196
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/App.tsx +0 -7
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/WorkbenchPage.tsx +0 -36
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/ConfigPanel.tsx +0 -34
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/PreviewPanel.tsx +0 -17
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/page.config.ts +0 -9
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/reducer.ts +0 -29
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/styles.css +0 -24
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/App.tsx +0 -8
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/MintAnalyticsDashboard.tsx +0 -279
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/page.config.ts +0 -14
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/styles.css +0 -163
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/App.tsx +0 -7
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/MobilePortalShell.tsx +0 -31
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/modules/MobileHome.tsx +0 -13
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/page.config.ts +0 -14
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/routes.ts +0 -13
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/styles.css +0 -11
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/App.tsx +0 -8
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/OpsMonitorDashboard.tsx +0 -306
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/page.config.ts +0 -14
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/styles.css +0 -248
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/App.tsx +0 -7
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/PcPortalShell.tsx +0 -35
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/components/PortalMetric.tsx +0 -11
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/HomeModule.tsx +0 -25
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/TicketsModule.tsx +0 -14
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/page.config.ts +0 -14
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/routes.ts +0 -19
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/styles.css +0 -35
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/App.tsx +0 -7
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/TicketOpsPage.tsx +0 -105
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketActionTimeline.tsx +0 -22
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketDetailDrawer.tsx +0 -44
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketTableActions.tsx +0 -57
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/page.config.ts +0 -9
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/styles.css +0 -35
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/App.tsx +0 -8
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/WorkOrderListDrawerPage.tsx +0 -371
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/index.tsx +0 -10
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/page.config.ts +0 -14
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/styles.css +0 -182
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/automation.json +0 -25
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/trigger.json +0 -9
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/notifications/daily-ticket-digest.json +0 -24
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/form-groups/service-ticket-college.json +0 -21
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/roles.json +0 -17
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/workflows/expense-approval-workflow.json +0 -48
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/ConfirmAction.tsx +0 -22
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/QueryState.tsx +0 -37
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/StatusTag.tsx +0 -20
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/DashboardPrimitives.tsx +0 -832
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/chartOptions.ts +0 -140
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/sampleData.ts +0 -466
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/styles.css +0 -874
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/types.ts +0 -150
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/hooks/useTicketOps.ts +0 -96
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/role-governance.ts +0 -48
- package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/service-ticket.ts +0 -113
- package/templates/sy-lowcode-app-workspace/examples/forms/customer/page.tsx +0 -1
- package/templates/sy-lowcode-app-workspace/examples/forms/customer/schema.ts +0 -36
- package/templates/sy-lowcode-app-workspace/index.html +0 -12
- package/templates/sy-lowcode-app-workspace/package.json +0 -58
- package/templates/sy-lowcode-app-workspace/postcss.config.cjs +0 -9
- package/templates/sy-lowcode-app-workspace/scripts/build-js-code.mjs +0 -600
- package/templates/sy-lowcode-app-workspace/scripts/guard-publish.mjs +0 -29
- package/templates/sy-lowcode-app-workspace/src/dev/App.tsx +0 -820
- package/templates/sy-lowcode-app-workspace/src/forms/.gitkeep +0 -1
- package/templates/sy-lowcode-app-workspace/src/forms/README.md +0 -52
- package/templates/sy-lowcode-app-workspace/src/index.css +0 -26
- package/templates/sy-lowcode-app-workspace/src/js-code-nodes/.gitkeep +0 -1
- package/templates/sy-lowcode-app-workspace/src/js-code-nodes/types.d.ts +0 -3
- package/templates/sy-lowcode-app-workspace/src/main.tsx +0 -29
- package/templates/sy-lowcode-app-workspace/src/pages/.gitkeep +0 -1
- package/templates/sy-lowcode-app-workspace/src/runtime/builtin-overrides.tsx +0 -8
- package/templates/sy-lowcode-app-workspace/src/shared/form-schema.ts +0 -135
- package/templates/sy-lowcode-app-workspace/src/types/app-workspace.types.ts +0 -88
- package/templates/sy-lowcode-app-workspace/tailwind.config.cjs +0 -31
- package/templates/sy-lowcode-app-workspace/tsconfig.app.json +0 -40
- package/templates/sy-lowcode-app-workspace/tsconfig.examples.json +0 -24
- package/templates/sy-lowcode-app-workspace/tsconfig.js-code-nodes.json +0 -19
- package/templates/sy-lowcode-app-workspace/tsconfig.json +0 -7
- package/templates/sy-lowcode-app-workspace/tsconfig.node.json +0 -10
- package/templates/sy-lowcode-app-workspace/vite.config.ts +0 -85
- package/v2/README.md +0 -35
- package/v2/skills/manifest.json +0 -45
- package/v2/skills/openxiangda-v1-maintenance/SKILL.md +0 -21
- package/v2/skills/openxiangda-v1-maintenance/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2/SKILL.md +0 -38
- package/v2/skills/openxiangda-v2-architecture/SKILL.md +0 -29
- package/v2/skills/openxiangda-v2-architecture/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-backend/SKILL.md +0 -28
- package/v2/skills/openxiangda-v2-backend/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-data-authz/SKILL.md +0 -28
- package/v2/skills/openxiangda-v2-data-authz/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-delivery/SKILL.md +0 -30
- package/v2/skills/openxiangda-v2-delivery/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-frontend/SKILL.md +0 -21
- package/v2/skills/openxiangda-v2-frontend/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-workflow-events/SKILL.md +0 -28
- package/v2/skills/openxiangda-v2-workflow-events/agents/openai.yaml +0 -4
- /package/{v2/skills → skills}/openxiangda-v2/agents/openai.yaml +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BoldOutlined, FileImageOutlined, ItalicOutlined, LinkOutlined, OrderedListOutlined, StrikethroughOutlined, UnderlineOutlined, UnorderedListOutlined, } from '@ant-design/icons';
|
|
3
|
+
import { Button, Space, Tooltip } from 'antd';
|
|
4
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { dataRichTextImageSource, fetchDataFileBlob, } from '../../platform-client';
|
|
6
|
+
import { managedRichTextImageFileId, MANAGED_RICH_TEXT_SOURCE_ATTRIBUTE, richTextHydrationHtml, sanitizeRichText, } from './rich-text-value';
|
|
7
|
+
const INLINE_IMAGE_ACCEPT = 'image/png,image/jpeg,image/webp,image/gif';
|
|
8
|
+
const INLINE_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
|
|
9
|
+
const INLINE_IMAGE_MAX_COUNT = 20;
|
|
10
|
+
const TOOLS = [
|
|
11
|
+
{ command: 'bold', label: '加粗', icon: _jsx(BoldOutlined, {}) },
|
|
12
|
+
{ command: 'italic', label: '斜体', icon: _jsx(ItalicOutlined, {}) },
|
|
13
|
+
{ command: 'underline', label: '下划线', icon: _jsx(UnderlineOutlined, {}) },
|
|
14
|
+
{ command: 'strikeThrough', label: '删除线', icon: _jsx(StrikethroughOutlined, {}) },
|
|
15
|
+
{ command: 'insertOrderedList', label: '有序列表', icon: _jsx(OrderedListOutlined, {}) },
|
|
16
|
+
{ command: 'insertUnorderedList', label: '无序列表', icon: _jsx(UnorderedListOutlined, {}) },
|
|
17
|
+
];
|
|
18
|
+
function editableRichTextValue(element) {
|
|
19
|
+
const clone = element.cloneNode(true);
|
|
20
|
+
for (const image of [...clone.querySelectorAll('img')]) {
|
|
21
|
+
const source = image.getAttribute(MANAGED_RICH_TEXT_SOURCE_ATTRIBUTE);
|
|
22
|
+
if (source)
|
|
23
|
+
image.setAttribute('src', source);
|
|
24
|
+
image.removeAttribute(MANAGED_RICH_TEXT_SOURCE_ATTRIBUTE);
|
|
25
|
+
}
|
|
26
|
+
return sanitizeRichText(clone.innerHTML);
|
|
27
|
+
}
|
|
28
|
+
function useHydratedManagedImages(root, html, resourceCode) {
|
|
29
|
+
const objectUrls = useRef(new Map());
|
|
30
|
+
const pendingBlobs = useRef(new Map());
|
|
31
|
+
useEffect(() => () => {
|
|
32
|
+
objectUrls.current.forEach(source => URL.revokeObjectURL(source));
|
|
33
|
+
objectUrls.current.clear();
|
|
34
|
+
pendingBlobs.current.clear();
|
|
35
|
+
}, []);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
const container = root.current;
|
|
38
|
+
if (!container || !resourceCode)
|
|
39
|
+
return;
|
|
40
|
+
let active = true;
|
|
41
|
+
const images = [...container.querySelectorAll('img')];
|
|
42
|
+
const activeSources = new Set(images
|
|
43
|
+
.map(image => image.getAttribute(MANAGED_RICH_TEXT_SOURCE_ATTRIBUTE) || '')
|
|
44
|
+
.filter(source => Boolean(managedRichTextImageFileId(source))));
|
|
45
|
+
for (const [source, objectUrl] of objectUrls.current) {
|
|
46
|
+
if (activeSources.has(source))
|
|
47
|
+
continue;
|
|
48
|
+
URL.revokeObjectURL(objectUrl);
|
|
49
|
+
objectUrls.current.delete(source);
|
|
50
|
+
}
|
|
51
|
+
for (const image of images) {
|
|
52
|
+
const source = image.getAttribute(MANAGED_RICH_TEXT_SOURCE_ATTRIBUTE) || '';
|
|
53
|
+
const fileId = managedRichTextImageFileId(source);
|
|
54
|
+
if (!fileId)
|
|
55
|
+
continue;
|
|
56
|
+
const current = image.getAttribute('src') || '';
|
|
57
|
+
if (current.startsWith('blob:')) {
|
|
58
|
+
if (!objectUrls.current.has(source)) {
|
|
59
|
+
objectUrls.current.set(source, current);
|
|
60
|
+
}
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const known = objectUrls.current.get(source);
|
|
64
|
+
if (known) {
|
|
65
|
+
image.setAttribute('src', known);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
let pending = pendingBlobs.current.get(source);
|
|
69
|
+
if (!pending) {
|
|
70
|
+
pending = fetchDataFileBlob(resourceCode, fileId);
|
|
71
|
+
pendingBlobs.current.set(source, pending);
|
|
72
|
+
void pending.then(() => {
|
|
73
|
+
if (pendingBlobs.current.get(source) === pending) {
|
|
74
|
+
pendingBlobs.current.delete(source);
|
|
75
|
+
}
|
|
76
|
+
}, () => {
|
|
77
|
+
if (pendingBlobs.current.get(source) === pending) {
|
|
78
|
+
pendingBlobs.current.delete(source);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
void pending
|
|
83
|
+
.then(blob => {
|
|
84
|
+
if (!active || !container.contains(image))
|
|
85
|
+
return;
|
|
86
|
+
const existing = objectUrls.current.get(source);
|
|
87
|
+
const objectUrl = existing || URL.createObjectURL(blob);
|
|
88
|
+
objectUrls.current.set(source, objectUrl);
|
|
89
|
+
image.setAttribute('src', objectUrl);
|
|
90
|
+
})
|
|
91
|
+
.catch(() => {
|
|
92
|
+
// The alt text remains visible; protected file failures stay local to
|
|
93
|
+
// the image instead of crashing the rich-text surface.
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return () => {
|
|
97
|
+
active = false;
|
|
98
|
+
};
|
|
99
|
+
}, [html, resourceCode, root]);
|
|
100
|
+
}
|
|
101
|
+
export function RichTextValueDisplay({ value, resourceCode, }) {
|
|
102
|
+
const root = useRef(null);
|
|
103
|
+
const html = useMemo(() => richTextHydrationHtml(value), [value]);
|
|
104
|
+
useHydratedManagedImages(root, html, resourceCode);
|
|
105
|
+
return (_jsx("div", { className: "oxa-rich-text-value", dangerouslySetInnerHTML: { __html: html }, ref: root }));
|
|
106
|
+
}
|
|
107
|
+
export function RichTextField({ value = '', onChange, disabled = false, mobile = false, onUpload, resourceCode, }) {
|
|
108
|
+
const editor = useRef(null);
|
|
109
|
+
const imageInput = useRef(null);
|
|
110
|
+
const insertedImageUrls = useRef(new Set());
|
|
111
|
+
const [imageUploading, setImageUploading] = useState(false);
|
|
112
|
+
const [imageError, setImageError] = useState('');
|
|
113
|
+
useEffect(() => {
|
|
114
|
+
if (editor.current && editableRichTextValue(editor.current) !== value) {
|
|
115
|
+
insertedImageUrls.current.forEach(source => URL.revokeObjectURL(source));
|
|
116
|
+
insertedImageUrls.current.clear();
|
|
117
|
+
editor.current.innerHTML = richTextHydrationHtml(value);
|
|
118
|
+
}
|
|
119
|
+
}, [value]);
|
|
120
|
+
useEffect(() => () => {
|
|
121
|
+
insertedImageUrls.current.forEach(source => URL.revokeObjectURL(source));
|
|
122
|
+
insertedImageUrls.current.clear();
|
|
123
|
+
}, []);
|
|
124
|
+
useHydratedManagedImages(editor, value, resourceCode);
|
|
125
|
+
const emit = () => {
|
|
126
|
+
if (!editor.current)
|
|
127
|
+
return;
|
|
128
|
+
const normalized = editableRichTextValue(editor.current);
|
|
129
|
+
const liveObjectUrls = new Set([...editor.current.querySelectorAll('img')]
|
|
130
|
+
.map(image => image.getAttribute('src') || '')
|
|
131
|
+
.filter(source => source.startsWith('blob:')));
|
|
132
|
+
for (const source of insertedImageUrls.current) {
|
|
133
|
+
if (liveObjectUrls.has(source))
|
|
134
|
+
continue;
|
|
135
|
+
URL.revokeObjectURL(source);
|
|
136
|
+
insertedImageUrls.current.delete(source);
|
|
137
|
+
}
|
|
138
|
+
onChange?.(normalized);
|
|
139
|
+
};
|
|
140
|
+
const command = (name, argument) => {
|
|
141
|
+
editor.current?.focus();
|
|
142
|
+
document.execCommand(name, false, argument);
|
|
143
|
+
emit();
|
|
144
|
+
};
|
|
145
|
+
const insertLink = () => {
|
|
146
|
+
const url = window.prompt('链接地址');
|
|
147
|
+
if (url && /^(?:https?:|mailto:|tel:)/i.test(url.trim())) {
|
|
148
|
+
command('createLink', url.trim());
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const insertImage = async (file) => {
|
|
152
|
+
if (!editor.current || !onUpload || !resourceCode)
|
|
153
|
+
return;
|
|
154
|
+
const selection = window.getSelection();
|
|
155
|
+
const selectedRange = selection?.rangeCount && editor.current.contains(selection.anchorNode)
|
|
156
|
+
? selection.getRangeAt(0).cloneRange()
|
|
157
|
+
: null;
|
|
158
|
+
try {
|
|
159
|
+
setImageError('');
|
|
160
|
+
setImageUploading(true);
|
|
161
|
+
if (!INLINE_IMAGE_ACCEPT.split(',').includes(file.type)) {
|
|
162
|
+
throw new Error('仅支持 PNG、JPEG、WebP 或 GIF 图片');
|
|
163
|
+
}
|
|
164
|
+
if (file.size > INLINE_IMAGE_MAX_BYTES) {
|
|
165
|
+
throw new Error('单张图片不能超过 10MB');
|
|
166
|
+
}
|
|
167
|
+
if (editor.current.querySelectorAll('img').length >= INLINE_IMAGE_MAX_COUNT) {
|
|
168
|
+
throw new Error('每个富文本最多插入 20 张图片');
|
|
169
|
+
}
|
|
170
|
+
const uploaded = await onUpload(file);
|
|
171
|
+
const image = document.createElement('img');
|
|
172
|
+
const source = dataRichTextImageSource(resourceCode, uploaded.id);
|
|
173
|
+
image.setAttribute(MANAGED_RICH_TEXT_SOURCE_ATTRIBUTE, source);
|
|
174
|
+
const objectUrl = URL.createObjectURL(file);
|
|
175
|
+
insertedImageUrls.current.add(objectUrl);
|
|
176
|
+
image.src = objectUrl;
|
|
177
|
+
image.alt = file.name;
|
|
178
|
+
const range = selectedRange || document.createRange();
|
|
179
|
+
if (!selectedRange) {
|
|
180
|
+
range.selectNodeContents(editor.current);
|
|
181
|
+
range.collapse(false);
|
|
182
|
+
}
|
|
183
|
+
range.deleteContents();
|
|
184
|
+
range.insertNode(image);
|
|
185
|
+
range.setStartAfter(image);
|
|
186
|
+
range.collapse(true);
|
|
187
|
+
selection?.removeAllRanges();
|
|
188
|
+
selection?.addRange(range);
|
|
189
|
+
emit();
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
setImageError(error instanceof Error ? error.message : String(error));
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
setImageUploading(false);
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
return (_jsxs("div", { className: `oxa-rich-text-field${mobile ? ' oxa-mobile-rich-text-field' : ''}`, children: [_jsxs(Space, { className: "oxa-rich-text-toolbar", size: 4, wrap: true, children: [TOOLS.map(tool => (_jsx(Tooltip, { title: tool.label, children: _jsx(Button, { "aria-label": tool.label, disabled: disabled, icon: tool.icon, onMouseDown: event => {
|
|
199
|
+
event.preventDefault();
|
|
200
|
+
command(tool.command);
|
|
201
|
+
}, size: "small" }) }, tool.command))), _jsx(Tooltip, { title: "\u63D2\u5165\u94FE\u63A5", children: _jsx(Button, { "aria-label": "\u63D2\u5165\u94FE\u63A5", disabled: disabled, icon: _jsx(LinkOutlined, {}), onMouseDown: event => {
|
|
202
|
+
event.preventDefault();
|
|
203
|
+
insertLink();
|
|
204
|
+
}, size: "small" }) }), onUpload && resourceCode && (_jsx(Tooltip, { title: "\u63D2\u5165\u56FE\u7247", children: _jsx(Button, { "aria-label": "\u63D2\u5165\u56FE\u7247", disabled: disabled, icon: _jsx(FileImageOutlined, {}), loading: imageUploading, onMouseDown: event => {
|
|
205
|
+
event.preventDefault();
|
|
206
|
+
imageInput.current?.click();
|
|
207
|
+
}, size: "small" }) }))] }), _jsx("input", { accept: INLINE_IMAGE_ACCEPT, onChange: event => {
|
|
208
|
+
const file = event.currentTarget.files?.[0];
|
|
209
|
+
event.currentTarget.value = '';
|
|
210
|
+
if (file)
|
|
211
|
+
void insertImage(file);
|
|
212
|
+
}, ref: imageInput, style: { display: 'none' }, type: "file" }), imageError && _jsx("div", { className: "oxa-rich-text-error", role: "alert", children: imageError }), _jsx("div", { "aria-label": "\u5BCC\u6587\u672C\u5185\u5BB9", className: "oxa-rich-text-editor", contentEditable: !disabled, onBlur: emit, onInput: emit, ref: editor, role: "textbox", suppressContentEditableWarning: true })] }));
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=RichTextField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RichTextField.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/RichTextField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DataFileRef, StableSignatureValue, UserReferenceValue } from 'openxiangda-contracts/browser';
|
|
2
|
+
export declare function SignatureValueDisplay({ value, resourceCode, }: {
|
|
3
|
+
value: StableSignatureValue;
|
|
4
|
+
resourceCode?: string;
|
|
5
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function SignatureField({ value, onChange, onUpload, signer, resourceCode, disabled, mobile, }: {
|
|
7
|
+
value?: StableSignatureValue;
|
|
8
|
+
onChange?: (value: StableSignatureValue | undefined) => void;
|
|
9
|
+
onUpload?: (file: File) => Promise<DataFileRef>;
|
|
10
|
+
signer?: UserReferenceValue;
|
|
11
|
+
resourceCode?: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
mobile?: boolean;
|
|
14
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=SignatureField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureField.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SignatureField.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,WAAW,EAEX,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AAqEvC,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,YAAY,GACb,EAAE;IACD,KAAK,EAAE,oBAAoB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,2CAYA;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,QAAgB,EAChB,MAAc,GACf,EAAE;IACD,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CA6LA"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ClearOutlined, DeleteOutlined, EditOutlined, } from '@ant-design/icons';
|
|
3
|
+
import { Alert, Button, Drawer, Image, Modal, Space, Spin, Typography, } from 'antd';
|
|
4
|
+
import { useCallback, useEffect, useRef, useState, } from 'react';
|
|
5
|
+
import { fetchDataFileBlob } from '../../platform-client';
|
|
6
|
+
const CANVAS_HEIGHT = 240;
|
|
7
|
+
async function sha256(blob) {
|
|
8
|
+
const digest = await crypto.subtle.digest('SHA-256', await blob.arrayBuffer());
|
|
9
|
+
return [...new Uint8Array(digest)]
|
|
10
|
+
.map(byte => byte.toString(16).padStart(2, '0'))
|
|
11
|
+
.join('');
|
|
12
|
+
}
|
|
13
|
+
function managedFile(file) {
|
|
14
|
+
return {
|
|
15
|
+
id: file.id,
|
|
16
|
+
name: file.name,
|
|
17
|
+
size: file.size,
|
|
18
|
+
contentType: file.contentType,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function SignatureImage({ value, resourceCode, }) {
|
|
22
|
+
const [source, setSource] = useState('');
|
|
23
|
+
const [loading, setLoading] = useState(Boolean(resourceCode));
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
let active = true;
|
|
26
|
+
let objectUrl = '';
|
|
27
|
+
if (!resourceCode)
|
|
28
|
+
return;
|
|
29
|
+
setLoading(true);
|
|
30
|
+
fetchDataFileBlob(resourceCode, value.file.id)
|
|
31
|
+
.then(blob => {
|
|
32
|
+
objectUrl = URL.createObjectURL(blob);
|
|
33
|
+
if (active)
|
|
34
|
+
setSource(objectUrl);
|
|
35
|
+
})
|
|
36
|
+
.catch(() => {
|
|
37
|
+
if (active)
|
|
38
|
+
setSource('');
|
|
39
|
+
})
|
|
40
|
+
.finally(() => {
|
|
41
|
+
if (active)
|
|
42
|
+
setLoading(false);
|
|
43
|
+
});
|
|
44
|
+
return () => {
|
|
45
|
+
active = false;
|
|
46
|
+
if (objectUrl)
|
|
47
|
+
URL.revokeObjectURL(objectUrl);
|
|
48
|
+
};
|
|
49
|
+
}, [resourceCode, value.file.id]);
|
|
50
|
+
if (loading)
|
|
51
|
+
return _jsx(Spin, { size: "small" });
|
|
52
|
+
return source ? (_jsx(Image, { alt: "\u4E1A\u52A1\u7B7E\u540D", className: "oxa-signature-image", preview: true, src: source })) : (_jsx(Typography.Text, { children: value.file.name }));
|
|
53
|
+
}
|
|
54
|
+
export function SignatureValueDisplay({ value, resourceCode, }) {
|
|
55
|
+
return (_jsxs("div", { className: "oxa-signature-value", children: [_jsx(SignatureImage, { resourceCode: resourceCode, value: value }), _jsxs(Typography.Text, { type: "secondary", children: [value.signer?.label || '业务签名', " \u00B7 ", new Date(value.signedAt).toLocaleString()] }), _jsxs(Typography.Text, { className: "oxa-signature-hash", type: "secondary", children: ["SHA-256 ", value.hash.slice(0, 16), "..."] })] }));
|
|
56
|
+
}
|
|
57
|
+
export function SignatureField({ value, onChange, onUpload, signer, resourceCode, disabled = false, mobile = false, }) {
|
|
58
|
+
const canvas = useRef(null);
|
|
59
|
+
const drawing = useRef(false);
|
|
60
|
+
const points = useRef([]);
|
|
61
|
+
const [open, setOpen] = useState(false);
|
|
62
|
+
const [drawn, setDrawn] = useState(false);
|
|
63
|
+
const [saving, setSaving] = useState(false);
|
|
64
|
+
const [error, setError] = useState('');
|
|
65
|
+
const prepare = useCallback(() => {
|
|
66
|
+
const element = canvas.current;
|
|
67
|
+
if (!element)
|
|
68
|
+
return;
|
|
69
|
+
const width = Math.max(1, element.getBoundingClientRect().width || 640);
|
|
70
|
+
const ratio = window.devicePixelRatio || 1;
|
|
71
|
+
element.width = Math.floor(width * ratio);
|
|
72
|
+
element.height = Math.floor(CANVAS_HEIGHT * ratio);
|
|
73
|
+
const context = element.getContext('2d');
|
|
74
|
+
if (!context)
|
|
75
|
+
return;
|
|
76
|
+
context.setTransform(ratio, 0, 0, ratio, 0, 0);
|
|
77
|
+
context.fillStyle = '#fff';
|
|
78
|
+
context.fillRect(0, 0, width, CANVAS_HEIGHT);
|
|
79
|
+
context.lineCap = 'round';
|
|
80
|
+
context.lineJoin = 'round';
|
|
81
|
+
context.lineWidth = mobile ? 3 : 2.4;
|
|
82
|
+
context.strokeStyle = '#111827';
|
|
83
|
+
}, [mobile]);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (!open)
|
|
86
|
+
return;
|
|
87
|
+
points.current = [];
|
|
88
|
+
setDrawn(false);
|
|
89
|
+
setError('');
|
|
90
|
+
requestAnimationFrame(() => requestAnimationFrame(prepare));
|
|
91
|
+
}, [open, prepare]);
|
|
92
|
+
const point = (event) => {
|
|
93
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
94
|
+
return {
|
|
95
|
+
x: event.clientX - rect.left,
|
|
96
|
+
y: event.clientY - rect.top,
|
|
97
|
+
t: Date.now(),
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
const clear = () => {
|
|
101
|
+
points.current = [];
|
|
102
|
+
setDrawn(false);
|
|
103
|
+
setError('');
|
|
104
|
+
prepare();
|
|
105
|
+
};
|
|
106
|
+
const save = async () => {
|
|
107
|
+
if (!canvas.current || !points.current.length) {
|
|
108
|
+
setError('请先完成签名');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (!onUpload) {
|
|
112
|
+
setError('当前签名字段未配置托管文件上传能力');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
setSaving(true);
|
|
116
|
+
setError('');
|
|
117
|
+
try {
|
|
118
|
+
const blob = await new Promise(resolve => canvas.current?.toBlob(resolve, 'image/png'));
|
|
119
|
+
if (!blob)
|
|
120
|
+
throw new Error('生成签名 PNG 失败');
|
|
121
|
+
const hash = await sha256(blob);
|
|
122
|
+
const file = new File([blob], `signature-${Date.now()}.png`, {
|
|
123
|
+
type: 'image/png',
|
|
124
|
+
});
|
|
125
|
+
const uploaded = await onUpload(file);
|
|
126
|
+
onChange?.({
|
|
127
|
+
file: managedFile(uploaded),
|
|
128
|
+
...(signer ? { signer } : {}),
|
|
129
|
+
signedAt: new Date().toISOString(),
|
|
130
|
+
points: points.current.slice(),
|
|
131
|
+
hash,
|
|
132
|
+
});
|
|
133
|
+
setOpen(false);
|
|
134
|
+
}
|
|
135
|
+
catch (reason) {
|
|
136
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
setSaving(false);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const canvasContent = (_jsxs("div", { className: "oxa-signature-pad", children: [_jsx("canvas", { "aria-label": "\u624B\u5199\u7B7E\u540D\u753B\u5E03", className: "oxa-signature-canvas", onPointerCancel: () => { drawing.current = false; }, onPointerDown: event => {
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
145
|
+
drawing.current = true;
|
|
146
|
+
const next = point(event);
|
|
147
|
+
points.current.push(next);
|
|
148
|
+
const context = event.currentTarget.getContext('2d');
|
|
149
|
+
if (context) {
|
|
150
|
+
context.beginPath();
|
|
151
|
+
context.arc(next.x, next.y, 1, 0, Math.PI * 2);
|
|
152
|
+
context.fillStyle = '#111827';
|
|
153
|
+
context.fill();
|
|
154
|
+
}
|
|
155
|
+
setDrawn(true);
|
|
156
|
+
}, onPointerMove: event => {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
if (!drawing.current)
|
|
159
|
+
return;
|
|
160
|
+
const previous = points.current[points.current.length - 1];
|
|
161
|
+
const next = point(event);
|
|
162
|
+
const context = event.currentTarget.getContext('2d');
|
|
163
|
+
if (context && previous) {
|
|
164
|
+
context.beginPath();
|
|
165
|
+
context.moveTo(previous.x, previous.y);
|
|
166
|
+
context.lineTo(next.x, next.y);
|
|
167
|
+
context.stroke();
|
|
168
|
+
}
|
|
169
|
+
points.current.push(next);
|
|
170
|
+
}, onPointerUp: event => {
|
|
171
|
+
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
172
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
173
|
+
}
|
|
174
|
+
drawing.current = false;
|
|
175
|
+
}, ref: canvas }), error && _jsx(Alert, { showIcon: true, title: error, type: "error" }), _jsx(Button, { disabled: saving, icon: _jsx(ClearOutlined, {}), onClick: clear, children: "\u6E05\u7A7A\u753B\u5E03" })] }));
|
|
176
|
+
const dialog = mobile ? (_jsx(Drawer, { destroyOnHidden: true, extra: _jsx(Button, { disabled: !drawn, loading: saving, onClick: () => void save(), type: "primary", children: "\u4FDD\u5B58\u7B7E\u540D" }), onClose: () => setOpen(false), open: open, placement: "bottom", size: "85vh", title: "\u624B\u5199\u7B7E\u540D", children: canvasContent })) : (_jsx(Modal, { destroyOnHidden: true, okButtonProps: { disabled: !drawn }, okText: "\u4FDD\u5B58\u7B7E\u540D", onCancel: () => setOpen(false), onOk: () => void save(), open: open, confirmLoading: saving, title: "\u624B\u5199\u7B7E\u540D", width: 720, children: canvasContent }));
|
|
177
|
+
return (_jsxs("div", { className: "oxa-signature-field", children: [value ? (_jsx(SignatureValueDisplay, { resourceCode: resourceCode, value: value })) : (_jsx(Typography.Text, { type: "secondary", children: "\u5C1A\u672A\u7B7E\u540D" })), !disabled && (_jsxs(Space, { children: [_jsx(Button, { icon: _jsx(EditOutlined, {}), onClick: () => setOpen(true), children: value ? '重新签名' : '开始签名' }), value && (_jsx(Button, { "aria-label": "\u6E05\u9664\u7B7E\u540D", icon: _jsx(DeleteOutlined, {}), onClick: () => onChange?.(undefined) }))] })), dialog] }));
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=SignatureField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureField.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SignatureField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type SurfaceField } from '../resource/SurfaceFields';
|
|
2
|
+
import type { SubtableDraftRow } from './subtable-value';
|
|
3
|
+
export interface SubtableFieldProps {
|
|
4
|
+
field: SurfaceField;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
mobile?: boolean;
|
|
7
|
+
operation: 'create' | 'update';
|
|
8
|
+
parentRecordId?: string;
|
|
9
|
+
value?: SubtableDraftRow[];
|
|
10
|
+
onChange?: (value: SubtableDraftRow[]) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, }: SubtableFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function SubtableValueDisplay({ field, parentRecordId, mobile, }: {
|
|
14
|
+
field: SurfaceField;
|
|
15
|
+
parentRecordId: string;
|
|
16
|
+
mobile?: boolean;
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=SubtableField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubtableField.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SubtableField.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAczD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,cAAc,EACd,KAAK,EACL,QAAQ,GACT,EAAE,kBAAkB,2CA6WpB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,cAAc,EACd,MAAM,GACP,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAUA"}
|