@rytass/bpm-core-react 0.13.3 → 0.13.5
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/CHANGELOG.md +47 -0
- package/README.md +1 -0
- package/dist/chunks/{FormBuilderView-D4xIuPYB.js → FormBuilderView-BYLN6W-P.js} +2 -2
- package/dist/chunks/{FormBuilderView-D4xIuPYB.js.map → FormBuilderView-BYLN6W-P.js.map} +1 -1
- package/dist/chunks/{FormBuilderView-CLFlfDGe.cjs → FormBuilderView-VmdPVbg7.cjs} +2 -2
- package/dist/chunks/{FormBuilderView-CLFlfDGe.cjs.map → FormBuilderView-VmdPVbg7.cjs.map} +1 -1
- package/dist/chunks/FormRendererView-Bs8lTb4k.cjs +2 -0
- package/dist/chunks/{FormRendererView-BxGT16z0.cjs.map → FormRendererView-Bs8lTb4k.cjs.map} +1 -1
- package/dist/chunks/{FormRendererView-DUceSOXe.js → FormRendererView-UPowZZgw.js} +3 -3
- package/dist/chunks/{FormRendererView-DUceSOXe.js.map → FormRendererView-UPowZZgw.js.map} +1 -1
- package/dist/chunks/{approval-instance-list-page-BjX2kaoF.js → approval-instance-list-page-CPXMP3PL.js} +2 -2
- package/dist/chunks/{approval-instance-list-page-BjX2kaoF.js.map → approval-instance-list-page-CPXMP3PL.js.map} +1 -1
- package/dist/chunks/{approval-instance-list-page-CWiQvnfE.cjs → approval-instance-list-page-ax0pm8bt.cjs} +2 -2
- package/dist/chunks/{approval-instance-list-page-CWiQvnfE.cjs.map → approval-instance-list-page-ax0pm8bt.cjs.map} +1 -1
- package/dist/chunks/{compose-Bb-REfoB.js → compose-6P64PO1i.js} +5 -5
- package/dist/chunks/{compose-Bb-REfoB.js.map → compose-6P64PO1i.js.map} +1 -1
- package/dist/chunks/{compose-DzRYZcqe.cjs → compose-BnSRL4ml.cjs} +2 -2
- package/dist/chunks/{compose-DzRYZcqe.cjs.map → compose-BnSRL4ml.cjs.map} +1 -1
- package/dist/chunks/{dashboard-page-DJ9vOPga.js → dashboard-page-CeCLV1tp.js} +2 -2
- package/dist/chunks/{dashboard-page-DJ9vOPga.js.map → dashboard-page-CeCLV1tp.js.map} +1 -1
- package/dist/chunks/{dashboard-page-CH87L5nx.cjs → dashboard-page-DooFJsxM.cjs} +2 -2
- package/dist/chunks/{dashboard-page-CH87L5nx.cjs.map → dashboard-page-DooFJsxM.cjs.map} +1 -1
- package/dist/chunks/{delegations-vpLtus9g.cjs → delegations-8LsxcQM4.cjs} +2 -2
- package/dist/chunks/{delegations-vpLtus9g.cjs.map → delegations-8LsxcQM4.cjs.map} +1 -1
- package/dist/chunks/{delegations-0MbJ7CWj.js → delegations-B8gLSt0i.js} +4 -5
- package/dist/chunks/{delegations-0MbJ7CWj.js.map → delegations-B8gLSt0i.js.map} +1 -1
- package/dist/chunks/{delegations-DyMGIDpp.js → delegations-DRupxJ4_.js} +4 -5
- package/dist/chunks/{delegations-DyMGIDpp.js.map → delegations-DRupxJ4_.js.map} +1 -1
- package/dist/chunks/{delegations-Bc9psOZ3.cjs → delegations-DlYwMiAW.cjs} +2 -2
- package/dist/chunks/{delegations-Bc9psOZ3.cjs.map → delegations-DlYwMiAW.cjs.map} +1 -1
- package/dist/chunks/{designer-C6oIO9Kq.js → designer-C3s2kSna.js} +1342 -841
- package/dist/chunks/designer-C3s2kSna.js.map +1 -0
- package/dist/chunks/designer-_g58R6rQ.cjs +65 -0
- package/dist/chunks/designer-_g58R6rQ.cjs.map +1 -0
- package/dist/chunks/detail-Db-UOELp.cjs +2 -0
- package/dist/chunks/detail-Db-UOELp.cjs.map +1 -0
- package/dist/chunks/detail-pYEIk-jW.js +2325 -0
- package/dist/chunks/detail-pYEIk-jW.js.map +1 -0
- package/dist/chunks/{login-9bCXyjbX.cjs → login-AtVxZBsC.cjs} +2 -2
- package/dist/chunks/{login-9bCXyjbX.cjs.map → login-AtVxZBsC.cjs.map} +1 -1
- package/dist/chunks/{login-BKxpLibd.js → login-C6qlTC6F.js} +2 -2
- package/dist/chunks/{login-BKxpLibd.js.map → login-C6qlTC6F.js.map} +1 -1
- package/dist/chunks/{orgs-Cr_7zsAD.js → orgs-BpqVu5ka.js} +2 -2
- package/dist/chunks/{orgs-Cr_7zsAD.js.map → orgs-BpqVu5ka.js.map} +1 -1
- package/dist/chunks/orgs-D0-5BaHT.cjs +2 -0
- package/dist/chunks/{orgs-Bz8hBMoQ.cjs.map → orgs-D0-5BaHT.cjs.map} +1 -1
- package/dist/chunks/providers-DHtDZFNA.cjs +2 -0
- package/dist/chunks/{providers-BsEn3ikK.cjs.map → providers-DHtDZFNA.cjs.map} +1 -1
- package/dist/chunks/{providers-DjLh4oLY.js → providers-J5eyByQj.js} +7 -7
- package/dist/chunks/{providers-DjLh4oLY.js.map → providers-J5eyByQj.js.map} +1 -1
- package/dist/chunks/{routes-config-fDVHmvXi.cjs → routes-config-C1j_vFKo.cjs} +2 -2
- package/dist/chunks/routes-config-C1j_vFKo.cjs.map +1 -0
- package/dist/chunks/{routes-config-RBYQtUd0.js → routes-config-yZbESPlw.js} +3 -2
- package/dist/chunks/routes-config-yZbESPlw.js.map +1 -0
- package/dist/chunks/use-bpm-member-D57LKe_u.js +20 -0
- package/dist/chunks/use-bpm-member-D57LKe_u.js.map +1 -0
- package/dist/chunks/use-bpm-member-DpNAQtNC.cjs +2 -0
- package/dist/chunks/use-bpm-member-DpNAQtNC.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -24
- package/dist/index.js.map +1 -1
- package/dist/lib/routes-config.d.ts +2 -0
- package/dist/lib/use-bpm-member.d.ts +6 -0
- package/dist/next/index.cjs +1 -1
- package/dist/next/index.js +2 -2
- package/dist/pages/admin/delegations/index.cjs +1 -1
- package/dist/pages/admin/delegations/index.js +1 -1
- package/dist/pages/admin/orgs/index.cjs +1 -1
- package/dist/pages/admin/orgs/index.js +1 -1
- package/dist/pages/admin/webhook-endpoints/index.cjs +2 -0
- package/dist/pages/admin/webhook-endpoints/index.cjs.map +1 -0
- package/dist/pages/admin/webhook-endpoints/index.d.ts +4 -0
- package/dist/pages/admin/webhook-endpoints/index.js +14 -0
- package/dist/pages/admin/webhook-endpoints/index.js.map +1 -0
- package/dist/pages/delegations/index.cjs +1 -1
- package/dist/pages/delegations/index.js +1 -1
- package/dist/pages/instances/detail/index.cjs +1 -1
- package/dist/pages/instances/detail/index.js +1 -1
- package/dist/pages/login/index.cjs +1 -1
- package/dist/pages/login/index.js +1 -1
- package/dist/pages/templates/compose/index.cjs +1 -1
- package/dist/pages/templates/compose/index.js +1 -1
- package/dist/pages/templates/designer/index.cjs +1 -1
- package/dist/pages/templates/designer/index.js +1 -1
- package/dist/style.css +1 -1
- package/dist/views/admin/delegations/index.cjs +1 -1
- package/dist/views/admin/delegations/index.js +1 -1
- package/dist/views/admin/index.cjs +1 -1
- package/dist/views/admin/index.d.ts +1 -0
- package/dist/views/admin/index.js +4 -3
- package/dist/views/admin/orgs/index.cjs +1 -1
- package/dist/views/admin/orgs/index.js +1 -1
- package/dist/views/admin/webhook-endpoints/AdminWebhookEndpointsView.d.ts +8 -0
- package/dist/views/admin/webhook-endpoints/index.cjs +2 -0
- package/dist/views/admin/webhook-endpoints/index.cjs.map +1 -0
- package/dist/views/admin/webhook-endpoints/index.d.ts +1 -0
- package/dist/views/admin/webhook-endpoints/index.js +729 -0
- package/dist/views/admin/webhook-endpoints/index.js.map +1 -0
- package/dist/views/cc/index.cjs +1 -1
- package/dist/views/cc/index.js +1 -1
- package/dist/views/dashboard/index.cjs +1 -1
- package/dist/views/dashboard/index.js +1 -1
- package/dist/views/delegations/index.cjs +1 -1
- package/dist/views/delegations/index.js +1 -1
- package/dist/views/forms/builder/index.cjs +1 -1
- package/dist/views/forms/builder/index.js +1 -1
- package/dist/views/forms/renderer/index.cjs +1 -1
- package/dist/views/forms/renderer/index.js +1 -1
- package/dist/views/inbox/index.cjs +1 -1
- package/dist/views/inbox/index.js +1 -1
- package/dist/views/instances/detail/InstanceDetailView.d.ts +6 -1
- package/dist/views/instances/detail/index.cjs +1 -1
- package/dist/views/instances/detail/index.d.ts +1 -0
- package/dist/views/instances/detail/index.js +2 -2
- package/dist/views/instances/detail/sections/InstanceWebhookDeliveriesSection.d.ts +20 -0
- package/dist/views/instances/detail/sections/shared.d.ts +37 -4
- package/dist/views/instances/new/index.cjs +1 -1
- package/dist/views/instances/new/index.js +2 -2
- package/dist/views/login/index.cjs +1 -1
- package/dist/views/login/index.js +1 -1
- package/dist/views/search/index.cjs +1 -1
- package/dist/views/search/index.js +1 -1
- package/dist/views/sent/index.cjs +1 -1
- package/dist/views/sent/index.js +1 -1
- package/dist/views/templates/compose/index.cjs +1 -1
- package/dist/views/templates/compose/index.js +1 -1
- package/dist/views/templates/designer/NotifyWebhookTargetsEditor.d.ts +20 -0
- package/dist/views/templates/designer/index.cjs +1 -1
- package/dist/views/templates/designer/index.js +1 -1
- package/dist/views/templates/designer/notify-webhook-designer.d.ts +74 -0
- package/dist/views/templates/index.cjs +1 -1
- package/dist/views/templates/index.js +1 -1
- package/dist/views/templates/versions/index.cjs +1 -1
- package/dist/views/templates/versions/index.js +1 -1
- package/package.json +13 -3
- package/dist/chunks/FormRendererView-BxGT16z0.cjs +0 -2
- package/dist/chunks/designer-C6oIO9Kq.js.map +0 -1
- package/dist/chunks/designer-gFUdImeZ.cjs +0 -65
- package/dist/chunks/designer-gFUdImeZ.cjs.map +0 -1
- package/dist/chunks/detail-BgKgMvYx.js +0 -2044
- package/dist/chunks/detail-BgKgMvYx.js.map +0 -1
- package/dist/chunks/detail-Dnz5aaI-.cjs +0 -2
- package/dist/chunks/detail-Dnz5aaI-.cjs.map +0 -1
- package/dist/chunks/orgs-Bz8hBMoQ.cjs +0 -2
- package/dist/chunks/providers-BsEn3ikK.cjs +0 -2
- package/dist/chunks/routes-config-RBYQtUd0.js.map +0 -1
- package/dist/chunks/routes-config-fDVHmvXi.cjs.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { n as e } from "./auth-provider-B5oPmvk2.js";
|
|
3
|
+
//#region src/lib/use-bpm-member.ts
|
|
4
|
+
function t() {
|
|
5
|
+
let { member: t } = e();
|
|
6
|
+
return t;
|
|
7
|
+
}
|
|
8
|
+
var n = /* @__PURE__ */ new Set([
|
|
9
|
+
"bpm:*",
|
|
10
|
+
"bpm:admin",
|
|
11
|
+
"bpm.admin",
|
|
12
|
+
"bpm:admin:*"
|
|
13
|
+
]);
|
|
14
|
+
function r(e) {
|
|
15
|
+
return e ? (e.roles ?? []).includes("BPM_ADMIN") || (e.permissions ?? []).some((e) => n.has(e)) : !1;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { t as n, r as t };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=use-bpm-member-D57LKe_u.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-bpm-member-D57LKe_u.js","names":[],"sources":["../../src/lib/use-bpm-member.ts"],"sourcesContent":["'use client';\n\nimport type { ApiMember } from '@rytass/bpm-core-client';\nimport { useAuth } from './auth-provider';\n\n/**\n * Read the currently authenticated BPM member. Returns `null` when there\n * is no active session — typically only seen on the login page or during\n * the brief loading window before `<AuthProvider>` resolves the cookie.\n *\n * Convenience alias for `useAuth().member` aimed at host navigations\n * (avatar, display name, role-based menu visibility) that should not\n * depend on the broader `useAuth()` surface.\n */\nexport function useBPMMember(): ApiMember | null {\n const { member } = useAuth();\n return member;\n}\n\nconst BPM_ADMIN_PERMISSIONS: ReadonlySet<string> = new Set([\n 'bpm:*',\n 'bpm:admin',\n 'bpm.admin',\n 'bpm:admin:*',\n]);\n\n/**\n * Whether the member passes the server's `@BPMAdminOnly()` check — the\n * `BPM_ADMIN` role or one of the administrator permissions. Use it to decide\n * whether to show administrator-only UI; the server still enforces access.\n */\nexport function isBPMAdminMember(\n member: Pick<ApiMember, 'permissions' | 'roles'> | null,\n): boolean {\n if (!member) {\n return false;\n }\n\n // The member comes from the host's `/auth/me` unvalidated; a host that\n // omits either list must not take the page that asks down with it.\n return (\n (member.roles ?? []).includes('BPM_ADMIN') ||\n (member.permissions ?? []).some((permission) =>\n BPM_ADMIN_PERMISSIONS.has(permission),\n )\n );\n}\n"],"mappings":";;;AAcA,SAAgB,IAAiC;CAC/C,IAAM,EAAE,cAAW,EAAQ;CAC3B,OAAO;AACT;AAEA,IAAM,oBAA6C,IAAI,IAAI;CACzD;CACA;CACA;CACA;AACF,CAAC;AAOD,SAAgB,EACd,GACS;CAOT,OANK,KAOF,EAAO,SAAS,CAAC,EAAA,CAAG,SAAS,WAAW,MACxC,EAAO,eAAe,CAAC,EAAA,CAAG,MAAM,MAC/B,EAAsB,IAAI,CAAU,CACtC,IATO;AAWX"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";const e=require("./auth-provider-4BeCw7cI.cjs");function t(){let{member:t}=e.n();return t}var n=new Set([`bpm:*`,`bpm:admin`,`bpm.admin`,`bpm:admin:*`]);function r(e){return e?(e.roles??[]).includes(`BPM_ADMIN`)||(e.permissions??[]).some(e=>n.has(e)):!1}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}});
|
|
2
|
+
//# sourceMappingURL=use-bpm-member-DpNAQtNC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-bpm-member-DpNAQtNC.cjs","names":[],"sources":["../../src/lib/use-bpm-member.ts"],"sourcesContent":["'use client';\n\nimport type { ApiMember } from '@rytass/bpm-core-client';\nimport { useAuth } from './auth-provider';\n\n/**\n * Read the currently authenticated BPM member. Returns `null` when there\n * is no active session — typically only seen on the login page or during\n * the brief loading window before `<AuthProvider>` resolves the cookie.\n *\n * Convenience alias for `useAuth().member` aimed at host navigations\n * (avatar, display name, role-based menu visibility) that should not\n * depend on the broader `useAuth()` surface.\n */\nexport function useBPMMember(): ApiMember | null {\n const { member } = useAuth();\n return member;\n}\n\nconst BPM_ADMIN_PERMISSIONS: ReadonlySet<string> = new Set([\n 'bpm:*',\n 'bpm:admin',\n 'bpm.admin',\n 'bpm:admin:*',\n]);\n\n/**\n * Whether the member passes the server's `@BPMAdminOnly()` check — the\n * `BPM_ADMIN` role or one of the administrator permissions. Use it to decide\n * whether to show administrator-only UI; the server still enforces access.\n */\nexport function isBPMAdminMember(\n member: Pick<ApiMember, 'permissions' | 'roles'> | null,\n): boolean {\n if (!member) {\n return false;\n }\n\n // The member comes from the host's `/auth/me` unvalidated; a host that\n // omits either list must not take the page that asks down with it.\n return (\n (member.roles ?? []).includes('BPM_ADMIN') ||\n (member.permissions ?? []).some((permission) =>\n BPM_ADMIN_PERMISSIONS.has(permission),\n )\n );\n}\n"],"mappings":"6DAcA,SAAgB,GAAiC,CAC/C,GAAM,CAAE,UAAW,EAAA,EAAQ,EAC3B,OAAO,CACT,CAEA,IAAM,EAA6C,IAAI,IAAI,CACzD,QACA,YACA,YACA,aACF,CAAC,EAOD,SAAgB,EACd,EACS,CAOT,OANK,GAOF,EAAO,OAAS,CAAC,EAAA,CAAG,SAAS,WAAW,IACxC,EAAO,aAAe,CAAC,EAAA,CAAG,KAAM,GAC/B,EAAsB,IAAI,CAAU,CACtC,EATO,EAWX"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});require('./index.css');const e=require("./chunks/router-adapter--gYs13E8.cjs"),t=require("./chunks/auth-provider-4BeCw7cI.cjs"),n=require("./chunks/format-date-time-D-cx5M8z.cjs"),r=require("./chunks/providers-
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});require('./index.css');const e=require("./chunks/router-adapter--gYs13E8.cjs"),t=require("./chunks/auth-provider-4BeCw7cI.cjs"),n=require("./chunks/format-date-time-D-cx5M8z.cjs"),r=require("./chunks/providers-DHtDZFNA.cjs"),i=require("./chunks/routes-config-C1j_vFKo.cjs"),a=require("./chunks/bpm-form-field-Bc6k4ZEO.cjs"),o=require("./chunks/use-bpm-member-DpNAQtNC.cjs"),s=require("./chunks/admin-pickers-Btvij1at.cjs"),c=require("./chunks/approval-instance-list-page-ax0pm8bt.cjs"),l=require("./chunks/dashboard-page-DooFJsxM.cjs");let u=require("@mezzanine-ui/react"),d=require("react/jsx-runtime"),f=require("@mezzanine-ui/icons");function p(){let{logout:e}=t.n();return e}var m={root:`bpm_root_jl5S-`,badge:`bpm_badge_SIKJk`};function h({label:e=`通知中心`}={}){let{open:t}=r.o(),{unreadCount:n}=r.i(),i=n>0?`${e},${n} 則未讀`:e;return(0,d.jsxs)(`span`,{className:m.root,children:[(0,d.jsx)(u.NavigationIconButton,{"aria-label":i,icon:f.NotificationUnreadIcon,onClick:()=>{t()},title:e,type:`button`}),n>0?(0,d.jsx)(`span`,{className:m.badge,children:n>99?`99+`:n}):null]})}exports.ApprovalInstanceListPage=c.t,exports.AuthProvider=t.t,exports.BPMFormField=a.t,exports.BPMNotificationBellButton=h,exports.BPMRoutesProvider=i.t,exports.DashboardPage=l.t,exports.MemberPicker=s.t,exports.NotificationDrawer=r.n,exports.NotificationDrawerProvider=r.a,exports.NotificationUnreadProvider=r.r,exports.OrgUnitPicker=s.n,exports.PositionPicker=s.r,exports.Providers=r.t,exports.RouterAdapterProvider=e.t,exports.createDefaultBPMRoutes=i.n,exports.defaultBrowserSearchParams=e.n,exports.formatDateTime=n.t,exports.isBPMAdminMember=o.t,exports.readMemberOption=s.i,exports.readOrgUnitOption=s.a,exports.readPositionOption=s.o,exports.useAuth=t.n,exports.useBPMLogout=p,exports.useBPMMember=o.n,exports.useBPMRoutes=i.r,exports.useNotificationDrawer=r.o,exports.useNotificationUnread=r.i,exports.useRouterAdapter=e.r;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/lib/use-bpm-logout.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/lib/use-bpm-logout.ts","../src/components/bpm-notification-bell-button.module.scss","../src/components/bpm-notification-bell-button.tsx"],"sourcesContent":["'use client';\n\nimport { useAuth } from './auth-provider';\n\n/**\n * Drop-in logout handler for host navigation menus. Wraps the BPM auth\n * context's logout flow — calls `logoutApi()` against the BPM REST\n * session endpoint, clears the in-memory member, then redirects to the\n * configured `loginPath`.\n *\n * Hosts mount this on their own logout buttons / menu items so they do\n * not need to touch `useAuth()` directly. To customize the post-logout\n * destination, override the `loginPath` prop on `<BPMNextProviders>` or\n * `<AuthProvider>`.\n */\nexport function useBPMLogout(): () => Promise<void> {\n const { logout } = useAuth();\n return logout;\n}\n",".root {\n display: inline-flex;\n position: relative;\n}\n\n.badge {\n align-items: center;\n background: #d92d20;\n border: 1px solid #fff;\n border-radius: 999px;\n color: #fff;\n display: inline-flex;\n font-size: 10px;\n font-weight: 600;\n height: 16px;\n justify-content: center;\n line-height: 1;\n min-width: 16px;\n padding: 0 4px;\n pointer-events: none;\n position: absolute;\n right: -4px;\n top: -4px;\n}\n","'use client';\n\nimport type { ReactElement } from 'react';\nimport { NavigationIconButton } from '@mezzanine-ui/react';\nimport { NotificationUnreadIcon } from '@mezzanine-ui/icons';\nimport { useNotificationDrawer } from '../lib/notification-drawer-provider';\nimport { useNotificationUnread } from '../lib/notification-unread-provider';\nimport styles from './bpm-notification-bell-button.module.scss';\n\nexport interface BPMNotificationBellButtonProps {\n /** Override the aria-label / tooltip. Defaults to `通知中心`. */\n readonly label?: string;\n}\n\n/**\n * Drop-in notification bell. Reads the unread count from\n * `<NotificationUnreadProvider>`, opens the BPM `<NotificationDrawer />`\n * mounted by `<Providers>` (or `<BPMNextProviders>`) on click, and\n * renders a small red badge with the unread count.\n *\n * Use this when the host navigation wants the BPM notification UX with\n * minimum wiring. Hosts that need a fully custom button can skip this\n * widget and consume `useNotificationDrawer()` + `useNotificationUnread()`\n * directly to wire their own trigger.\n *\n * Visual: uses Mezzanine `NavigationIconButton` so the bell aligns with\n * surrounding Mezzanine navigation chrome. The button is decoupled from\n * the `<Navigation>` container — it does not require a Mezzanine\n * navigation tree to render.\n */\nexport function BPMNotificationBellButton({\n label = '通知中心',\n}: BPMNotificationBellButtonProps = {}): ReactElement {\n const { open } = useNotificationDrawer();\n const { unreadCount } = useNotificationUnread();\n const ariaLabel = unreadCount > 0 ? `${label},${unreadCount} 則未讀` : label;\n return (\n <span className={styles.root}>\n <NavigationIconButton\n aria-label={ariaLabel}\n icon={NotificationUnreadIcon}\n onClick={(): void => {\n open();\n }}\n title={label}\n type=\"button\"\n />\n {unreadCount > 0 ? (\n <span className={styles.badge}>\n {unreadCount > 99 ? '99+' : unreadCount}\n </span>\n ) : null}\n </span>\n );\n}\n"],"mappings":"srBAeA,SAAgB,GAAoC,CAClD,GAAM,CAAE,UAAW,EAAA,EAAQ,EAC3B,OAAO,CACT,uDEYA,SAAgB,EAA0B,CACxC,QAAQ,QAC0B,CAAC,EAAiB,CACpD,GAAM,CAAE,QAAS,EAAA,EAAsB,EACjC,CAAE,eAAgB,EAAA,EAAsB,EACxC,EAAY,EAAc,EAAI,GAAG,EAAM,GAAG,EAAY,MAAQ,EACpE,OACE,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAW,EAAO,KAAxB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAA,qBAAD,CACE,aAAY,EACZ,KAAM,EAAA,uBACN,YAAqB,CACnB,EAAK,CACP,EACA,MAAO,EACP,KAAK,QACN,CAAA,EACA,EAAc,GACb,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAO,MACrB,SAAA,EAAc,GAAK,MAAQ,CACxB,CAAA,EACJ,IACA,GAEV"}
|
package/dist/index.js
CHANGED
|
@@ -2,51 +2,46 @@
|
|
|
2
2
|
import { n as e, r as t, t as n } from "./chunks/router-adapter-DftlFTOd.js";
|
|
3
3
|
import { n as r, t as i } from "./chunks/auth-provider-B5oPmvk2.js";
|
|
4
4
|
import { t as a } from "./chunks/format-date-time-CB-LxzqT.js";
|
|
5
|
-
import { a as o, i as s, n as c, o as l, r as u, t as d } from "./chunks/providers-
|
|
6
|
-
import { n as f, r as p, t as m } from "./chunks/routes-config-
|
|
5
|
+
import { a as o, i as s, n as c, o as l, r as u, t as d } from "./chunks/providers-J5eyByQj.js";
|
|
6
|
+
import { n as f, r as p, t as m } from "./chunks/routes-config-yZbESPlw.js";
|
|
7
7
|
import { t as h } from "./chunks/bpm-form-field-Cao0rMol.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { t as
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
8
|
+
import { n as g, t as _ } from "./chunks/use-bpm-member-D57LKe_u.js";
|
|
9
|
+
import { a as v, i as y, n as b, o as x, r as S, t as C } from "./chunks/admin-pickers-DLlG_1du.js";
|
|
10
|
+
import { t as w } from "./chunks/approval-instance-list-page-CPXMP3PL.js";
|
|
11
|
+
import { t as T } from "./chunks/dashboard-page-CeCLV1tp.js";
|
|
12
|
+
import { NavigationIconButton as E } from "@mezzanine-ui/react";
|
|
13
|
+
import { jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
14
|
+
import { NotificationUnreadIcon as k } from "@mezzanine-ui/icons";
|
|
14
15
|
import './index.css';//#region src/lib/use-bpm-logout.ts
|
|
15
|
-
function
|
|
16
|
+
function A() {
|
|
16
17
|
let { logout: e } = r();
|
|
17
18
|
return e;
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
-
//#region src/lib/use-bpm-member.ts
|
|
21
|
-
function k() {
|
|
22
|
-
let { member: e } = r();
|
|
23
|
-
return e;
|
|
24
|
-
}
|
|
25
|
-
var A = {
|
|
20
|
+
var j = {
|
|
26
21
|
root: "bpm_root_jl5S-",
|
|
27
22
|
badge: "bpm_badge_SIKJk"
|
|
28
23
|
};
|
|
29
24
|
//#endregion
|
|
30
25
|
//#region src/components/bpm-notification-bell-button.tsx
|
|
31
|
-
function
|
|
26
|
+
function M({ label: e = "通知中心" } = {}) {
|
|
32
27
|
let { open: t } = l(), { unreadCount: n } = s(), r = n > 0 ? `${e},${n} 則未讀` : e;
|
|
33
|
-
return /* @__PURE__ */
|
|
34
|
-
className:
|
|
35
|
-
children: [/* @__PURE__ */
|
|
28
|
+
return /* @__PURE__ */ O("span", {
|
|
29
|
+
className: j.root,
|
|
30
|
+
children: [/* @__PURE__ */ D(E, {
|
|
36
31
|
"aria-label": r,
|
|
37
|
-
icon:
|
|
32
|
+
icon: k,
|
|
38
33
|
onClick: () => {
|
|
39
34
|
t();
|
|
40
35
|
},
|
|
41
36
|
title: e,
|
|
42
37
|
type: "button"
|
|
43
|
-
}), n > 0 ? /* @__PURE__ */
|
|
44
|
-
className:
|
|
38
|
+
}), n > 0 ? /* @__PURE__ */ D("span", {
|
|
39
|
+
className: j.badge,
|
|
45
40
|
children: n > 99 ? "99+" : n
|
|
46
41
|
}) : null]
|
|
47
42
|
});
|
|
48
43
|
}
|
|
49
44
|
//#endregion
|
|
50
|
-
export {
|
|
45
|
+
export { w as ApprovalInstanceListPage, i as AuthProvider, h as BPMFormField, M as BPMNotificationBellButton, m as BPMRoutesProvider, T as DashboardPage, C as MemberPicker, c as NotificationDrawer, o as NotificationDrawerProvider, u as NotificationUnreadProvider, b as OrgUnitPicker, S as PositionPicker, d as Providers, n as RouterAdapterProvider, f as createDefaultBPMRoutes, e as defaultBrowserSearchParams, a as formatDateTime, _ as isBPMAdminMember, y as readMemberOption, v as readOrgUnitOption, x as readPositionOption, r as useAuth, A as useBPMLogout, g as useBPMMember, p as useBPMRoutes, l as useNotificationDrawer, s as useNotificationUnread, t as useRouterAdapter };
|
|
51
46
|
|
|
52
47
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/lib/use-bpm-logout.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/lib/use-bpm-logout.ts","../src/components/bpm-notification-bell-button.module.scss","../src/components/bpm-notification-bell-button.tsx"],"sourcesContent":["'use client';\n\nimport { useAuth } from './auth-provider';\n\n/**\n * Drop-in logout handler for host navigation menus. Wraps the BPM auth\n * context's logout flow — calls `logoutApi()` against the BPM REST\n * session endpoint, clears the in-memory member, then redirects to the\n * configured `loginPath`.\n *\n * Hosts mount this on their own logout buttons / menu items so they do\n * not need to touch `useAuth()` directly. To customize the post-logout\n * destination, override the `loginPath` prop on `<BPMNextProviders>` or\n * `<AuthProvider>`.\n */\nexport function useBPMLogout(): () => Promise<void> {\n const { logout } = useAuth();\n return logout;\n}\n",".root {\n display: inline-flex;\n position: relative;\n}\n\n.badge {\n align-items: center;\n background: #d92d20;\n border: 1px solid #fff;\n border-radius: 999px;\n color: #fff;\n display: inline-flex;\n font-size: 10px;\n font-weight: 600;\n height: 16px;\n justify-content: center;\n line-height: 1;\n min-width: 16px;\n padding: 0 4px;\n pointer-events: none;\n position: absolute;\n right: -4px;\n top: -4px;\n}\n","'use client';\n\nimport type { ReactElement } from 'react';\nimport { NavigationIconButton } from '@mezzanine-ui/react';\nimport { NotificationUnreadIcon } from '@mezzanine-ui/icons';\nimport { useNotificationDrawer } from '../lib/notification-drawer-provider';\nimport { useNotificationUnread } from '../lib/notification-unread-provider';\nimport styles from './bpm-notification-bell-button.module.scss';\n\nexport interface BPMNotificationBellButtonProps {\n /** Override the aria-label / tooltip. Defaults to `通知中心`. */\n readonly label?: string;\n}\n\n/**\n * Drop-in notification bell. Reads the unread count from\n * `<NotificationUnreadProvider>`, opens the BPM `<NotificationDrawer />`\n * mounted by `<Providers>` (or `<BPMNextProviders>`) on click, and\n * renders a small red badge with the unread count.\n *\n * Use this when the host navigation wants the BPM notification UX with\n * minimum wiring. Hosts that need a fully custom button can skip this\n * widget and consume `useNotificationDrawer()` + `useNotificationUnread()`\n * directly to wire their own trigger.\n *\n * Visual: uses Mezzanine `NavigationIconButton` so the bell aligns with\n * surrounding Mezzanine navigation chrome. The button is decoupled from\n * the `<Navigation>` container — it does not require a Mezzanine\n * navigation tree to render.\n */\nexport function BPMNotificationBellButton({\n label = '通知中心',\n}: BPMNotificationBellButtonProps = {}): ReactElement {\n const { open } = useNotificationDrawer();\n const { unreadCount } = useNotificationUnread();\n const ariaLabel = unreadCount > 0 ? `${label},${unreadCount} 則未讀` : label;\n return (\n <span className={styles.root}>\n <NavigationIconButton\n aria-label={ariaLabel}\n icon={NotificationUnreadIcon}\n onClick={(): void => {\n open();\n }}\n title={label}\n type=\"button\"\n />\n {unreadCount > 0 ? (\n <span className={styles.badge}>\n {unreadCount > 99 ? '99+' : unreadCount}\n </span>\n ) : null}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,SAAgB,IAAoC;CAClD,IAAM,EAAE,cAAW,EAAQ;CAC3B,OAAO;AACT;;;;;;;AEYA,SAAgB,EAA0B,EACxC,WAAQ,WAC0B,CAAC,GAAiB;CACpD,IAAM,EAAE,YAAS,EAAsB,GACjC,EAAE,mBAAgB,EAAsB,GACxC,IAAY,IAAc,IAAI,GAAG,EAAM,GAAG,EAAY,QAAQ;CACpE,OACE,kBAAC,QAAD;EAAM,WAAW,EAAO;EAAxB,UAAA,CACE,kBAAC,GAAD;GACE,cAAY;GACZ,MAAM;GACN,eAAqB;IACnB,EAAK;GACP;GACA,OAAO;GACP,MAAK;EACN,CAAA,GACA,IAAc,IACb,kBAAC,QAAD;GAAM,WAAW,EAAO;GACrB,UAAA,IAAc,KAAK,QAAQ;EACxB,CAAA,IACJ,IACA;;AAEV"}
|
|
@@ -78,6 +78,8 @@ export interface BPMRoutes {
|
|
|
78
78
|
adminUsers(): string;
|
|
79
79
|
/** Admin: delegation rule management. */
|
|
80
80
|
adminDelegations(): string;
|
|
81
|
+
/** Admin: database-managed notify webhook endpoints (ADR 18). */
|
|
82
|
+
adminWebhookEndpoints(): string;
|
|
81
83
|
}
|
|
82
84
|
/**
|
|
83
85
|
* Factory for the default `BPMRoutes` value. Reproduces the exact path
|
|
@@ -9,3 +9,9 @@ import { ApiMember } from '@rytass/bpm-core-client';
|
|
|
9
9
|
* depend on the broader `useAuth()` surface.
|
|
10
10
|
*/
|
|
11
11
|
export declare function useBPMMember(): ApiMember | null;
|
|
12
|
+
/**
|
|
13
|
+
* Whether the member passes the server's `@BPMAdminOnly()` check — the
|
|
14
|
+
* `BPM_ADMIN` role or one of the administrator permissions. Use it to decide
|
|
15
|
+
* whether to show administrator-only UI; the server still enforces access.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isBPMAdminMember(member: Pick<ApiMember, 'permissions' | 'roles'> | null): boolean;
|
package/dist/next/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../chunks/router-adapter--gYs13E8.cjs"),t=require("../chunks/providers-
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../chunks/router-adapter--gYs13E8.cjs"),t=require("../chunks/providers-DHtDZFNA.cjs"),n=require("../chunks/routes-config-C1j_vFKo.cjs");let r=require("react"),i=require("react/jsx-runtime"),a=require("next/navigation");function o({children:n,locale:o,publicPaths:s,loginPath:c}){let l=(0,a.useRouter)(),u=(0,a.usePathname)(),d=(0,r.useMemo)(()=>({pathname:u,push:e=>l.push(e),replace:e=>l.replace(e),back:()=>l.back(),searchParams:()=>e.n()}),[l,u]);return(0,i.jsx)(e.t,{value:d,children:(0,i.jsx)(t.t,{locale:o,publicPaths:s,loginPath:c,children:n})})}exports.BPMNextProviders=o,exports.BPMRoutesProvider=n.t,exports.createDefaultBPMRoutes=n.n,exports.useBPMRoutes=n.r;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/next/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { n as e, t } from "../chunks/router-adapter-DftlFTOd.js";
|
|
3
|
-
import { t as n } from "../chunks/providers-
|
|
4
|
-
import { n as r, r as i, t as a } from "../chunks/routes-config-
|
|
3
|
+
import { t as n } from "../chunks/providers-J5eyByQj.js";
|
|
4
|
+
import { n as r, r as i, t as a } from "../chunks/routes-config-yZbESPlw.js";
|
|
5
5
|
import { useMemo as o } from "react";
|
|
6
6
|
import { jsx as s } from "react/jsx-runtime";
|
|
7
7
|
import { usePathname as c, useRouter as l } from "next/navigation";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/delegations-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/delegations-DlYwMiAW.cjs");let t=require("react/jsx-runtime");var n={title:`代理設定 | BPM Admin`,description:`設定簽核代理規則,讓符合範圍的待簽任務自動改派給代理人。`};function r(){return(0,t.jsx)(e.t,{})}exports.default=r,exports.metadata=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/orgs-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/orgs-D0-5BaHT.cjs");let t=require("react/jsx-runtime");var n={title:`組織管理 | BPM Admin`,description:`維護組織樹、職位、會員歸屬與簽核主管解析規則。`};function r(){return(0,t.jsx)(e.t,{})}exports.default=r,exports.metadata=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../views/admin/webhook-endpoints/index.cjs");let t=require("react/jsx-runtime");var n={title:`Webhook 端點 | BPM Admin`,description:`維護知會節點可呼叫的外部系統端點。`};function r(){return(0,t.jsx)(e.AdminWebhookEndpointsView,{})}exports.default=r,exports.metadata=n;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/pages/admin/webhook-endpoints/index.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport type { ReactElement } from 'react';\nimport { AdminWebhookEndpointsView } from '../../../views/admin/webhook-endpoints';\n\nexport const metadata: Metadata = {\n title: 'Webhook 端點 | BPM Admin',\n description: '維護知會節點可呼叫的外部系統端點。',\n};\n\nexport default function AdminWebhookEndpointsPage(): ReactElement {\n return <AdminWebhookEndpointsView />;\n}\n"],"mappings":"sMAIA,IAAa,EAAqB,CAChC,MAAO,yBACP,YAAa,mBACf,EAEA,SAAwB,GAA0C,CAChE,OAAO,EAAA,EAAA,IAAA,CAAC,EAAA,0BAAD,CAA4B,CAAA,CACrC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AdminWebhookEndpointsView as e } from "../../../views/admin/webhook-endpoints/index.js";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
//#region src/pages/admin/webhook-endpoints/index.tsx
|
|
4
|
+
var n = {
|
|
5
|
+
title: "Webhook 端點 | BPM Admin",
|
|
6
|
+
description: "維護知會節點可呼叫的外部系統端點。"
|
|
7
|
+
};
|
|
8
|
+
function r() {
|
|
9
|
+
return /* @__PURE__ */ t(e, {});
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { r as default, n as metadata };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/pages/admin/webhook-endpoints/index.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport type { ReactElement } from 'react';\nimport { AdminWebhookEndpointsView } from '../../../views/admin/webhook-endpoints';\n\nexport const metadata: Metadata = {\n title: 'Webhook 端點 | BPM Admin',\n description: '維護知會節點可呼叫的外部系統端點。',\n};\n\nexport default function AdminWebhookEndpointsPage(): ReactElement {\n return <AdminWebhookEndpointsView />;\n}\n"],"mappings":";;;AAIA,IAAa,IAAqB;CAChC,OAAO;CACP,aAAa;AACf;AAEA,SAAwB,IAA0C;CAChE,OAAO,kBAAC,GAAD,CAA4B,CAAA;AACrC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../chunks/delegations-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../chunks/delegations-8LsxcQM4.cjs");let t=require("react/jsx-runtime");var n={title:`我的代理 | BPM Admin`,description:`設定自己的簽核代理,讓指定期間內的新待簽任務自動交由代理人處理。`};function r(){return(0,t.jsx)(e.t,{})}exports.default=r,exports.metadata=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/detail-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/detail-Db-UOELp.cjs");let t=require("react/jsx-runtime");var n={title:`案件詳情 | BPM Admin`};async function r({params:n}){let{id:r}=await n;return(0,t.jsx)(e.t,{instanceId:r})}exports.default=r,exports.metadata=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../chunks/login-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../chunks/login-AtVxZBsC.cjs");let t=require("react/jsx-runtime");var n={title:`Login | BPM Admin`,description:`Sign in to the BPM approval workflow administration console.`};async function r({searchParams:n}){let{next:r}=await n;return(0,t.jsx)(e.t,{defaultNextPath:r})}exports.default=r,exports.metadata=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/compose-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/compose-BnSRL4ml.cjs");let t=require("react/jsx-runtime"),n=require("next/server");var r={title:`建立模板(表單 + 流程) | BPM Admin`,description:`以精靈式流程一次完成 BPM 表單與簽核流程設計並發佈。`};async function i(){return await(0,n.connection)(),(0,t.jsx)(e.t,{aiAssistantAvailable:!!process.env.OPENAI_API_KEY,showAiAssistant:process.env.BPM_AI_ASSISTANT_ENABLED===`true`})}exports.default=i,exports.metadata=r;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "../../../chunks/compose-
|
|
1
|
+
import { t as e } from "../../../chunks/compose-6P64PO1i.js";
|
|
2
2
|
import { jsx as t } from "react/jsx-runtime";
|
|
3
3
|
import { connection as n } from "next/server";
|
|
4
4
|
//#region src/pages/templates/compose/index.tsx
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/designer-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../../../chunks/designer-_g58R6rQ.cjs");let t=require("react/jsx-runtime");var n={title:`流程設計器 | BPM Admin`,description:`以視覺化設計器編輯 BPM 簽核流程節點、條件與發佈版本。`};async function r({params:n}){let{id:r}=await n;return(0,t.jsx)(e.t,{aiAssistantAvailable:!!process.env.OPENAI_API_KEY,showAiAssistant:process.env.BPM_AI_ASSISTANT_ENABLED===`true`,showDryRun:process.env.BPM_TEMPLATE_DRY_RUN_ENABLED!==`false`,templateId:r})}exports.default=r,exports.metadata=n;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#777;--xy-background-pattern-lines-color-default:#777;--xy-background-pattern-cross-color-default:#777;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}
|
|
1
|
+
.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#555;--xy-background-pattern-lines-color-default:#333;--xy-background-pattern-cross-color-default:#333;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/delegations-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/delegations-DlYwMiAW.cjs");exports.AdminDelegationsView=e.t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../../chunks/delegations-
|
|
1
|
+
import { t as e } from "../../../chunks/delegations-B8gLSt0i.js";
|
|
2
2
|
export { e as AdminDelegationsView };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/users-C9LA-Rd7.cjs"),t=require("../../chunks/orgs-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/users-C9LA-Rd7.cjs"),t=require("../../chunks/orgs-D0-5BaHT.cjs"),n=require("../../chunks/delegations-DlYwMiAW.cjs"),r=require("./webhook-endpoints/index.cjs");exports.AdminDelegationsView=n.t,exports.AdminOrgsView=t.t,exports.AdminUsersView=e.t,exports.AdminWebhookEndpointsView=r.AdminWebhookEndpointsView;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { t as e } from "../../chunks/users-FWrb3ehW.js";
|
|
2
|
-
import { t } from "../../chunks/orgs-
|
|
3
|
-
import { t as n } from "../../chunks/delegations-
|
|
4
|
-
|
|
2
|
+
import { t } from "../../chunks/orgs-BpqVu5ka.js";
|
|
3
|
+
import { t as n } from "../../chunks/delegations-B8gLSt0i.js";
|
|
4
|
+
import { AdminWebhookEndpointsView as r } from "./webhook-endpoints/index.js";
|
|
5
|
+
export { n as AdminDelegationsView, t as AdminOrgsView, e as AdminUsersView, r as AdminWebhookEndpointsView };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/orgs-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/orgs-D0-5BaHT.cjs");exports.AdminOrgsView=e.t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../../chunks/orgs-
|
|
1
|
+
import { t as e } from "../../../chunks/orgs-BpqVu5ka.js";
|
|
2
2
|
export { e as AdminOrgsView };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Back-office management of database webhook endpoints (ADR 18 §3.13):
|
|
4
|
+
* create, edit, disable, rotate the signing secret, test-send and read the
|
|
5
|
+
* change history. Header values and secrets are entered here and never shown
|
|
6
|
+
* again. Administrator-only on the server.
|
|
7
|
+
*/
|
|
8
|
+
export declare function AdminWebhookEndpointsView(): ReactElement;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/rolldown-runtime-BocRIvOZ.cjs"),t=require("../../../chunks/format-date-time-D-cx5M8z.cjs"),n=require("../../../chunks/bpm-form-field-Bc6k4ZEO.cjs");let r=require("react"),i=require("@mezzanine-ui/react"),a=require("react/jsx-runtime"),o=require("@mezzanine-ui/react/ContentHeader");o=e.t(o,1);let s=require("@mezzanine-ui/icons"),c=require("@rytass/bpm-core-client/template");var l={display:`grid`,gap:`var(--mzn-spacing-gap-base)`},u={alignItems:`center`,display:`grid`,gap:`var(--mzn-spacing-gap-base)`,gridTemplateColumns:`minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) auto auto`},d={alignItems:`center`,display:`grid`,gap:`var(--mzn-spacing-gap-base)`,gridTemplateColumns:`minmax(0, 1fr) minmax(0, 2fr) auto`},f=[{id:`POST`,name:`POST`},{id:`PUT`,name:`PUT`},{id:`PATCH`,name:`PATCH`}],p=[{id:`string`,name:`文字`},{id:`number`,name:`數字`},{id:`boolean`,name:`是/否`},{id:`stringArray`,name:`文字清單`},{id:`json`,name:`JSON`}],m={CREATED:`建立`,DISABLED:`停用`,ENABLED:`啟用`,SECRET_ROTATED:`輪替金鑰`,TEST_SENT:`測試送出`,UPDATED:`更新`},h={deprecated:!1,description:``,endpointId:null,headers:[],key:``,label:``,method:`POST`,mode:`create`,originalUrl:``,parameters:[],replaceHeaders:!0,signingSecret:``,timeoutMs:``,url:``,version:`1`};function g(){let[e,u]=(0,r.useState)(null),[d,f]=(0,r.useState)([]),[p,m]=(0,r.useState)(!0),[g,S]=(0,r.useState)(null),[w,T]=(0,r.useState)(null),[E,D]=(0,r.useState)(null),[O,k]=(0,r.useState)(!1),[A,j]=(0,r.useState)(null),[M,N]=(0,r.useState)(``),[P,F]=(0,r.useState)(!1),[I,L]=(0,r.useState)(null),R=(0,r.useCallback)(async()=>{m(!0);try{let e=await(0,c.readWorkflowWebhookEndpointManagement)();u(e),f(e.enabled?await(0,c.listWorkflowWebhookManagedEndpoints)():[]),S(null)}catch(e){S(C(e))}finally{m(!1)}},[]);(0,r.useEffect)(()=>{R()},[R]);let z=(0,r.useCallback)(async e=>{S(null),T(null);try{return T(await e()),await R(),!0}catch(e){return S(C(e)),!1}},[R]),B=(0,r.useMemo)(()=>d.map(e=>({endpoint:e,key:e.id})),[d]),V=(0,r.useMemo)(()=>[{key:`label`,render:({endpoint:e})=>(0,a.jsxs)(`div`,{style:l,children:[(0,a.jsx)(i.Typography,{component:`span`,variant:`body`,children:e.label}),(0,a.jsxs)(i.Typography,{color:`text-neutral`,component:`span`,variant:`caption`,children:[e.key,`@`,e.version,` · 參數`,` `,e.parameters.length,` 個`]})]}),title:`端點`,width:240},{key:`url`,render:({endpoint:e})=>(0,a.jsxs)(i.Typography,{component:`span`,variant:`body`,children:[e.method,` `,e.url]}),title:`URL`,width:320},{key:`status`,render:({endpoint:e})=>e.active?e.deprecated?(0,a.jsx)(i.Badge,{size:`sub`,text:`不建議使用`,variant:`dot-warning`}):(0,a.jsx)(i.Badge,{size:`sub`,text:`啟用中`,variant:`dot-success`}):(0,a.jsx)(i.Badge,{size:`sub`,text:`已停用`,variant:`dot-inactive`}),title:`狀態`,width:120},{key:`credentials`,render:({endpoint:e})=>(0,a.jsxs)(`div`,{style:l,children:[(0,a.jsx)(i.Typography,{component:`span`,variant:`body`,children:e.hasSigningSecret?`已設定簽章金鑰`:`未簽章`}),(0,a.jsx)(i.Typography,{color:`text-neutral`,component:`span`,variant:`caption`,children:e.headerNames.length?`Header:${e.headerNames.join(`、`)}`:`沒有自訂 header`})]}),title:`憑證`,width:200},{key:`updatedAt`,render:({endpoint:e})=>(0,a.jsx)(i.Typography,{component:`span`,variant:`body`,children:t.t(e.updatedAt)}),title:`更新時間`,width:180}],[]),H=(0,r.useMemo)(()=>({render:({endpoint:e})=>[{name:`編輯`,onClick:()=>D(y(e,`edit`))},{name:`建立新版本`,onClick:()=>D(y(e,`version`))},{name:`測試送出`,onClick:()=>{z(async()=>b(e,await(0,c.testWorkflowWebhookEndpoint)(e.id)))}},{name:`輪替金鑰`,onClick:()=>{N(``),F(!1),j(e)}},{name:e.active?`停用`:`啟用`,onClick:()=>{z(async()=>(await(0,c.setWorkflowWebhookEndpointActive)(e.id,!e.active),`已${e.active?`停用`:`啟用`}「${e.label}」。`))}},{name:`異動紀錄`,onClick:()=>{(0,c.listWorkflowWebhookEndpointAudits)(e.id).then(t=>L({endpoint:e,records:t})).catch(e=>S(C(e)))}}],variant:`base-secondary`,width:180}),[z]);async function U(){if(!E)return;k(!0);let e=await z(async()=>{let e=E.parameters.map(e=>({description:e.description.trim()||null,key:e.key.trim(),label:e.label.trim(),required:e.required,type:e.type})),t=E.headers.filter(e=>e.name.trim()).map(e=>({name:e.name.trim(),value:e.value})),n=E.timeoutMs.trim()?Number(E.timeoutMs):null;return E.mode===`edit`&&E.endpointId?(await(0,c.updateWorkflowWebhookEndpoint)({deprecated:E.deprecated,description:E.description,headers:E.replaceHeaders||x(E)?t:null,id:E.endpointId,label:E.label,method:E.method,parameters:e,timeoutMs:n,url:E.url}),`已更新「${E.label}」。`):(await(0,c.createWorkflowWebhookEndpoint)({deprecated:E.deprecated,description:E.description,headers:t,key:E.key,label:E.label,method:E.method,parameters:e,signingSecret:E.signingSecret||null,timeoutMs:n,url:E.url,version:Number(E.version)}),`已建立「${E.label}」v${E.version},設計器現在可以選用。`)});k(!1),e&&D(null)}async function W(){if(!A)return;let e=A;await z(async()=>(await(0,c.rotateWorkflowWebhookEndpointSecret)(e.id,P?null:M),P?`已移除「${e.label}」的簽章金鑰,之後的請求不再簽章。`:`已輪替「${e.label}」的簽章金鑰,接收端需改用新金鑰驗簽。`))&&(j(null),N(``))}let G=!!e?.enabled;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.PageHeader,{children:(0,a.jsx)(o.default,{description:`維護知會節點可呼叫的外部系統端點。Header 值與簽章金鑰加密保存,儲存後不會再顯示。`,title:`Webhook 端點`,children:(0,a.jsx)(i.Button,{disabled:!G,icon:s.PlusIcon,iconType:`leading`,onClick:()=>D(h),variant:`base-primary`,children:`新增端點`})})}),(0,a.jsx)(i.SectionGroup,{children:(0,a.jsx)(i.Section,{children:(0,a.jsxs)(`div`,{style:l,children:[g?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:g}):null,w?(0,a.jsx)(i.Typography,{color:`text-success`,variant:`body`,children:w}):null,e&&!G?(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:`此伺服器未啟用後台維護的 Webhook 端點:需要設定 workflowWebhookTargetSources 含 DATABASE、URL 白名單與加密金鑰。程式註冊的端點不受影響。`}):null,G?(0,a.jsxs)(i.Typography,{color:`text-neutral`,variant:`caption`,children:[`允許的 URL:`,e?.allowedUrlPatterns.join(`、`)]}):null,(0,a.jsx)(i.Table,{actions:H,columns:V,dataSource:B,fullWidth:!0,loading:p})]})})}),E?(0,a.jsx)(v,{draft:E,onCancel:()=>D(null),onChange:D,onConfirm:()=>void U(),saving:O}):null,(0,a.jsx)(i.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!P&&!M},confirmText:P?`移除金鑰`:`輪替金鑰`,modalType:`standard`,onCancel:()=>j(null),onClose:()=>j(null),onConfirm:()=>void W(),open:!!A,showModalFooter:!0,showModalHeader:!0,supportingText:`新金鑰會加密保存,不會再顯示;請同時更新接收端的驗簽金鑰。`,title:`輪替簽章金鑰:${A?.label??``}`,children:(0,a.jsxs)(`div`,{style:l,children:[(0,a.jsx)(n.t,{label:`移除金鑰`,name:`removeSigningSecret`,children:(0,a.jsx)(i.Toggle,{checked:P,onChange:e=>F(e.target.checked)})}),P?null:(0,a.jsx)(n.t,{label:`新金鑰`,name:`nextSigningSecret`,required:!0,children:(0,a.jsx)(i.Input,{onChange:e=>N(e.target.value),value:M,inputProps:{autoComplete:`new-password`},variant:`password`})})]})}),(0,a.jsx)(i.Modal,{confirmText:`關閉`,modalType:`standard`,onClose:()=>L(null),onConfirm:()=>L(null),open:!!I,showModalFooter:!0,showModalHeader:!0,size:`wide`,supportingText:`只記錄誰在何時變更了哪些欄位,不記錄任何值。`,title:`異動紀錄:${I?.endpoint.label??``}`,children:(0,a.jsx)(i.Table,{columns:_,dataSource:(I?.records??[]).map(e=>({audit:e,key:e.id})),fullWidth:!0})})]})}var _=[{key:`createdAt`,render:({audit:e})=>(0,a.jsx)(i.Typography,{component:`span`,variant:`body`,children:t.t(e.createdAt)}),title:`時間`,width:180},{key:`action`,render:({audit:e})=>(0,a.jsx)(i.Typography,{component:`span`,variant:`body`,children:m[e.action]}),title:`動作`,width:120},{key:`changedFields`,render:({audit:e})=>(0,a.jsx)(i.Typography,{component:`span`,variant:`body`,children:e.changedFields.join(`、`)||`—`}),title:`欄位`,width:280},{key:`actor`,render:({audit:e})=>(0,a.jsx)(i.Typography,{component:`span`,variant:`body`,children:e.actorMemberId??`系統`}),title:`操作者`,width:160}];function v({draft:e,onCancel:t,onChange:r,onConfirm:o,saving:c}){let m=e.mode===`edit`,h=x(e),g=e.replaceHeaders||h,_=t=>r({...e,...t}),v=(t,n)=>_({parameters:e.parameters.map((e,r)=>r===t?{...e,...n}:e)}),y=(t,n)=>_({headers:e.headers.map((e,r)=>r===t?{...e,...n}:e)}),b=e=>t=>_({[e]:t.target.value});return(0,a.jsx)(i.Modal,{cancelText:`取消`,confirmText:m?`儲存`:`建立`,loading:c,modalType:`standard`,onCancel:t,onClose:t,onConfirm:o,open:!0,showModalFooter:!0,showModalHeader:!0,size:`wide`,supportingText:m?`參數的鍵、型別與必填是這個版本的契約,無法修改;需要變更請建立新版本。`:e.mode===`version`?`新版本可調整參數;既有模板仍使用舊版本,直到設計者改選。`:`URL 需符合伺服器設定的白名單。`,title:m?`編輯端點:${e.label}`:e.mode===`version`?`建立新版本:${e.key}`:`新增 Webhook 端點`,children:(0,a.jsxs)(`div`,{style:l,children:[(0,a.jsx)(n.t,{label:`Key`,name:`endpointKey`,required:!0,children:(0,a.jsx)(i.Input,{...e.mode===`create`?{}:{readonly:!0},onChange:b(`key`),placeholder:`例如 crm.lead-created`,value:e.key,inputProps:{autoComplete:`off`},variant:`base`})}),(0,a.jsx)(n.t,{label:`版本`,name:`endpointVersion`,required:!0,children:(0,a.jsx)(i.Input,{...m?{readonly:!0}:{},inputProps:{autoComplete:`off`,inputMode:`numeric`},onChange:b(`version`),value:e.version,variant:`base`})}),(0,a.jsx)(n.t,{label:`名稱`,name:`endpointLabel`,required:!0,children:(0,a.jsx)(i.Input,{onChange:b(`label`),placeholder:`例如 CRM 建立名單`,value:e.label,inputProps:{autoComplete:`off`},variant:`base`})}),(0,a.jsx)(n.t,{label:`說明`,name:`endpointDescription`,children:(0,a.jsx)(i.Textarea,{onChange:b(`description`),rows:2,value:e.description})}),(0,a.jsx)(n.t,{label:`URL`,name:`endpointUrl`,required:!0,children:(0,a.jsx)(i.Input,{onChange:b(`url`),placeholder:`https://`,value:e.url,inputProps:{autoComplete:`off`},variant:`base`})}),(0,a.jsx)(n.t,{label:`Method`,name:`endpointMethod`,required:!0,children:(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>_({method:e?.id??`POST`}),options:[...f],value:f.find(t=>t.id===e.method)??null})}),(0,a.jsx)(n.t,{hintText:`留空使用預設 10 秒,上限 30000 毫秒。`,label:`逾時(毫秒)`,name:`endpointTimeout`,children:(0,a.jsx)(i.Input,{inputProps:{autoComplete:`off`,inputMode:`numeric`},onChange:b(`timeoutMs`),value:e.timeoutMs,variant:`base`})}),(0,a.jsx)(n.t,{label:`不建議使用`,name:`endpointDeprecated`,children:(0,a.jsx)(i.Toggle,{checked:e.deprecated,onChange:e=>_({deprecated:e.target.checked})})}),m?null:(0,a.jsx)(n.t,{hintText:`選填;設定後 BPM 以 HMAC-SHA256 簽章,儲存後不會再顯示。`,label:`簽章金鑰`,name:`endpointSigningSecret`,children:(0,a.jsx)(i.Input,{onChange:b(`signingSecret`),placeholder:`選填,儲存後不再顯示`,value:e.signingSecret,inputProps:{autoComplete:`new-password`},variant:`password`})}),(0,a.jsx)(i.Typography,{variant:`label-primary-highlight`,children:`Headers`}),m?(0,a.jsx)(n.t,{hintText:h?`URL 已改到其他主機,必須重新輸入 header(留空代表不帶任何 header)。`:`現有 header 的值不會顯示;開啟後以下列內容取代全部 header。`,label:`取代 headers`,name:`endpointReplaceHeaders`,children:(0,a.jsx)(i.Toggle,{checked:g,disabled:h,onChange:e=>_({replaceHeaders:e.target.checked})})}):null,g?e.headers.map((t,n)=>(0,a.jsxs)(`div`,{style:d,children:[(0,a.jsx)(i.Input,{onChange:e=>y(n,{name:e.target.value}),placeholder:`名稱,例如 Authorization`,inputProps:{autoComplete:`off`},value:t.name,variant:`base`}),(0,a.jsx)(i.Input,{onChange:e=>y(n,{value:e.target.value}),placeholder:`值`,value:t.value,inputProps:{autoComplete:`new-password`},variant:`password`}),(0,a.jsx)(i.Button,{icon:s.TrashIcon,iconType:`icon-only`,onClick:()=>_({headers:e.headers.filter((e,t)=>t!==n)}),variant:`destructive-text-link`,children:`移除 header`})]},n)):null,g?(0,a.jsx)(`div`,{children:(0,a.jsx)(i.Button,{icon:s.PlusIcon,iconType:`leading`,onClick:()=>_({headers:[...e.headers,{name:``,value:``}]}),variant:`base-dashed`,children:`新增 header`})}):null,(0,a.jsx)(i.Typography,{variant:`label-primary-highlight`,children:`參數`}),e.parameters.map((t,n)=>(0,a.jsxs)(`div`,{style:u,children:[(0,a.jsx)(i.Input,{...m?{readonly:!0}:{},onChange:e=>v(n,{key:e.target.value}),placeholder:`參數鍵`,inputProps:{autoComplete:`off`},value:t.key,variant:`base`}),(0,a.jsx)(i.Input,{onChange:e=>v(n,{label:e.target.value}),placeholder:`顯示名稱`,inputProps:{autoComplete:`off`},value:t.label,variant:`base`}),(0,a.jsx)(i.Select,{clearable:!1,disabled:m,onChange:e=>v(n,{type:S(e?.id??null)}),options:[...p],value:p.find(e=>e.id===t.type)??null}),(0,a.jsx)(i.Toggle,{checked:t.required,disabled:m,label:`必填`,onChange:e=>v(n,{required:e.target.checked})}),(0,a.jsx)(i.Button,{disabled:m,icon:s.TrashIcon,iconType:`icon-only`,onClick:()=>_({parameters:e.parameters.filter((e,t)=>t!==n)}),variant:`destructive-text-link`,children:`移除參數`})]},n)),m?null:(0,a.jsx)(`div`,{children:(0,a.jsx)(i.Button,{icon:s.PlusIcon,iconType:`leading`,onClick:()=>_({parameters:[...e.parameters,{description:``,key:``,label:``,required:!1,type:`string`}]}),variant:`base-dashed`,children:`新增參數`})})]})})}function y(e,t){return{deprecated:e.deprecated,description:e.description??``,endpointId:t===`edit`?e.id:null,headers:[],key:e.key,label:e.label,method:e.method,mode:t,originalUrl:e.url,parameters:e.parameters.map(e=>({description:e.description??``,key:e.key,label:e.label,required:e.required,type:e.type})),replaceHeaders:t===`version`,signingSecret:``,timeoutMs:e.timeoutMs?String(e.timeoutMs):``,url:e.url,version:String(t===`version`?e.version+1:e.version)}}function b(e,t){if(t.ok)return`測試送出成功:「${e.label}」回應 HTTP ${t.status??``}。`;throw Error(`測試送出失敗:「${e.label}」${t.status?`回應 HTTP ${t.status}`:``}(${t.errorCode??`未知錯誤`})${t.errorDetail?`:${t.errorDetail}`:``}`)}function x(e){if(e.mode!==`edit`)return!1;let t=e=>{try{return new URL(e.trim()).origin}catch{return e.trim()}};return t(e.url)!==t(e.originalUrl)}function S(e){return p.some(t=>t.id===e)?e:`string`}function C(e){if(!(e instanceof Error))return`發生未知錯誤`;let t=e.message;return t.includes(`WORKFLOW_WEBHOOK_URL_NOT_ALLOWED`)?`URL 不在伺服器允許的白名單內。`:t.includes(`WORKFLOW_WEBHOOK_ENDPOINT_KEY_CONFLICT`)?`這個 Key 已由程式註冊的端點使用,請換一個。`:t.includes(`WORKFLOW_WEBHOOK_ENDPOINT_CONTRACT_CHANGED`)?`參數契約不能修改,請改用「建立新版本」。`:t.includes(`WORKFLOW_WEBHOOK_TEST_RATE_LIMITED`)?`測試送出太頻繁,請稍後再試(每 10 秒一次、10 分鐘最多 5 次)。`:t}exports.AdminWebhookEndpointsView=g;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|