@nocobase/portal-template-default 1.0.9 → 1.0.10
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/.env.example +5 -0
- package/.github/workflows/publish.yml +106 -0
- package/.gitignore +33 -0
- package/AGENTS.md +19 -0
- package/README.MD +61 -180
- package/package.json +3 -5
- package/scripts/build-html.mjs +12 -0
- package/src/App.css +2 -0
- package/src/App.tsx +35 -186
- package/src/app/development.tsx +154 -0
- package/src/app/extension.ts +5 -0
- package/src/app/extensions.tsx +18 -4
- package/src/app/routes.tsx +65 -0
- package/src/components/access-control/acl-bootstrap.tsx +11 -3
- package/src/components/access-control/acl-gate.tsx +7 -6
- package/src/components/access-control/can-access.tsx +17 -0
- package/src/components/access-control/navigate-to-accessible-resource.tsx +8 -3
- package/src/components/app-shell/sidebar.tsx +21 -5
- package/src/components/auth/auto-redirect-provider.tsx +2 -1
- package/src/extensions/nocobase-acl/README.md +74 -0
- package/{registry → src/extensions}/nocobase-acl/components/acl-boundary.tsx +22 -25
- package/{registry → src/extensions}/nocobase-acl/components/role-switcher.tsx +26 -23
- package/src/extensions/nocobase-acl/demo/acl-preview-provider.tsx +81 -0
- package/{registry → src/extensions}/nocobase-acl/demo/boundary-api.tsx +58 -0
- package/{registry → src/extensions}/nocobase-acl/demo/index.tsx +243 -105
- package/{registry → src/extensions}/nocobase-acl/demo/prompt-generator.tsx +3 -1
- package/src/extensions/nocobase-acl/extension.tsx +73 -0
- package/{registry → src/extensions}/nocobase-ai/README.md +21 -5
- package/{registry → src/extensions}/nocobase-ai/components/chat/chat-composer.tsx +3 -1
- package/{registry → src/extensions}/nocobase-ai/components/chat/chat-messages.tsx +38 -3
- package/{registry → src/extensions}/nocobase-ai/components/chat/tool-call-card.tsx +1 -9
- package/{registry → src/extensions}/nocobase-ai/components/index.ts +5 -0
- package/src/extensions/nocobase-ai/components/surfaces/chat-dialog.tsx +17 -0
- package/src/extensions/nocobase-ai/components/surfaces/chat-side-panel.tsx +35 -0
- package/src/extensions/nocobase-ai/components/surfaces/chat-surface.tsx +108 -0
- package/{registry → src/extensions}/nocobase-ai/components/triggers/ai-chat-floating-trigger.tsx +2 -2
- package/{registry → src/extensions}/nocobase-ai/demo/configuration-gate.tsx +4 -1
- package/{registry → src/extensions}/nocobase-ai/demo/container-showcase.tsx +2 -2
- package/{registry → src/extensions}/nocobase-ai/demo/floating.tsx +45 -15
- package/{registry → src/extensions}/nocobase-ai/demo/index.tsx +116 -74
- package/{registry → src/extensions}/nocobase-ai/demo/prompt-generator.tsx +3 -3
- package/{registry → src/extensions}/nocobase-ai/demo/tool-cards.tsx +2 -3
- package/src/extensions/nocobase-ai/extension.tsx +160 -0
- package/{registry → src/extensions}/nocobase-ai/global-ai-chat.tsx +12 -28
- package/{registry → src/extensions}/nocobase-ai/providers/ai-provider.tsx +14 -1
- package/{registry → src/extensions}/nocobase-ai/providers/chat-context.tsx +1 -0
- package/{registry → src/extensions}/nocobase-ai/providers/chat-provider.tsx +29 -8
- package/{registry → src/extensions}/nocobase-ai/providers/use-chat-attachments.ts +6 -1
- package/{registry → src/extensions}/nocobase-ai/providers/use-chat-work-context.ts +4 -1
- package/{registry → src/extensions}/nocobase-route-surfaces/README.md +2 -1
- package/{registry → src/extensions}/nocobase-route-surfaces/demo/index.tsx +33 -7
- package/{registry → src/extensions}/nocobase-route-surfaces/demo/scenarios.ts +20 -14
- package/{registry → src/extensions}/nocobase-route-surfaces/extension.tsx +55 -52
- package/src/{pages/users → extensions/nocobase-users-example}/create.tsx +4 -4
- package/src/{pages/users → extensions/nocobase-users-example}/edit.tsx +5 -9
- package/src/extensions/nocobase-users-example/extension.tsx +109 -0
- package/src/{pages/users → extensions/nocobase-users-example}/form-context.ts +11 -9
- package/src/extensions/nocobase-users-example/layout.tsx +16 -0
- package/src/{pages/users → extensions/nocobase-users-example}/list.tsx +1 -1
- package/src/extensions/nocobase-users-example/locales/en-US.ts +77 -0
- package/src/extensions/nocobase-users-example/locales/index.ts +8 -0
- package/src/extensions/nocobase-users-example/locales/zh-CN.ts +73 -0
- package/src/extensions/nocobase-users-example/optional-ai.ts +67 -0
- package/src/{pages/users → extensions/nocobase-users-example}/role-detail.tsx +4 -15
- package/src/{pages/users → extensions/nocobase-users-example}/routes.ts +1 -4
- package/src/extensions/nocobase-users-example/show.tsx +266 -0
- package/src/lib/nocobase/acl/context.ts +32 -0
- package/src/lib/nocobase/acl/evaluator.ts +186 -0
- package/src/lib/nocobase/acl/hooks.ts +40 -0
- package/src/lib/nocobase/acl/index.ts +4 -1
- package/src/lib/nocobase/acl/menu.ts +6 -6
- package/src/lib/nocobase/acl/record-permissions.ts +37 -7
- package/src/lib/nocobase/acl/store-provider.tsx +14 -0
- package/src/lib/nocobase/acl/store.ts +92 -86
- package/src/lib/nocobase/acl/types.ts +52 -32
- package/src/lib/nocobase/auth-session.ts +128 -0
- package/src/lib/nocobase/client.ts +48 -50
- package/src/locales/en-US.ts +0 -78
- package/src/locales/index.ts +2 -7
- package/src/locales/zh-CN.ts +0 -74
- package/src/providers/access-control.ts +43 -8
- package/src/providers/auth-callback.ts +1 -0
- package/src/providers/auth.ts +24 -26
- package/src/providers/constants.ts +0 -4
- package/src/providers/data.ts +14 -26
- package/src/providers/runtime-config.ts +40 -0
- package/src/vite-env.d.ts +9 -0
- package/tests/auth-session-regression.mjs +101 -0
- package/tsconfig.json +2 -1
- package/vite.config.ts +9 -1
- package/dist/assets/CoordinateSystem-C8P-Cleg.js +0 -1
- package/dist/assets/LegendVisualProvider-Bdgkckq-.js +0 -1
- package/dist/assets/LineDraw-C0m1GONT.js +0 -1
- package/dist/assets/SymbolDraw-CCospe5G.js +0 -1
- package/dist/assets/VisualMapping-Cbv1v7Cd.js +0 -1
- package/dist/assets/ai-employee-shortcut-B253WWow.js +0 -1
- package/dist/assets/calendar-B3dXXyIv.js +0 -1
- package/dist/assets/chat-inline-xpQ9iq4p.js +0 -1
- package/dist/assets/chat-side-panel-layout-BVWsp5rr.js +0 -1
- package/dist/assets/components-ChhJaNRc.js +0 -20
- package/dist/assets/configuration-gate-Dwdq_lxf.js +0 -1
- package/dist/assets/createClipPathFromCoordSys-uEftn1Mq.js +0 -1
- package/dist/assets/createSeriesDataSimply-CI7l7Ufv.js +0 -1
- package/dist/assets/customGraphicKeyframeAnimation-DE3jSfMd.js +0 -3
- package/dist/assets/echarts-preview-C-cNUtJF.js +0 -1
- package/dist/assets/echarts-runtime-CEgJbv68.js +0 -58
- package/dist/assets/echarts-runtime-advanced-Buhm2BHz.js +0 -1
- package/dist/assets/echarts-runtime-common-DLAdBAIa.js +0 -1
- package/dist/assets/echarts-runtime-components-ypnyLkYx.js +0 -1
- package/dist/assets/echarts-runtime-hierarchy-ClStquCF.js +0 -1
- package/dist/assets/floating-BarTmn-b.js +0 -13
- package/dist/assets/index-BJIcYTdc.js +0 -53
- package/dist/assets/index-C6xNKxpg.js +0 -656
- package/dist/assets/index-D4JQi1TM.js +0 -54
- package/dist/assets/index-YA7-AUO8.css +0 -1
- package/dist/assets/index-g8zWVpP9.js +0 -23
- package/dist/assets/labelHelper-C137W5gU.js +0 -1
- package/dist/assets/nocobase-ai-chat-VTMaZFQB.svg +0 -50
- package/dist/assets/page-context-Cxx11gzg.js +0 -73
- package/dist/assets/prompt-card-BsYMW_rq.js +0 -1
- package/dist/assets/sectorHelper-Fqgz3uEk.js +0 -1
- package/dist/assets/shortcut-xtghDP63.js +0 -47
- package/dist/assets/static.browser-CfQQzERe.js +0 -30
- package/dist/assets/switch-DrxImI8F.js +0 -1
- package/dist/assets/tool-cards-BGfsY8JF.js +0 -41
- package/dist/favicon.ico +0 -0
- package/dist/index.html +0 -40
- package/dist/index.raw.html +0 -46
- package/dist/logo-dark.png +0 -0
- package/dist/logo-mark-dark.png +0 -0
- package/dist/logo-mark.png +0 -0
- package/dist/logo.png +0 -0
- package/registry/nocobase-acl/README.md +0 -19
- package/registry/nocobase-acl/extension.tsx +0 -71
- package/registry/nocobase-acl/tests/acl-regression.mjs +0 -314
- package/registry/nocobase-ai/components/surfaces/chat-dialog.tsx +0 -31
- package/registry/nocobase-ai/components/surfaces/chat-side-panel.tsx +0 -74
- package/registry/nocobase-ai/extension.tsx +0 -158
- package/registry/nocobase-ai/tests/business-report-regression.mjs +0 -70
- package/registry/nocobase-ai/tests/form-filler-regression.mjs +0 -129
- package/registry/nocobase-ai/tests/frontend-tool-regression.mjs +0 -128
- package/registry/nocobase-ai/tests/page-context-regression.mjs +0 -48
- package/registry/nocobase-ai/tests/stream-regression.mjs +0 -207
- package/registry/nocobase-auth-cas/README.md +0 -6
- package/registry/nocobase-auth-cas/cas-sign-in-button.tsx +0 -41
- package/registry/nocobase-auth-cas/demo.tsx +0 -20
- package/registry/nocobase-auth-cas/extension.tsx +0 -46
- package/registry/nocobase-auth-cas/index.ts +0 -1
- package/registry/nocobase-auth-cas/use-cas-sign-in.ts +0 -29
- package/registry/nocobase-auth-dingtalk/README.md +0 -7
- package/registry/nocobase-auth-dingtalk/auto-login-provider.tsx +0 -154
- package/registry/nocobase-auth-dingtalk/demo.tsx +0 -23
- package/registry/nocobase-auth-dingtalk/dingtalk-sign-in-button.tsx +0 -45
- package/registry/nocobase-auth-dingtalk/extension.tsx +0 -55
- package/registry/nocobase-auth-dingtalk/index.ts +0 -4
- package/registry/nocobase-auth-dingtalk/use-dingtalk-sign-in.ts +0 -64
- package/registry/nocobase-auth-ldap/README.md +0 -6
- package/registry/nocobase-auth-ldap/demo.tsx +0 -21
- package/registry/nocobase-auth-ldap/extension.tsx +0 -46
- package/registry/nocobase-auth-ldap/index.ts +0 -1
- package/registry/nocobase-auth-ldap/ldap-sign-in-form.tsx +0 -69
- package/registry/nocobase-auth-ldap/use-ldap-sign-in.ts +0 -5
- package/registry/nocobase-auth-oidc/README.md +0 -11
- package/registry/nocobase-auth-oidc/auto-redirect-provider.tsx +0 -13
- package/registry/nocobase-auth-oidc/demo.tsx +0 -20
- package/registry/nocobase-auth-oidc/extension.tsx +0 -51
- package/registry/nocobase-auth-oidc/index.ts +0 -1
- package/registry/nocobase-auth-oidc/oidc-sign-in-button.tsx +0 -44
- package/registry/nocobase-auth-oidc/use-oidc-sign-in.ts +0 -58
- package/registry/nocobase-auth-saml/README.md +0 -6
- package/registry/nocobase-auth-saml/auto-redirect-provider.tsx +0 -13
- package/registry/nocobase-auth-saml/demo.tsx +0 -20
- package/registry/nocobase-auth-saml/extension.tsx +0 -51
- package/registry/nocobase-auth-saml/index.ts +0 -1
- package/registry/nocobase-auth-saml/saml-sign-in-button.tsx +0 -43
- package/registry/nocobase-auth-saml/use-saml-sign-in.ts +0 -51
- package/registry/nocobase-auth-sms/README.md +0 -7
- package/registry/nocobase-auth-sms/demo.tsx +0 -25
- package/registry/nocobase-auth-sms/extension.tsx +0 -46
- package/registry/nocobase-auth-sms/index.ts +0 -1
- package/registry/nocobase-auth-sms/sms-sign-in-form.tsx +0 -107
- package/registry/nocobase-auth-sms/use-sms-sign-in.ts +0 -88
- package/registry/nocobase-auth-wecom/README.md +0 -6
- package/registry/nocobase-auth-wecom/auto-login-provider.tsx +0 -21
- package/registry/nocobase-auth-wecom/demo.tsx +0 -23
- package/registry/nocobase-auth-wecom/extension.tsx +0 -49
- package/registry/nocobase-auth-wecom/index.ts +0 -1
- package/registry/nocobase-auth-wecom/use-wecom-sign-in.ts +0 -62
- package/registry/nocobase-auth-wecom/wecom-sign-in-button.tsx +0 -70
- package/registry/nocobase-i18n/README.md +0 -44
- package/registry/nocobase-i18n/components/index.ts +0 -1
- package/registry/nocobase-i18n/components/language-switcher.tsx +0 -138
- package/registry/nocobase-i18n/demo/index.tsx +0 -209
- package/registry/nocobase-i18n/demo/prompt-generator.tsx +0 -132
- package/registry/nocobase-i18n/extension.tsx +0 -45
- package/registry/nocobase-i18n/index.ts +0 -7
- package/registry/nocobase-i18n/locales/en-US.ts +0 -39
- package/registry/nocobase-i18n/locales/index.ts +0 -8
- package/registry/nocobase-i18n/locales/zh-CN.ts +0 -35
- package/registry/nocobase-i18n/provider.tsx +0 -44
- package/registry/nocobase-i18n/server-resources.ts +0 -166
- package/registry/nocobase-i18n/tests/i18n-regression.mjs +0 -51
- package/registry.config.json +0 -302
- package/scripts/registry.mjs +0 -164
- package/src/components/access-control/resource-access-guard.tsx +0 -21
- package/src/components/access-control/use-acl-runtime.ts +0 -28
- package/src/lib/nocobase/acl/action.ts +0 -147
- package/src/pages/users/layout.tsx +0 -15
- package/src/pages/users/show.tsx +0 -278
- /package/{registry → src/extensions}/nocobase-acl/components/index.ts +0 -0
- /package/{registry → src/extensions}/nocobase-acl/components/role-options.ts +0 -0
- /package/{registry → src/extensions}/nocobase-acl/demo/components.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-acl/demo/lazy-route.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-acl/demo/role-switcher-prompt-generator.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-acl/demo/scenario-section.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-acl/index.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/adapters/react-hook-form.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/assets/nocobase-ai-chat.svg +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/ai-root-provider.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/ai-employee-avatar.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/chat-attachment.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/chat-compact.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/chat-empty-state.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/chat-header.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/chat-history-dialog.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/chat-message.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/chat-window.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/conversation-list.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/markdown-message.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/model-select-options.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/reasoning-panel.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/sub-agent-conversation.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/user-prompt-editor.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/chat/work-context-chip.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/page-elements/ai-form.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/page-elements/page-element-provider.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/surfaces/chat-inline.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/surfaces/chat-page.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/surfaces/chat-side-panel-layout.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/surfaces/chat-surface-actions.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/builtin-tool-renderers.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/business-report-dialog.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/business-report-renderer.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/business-report-utils.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/chart-renderer.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/echarts-preview.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/echarts-runtime-advanced.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/echarts-runtime-common.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/echarts-runtime-components.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/echarts-runtime-hierarchy.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/echarts-runtime.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/sub-agent-renderer.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/suggestions-renderer.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/tool-renderer-provider.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/tool-renderer-utils.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/tools/workflow-renderer.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/components/triggers/ai-employee-shortcut.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/demo/interaction-showcase.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/demo/page-context-prompt-generator.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/demo/page-context.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/demo/page-element-showcase.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/demo/prompt-card.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/demo/shortcut.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/index.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/avatars.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/chat-controller.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/chat-message-utils.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/chat-reducer.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/chat-task-utils.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/chat-transport.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/form-registry.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/frontend-tool-registry.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/index.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/model.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/page-context.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/stream-coalescer.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/stream-event-utils.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/stream-parser.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/sub-agent-stream.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/types.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/ui-message-stream.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/use-automatic-tool-approval.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/use-chat-message-actions.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/use-chat-runtime.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/use-conversation-catalog.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/providers/use-conversation-history.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/services/index.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/services/nocobase-ai-service.ts +0 -0
- /package/{registry → src/extensions}/nocobase-ai/services/types.ts +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/demo/lazy-route.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/demo/prompt-generator.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/index.ts +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/route-dialog.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/route-drawer.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/route-page.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/route-surface-context.ts +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/use-refine-unsaved-changes.tsx +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/use-route-surface-close.ts +0 -0
- /package/{registry → src/extensions}/nocobase-route-surfaces/use-route-surface-state.ts +0 -0
- /package/src/{pages/users → extensions/nocobase-users-example}/form-fields.tsx +0 -0
- /package/src/{pages/users → extensions/nocobase-users-example}/index.ts +0 -0
- /package/src/{pages/users → extensions/nocobase-users-example}/role-badges.tsx +0 -0
- /package/src/{pages/users → extensions/nocobase-users-example}/role-utils.ts +0 -0
- /package/src/{pages/users → extensions/nocobase-users-example}/types.ts +0 -0
|
@@ -1,15 +1,42 @@
|
|
|
1
1
|
import type { AccessControlProvider } from "@refinedev/core";
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
aclStore,
|
|
5
|
+
evaluateAccess,
|
|
6
|
+
getAclState,
|
|
6
7
|
loadAcl,
|
|
8
|
+
type AclAccessRequest,
|
|
9
|
+
type RoleConstraint,
|
|
7
10
|
} from "@/lib/nocobase/acl";
|
|
8
11
|
|
|
12
|
+
const toAclAccessRequest = ({
|
|
13
|
+
resource,
|
|
14
|
+
action,
|
|
15
|
+
params,
|
|
16
|
+
}: Parameters<AccessControlProvider["can"]>[0]): AclAccessRequest => ({
|
|
17
|
+
resource,
|
|
18
|
+
action,
|
|
19
|
+
id: params?.id,
|
|
20
|
+
field: typeof params?.field === "string" ? params.field : undefined,
|
|
21
|
+
dataSourceKey:
|
|
22
|
+
typeof params?.dataSourceKey === "string"
|
|
23
|
+
? params.dataSourceKey
|
|
24
|
+
: undefined,
|
|
25
|
+
roles: params?.roles as RoleConstraint | undefined,
|
|
26
|
+
meta: params?.meta as Record<string, unknown> | undefined,
|
|
27
|
+
resourceItem: params?.resource,
|
|
28
|
+
});
|
|
29
|
+
|
|
9
30
|
export const accessControlProvider: AccessControlProvider = {
|
|
10
|
-
can: async (
|
|
11
|
-
const
|
|
12
|
-
const can =
|
|
31
|
+
can: async (request) => {
|
|
32
|
+
const state = await loadAcl();
|
|
33
|
+
const can =
|
|
34
|
+
state.status === "ready" &&
|
|
35
|
+
evaluateAccess(
|
|
36
|
+
state.permissions,
|
|
37
|
+
toAclAccessRequest(request),
|
|
38
|
+
aclStore.recordPermissions.getPermission
|
|
39
|
+
);
|
|
13
40
|
|
|
14
41
|
return {
|
|
15
42
|
can,
|
|
@@ -29,6 +56,14 @@ export const accessControlProvider: AccessControlProvider = {
|
|
|
29
56
|
},
|
|
30
57
|
};
|
|
31
58
|
|
|
32
|
-
export const canAccessCurrentAcl = (
|
|
33
|
-
|
|
34
|
-
|
|
59
|
+
export const canAccessCurrentAcl = (request: AclAccessRequest) => {
|
|
60
|
+
const state = getAclState();
|
|
61
|
+
return (
|
|
62
|
+
state.status === "ready" &&
|
|
63
|
+
evaluateAccess(
|
|
64
|
+
state.permissions,
|
|
65
|
+
request,
|
|
66
|
+
aclStore.recordPermissions.getPermission
|
|
67
|
+
)
|
|
68
|
+
);
|
|
69
|
+
};
|
package/src/providers/auth.ts
CHANGED
|
@@ -30,7 +30,7 @@ type NocoBaseSignOutResponse = {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
type CurrentUserCache = {
|
|
33
|
-
|
|
33
|
+
sessionKey: string;
|
|
34
34
|
user: NocoBaseUser;
|
|
35
35
|
expiresAt: number;
|
|
36
36
|
};
|
|
@@ -51,10 +51,14 @@ const clearCurrentUserCache = () => {
|
|
|
51
51
|
|
|
52
52
|
const getCurrentUser = async (): Promise<NocoBaseUser> => {
|
|
53
53
|
const token = nocobaseClient.getToken();
|
|
54
|
-
|
|
54
|
+
const sessionKey = token ?? "cookie";
|
|
55
55
|
|
|
56
56
|
const cached = currentUserCache;
|
|
57
|
-
if (
|
|
57
|
+
if (
|
|
58
|
+
cached &&
|
|
59
|
+
cached.sessionKey === sessionKey &&
|
|
60
|
+
cached.expiresAt > Date.now()
|
|
61
|
+
) {
|
|
58
62
|
return cached.user;
|
|
59
63
|
}
|
|
60
64
|
|
|
@@ -63,10 +67,12 @@ const getCurrentUser = async (): Promise<NocoBaseUser> => {
|
|
|
63
67
|
currentUserRequest = (async () => {
|
|
64
68
|
const user = await nocobaseClient.action<NocoBaseUser>("auth", "check", {
|
|
65
69
|
token,
|
|
66
|
-
|
|
70
|
+
// A default authenticator header would override the server's
|
|
71
|
+
// authenticator cookie during a Cookie-only SSO session.
|
|
72
|
+
authenticator: token ? undefined : null,
|
|
67
73
|
});
|
|
68
74
|
currentUserCache = {
|
|
69
|
-
|
|
75
|
+
sessionKey: nocobaseClient.getToken() ?? "cookie",
|
|
70
76
|
user,
|
|
71
77
|
expiresAt: Date.now() + CURRENT_USER_CACHE_MS,
|
|
72
78
|
};
|
|
@@ -216,22 +222,18 @@ export const authProvider: AuthProvider = {
|
|
|
216
222
|
const token = nocobaseClient.getToken();
|
|
217
223
|
let redirect: string | undefined;
|
|
218
224
|
try {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
redirect = result?.redirect;
|
|
230
|
-
}
|
|
225
|
+
const result = await nocobaseClient.action<NocoBaseSignOutResponse>(
|
|
226
|
+
"auth",
|
|
227
|
+
"signOut",
|
|
228
|
+
{
|
|
229
|
+
method: "POST",
|
|
230
|
+
token,
|
|
231
|
+
authenticator: token ? undefined : null,
|
|
232
|
+
}
|
|
233
|
+
);
|
|
234
|
+
redirect = result?.redirect;
|
|
231
235
|
} finally {
|
|
232
|
-
nocobaseClient.
|
|
233
|
-
nocobaseClient.setAuthenticator(null);
|
|
234
|
-
nocobaseClient.setRole(null);
|
|
236
|
+
nocobaseClient.clearAuthentication();
|
|
235
237
|
clearCurrentUserCache();
|
|
236
238
|
clearAcl();
|
|
237
239
|
}
|
|
@@ -249,9 +251,7 @@ export const authProvider: AuthProvider = {
|
|
|
249
251
|
await getCurrentUser();
|
|
250
252
|
return { authenticated: true };
|
|
251
253
|
} catch {
|
|
252
|
-
nocobaseClient.
|
|
253
|
-
nocobaseClient.setAuthenticator(null);
|
|
254
|
-
nocobaseClient.setRole(null);
|
|
254
|
+
nocobaseClient.clearAuthentication();
|
|
255
255
|
clearCurrentUserCache();
|
|
256
256
|
clearAcl();
|
|
257
257
|
return { authenticated: false, redirectTo: "/login" };
|
|
@@ -291,9 +291,7 @@ export const authProvider: AuthProvider = {
|
|
|
291
291
|
(error as { status?: number; statusCode?: number }).statusCode;
|
|
292
292
|
|
|
293
293
|
if (status === 401) {
|
|
294
|
-
nocobaseClient.
|
|
295
|
-
nocobaseClient.setAuthenticator(null);
|
|
296
|
-
nocobaseClient.setRole(null);
|
|
294
|
+
nocobaseClient.clearAuthentication();
|
|
297
295
|
clearCurrentUserCache();
|
|
298
296
|
clearAcl();
|
|
299
297
|
return { logout: true, redirectTo: "/login" };
|
|
@@ -36,9 +36,5 @@ const toProxyRelativeUrl = (url: string, target?: string) => {
|
|
|
36
36
|
|
|
37
37
|
export const API_URL = toProxyRelativeUrl(rawApiUrl, proxyTarget);
|
|
38
38
|
export const API_ORIGIN = getDefaultProxyTarget(rawApiUrl);
|
|
39
|
-
export const NOCOBASE_TOKEN_KEY = "nocobase-auth-token";
|
|
40
|
-
export const NOCOBASE_AUTHENTICATOR_KEY = "nocobase-authenticator";
|
|
41
|
-
export const NOCOBASE_ROLE_KEY = "nocobase-auth-role";
|
|
42
|
-
export const NOCOBASE_LOCALE_KEY = "nocobase-locale";
|
|
43
39
|
export const NOCOBASE_AUTHENTICATOR =
|
|
44
40
|
import.meta.env.NOCOBASE_AUTHENTICATOR ?? "basic";
|
package/src/providers/data.ts
CHANGED
|
@@ -24,7 +24,6 @@ import type {
|
|
|
24
24
|
|
|
25
25
|
import { nocobaseClient } from "@/lib/nocobase/client";
|
|
26
26
|
import {
|
|
27
|
-
notifyRecordPermissionsChanged,
|
|
28
27
|
resolveAclDataSourceKey,
|
|
29
28
|
type ResourceAcl,
|
|
30
29
|
updateRecordPermissions,
|
|
@@ -122,9 +121,7 @@ const request = async <T>(
|
|
|
122
121
|
},
|
|
123
122
|
body: options.body,
|
|
124
123
|
token: options.meta?.token,
|
|
125
|
-
headers: dataSourceKey
|
|
126
|
-
? { "X-Data-Source": dataSourceKey }
|
|
127
|
-
: undefined,
|
|
124
|
+
headers: dataSourceKey ? { "X-Data-Source": dataSourceKey } : undefined,
|
|
128
125
|
unwrap: options.unwrapData === false ? "none" : "data",
|
|
129
126
|
});
|
|
130
127
|
};
|
|
@@ -200,9 +197,7 @@ export const dataProvider: DataProvider = {
|
|
|
200
197
|
? { rows: response.data, count: response.meta?.count }
|
|
201
198
|
: response.data ?? response;
|
|
202
199
|
const records = list.rows ?? [];
|
|
203
|
-
|
|
204
|
-
notifyRecordPermissionsChanged();
|
|
205
|
-
}
|
|
200
|
+
cacheAllowedActions({ resource, records, response, meta });
|
|
206
201
|
|
|
207
202
|
return {
|
|
208
203
|
data: records,
|
|
@@ -226,16 +221,12 @@ export const dataProvider: DataProvider = {
|
|
|
226
221
|
}
|
|
227
222
|
);
|
|
228
223
|
const data = getResponseData(response);
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
})
|
|
236
|
-
) {
|
|
237
|
-
notifyRecordPermissionsChanged();
|
|
238
|
-
}
|
|
224
|
+
cacheAllowedActions({
|
|
225
|
+
resource,
|
|
226
|
+
records: [data],
|
|
227
|
+
response: response as NocoBaseListResponse<TData>,
|
|
228
|
+
meta,
|
|
229
|
+
});
|
|
239
230
|
return {
|
|
240
231
|
data,
|
|
241
232
|
};
|
|
@@ -256,17 +247,14 @@ export const dataProvider: DataProvider = {
|
|
|
256
247
|
)
|
|
257
248
|
);
|
|
258
249
|
const data = responses.map(getResponseData);
|
|
259
|
-
let permissionsChanged = false;
|
|
260
250
|
responses.forEach((response, index) => {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
}) || permissionsChanged;
|
|
251
|
+
cacheAllowedActions({
|
|
252
|
+
resource,
|
|
253
|
+
records: [data[index]],
|
|
254
|
+
response: response as NocoBaseListResponse<TData>,
|
|
255
|
+
meta,
|
|
256
|
+
});
|
|
268
257
|
});
|
|
269
|
-
if (permissionsChanged) notifyRecordPermissionsChanged();
|
|
270
258
|
return { data };
|
|
271
259
|
},
|
|
272
260
|
|
|
@@ -17,3 +17,43 @@ export const getPortalBase = () =>
|
|
|
17
17
|
|
|
18
18
|
export const getRuntimeApiUrl = () =>
|
|
19
19
|
getWindowValue("NOCOBASE_API_URL") ?? import.meta.env.NOCOBASE_API_URL;
|
|
20
|
+
|
|
21
|
+
const getAppNameFromPortalBase = (base: string) =>
|
|
22
|
+
base.match(/\/x\/apps\/([^/]+)(?:\/|$)/)?.[1];
|
|
23
|
+
|
|
24
|
+
const getAppNameFromApiUrl = (apiUrl?: string) =>
|
|
25
|
+
apiUrl?.match(/\/api\/__app\/([^/?#]+)(?:[/?#]|$)/)?.[1];
|
|
26
|
+
|
|
27
|
+
export const resolveNocoBaseAppName = (portalBase: string, apiUrl?: string) =>
|
|
28
|
+
getAppNameFromPortalBase(portalBase) ??
|
|
29
|
+
getAppNameFromApiUrl(apiUrl) ??
|
|
30
|
+
"main";
|
|
31
|
+
|
|
32
|
+
export const getNocoBaseAppName = () =>
|
|
33
|
+
resolveNocoBaseAppName(getPortalBase(), getRuntimeApiUrl());
|
|
34
|
+
|
|
35
|
+
export const resolvePortalUrl = (path = "/") => {
|
|
36
|
+
if (typeof window === "undefined") return path;
|
|
37
|
+
if (/^[a-z][a-z\d+.-]*:/i.test(path)) return path;
|
|
38
|
+
|
|
39
|
+
const portalBase = getPortalBase();
|
|
40
|
+
const relativePath = path.replace(/^\/+/, "");
|
|
41
|
+
const portalUrl = new URL(
|
|
42
|
+
relativePath,
|
|
43
|
+
`${window.location.origin}${portalBase}`
|
|
44
|
+
);
|
|
45
|
+
const apiUrl = new URL(
|
|
46
|
+
getRuntimeApiUrl() || "/api",
|
|
47
|
+
window.location.origin
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
// Same-origin deployments should use a root-relative callback. Besides
|
|
51
|
+
// avoiding unnecessary origin coupling, this remains compatible with older
|
|
52
|
+
// SSO plugins that only accept NocoBase-local redirect paths. A standalone
|
|
53
|
+
// Portal dev server keeps the absolute URL so the callback can return to
|
|
54
|
+
// Vite instead of the deployed Portal route.
|
|
55
|
+
if (apiUrl.origin === portalUrl.origin) {
|
|
56
|
+
return `${portalUrl.pathname}${portalUrl.search}${portalUrl.hash}`;
|
|
57
|
+
}
|
|
58
|
+
return portalUrl.toString();
|
|
59
|
+
};
|
package/src/vite-env.d.ts
CHANGED
|
@@ -3,4 +3,13 @@
|
|
|
3
3
|
interface Window {
|
|
4
4
|
NOCOBASE_PORTAL_BASE?: string;
|
|
5
5
|
NOCOBASE_API_URL?: string;
|
|
6
|
+
__nocobase_api_client_storage_prefix__?: string;
|
|
7
|
+
__nocobase_api_client_storage_type__?: string;
|
|
8
|
+
__nocobase_api_client_share_token__?: boolean | string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface ImportMetaEnv {
|
|
12
|
+
readonly API_CLIENT_STORAGE_PREFIX?: string;
|
|
13
|
+
readonly API_CLIENT_STORAGE_TYPE?: string;
|
|
14
|
+
readonly API_CLIENT_SHARE_TOKEN?: string;
|
|
6
15
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { createServer } from "vite";
|
|
3
|
+
|
|
4
|
+
const server = await createServer({
|
|
5
|
+
appType: "custom",
|
|
6
|
+
logLevel: "silent",
|
|
7
|
+
server: { middlewareMode: true },
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const createStorage = () => {
|
|
11
|
+
const values = new Map();
|
|
12
|
+
return {
|
|
13
|
+
getItem: (key) => values.get(key) ?? null,
|
|
14
|
+
setItem: (key, value) => values.set(key, value),
|
|
15
|
+
removeItem: (key) => values.delete(key),
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const { AuthSession } = await server.ssrLoadModule(
|
|
21
|
+
"/src/lib/nocobase/auth-session.ts"
|
|
22
|
+
);
|
|
23
|
+
const { resolveNocoBaseAppName, resolvePortalUrl } = await server.ssrLoadModule(
|
|
24
|
+
"/src/providers/runtime-config.ts"
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
assert.equal(
|
|
28
|
+
resolveNocoBaseAppName(
|
|
29
|
+
"/nocobase/x/apps/crm/customer/",
|
|
30
|
+
"/nocobase/api/__app/crm"
|
|
31
|
+
),
|
|
32
|
+
"crm"
|
|
33
|
+
);
|
|
34
|
+
assert.equal(
|
|
35
|
+
resolveNocoBaseAppName("/x/customer/", "/api/__app/analytics"),
|
|
36
|
+
"analytics"
|
|
37
|
+
);
|
|
38
|
+
assert.equal(resolveNocoBaseAppName("/x/customer/", "/api"), "main");
|
|
39
|
+
|
|
40
|
+
const originalWindow = globalThis.window;
|
|
41
|
+
Object.defineProperty(globalThis, "window", {
|
|
42
|
+
configurable: true,
|
|
43
|
+
value: {
|
|
44
|
+
location: { origin: "http://localhost:14000" },
|
|
45
|
+
NOCOBASE_API_URL: "/api",
|
|
46
|
+
NOCOBASE_PORTAL_BASE: "/x/demo/",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
assert.equal(
|
|
50
|
+
resolvePortalUrl("/users?tab=active#list"),
|
|
51
|
+
"/x/demo/users?tab=active#list"
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
window.NOCOBASE_API_URL = "/api/__app/crm";
|
|
55
|
+
window.NOCOBASE_PORTAL_BASE = "/x/apps/crm/customer/";
|
|
56
|
+
assert.equal(
|
|
57
|
+
resolvePortalUrl("/users?tab=active#list"),
|
|
58
|
+
"/x/apps/crm/customer/users?tab=active#list"
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
window.NOCOBASE_API_URL = "http://127.0.0.1:13000/api";
|
|
62
|
+
window.NOCOBASE_PORTAL_BASE = "/x/demo/";
|
|
63
|
+
assert.equal(
|
|
64
|
+
resolvePortalUrl("/users?tab=active#list"),
|
|
65
|
+
"http://localhost:14000/x/demo/users?tab=active#list"
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
if (originalWindow === undefined) {
|
|
69
|
+
delete globalThis.window;
|
|
70
|
+
} else {
|
|
71
|
+
Object.defineProperty(globalThis, "window", {
|
|
72
|
+
configurable: true,
|
|
73
|
+
value: originalWindow,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const main = new AuthSession({ appName: "main", storage: createStorage() });
|
|
78
|
+
assert.equal(main.getStorageKey("token"), "NOCOBASE_TOKEN");
|
|
79
|
+
assert.equal(main.getStorageKey("auth"), "NOCOBASE_AUTH");
|
|
80
|
+
assert.equal(main.getStorageKey("role"), "NOCOBASE_ROLE");
|
|
81
|
+
|
|
82
|
+
const subApp = new AuthSession({
|
|
83
|
+
appName: "crm",
|
|
84
|
+
storage: createStorage(),
|
|
85
|
+
});
|
|
86
|
+
assert.equal(subApp.getStorageKey("token"), "NOCOBASE_CRM_TOKEN");
|
|
87
|
+
assert.equal(subApp.getStorageKey("auth"), "NOCOBASE_CRM_AUTH");
|
|
88
|
+
assert.equal(subApp.getStorageKey("role"), "NOCOBASE_CRM_ROLE");
|
|
89
|
+
|
|
90
|
+
const sharedToken = new AuthSession({
|
|
91
|
+
appName: "crm",
|
|
92
|
+
shareToken: true,
|
|
93
|
+
storage: createStorage(),
|
|
94
|
+
});
|
|
95
|
+
assert.equal(sharedToken.getStorageKey("token"), "NOCOBASE_TOKEN");
|
|
96
|
+
assert.equal(sharedToken.getStorageKey("auth"), "NOCOBASE_CRM_AUTH");
|
|
97
|
+
|
|
98
|
+
console.log("NocoBase authentication session regression tests passed");
|
|
99
|
+
} finally {
|
|
100
|
+
await server.close();
|
|
101
|
+
}
|
package/tsconfig.json
CHANGED
package/vite.config.ts
CHANGED
|
@@ -37,6 +37,9 @@ const defaultRuntimeConfig = `<!-- nocobase-runtime-config:start -->
|
|
|
37
37
|
<script>
|
|
38
38
|
window.NOCOBASE_PORTAL_BASE = "/";
|
|
39
39
|
window.NOCOBASE_API_URL = "/api";
|
|
40
|
+
window.__nocobase_api_client_storage_prefix__ = window.__nocobase_api_client_storage_prefix__ ?? "NOCOBASE_";
|
|
41
|
+
window.__nocobase_api_client_storage_type__ = window.__nocobase_api_client_storage_type__ ?? "localStorage";
|
|
42
|
+
window.__nocobase_api_client_share_token__ = window.__nocobase_api_client_share_token__ ?? false;
|
|
40
43
|
</script>
|
|
41
44
|
<!-- nocobase-runtime-config:end -->
|
|
42
45
|
`;
|
|
@@ -96,13 +99,18 @@ export default defineConfig(({ mode }) => {
|
|
|
96
99
|
: undefined;
|
|
97
100
|
|
|
98
101
|
const portalBase = normalizeBase(env.NOCOBASE_PORTAL_BASE);
|
|
102
|
+
const registrySourceRoot = path.resolve(__dirname, "./registry");
|
|
103
|
+
const extensionsRoot = fs.existsSync(registrySourceRoot)
|
|
104
|
+
? registrySourceRoot
|
|
105
|
+
: path.resolve(__dirname, "./src/extensions");
|
|
99
106
|
|
|
100
107
|
return {
|
|
101
108
|
base: portalBase,
|
|
102
|
-
envPrefix: ["VITE_", "NOCOBASE_"],
|
|
109
|
+
envPrefix: ["VITE_", "NOCOBASE_", "API_CLIENT_"],
|
|
103
110
|
plugins: [react(), tailwindcss(), copyRawIndexHtmlPlugin(portalBase)],
|
|
104
111
|
resolve: {
|
|
105
112
|
alias: {
|
|
113
|
+
"@/extensions": extensionsRoot,
|
|
106
114
|
"@": path.resolve(__dirname, "./src"),
|
|
107
115
|
},
|
|
108
116
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function i(e,t){return e.type===t}export{i};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function d(a){return{seriesType:a,reset:function(t,e){var n=e.findComponents({mainType:"legend"});if(!(!n||!n.length)){var i=t.getData();i.filterSelf(function(o){for(var u=i.getName(o),r=0;r<n.length;r++)if(!n[r].isSelected(u))return!1;return!0})}}}}var s=(function(){function a(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}return a.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},a.prototype.containName=function(t){var e=this._getRawData();return e.indexOfName(t)>=0},a.prototype.indexOfName=function(t){var e=this._getDataWithEncodedVisual();return e.indexOfName(t)},a.prototype.getItemVisual=function(t,e){var n=this._getDataWithEncodedVisual();return n.getItemVisual(t,e)},a})();export{s as L,d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as I,dw as k,W as N,a4 as G,dx as H,dy as fe,b8 as he,dz as me,bk as pe,f as C,k as ce,aD as ve,dA as W,dB as K,c_ as re,dC as de,D as ye,br as ge,aK as _e,be as oe,P as be,j as Te,y as Y,x as Se,u as ae,z as j,r as Me,bs as Le,H as Pe,t as we,ac as Ce,ad as Ae,bh as Oe,G as ie,ae as ne,af as se,a as Re,I as Ie}from"./echarts-runtime-CEgJbv68.js";var F=H,Be=(function(a){I(r,a);function r(e){var t=a.call(this)||this;return t.type="view",t.dimensions=["x","y"],t._roamTransformable=new k,t._rawTransformable=new k,t.name=e,t}return r.prototype.setBoundingRect=function(e,t,o,i){return this._rect=new N(e,t,o,i),this._rect},r.prototype.getBoundingRect=function(){return this._rect},r.prototype.setViewRect=function(e,t,o,i){this._transformTo(e,t,o,i),this._viewRect=new N(e,t,o,i)},r.prototype._transformTo=function(e,t,o,i){var n=this.getBoundingRect(),s=this._rawTransformable;s.transform=n.calculateTransform(new N(e,t,o,i));var l=s.parent;s.parent=null,s.decomposeTransform(),s.parent=l,this._updateTransform()},r.prototype.setCenter=function(e,t){e&&(this._center=[G(e[0],t.getWidth()),G(e[1],t.getHeight())],this._updateCenterAndZoom())},r.prototype.setZoom=function(e){e=e||1;var t=this.zoomLimit;t&&(t.max!=null&&(e=Math.min(t.max,e)),t.min!=null&&(e=Math.max(t.min,e))),this._zoom=e,this._updateCenterAndZoom()},r.prototype.getDefaultCenter=function(){var e=this.getBoundingRect(),t=e.x+e.width/2,o=e.y+e.height/2;return[t,o]},r.prototype.getCenter=function(){return this._center||this.getDefaultCenter()},r.prototype.getZoom=function(){return this._zoom||1},r.prototype.getRoamTransform=function(){return this._roamTransformable.getLocalTransform()},r.prototype._updateCenterAndZoom=function(){var e=this._rawTransformable.getLocalTransform(),t=this._roamTransformable,o=this.getDefaultCenter(),i=this.getCenter(),n=this.getZoom();i=H([],i,e),o=H([],o,e),t.originX=i[0],t.originY=i[1],t.x=o[0]-i[0],t.y=o[1]-i[1],t.scaleX=t.scaleY=n,this._updateTransform()},r.prototype._updateTransform=function(){var e=this._roamTransformable,t=this._rawTransformable;t.parent=e,e.updateTransform(),t.updateTransform(),fe(this.transform||(this.transform=[]),t.transform||he()),this._rawTransform=t.getLocalTransform(),this.invTransform=this.invTransform||[],me(this.invTransform,this.transform),this.decomposeTransform()},r.prototype.getTransformInfo=function(){var e=this._rawTransformable,t=this._roamTransformable,o=new k;return o.transform=t.transform,o.decomposeTransform(),{roam:{x:o.x,y:o.y,scaleX:o.scaleX,scaleY:o.scaleY},raw:{x:e.x,y:e.y,scaleX:e.scaleX,scaleY:e.scaleY}}},r.prototype.getViewRect=function(){return this._viewRect},r.prototype.getViewRectAfterRoam=function(){var e=this.getBoundingRect().clone();return e.applyTransform(this.transform),e},r.prototype.dataToPoint=function(e,t,o){var i=t?this._rawTransform:this.transform;return o=o||[],i?F(o,e,i):pe(o,e)},r.prototype.pointToData=function(e){var t=this.invTransform;return t?F([],e,t):[e[0],e[1]]},r.prototype.convertToPixel=function(e,t,o){var i=U(t);return i===this?i.dataToPoint(o):null},r.prototype.convertFromPixel=function(e,t,o){var i=U(t);return i===this?i.pointToData(o):null},r.prototype.containPoint=function(e){return this.getViewRectAfterRoam().contain(e[0],e[1])},r.dimensions=["x","y"],r})(k);function U(a){var r=a.seriesModel;return r?r.coordinateSystem:null}function D(a,r){return a.pointToProjected?a.pointToProjected(r):a.pointToData(r)}function ze(a,r,e,t){var o=a.getZoom(),i=a.getCenter(),n=r.zoom,s=a.projectedToPoint?a.projectedToPoint(i):a.dataToPoint(i);if(r.dx!=null&&r.dy!=null&&(s[0]-=r.dx,s[1]-=r.dy,a.setCenter(D(a,s),t)),n!=null){if(e){var l=e.min||0,u=e.max||1/0;n=Math.max(Math.min(o*n,u),l)/o}a.scaleX*=n,a.scaleY*=n;var f=(r.originX-a.x)*(n-1),m=(r.originY-a.y)*(n-1);a.x-=f,a.y-=m,a.updateTransform(),a.setCenter(D(a,s),t),a.setZoom(n*o)}return{center:a.getCenter(),zoom:a.getZoom()}}var xe=(function(a){I(r,a);function r(e){var t=a.call(this)||this;t._zr=e;var o=C(t._mousedownHandler,t),i=C(t._mousemoveHandler,t),n=C(t._mouseupHandler,t),s=C(t._mousewheelHandler,t),l=C(t._pinchHandler,t);return t.enable=function(u,f){this.disable(),this._opt=ce(ve(f)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),u==null&&(u=!0),(u===!0||u==="move"||u==="pan")&&(e.on("mousedown",o),e.on("mousemove",i),e.on("mouseup",n)),(u===!0||u==="scale"||u==="zoom")&&(e.on("mousewheel",s),e.on("pinch",l))},t.disable=function(){e.off("mousedown",o),e.off("mousemove",i),e.off("mouseup",n),e.off("mousewheel",s),e.off("pinch",l)},t}return r.prototype.isDragging=function(){return this._dragging},r.prototype.isPinching=function(){return this._pinching},r.prototype.setPointerChecker=function(e){this.pointerChecker=e},r.prototype.dispose=function(){this.disable()},r.prototype._mousedownHandler=function(e){if(!W(e)){for(var t=e.target;t;){if(t.draggable)return;t=t.__hostTarget||t.parent}var o=e.offsetX,i=e.offsetY;this.pointerChecker&&this.pointerChecker(e,o,i)&&(this._x=o,this._y=i,this._dragging=!0)}},r.prototype._mousemoveHandler=function(e){if(!(!this._dragging||!E("moveOnMouseMove",e,this._opt)||e.gestureEvent==="pinch"||K(this._zr,"globalPan"))){var t=e.offsetX,o=e.offsetY,i=this._x,n=this._y,s=t-i,l=o-n;this._x=t,this._y=o,this._opt.preventDefaultMouseMove&&re(e.event),le(this,"pan","moveOnMouseMove",e,{dx:s,dy:l,oldX:i,oldY:n,newX:t,newY:o,isAvailableBehavior:null})}},r.prototype._mouseupHandler=function(e){W(e)||(this._dragging=!1)},r.prototype._mousewheelHandler=function(e){var t=E("zoomOnMouseWheel",e,this._opt),o=E("moveOnMouseWheel",e,this._opt),i=e.wheelDelta,n=Math.abs(i),s=e.offsetX,l=e.offsetY;if(!(i===0||!t&&!o)){if(t){var u=n>3?1.4:n>1?1.2:1.1,f=i>0?u:1/u;X(this,"zoom","zoomOnMouseWheel",e,{scale:f,originX:s,originY:l,isAvailableBehavior:null})}if(o){var m=Math.abs(i),h=(i>0?1:-1)*(m>3?.4:m>1?.15:.05);X(this,"scrollMove","moveOnMouseWheel",e,{scrollDelta:h,originX:s,originY:l,isAvailableBehavior:null})}}},r.prototype._pinchHandler=function(e){if(!K(this._zr,"globalPan")){var t=e.pinchScale>1?1.1:1/1.1;X(this,"zoom",null,e,{scale:t,originX:e.pinchX,originY:e.pinchY,isAvailableBehavior:null})}},r})(de);function X(a,r,e,t,o){a.pointerChecker&&a.pointerChecker(t,o.originX,o.originY)&&(re(t.event),le(a,r,e,t,o))}function le(a,r,e,t,o){o.isAvailableBehavior=C(E,null,e,t),a.trigger(r,o)}function E(a,r,e){var t=e[a];return!a||t&&(!ye(t)||r.event[t+"Key"])}function Ve(a,r,e){var t=a.target;t.x+=r,t.y+=e,t.dirty()}function He(a,r,e,t){var o=a.target,i=a.zoomLimit,n=a.zoom=a.zoom||1;if(n*=r,i){var s=i.min||0,l=i.max||1/0;n=Math.max(Math.min(l,n),s)}var u=n/a.zoom;a.zoom=n,o.x-=(e-o.x)*(u-1),o.y-=(t-o.y)*(u-1),o.scaleX*=u,o.scaleY*=u,o.dirty()}var $=ge.prototype,B=_e.prototype,ue=(function(){function a(){this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.percent=1}return a})();(function(a){I(r,a);function r(){return a!==null&&a.apply(this,arguments)||this}return r})(ue);function z(a){return isNaN(+a.cpx1)||isNaN(+a.cpy1)}var ke=(function(a){I(r,a);function r(e){var t=a.call(this,e)||this;return t.type="ec-line",t}return r.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},r.prototype.getDefaultShape=function(){return new ue},r.prototype.buildPath=function(e,t){z(t)?$.buildPath.call(this,e,t):B.buildPath.call(this,e,t)},r.prototype.pointAt=function(e){return z(this.shape)?$.pointAt.call(this,e):B.pointAt.call(this,e)},r.prototype.tangentAt=function(e){var t=this.shape,o=z(t)?[t.x2-t.x1,t.y2-t.y1]:B.tangentAt.call(this,e);return oe(o,o)},r})(be),x=["fromSymbol","toSymbol"];function q(a){return"_"+a+"Type"}function J(a,r,e){var t=r.getItemVisual(e,a);if(!t||t==="none")return t;var o=r.getItemVisual(e,a+"Size"),i=r.getItemVisual(e,a+"Rotate"),n=r.getItemVisual(e,a+"Offset"),s=r.getItemVisual(e,a+"KeepAspect"),l=ne(o),u=se(n||0,l);return t+l+u+(i||"")+(s||"")}function Q(a,r,e){var t=r.getItemVisual(e,a);if(!(!t||t==="none")){var o=r.getItemVisual(e,a+"Size"),i=r.getItemVisual(e,a+"Rotate"),n=r.getItemVisual(e,a+"Offset"),s=r.getItemVisual(e,a+"KeepAspect"),l=ne(o),u=se(n||0,l),f=Re(t,-l[0]/2+u[0],-l[1]/2+u[1],l[0],l[1],null,s);return f.__specifiedRotation=i==null||isNaN(i)?void 0:+i*Math.PI/180||0,f.name=a,f}}function Ee(a){var r=new ke({name:"line",subPixelOptimize:!0});return Z(r.shape,a),r}function Z(a,r){a.x1=r[0][0],a.y1=r[0][1],a.x2=r[1][0],a.y2=r[1][1],a.percent=1;var e=r[2];e?(a.cpx1=e[0],a.cpy1=e[1]):(a.cpx1=NaN,a.cpy1=NaN)}var Ne=(function(a){I(r,a);function r(e,t,o){var i=a.call(this)||this;return i._createLine(e,t,o),i}return r.prototype._createLine=function(e,t,o){var i=e.hostModel,n=e.getItemLayout(t),s=Ee(n);s.shape.percent=0,Te(s,{shape:{percent:1}},i,t),this.add(s),Y(x,function(l){var u=Q(l,e,t);this.add(u),this[q(l)]=J(l,e,t)},this),this._updateCommonStl(e,t,o)},r.prototype.updateData=function(e,t,o){var i=e.hostModel,n=this.childOfName("line"),s=e.getItemLayout(t),l={shape:{}};Z(l.shape,s),Se(n,l,i,t),Y(x,function(u){var f=J(u,e,t),m=q(u);if(this[m]!==f){this.remove(this.childOfName(u));var h=Q(u,e,t);this.add(h)}this[m]=f},this),this._updateCommonStl(e,t,o)},r.prototype.getLinePath=function(){return this.childAt(0)},r.prototype._updateCommonStl=function(e,t,o){var i=e.hostModel,n=this.childOfName("line"),s=o&&o.emphasisLineStyle,l=o&&o.blurLineStyle,u=o&&o.selectLineStyle,f=o&&o.labelStatesModels,m=o&&o.emphasisDisabled,h=o&&o.focus,A=o&&o.blurScope;if(!o||e.hasItemOption){var v=e.getItemModel(t),d=v.getModel("emphasis");s=d.getModel("lineStyle").getLineStyle(),l=v.getModel(["blur","lineStyle"]).getLineStyle(),u=v.getModel(["select","lineStyle"]).getLineStyle(),m=d.get("disabled"),h=d.get("focus"),A=d.get("blurScope"),f=ae(v)}var S=e.getItemVisual(t,"style"),b=S.stroke;n.useStyle(S),n.style.fill=null,n.style.strokeNoScale=!0,n.ensureState("emphasis").style=s,n.ensureState("blur").style=l,n.ensureState("select").style=u,Y(x,function(P){var p=this.childOfName(P);if(p){p.setColor(b),p.style.opacity=S.opacity;for(var M=0;M<j.length;M++){var c=j[M],w=n.getState(c);if(w){var L=w.style||{},O=p.ensureState(c),R=O.style||(O.style={});L.stroke!=null&&(R[p.__isEmptyBrush?"stroke":"fill"]=L.stroke),L.opacity!=null&&(R.opacity=L.opacity)}}p.markRedraw()}},this);var T=i.getRawValue(t);Me(this,f,{labelDataIndex:t,labelFetcher:{getFormattedLabel:function(P,p){return i.getFormattedLabel(P,p,e.dataType)}},inheritColor:b||"#000",defaultOpacity:S.opacity,defaultText:(T==null?e.getName(t):isFinite(T)?Le(T):T)+""});var g=this.getTextContent();if(g){var _=f.normal;g.__align=g.style.align,g.__verticalAlign=g.style.verticalAlign,g.__position=_.get("position")||"middle";var y=_.get("distance");Pe(y)||(y=[y,y]),g.__labelDistance=y}this.setTextConfig({position:null,local:!0,inside:!1}),we(this,h,A,m)},r.prototype.highlight=function(){Ce(this)},r.prototype.downplay=function(){Ae(this)},r.prototype.updateLayout=function(e,t){this.setLinePoints(e.getItemLayout(t))},r.prototype.setLinePoints=function(e){var t=this.childOfName("line");Z(t.shape,e),t.dirty()},r.prototype.beforeUpdate=function(){var e=this,t=e.childOfName("fromSymbol"),o=e.childOfName("toSymbol"),i=e.getTextContent();if(!t&&!o&&(!i||i.ignore))return;for(var n=1,s=this.parent;s;)s.scaleX&&(n/=s.scaleX),s=s.parent;var l=e.childOfName("line");if(!this.__dirty&&!l.__dirty)return;var u=l.shape.percent,f=l.pointAt(0),m=l.pointAt(u),h=Oe([],m,f);oe(h,h);function A(w,L){var O=w.__specifiedRotation;if(O==null){var R=l.tangentAt(L);w.attr("rotation",(L===1?-1:1)*Math.PI/2-Math.atan2(R[1],R[0]))}else w.attr("rotation",O)}if(t&&(t.setPosition(f),A(t,0),t.scaleX=t.scaleY=n*u,t.markRedraw()),o&&(o.setPosition(m),A(o,1),o.scaleX=o.scaleY=n*u,o.markRedraw()),i&&!i.ignore){i.x=i.y=0,i.originX=i.originY=0;var v=void 0,d=void 0,S=i.__labelDistance,b=S[0]*n,T=S[1]*n,g=u/2,_=l.tangentAt(g),y=[_[1],-_[0]],P=l.pointAt(g);y[1]>0&&(y[0]=-y[0],y[1]=-y[1]);var p=_[0]<0?-1:1;if(i.__position!=="start"&&i.__position!=="end"){var M=-Math.atan2(_[1],_[0]);m[0]<f[0]&&(M=Math.PI+M),i.rotation=M}var c=void 0;switch(i.__position){case"insideStartTop":case"insideMiddleTop":case"insideEndTop":case"middle":c=-T,d="bottom";break;case"insideStartBottom":case"insideMiddleBottom":case"insideEndBottom":c=T,d="top";break;default:c=0,d="middle"}switch(i.__position){case"end":i.x=h[0]*b+m[0],i.y=h[1]*T+m[1],v=h[0]>.8?"left":h[0]<-.8?"right":"center",d=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";break;case"start":i.x=-h[0]*b+f[0],i.y=-h[1]*T+f[1],v=h[0]>.8?"right":h[0]<-.8?"left":"center",d=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=b*p+f[0],i.y=f[1]+c,v=_[0]<0?"right":"left",i.originX=-b*p,i.originY=-c;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=P[0],i.y=P[1]+c,v="center",i.originY=-c;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-b*p+m[0],i.y=m[1]+c,v=_[0]>=0?"right":"left",i.originX=b*p,i.originY=-c;break}i.scaleX=i.scaleY=n,i.setStyle({verticalAlign:i.__verticalAlign||d,align:i.__align||v})}},r})(ie),Ze=(function(){function a(r){this.group=new ie,this._LineCtor=r||Ne}return a.prototype.updateData=function(r){var e=this;this._progressiveEls=null;var t=this,o=t.group,i=t._lineData;t._lineData=r,i||o.removeAll();var n=ee(r);r.diff(i).add(function(s){e._doAdd(r,s,n)}).update(function(s,l){e._doUpdate(i,r,l,s,n)}).remove(function(s){o.remove(i.getItemGraphicEl(s))}).execute()},a.prototype.updateLayout=function(){var r=this._lineData;r&&r.eachItemGraphicEl(function(e,t){e.updateLayout(r,t)},this)},a.prototype.incrementalPrepareUpdate=function(r){this._seriesScope=ee(r),this._lineData=null,this.group.removeAll()},a.prototype.incrementalUpdate=function(r,e){this._progressiveEls=[];function t(s){!s.isGroup&&!Ye(s)&&(s.incremental=!0,s.ensureState("emphasis").hoverLayer=!0)}for(var o=r.start;o<r.end;o++){var i=e.getItemLayout(o);if(V(i)){var n=new this._LineCtor(e,o,this._seriesScope);n.traverse(t),this.group.add(n),e.setItemGraphicEl(o,n),this._progressiveEls.push(n)}}},a.prototype.remove=function(){this.group.removeAll()},a.prototype.eachRendered=function(r){Ie(this._progressiveEls||this.group,r)},a.prototype._doAdd=function(r,e,t){var o=r.getItemLayout(e);if(V(o)){var i=new this._LineCtor(r,e,t);r.setItemGraphicEl(e,i),this.group.add(i)}},a.prototype._doUpdate=function(r,e,t,o,i){var n=r.getItemGraphicEl(t);if(!V(e.getItemLayout(o))){this.group.remove(n);return}n?n.updateData(e,o,i):n=new this._LineCtor(e,o,i),e.setItemGraphicEl(o,n),this.group.add(n)},a})();function Ye(a){return a.animators&&a.animators.length>0}function ee(a){var r=a.hostModel,e=r.getModel("emphasis");return{lineStyle:r.getModel("lineStyle").getLineStyle(),emphasisLineStyle:e.getModel(["lineStyle"]).getLineStyle(),blurLineStyle:r.getModel(["blur","lineStyle"]).getLineStyle(),selectLineStyle:r.getModel(["select","lineStyle"]).getLineStyle(),emphasisDisabled:e.get("disabled"),blurScope:e.get("blurScope"),focus:e.get("focus"),labelStatesModels:ae(r)}}function te(a){return isNaN(a[0])||isNaN(a[1])}function V(a){return a&&!te(a[0])&&!te(a[1])}export{Ze as L,xe as R,Be as V,He as a,ze as b,Ne as c,Ve as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as U,a as Z,ac as j,ad as k,x as G,J as F,j as H,u as N,af as B,al as J,N as C,r as K,t as $,l as q,ah as T,ae as Q,G as X,I as W,a9 as x}from"./echarts-runtime-CEgJbv68.js";import{a as ee}from"./labelHelper-C137W5gU.js";var te=(function(n){U(t,n);function t(e,l,i,a){var m=n.call(this)||this;return m.updateData(e,l,i,a),m}return t.prototype._createSymbol=function(e,l,i,a,m){this.removeAll();var s=Z(e,-1,-1,2,2,null,m);s.attr({z2:100,culling:!0,scaleX:a[0]/2,scaleY:a[1]/2}),s.drift=le,this._symbolType=e,this.add(s)},t.prototype.stopSymbolAnimation=function(e){this.childAt(0).stopAnimation(null,e)},t.prototype.getSymbolType=function(){return this._symbolType},t.prototype.getSymbolPath=function(){return this.childAt(0)},t.prototype.highlight=function(){j(this.childAt(0))},t.prototype.downplay=function(){k(this.childAt(0))},t.prototype.setZ=function(e,l){var i=this.childAt(0);i.zlevel=e,i.z=l},t.prototype.setDraggable=function(e,l){var i=this.childAt(0);i.draggable=e,i.cursor=!l&&e?"move":i.cursor},t.prototype.updateData=function(e,l,i,a){this.silent=!1;var m=e.getItemVisual(l,"symbol")||"circle",s=e.hostModel,c=t.getSymbolSize(e,l),h=m!==this._symbolType,y=a&&a.disableAnimation;if(h){var u=e.getItemVisual(l,"symbolKeepAspect");this._createSymbol(m,e,l,c,u)}else{var o=this.childAt(0);o.silent=!1;var r={scaleX:c[0]/2,scaleY:c[1]/2};y?o.attr(r):G(o,r,s,l),F(o)}if(this._updateCommon(e,l,c,i,a),h){var o=this.childAt(0);if(!y){var r={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:o.style.opacity}};o.scaleX=o.scaleY=0,o.style.opacity=0,H(o,r,s,l)}}y&&this.childAt(0).stopAnimation("leave")},t.prototype._updateCommon=function(e,l,i,a,m){var s=this.childAt(0),c=e.hostModel,h,y,u,o,r,f,b,v,p;if(a&&(h=a.emphasisItemStyle,y=a.blurItemStyle,u=a.selectItemStyle,o=a.focus,r=a.blurScope,b=a.labelStatesModels,v=a.hoverScale,p=a.cursorStyle,f=a.emphasisDisabled),!a||e.hasItemOption){var g=a&&a.itemModel?a.itemModel:e.getItemModel(l),S=g.getModel("emphasis");h=S.getModel("itemStyle").getItemStyle(),u=g.getModel(["select","itemStyle"]).getItemStyle(),y=g.getModel(["blur","itemStyle"]).getItemStyle(),o=S.get("focus"),r=S.get("blurScope"),f=S.get("disabled"),b=N(g),v=S.getShallow("scale"),p=g.getShallow("cursor")}var V=e.getItemVisual(l,"symbolRotate");s.attr("rotation",(V||0)*Math.PI/180||0);var _=B(e.getItemVisual(l,"symbolOffset"),i);_&&(s.x=_[0],s.y=_[1]),p&&s.attr("cursor",p);var d=e.getItemVisual(l,"style"),E=d.fill;if(s instanceof J){var I=s.style;s.useStyle(C({image:I.image,x:I.x,y:I.y,width:I.width,height:I.height},d))}else s.__isEmptyBrush?s.useStyle(C({},d)):s.useStyle(d),s.style.decal=null,s.setColor(E,m&&m.symbolInnerColor),s.style.strokeNoScale=!0;var D=e.getItemVisual(l,"liftZ"),A=this._z2;D!=null?A==null&&(this._z2=s.z2,s.z2+=D):A!=null&&(s.z2=A,this._z2=null);var w=m&&m.useNameLabel;K(s,b,{labelFetcher:c,labelDataIndex:l,defaultText:R,inheritColor:E,defaultOpacity:d.opacity});function R(P){return w?e.getName(P):ee(e,P)}this._sizeX=i[0]/2,this._sizeY=i[1]/2;var z=s.ensureState("emphasis");z.style=h,s.ensureState("select").style=u,s.ensureState("blur").style=y;var O=v==null||v===!0?Math.max(1.1,3/this._sizeY):isFinite(v)&&v>0?+v:1;z.scaleX=this._sizeX*O,z.scaleY=this._sizeY*O,this.setSymbolScale(1),$(this,o,r,f)},t.prototype.setSymbolScale=function(e){this.scaleX=this.scaleY=e},t.prototype.fadeOut=function(e,l,i){var a=this.childAt(0),m=q(this).dataIndex,s=i&&i.animation;if(this.silent=a.silent=!0,i&&i.fadeLabel){var c=a.getTextContent();c&&T(c,{style:{opacity:0}},l,{dataIndex:m,removeOpt:s,cb:function(){a.removeTextContent()}})}else a.removeTextContent();T(a,{style:{opacity:0},scaleX:0,scaleY:0},l,{dataIndex:m,cb:e,removeOpt:s})},t.getSymbolSize=function(e,l){return Q(e.getItemVisual(l,"symbolSize"))},t})(X);function le(n,t){this.parent.drift(n,t)}function M(n,t,e,l){return t&&!isNaN(t[0])&&!isNaN(t[1])&&!(l.isIgnore&&l.isIgnore(e))&&!(l.clipShape&&!l.clipShape.contain(t[0],t[1]))&&n.getItemVisual(e,"symbol")!=="none"}function L(n){return n!=null&&!x(n)&&(n={isIgnore:n}),n||{}}function Y(n){var t=n.hostModel,e=t.getModel("emphasis");return{emphasisItemStyle:e.getModel("itemStyle").getItemStyle(),blurItemStyle:t.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:t.getModel(["select","itemStyle"]).getItemStyle(),focus:e.get("focus"),blurScope:e.get("blurScope"),emphasisDisabled:e.get("disabled"),hoverScale:e.get("scale"),labelStatesModels:N(t),cursorStyle:t.get("cursor")}}var ie=(function(){function n(t){this.group=new X,this._SymbolCtor=t||te}return n.prototype.updateData=function(t,e){this._progressiveEls=null,e=L(e);var l=this.group,i=t.hostModel,a=this._data,m=this._SymbolCtor,s=e.disableAnimation,c=Y(t),h={disableAnimation:s},y=e.getSymbolPoint||function(u){return t.getItemLayout(u)};a||l.removeAll(),t.diff(a).add(function(u){var o=y(u);if(M(t,o,u,e)){var r=new m(t,u,c,h);r.setPosition(o),t.setItemGraphicEl(u,r),l.add(r)}}).update(function(u,o){var r=a.getItemGraphicEl(o),f=y(u);if(!M(t,f,u,e)){l.remove(r);return}var b=t.getItemVisual(u,"symbol")||"circle",v=r&&r.getSymbolType&&r.getSymbolType();if(!r||v&&v!==b)l.remove(r),r=new m(t,u,c,h),r.setPosition(f);else{r.updateData(t,u,c,h);var p={x:f[0],y:f[1]};s?r.attr(p):G(r,p,i)}l.add(r),t.setItemGraphicEl(u,r)}).remove(function(u){var o=a.getItemGraphicEl(u);o&&o.fadeOut(function(){l.remove(o)},i)}).execute(),this._getSymbolPoint=y,this._data=t},n.prototype.updateLayout=function(){var t=this,e=this._data;e&&e.eachItemGraphicEl(function(l,i){var a=t._getSymbolPoint(i);l.setPosition(a),l.markRedraw()})},n.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=Y(t),this._data=null,this.group.removeAll()},n.prototype.incrementalUpdate=function(t,e,l){this._progressiveEls=[],l=L(l);function i(c){c.isGroup||(c.incremental=!0,c.ensureState("emphasis").hoverLayer=!0)}for(var a=t.start;a<t.end;a++){var m=e.getItemLayout(a);if(M(e,m,a,l)){var s=new this._SymbolCtor(e,a,this._seriesScope);s.traverse(i),s.setPosition(m),this.group.add(s),e.setItemGraphicEl(a,s),this._progressiveEls.push(s)}}},n.prototype.eachRendered=function(t){W(this._progressiveEls||this.group,t)},n.prototype.remove=function(t){var e=this.group,l=this._data;l&&t?l.eachItemGraphicEl(function(i){i.fadeOut(function(){e.remove(i)},l.hostModel)}):e.removeAll()},n})();export{ie as S,te as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as j,m as S,k as $,bB as te,aD as se,D as O,o as he,aR as de,a1 as ve,c0 as ge,d4 as me,b$ as ye,b_ as xe,y as v,H as P,ai as Ve,c8 as Ae,ao as we,aC as Me,c7 as re,cc as be,c1 as Ie,a4 as G,cF as ie,d5 as Se,b as Te,aS as Le,aM as _e,as as D,a9 as H,d6 as Ce,f as ne,aN as Ne,d7 as X,d8 as Y,ba as ze,b9 as J}from"./echarts-runtime-CEgJbv68.js";var C=me.value;function R(r,e){return $({show:e},r)}var Pe=(function(r){j(e,r);function e(){var a=r!==null&&r.apply(this,arguments)||this;return a.type=e.type,a}return e.prototype.optionUpdated=function(){var a=this.get("boundaryGap"),t=this.get("splitNumber"),i=this.get("scale"),n=this.get("axisLine"),o=this.get("axisTick"),s=this.get("axisLabel"),u=this.get("axisName"),f=this.get(["axisName","show"]),l=this.get(["axisName","formatter"]),h=this.get("axisNameGap"),m=this.get("triggerEvent"),A=S(this.get("indicator")||[],function(c){c.max!=null&&c.max>0&&!c.min?c.min=0:c.min!=null&&c.min<0&&!c.max&&(c.max=0);var g=u;c.color!=null&&(g=$({color:c.color},u));var d=te(se(c),{boundaryGap:a,splitNumber:t,scale:i,axisLine:n,axisTick:o,axisLabel:s,name:c.text,showName:f,nameLocation:"end",nameGap:h,nameTextStyle:g,triggerEvent:m},!1);if(O(l)){var x=d.name;d.name=l.replace("{value}",x??"")}else he(l)&&(d.name=l(d.name,d));var y=new de(d,null,this.ecModel);return ve(y,ge.prototype),y.mainType="radar",y.componentIndex=this.componentIndex,y},this);this._indicatorModels=A},e.prototype.getIndicatorModels=function(){return this._indicatorModels},e.type="radar",e.defaultOption={z:0,center:["50%","50%"],radius:"75%",startAngle:90,axisName:{show:!0},boundaryGap:[0,0],splitNumber:5,axisNameGap:15,scale:!1,shape:"polygon",axisLine:te({lineStyle:{color:"#bbb"}},C.axisLine),axisLabel:R(C.axisLabel,!1),axisTick:R(C.axisTick,!1),splitLine:R(C.splitLine,!0),splitArea:R(C.splitArea,!0),indicator:[]},e})(ye),De=["axisLine","axisTickLabel","axisName"],He=(function(r){j(e,r);function e(){var a=r!==null&&r.apply(this,arguments)||this;return a.type=e.type,a}return e.prototype.render=function(a,t,i){var n=this.group;n.removeAll(),this._buildAxes(a),this._buildSplitLineAndArea(a)},e.prototype._buildAxes=function(a){var t=a.coordinateSystem,i=t.getIndicatorAxes(),n=S(i,function(o){var s=o.model.get("showName")?o.name:"",u=new xe(o.model,{axisName:s,position:[t.cx,t.cy],rotation:o.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return u});v(n,function(o){v(De,o.add,o),this.group.add(o.getGroup())},this)},e.prototype._buildSplitLineAndArea=function(a){var t=a.coordinateSystem,i=t.getIndicatorAxes();if(!i.length)return;var n=a.get("shape"),o=a.getModel("splitLine"),s=a.getModel("splitArea"),u=o.getModel("lineStyle"),f=s.getModel("areaStyle"),l=o.get("show"),h=s.get("show"),m=u.get("color"),A=f.get("color"),c=P(m)?m:[m],g=P(A)?A:[A],d=[],x=[];function y(V,b,L){var _=L%b.length;return V[_]=V[_]||[],_}if(n==="circle")for(var T=i[0].getTicksCoords(),ee=t.cx,ae=t.cy,p=0;p<T.length;p++){if(l){var w=y(d,c,p);d[w].push(new Ve({shape:{cx:ee,cy:ae,r:T[p].coord}}))}if(h&&p<T.length-1){var w=y(x,g,p);x[w].push(new Ae({shape:{cx:ee,cy:ae,r0:T[p].coord,r:T[p+1].coord}}))}}else for(var E,ce=S(i,function(V,b){var L=V.getTicksCoords();return E=E==null?L.length-1:Math.min(L.length-1,E),S(L,function(_){return t.coordToPoint(_.coord,b)})}),Z=[],p=0;p<=E;p++){for(var M=[],q=0;q<i.length;q++)M.push(ce[q][p]);if(M[0]&&M.push(M[0].slice()),l){var w=y(d,c,p);d[w].push(new we({shape:{points:M}}))}if(h&&Z){var w=y(x,g,p-1);x[w].push(new Me({shape:{points:M.concat(Z)}}))}Z=M.slice().reverse()}var fe=u.getLineStyle(),pe=f.getAreaStyle();v(x,function(V,b){this.group.add(re(V,{style:$({stroke:"none",fill:g[b%g.length]},pe),silent:!0}))},this),v(d,function(V,b){this.group.add(re(V,{style:$({fill:"none",stroke:c[b%c.length]},fe),silent:!0}))},this)},e.type="radar",e})(be),ke=(function(r){j(e,r);function e(a,t,i){var n=r.call(this,a,t,i)||this;return n.type="value",n.angle=0,n.name="",n}return e})(Ie),Ee=(function(){function r(e,a,t){this.dimensions=[],this._model=e,this._indicatorAxes=S(e.getIndicatorModels(),function(i,n){var o="indicator_"+n,s=new ke(o,new ie);return s.name=i.get("name"),s.model=i,i.axis=s,this.dimensions.push(o),s},this),this.resize(e,t)}return r.prototype.getIndicatorAxes=function(){return this._indicatorAxes},r.prototype.dataToPoint=function(e,a){var t=this._indicatorAxes[a];return this.coordToPoint(t.dataToCoord(e),a)},r.prototype.coordToPoint=function(e,a){var t=this._indicatorAxes[a],i=t.angle,n=this.cx+e*Math.cos(i),o=this.cy-e*Math.sin(i);return[n,o]},r.prototype.pointToData=function(e){var a=e[0]-this.cx,t=e[1]-this.cy,i=Math.sqrt(a*a+t*t);a/=i,t/=i;for(var n=Math.atan2(-t,a),o=1/0,s,u=-1,f=0;f<this._indicatorAxes.length;f++){var l=this._indicatorAxes[f],h=Math.abs(n-l.angle);h<o&&(s=l,u=f,o=h)}return[u,+(s&&s.coordToData(i))]},r.prototype.resize=function(e,a){var t=e.get("center"),i=a.getWidth(),n=a.getHeight(),o=Math.min(i,n)/2;this.cx=G(t[0],i),this.cy=G(t[1],n),this.startAngle=e.get("startAngle")*Math.PI/180;var s=e.get("radius");(O(s)||Te(s))&&(s=[0,s]),this.r0=G(s[0],o),this.r=G(s[1],o),v(this._indicatorAxes,function(u,f){u.setExtent(this.r0,this.r);var l=this.startAngle+f*Math.PI*2/this._indicatorAxes.length;l=Math.atan2(Math.sin(l),Math.cos(l)),u.angle=l},this)},r.prototype.update=function(e,a){var t=this._indicatorAxes,i=this._model;v(t,function(s){s.scale.setExtent(1/0,-1/0)}),e.eachSeriesByType("radar",function(s,u){if(!(s.get("coordinateSystem")!=="radar"||e.getComponent("radar",s.get("radarIndex"))!==i)){var f=s.getData();v(t,function(l){l.scale.unionExtentFromData(f,f.mapDimension(l.dim))})}},this);var n=i.get("splitNumber"),o=new ie;o.setExtent(0,n),o.setInterval(1),v(t,function(s,u){Se(s.scale,s.model,o)})},r.prototype.convertToPixel=function(e,a,t){return console.warn("Not implemented."),null},r.prototype.convertFromPixel=function(e,a,t){return console.warn("Not implemented."),null},r.prototype.containPoint=function(e){return console.warn("Not implemented."),!1},r.create=function(e,a){var t=[];return e.eachComponent("radar",function(i){var n=new r(i,e,a);t.push(n),i.coordinateSystem=n}),e.eachSeriesByType("radar",function(i){i.get("coordinateSystem")==="radar"&&(i.coordinateSystem=t[i.get("radarIndex")||0])}),t},r.dimensions=[],r})();function Ue(r){r.registerCoordinateSystem("radar",Ee),r.registerComponentModel(Pe),r.registerComponentView(He),r.registerVisual({seriesType:"radar",reset:function(e){var a=e.getData();a.each(function(t){a.setItemVisual(t,"legendIcon","roundRect")}),a.setVisual("legendIcon","roundRect")}})}var k=v,Ge=H,U=-1,le=(function(){function r(e){var a=e.mappingMethod,t=e.type,i=this.option=se(e);this.type=t,this.mappingMethod=a,this._normalizeData=Be[a];var n=r.visualHandlers[t];this.applyVisual=n.applyVisual,this.getColorMapper=n.getColorMapper,this._normalizedToVisual=n._normalizedToVisual[a],a==="piecewise"?(K(i),Re(i)):a==="category"?i.categories?Fe(i):K(i,!0):(_e(a!=="linear"||i.dataExtent),K(i))}return r.prototype.mapValueToVisual=function(e){var a=this._normalizeData(e);return this._normalizedToVisual(a,e)},r.prototype.getNormalizer=function(){return ne(this._normalizeData,this)},r.listVisualTypes=function(){return Ne(r.visualHandlers)},r.isValidType=function(e){return r.visualHandlers.hasOwnProperty(e)},r.eachVisual=function(e,a,t){H(e)?v(e,a,t):a.call(t,e)},r.mapVisual=function(e,a,t){var i,n=P(e)?[]:H(e)?{}:(i=!0,null);return r.eachVisual(e,function(o,s){var u=a.call(t,o,s);i?n=u:n[s]=u}),n},r.retrieveVisuals=function(e){var a={},t;return e&&k(r.visualHandlers,function(i,n){e.hasOwnProperty(n)&&(a[n]=e[n],t=!0)}),t?a:null},r.prepareVisualTypes=function(e){if(P(e))e=e.slice();else if(Ge(e)){var a=[];k(e,function(t,i){a.push(i)}),e=a}else return[];return e.sort(function(t,i){return i==="color"&&t!=="color"&&t.indexOf("color")===0?1:-1}),e},r.dependsOn=function(e,a){return a==="color"?!!(e&&e.indexOf(a)===0):e===a},r.findPieceIndex=function(e,a,t){for(var i,n=1/0,o=0,s=a.length;o<s;o++){var u=a[o].value;if(u!=null){if(u===e||O(u)&&u===e+"")return o;t&&m(u,o)}}for(var o=0,s=a.length;o<s;o++){var f=a[o],l=f.interval,h=f.close;if(l){if(l[0]===-1/0){if(B(h[1],e,l[1]))return o}else if(l[1]===1/0){if(B(h[0],l[0],e))return o}else if(B(h[0],l[0],e)&&B(h[1],e,l[1]))return o;t&&m(l[0],o),t&&m(l[1],o)}}if(t)return e===1/0?a.length-1:e===-1/0?0:i;function m(A,c){var g=Math.abs(A-e);g<n&&(n=g,i=c)}},r.visualHandlers={color:{applyVisual:N("color"),getColorMapper:function(){var e=this.option;return ne(e.mappingMethod==="category"?function(a,t){return!t&&(a=this._normalizeData(a)),z.call(this,a)}:function(a,t,i){var n=!!i;return!t&&(a=this._normalizeData(a)),i=Y(a,e.parsedVisual,i),n?i:X(i,"rgba")},this)},_normalizedToVisual:{linear:function(e){return X(Y(e,this.option.parsedVisual),"rgba")},category:z,piecewise:function(e,a){var t=W.call(this,a);return t==null&&(t=X(Y(e,this.option.parsedVisual),"rgba")),t},fixed:I}},colorHue:F(function(e,a){return J(e,a)}),colorSaturation:F(function(e,a){return J(e,null,a)}),colorLightness:F(function(e,a){return J(e,null,null,a)}),colorAlpha:F(function(e,a){return ze(e,a)}),decal:{applyVisual:N("decal"),_normalizedToVisual:{linear:null,category:z,piecewise:null,fixed:null}},opacity:{applyVisual:N("opacity"),_normalizedToVisual:Q([0,1])},liftZ:{applyVisual:N("liftZ"),_normalizedToVisual:{linear:I,category:I,piecewise:I,fixed:I}},symbol:{applyVisual:function(e,a,t){var i=this.mapValueToVisual(e);t("symbol",i)},_normalizedToVisual:{linear:oe,category:z,piecewise:function(e,a){var t=W.call(this,a);return t==null&&(t=oe.call(this,e)),t},fixed:I}},symbolSize:{applyVisual:N("symbolSize"),_normalizedToVisual:Q([0,1])}},r})();function Re(r){var e=r.pieceList;r.hasSpecialVisual=!1,v(e,function(a,t){a.originIndex=t,a.visual!=null&&(r.hasSpecialVisual=!0)})}function Fe(r){var e=r.categories,a=r.categoryMap={},t=r.visual;if(k(e,function(o,s){a[o]=s}),!P(t)){var i=[];H(t)?k(t,function(o,s){var u=a[s];i[u??U]=o}):i[U]=t,t=ue(r,i)}for(var n=e.length-1;n>=0;n--)t[n]==null&&(delete a[e[n]],e.pop())}function K(r,e){var a=r.visual,t=[];H(a)?k(a,function(n){t.push(n)}):a!=null&&t.push(a);var i={color:1,symbol:1};!e&&t.length===1&&!i.hasOwnProperty(r.type)&&(t[1]=t[0]),ue(r,t)}function F(r){return{applyVisual:function(e,a,t){var i=this.mapValueToVisual(e);t("color",r(a("color"),i))},_normalizedToVisual:Q([0,1])}}function oe(r){var e=this.option.visual;return e[Math.round(D(r,[0,1],[0,e.length-1],!0))]||{}}function N(r){return function(e,a,t){t(r,this.mapValueToVisual(e))}}function z(r){var e=this.option.visual;return e[this.option.loop&&r!==U?r%e.length:r]}function I(){return this.option.visual[0]}function Q(r){return{linear:function(e){return D(e,r,this.option.visual,!0)},category:z,piecewise:function(e,a){var t=W.call(this,a);return t==null&&(t=D(e,r,this.option.visual,!0)),t},fixed:I}}function W(r){var e=this.option,a=e.pieceList;if(e.hasSpecialVisual){var t=le.findPieceIndex(r,a),i=a[t];if(i&&i.visual)return i.visual[this.type]}}function ue(r,e){return r.visual=e,r.type==="color"&&(r.parsedVisual=S(e,function(a){var t=Ce(a);return t||[0,0,0,1]})),e}var Be={linear:function(r){return D(r,this.option.dataExtent,[0,1],!0)},piecewise:function(r){var e=this.option.pieceList,a=le.findPieceIndex(r,e,!0);if(a!=null)return D(a,[0,e.length-1],[0,1],!0)},category:function(r){var e=this.option.categories?this.option.categoryMap[r]:r;return e??U},fixed:Le};function B(r,e,a){return r?e<=a:e<a}export{le as V,Ue as i};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{aZ as A,r as I,b7 as S,b8 as w,j as e,b9 as z,ba as E,bb as x,c as H,bc as B,B as F,bd as M,be as P}from"./index-C6xNKxpg.js";function k({aiEmployee:n,tasks:i=[],context:r,target:f,auto:h,size:l=48,label:a,showNotice:c=!1,className:b,onTrigger:o}){const d=A(),[g,u]=I.useState(!1),j=S(),v=w(),N=f??j,t=typeof n=="string"?d.employees.find(s=>s.username===n):d.employees.find(s=>s.username===n.username)??n;if(!t)return null;const m=s=>{o==null||o(s),N.triggerTask({aiEmployee:t,task:s,tasks:s?void 0:i,context:r!=null&&r.length?r:v,auto:h,open:!0})},p=i.filter(s=>s.title);return e.jsxs(z,{children:[e.jsxs(E,{render:e.jsx("button",{type:"button",className:H("group/ai-shortcut relative inline-flex items-center gap-2 rounded-full outline-none transition-transform hover:scale-[1.04] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",a&&"border bg-background pr-3 shadow-sm",b),onClick:()=>m(),onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1)}),children:[e.jsx(x,{employee:t,flip:g||c,className:"transition-[filter] group-hover/ai-shortcut:brightness-105",style:{width:l,height:l}}),a?e.jsx("span",{className:"text-sm font-medium",children:a}):null,c?e.jsx("span",{className:"absolute top-0 right-0 size-2.5 rounded-full border-2 border-background bg-foreground"}):null]}),e.jsxs(B,{side:"top",align:"start",className:"w-72 p-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(x,{employee:t,className:"size-10"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-medium",children:t.nickname}),t.position?e.jsx("div",{className:"truncate text-xs text-muted-foreground",children:t.position}):null]})]}),t.bio??t.description?e.jsx("p",{className:"mt-3 border-t pt-3 text-xs leading-5 text-muted-foreground",children:t.bio??t.description}):null,p.length?e.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5 border-t pt-3",children:p.map((s,C)=>e.jsxs(F,{variant:"secondary",size:"sm",className:"h-auto min-h-7 whitespace-normal py-1 text-left",onClick:y=>{y.stopPropagation(),m(s)},children:[s.autoSend?e.jsx(M,{className:"size-3.5"}):e.jsx(P,{className:"size-3.5"}),e.jsx("span",{children:s.title}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:s.autoSend?"Auto send":"Fill composer"})]},`${s.title}-${C}`))}):null]})]})}export{k as A};
|