@rytass/bpm-core-react 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +1 -0
  3. package/dist/chunks/FormBuilderView-Bg9ftYz-.cjs +4 -0
  4. package/dist/chunks/FormBuilderView-Bg9ftYz-.cjs.map +1 -0
  5. package/dist/chunks/{FormBuilderView-DbfbLZCI.js → FormBuilderView-CBvdcg_t.js} +675 -614
  6. package/dist/chunks/FormBuilderView-CBvdcg_t.js.map +1 -0
  7. package/dist/chunks/FormRendererView-D-p6GDQB.cjs +6 -0
  8. package/dist/chunks/FormRendererView-D-p6GDQB.cjs.map +1 -0
  9. package/dist/chunks/FormRendererView-DHXmekC3.js +1319 -0
  10. package/dist/chunks/FormRendererView-DHXmekC3.js.map +1 -0
  11. package/dist/chunks/{approval-instance-list-page-Cv5I1YPX.cjs → approval-instance-list-page-BqkG9jiR.cjs} +2 -2
  12. package/dist/chunks/{approval-instance-list-page-Cv5I1YPX.cjs.map → approval-instance-list-page-BqkG9jiR.cjs.map} +1 -1
  13. package/dist/chunks/{approval-instance-list-page-BI5fIXc-.js → approval-instance-list-page-CsSpIN4C.js} +2 -2
  14. package/dist/chunks/{approval-instance-list-page-BI5fIXc-.js.map → approval-instance-list-page-CsSpIN4C.js.map} +1 -1
  15. package/dist/chunks/compose-B43jtdyL.cjs +2 -0
  16. package/dist/chunks/compose-B43jtdyL.cjs.map +1 -0
  17. package/dist/chunks/{compose-U1zs3Yof.js → compose-C7yS6bJm.js} +162 -148
  18. package/dist/chunks/compose-C7yS6bJm.js.map +1 -0
  19. package/dist/chunks/{dashboard-page-BoqNhjT_.js → dashboard-page-DBJCsPya.js} +2 -2
  20. package/dist/chunks/{dashboard-page-BoqNhjT_.js.map → dashboard-page-DBJCsPya.js.map} +1 -1
  21. package/dist/chunks/{dashboard-page-D7YJ3udk.cjs → dashboard-page-lqlLELKs.cjs} +2 -2
  22. package/dist/chunks/{dashboard-page-D7YJ3udk.cjs.map → dashboard-page-lqlLELKs.cjs.map} +1 -1
  23. package/dist/chunks/{designer-DPG7R_WP.js → designer-B9Ut4xze.js} +1786 -1463
  24. package/dist/chunks/designer-B9Ut4xze.js.map +1 -0
  25. package/dist/chunks/designer-eXw7R9ug.cjs +69 -0
  26. package/dist/chunks/designer-eXw7R9ug.cjs.map +1 -0
  27. package/dist/chunks/{detail-CHZDNNM6.js → detail-BB_uYaoM.js} +904 -896
  28. package/dist/chunks/detail-BB_uYaoM.js.map +1 -0
  29. package/dist/chunks/detail-DN8pEzUJ.cjs +5 -0
  30. package/dist/chunks/detail-DN8pEzUJ.cjs.map +1 -0
  31. package/dist/chunks/instance-error-message-BKt07-Bo.js +270 -0
  32. package/dist/chunks/instance-error-message-BKt07-Bo.js.map +1 -0
  33. package/dist/chunks/instance-error-message-BL_X7Af8.cjs +2 -0
  34. package/dist/chunks/instance-error-message-BL_X7Af8.cjs.map +1 -0
  35. package/dist/chunks/member-profile-resolution-CJlgVdTR.js +44 -0
  36. package/dist/chunks/member-profile-resolution-CJlgVdTR.js.map +1 -0
  37. package/dist/chunks/member-profile-resolution-DiH-P-Vh.cjs +2 -0
  38. package/dist/chunks/member-profile-resolution-DiH-P-Vh.cjs.map +1 -0
  39. package/dist/chunks/{providers-CQWekD7_.js → providers-D35lBOTd.js} +2 -2
  40. package/dist/chunks/{providers-CQWekD7_.js.map → providers-D35lBOTd.js.map} +1 -1
  41. package/dist/chunks/{providers-VUOh6i0i.cjs → providers-Dz4Wqxr6.cjs} +2 -2
  42. package/dist/chunks/{providers-VUOh6i0i.cjs.map → providers-Dz4Wqxr6.cjs.map} +1 -1
  43. package/dist/chunks/{routes-config-C1j_vFKo.cjs → routes-config-BWjZDAU3.cjs} +2 -2
  44. package/dist/chunks/{routes-config-C1j_vFKo.cjs.map → routes-config-BWjZDAU3.cjs.map} +1 -1
  45. package/dist/chunks/{routes-config-BcNaWJWJ.js → routes-config-DjEOE9eP.js} +3 -2
  46. package/dist/chunks/{routes-config-BcNaWJWJ.js.map → routes-config-DjEOE9eP.js.map} +1 -1
  47. package/dist/chunks/users-C_Dtw_sR.cjs +2 -0
  48. package/dist/chunks/users-C_Dtw_sR.cjs.map +1 -0
  49. package/dist/chunks/users-wgM3TqU3.js +513 -0
  50. package/dist/chunks/users-wgM3TqU3.js.map +1 -0
  51. package/dist/index.cjs +1 -1
  52. package/dist/index.js +4 -4
  53. package/dist/lib/routes-config.d.cts +2 -0
  54. package/dist/lib/routes-config.d.ts +2 -0
  55. package/dist/next/index.cjs +1 -1
  56. package/dist/next/index.js +2 -2
  57. package/dist/pages/admin/stuck-instances/index.cjs +2 -0
  58. package/dist/pages/admin/stuck-instances/index.cjs.map +1 -0
  59. package/dist/pages/admin/stuck-instances/index.d.cts +4 -0
  60. package/dist/pages/admin/stuck-instances/index.d.ts +4 -0
  61. package/dist/pages/admin/stuck-instances/index.js +13 -0
  62. package/dist/pages/admin/stuck-instances/index.js.map +1 -0
  63. package/dist/pages/admin/users/index.cjs +1 -1
  64. package/dist/pages/admin/users/index.js +1 -1
  65. package/dist/pages/instances/detail/index.cjs +1 -1
  66. package/dist/pages/instances/detail/index.js +1 -1
  67. package/dist/pages/templates/compose/index.cjs +1 -1
  68. package/dist/pages/templates/compose/index.js +1 -1
  69. package/dist/pages/templates/designer/index.cjs +1 -1
  70. package/dist/pages/templates/designer/index.js +1 -1
  71. package/dist/views/admin/index.cjs +1 -1
  72. package/dist/views/admin/index.d.cts +1 -0
  73. package/dist/views/admin/index.d.ts +1 -0
  74. package/dist/views/admin/index.js +3 -2
  75. package/dist/views/admin/stuck-instances/AdminStuckInstancesView.d.cts +10 -0
  76. package/dist/views/admin/stuck-instances/AdminStuckInstancesView.d.ts +10 -0
  77. package/dist/views/admin/stuck-instances/StuckInstanceCancelModal.d.cts +14 -0
  78. package/dist/views/admin/stuck-instances/StuckInstanceCancelModal.d.ts +14 -0
  79. package/dist/views/admin/stuck-instances/index.cjs +2 -0
  80. package/dist/views/admin/stuck-instances/index.cjs.map +1 -0
  81. package/dist/views/admin/stuck-instances/index.d.cts +2 -0
  82. package/dist/views/admin/stuck-instances/index.d.ts +2 -0
  83. package/dist/views/admin/stuck-instances/index.js +237 -0
  84. package/dist/views/admin/stuck-instances/index.js.map +1 -0
  85. package/dist/views/admin/users/index.cjs +1 -1
  86. package/dist/views/admin/users/index.js +1 -1
  87. package/dist/views/cc/index.cjs +1 -1
  88. package/dist/views/cc/index.js +1 -1
  89. package/dist/views/dashboard/index.cjs +1 -1
  90. package/dist/views/dashboard/index.js +1 -1
  91. package/dist/views/forms/builder/index.cjs +1 -1
  92. package/dist/views/forms/builder/index.js +1 -1
  93. package/dist/views/forms/renderer/FormRendererView.d.cts +26 -1
  94. package/dist/views/forms/renderer/FormRendererView.d.ts +26 -1
  95. package/dist/views/forms/renderer/index.cjs +1 -1
  96. package/dist/views/forms/renderer/index.js +1 -1
  97. package/dist/views/inbox/index.cjs +1 -1
  98. package/dist/views/inbox/index.js +1 -1
  99. package/dist/views/instances/approver-filled-form.d.cts +56 -20
  100. package/dist/views/instances/approver-filled-form.d.ts +56 -20
  101. package/dist/views/instances/detail/index.cjs +1 -1
  102. package/dist/views/instances/detail/index.js +1 -1
  103. package/dist/views/instances/detail/sections/InstanceFormSection.d.cts +7 -0
  104. package/dist/views/instances/detail/sections/InstanceFormSection.d.ts +7 -0
  105. package/dist/views/instances/detail/sections/InstanceTasksSection.d.cts +1 -1
  106. package/dist/views/instances/detail/sections/InstanceTasksSection.d.ts +1 -1
  107. package/dist/views/instances/new/index.cjs +1 -1
  108. package/dist/views/instances/new/index.js +5 -5
  109. package/dist/views/instances/new/index.js.map +1 -1
  110. package/dist/views/search/index.cjs +1 -1
  111. package/dist/views/search/index.js +1 -1
  112. package/dist/views/sent/index.cjs +1 -1
  113. package/dist/views/sent/index.js +1 -1
  114. package/dist/views/templates/compose/index.cjs +1 -1
  115. package/dist/views/templates/compose/index.js +1 -1
  116. package/dist/views/templates/compose/steps/ComposeReviewStep.d.cts +3 -1
  117. package/dist/views/templates/compose/steps/ComposeReviewStep.d.ts +3 -1
  118. package/dist/views/templates/compose/steps/ComposeWorkflowStep.d.cts +4 -1
  119. package/dist/views/templates/compose/steps/ComposeWorkflowStep.d.ts +4 -1
  120. package/dist/views/templates/compose/use-template-compose-wizard.d.cts +3 -1
  121. package/dist/views/templates/compose/use-template-compose-wizard.d.ts +3 -1
  122. package/dist/views/templates/designer/TemplateDesignerView.d.cts +10 -1
  123. package/dist/views/templates/designer/TemplateDesignerView.d.ts +10 -1
  124. package/dist/views/templates/designer/approver-resolver-model.d.cts +31 -0
  125. package/dist/views/templates/designer/approver-resolver-model.d.ts +31 -0
  126. package/dist/views/templates/designer/field-access-matrix/FieldAccessMatrixDrawer.d.cts +3 -1
  127. package/dist/views/templates/designer/field-access-matrix/FieldAccessMatrixDrawer.d.ts +3 -1
  128. package/dist/views/templates/designer/field-access-matrix/field-access-copy.d.cts +3 -2
  129. package/dist/views/templates/designer/field-access-matrix/field-access-copy.d.ts +3 -2
  130. package/dist/views/templates/designer/index.cjs +1 -1
  131. package/dist/views/templates/designer/index.js +1 -1
  132. package/dist/views/templates/designer/launch-mode.d.cts +19 -0
  133. package/dist/views/templates/designer/launch-mode.d.ts +19 -0
  134. package/dist/views/templates/designer/node-actor-resolver-options.d.cts +30 -3
  135. package/dist/views/templates/designer/node-actor-resolver-options.d.ts +30 -3
  136. package/dist/views/templates/designer/publish-default-value-check.d.cts +36 -0
  137. package/dist/views/templates/designer/publish-default-value-check.d.ts +36 -0
  138. package/dist/views/templates/index.cjs +1 -1
  139. package/dist/views/templates/index.js +1 -1
  140. package/dist/views/templates/versions/index.cjs +1 -1
  141. package/dist/views/templates/versions/index.js +1 -1
  142. package/package.json +23 -3
  143. package/dist/chunks/FormBuilderView-Bok4Y59D.cjs +0 -4
  144. package/dist/chunks/FormBuilderView-Bok4Y59D.cjs.map +0 -1
  145. package/dist/chunks/FormBuilderView-DbfbLZCI.js.map +0 -1
  146. package/dist/chunks/FormRendererView-CAyPXhPq.js +0 -1351
  147. package/dist/chunks/FormRendererView-CAyPXhPq.js.map +0 -1
  148. package/dist/chunks/FormRendererView-iLlHFIUR.cjs +0 -6
  149. package/dist/chunks/FormRendererView-iLlHFIUR.cjs.map +0 -1
  150. package/dist/chunks/compose-DP1N4twA.cjs +0 -2
  151. package/dist/chunks/compose-DP1N4twA.cjs.map +0 -1
  152. package/dist/chunks/compose-U1zs3Yof.js.map +0 -1
  153. package/dist/chunks/designer-CWL-dCQ_.cjs +0 -69
  154. package/dist/chunks/designer-CWL-dCQ_.cjs.map +0 -1
  155. package/dist/chunks/designer-DPG7R_WP.js.map +0 -1
  156. package/dist/chunks/detail-BUfsSal0.cjs +0 -5
  157. package/dist/chunks/detail-BUfsSal0.cjs.map +0 -1
  158. package/dist/chunks/detail-CHZDNNM6.js.map +0 -1
  159. package/dist/chunks/instance-error-message-BEM4O_Kj.js +0 -208
  160. package/dist/chunks/instance-error-message-BEM4O_Kj.js.map +0 -1
  161. package/dist/chunks/instance-error-message-BpCLCOjp.cjs +0 -2
  162. package/dist/chunks/instance-error-message-BpCLCOjp.cjs.map +0 -1
  163. package/dist/chunks/users-BBtiZ9QQ.js +0 -486
  164. package/dist/chunks/users-BBtiZ9QQ.js.map +0 -1
  165. package/dist/chunks/users-EqSzDhuj.cjs +0 -2
  166. package/dist/chunks/users-EqSzDhuj.cjs.map +0 -1
@@ -1,78 +1,78 @@
1
1
  "use client";
2
2
  import { r as e } from "./router-adapter-CkxCyzf5.js";
3
- import { r as t } from "./routes-config-BcNaWJWJ.js";
4
- import { t as n } from "./FormBuilderView-DbfbLZCI.js";
5
- import { t as r } from "./FormRendererView-CAyPXhPq.js";
6
- import { n as i, r as a, t as o } from "./designer-DPG7R_WP.js";
7
- import { o as s } from "./organization-time-zone-provider-DNL8yo4-.js";
8
- import { useCallback as c, useEffect as l, useState as u } from "react";
9
- import { Button as d, Empty as f, FormField as p, Input as m, PageHeader as h, Section as g, SectionGroup as _, Select as v, Step as y, Stepper as b, Table as x, Tag as S, Typography as C } from "@mezzanine-ui/react";
10
- import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
11
- import { FormFieldLayout as D } from "@mezzanine-ui/core/form";
12
- import O from "@mezzanine-ui/react/ContentHeader";
13
- import { composeApprovalTemplateWithForm as k, listApprovalTemplateCategoriesPage as A } from "@rytass/bpm-core-client/template";
3
+ import { r as t } from "./routes-config-DjEOE9eP.js";
4
+ import { t as n } from "./FormBuilderView-CBvdcg_t.js";
5
+ import { a as r, i, n as a, r as o, t as s } from "./designer-B9Ut4xze.js";
6
+ import { t as c } from "./FormRendererView-DHXmekC3.js";
7
+ import { o as l } from "./organization-time-zone-provider-DNL8yo4-.js";
8
+ import { useCallback as u, useEffect as d, useState as f } from "react";
9
+ import { Button as p, Empty as m, FormField as h, Input as g, PageHeader as _, Section as v, SectionGroup as y, Select as b, Step as x, Stepper as S, Table as C, Tag as w, Typography as T } from "@mezzanine-ui/react";
10
+ import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
11
+ import { FormFieldLayout as k } from "@mezzanine-ui/core/form";
12
+ import A from "@mezzanine-ui/react/ContentHeader";
13
+ import { composeApprovalTemplateWithForm as j, listApprovalTemplateCategoriesPage as M } from "@rytass/bpm-core-client/template";
14
14
  // src/views/templates/compose/steps/ComposeFormStep.tsx
15
- var j = {
15
+ var N = {
16
16
  id: "UNCATEGORIZED",
17
17
  name: "未分類"
18
- }, M = 100;
19
- function N({ categoryId: e, formSchema: t, formUiSchema: r, name: i, onCategoryIdChange: a, onFormChange: o, onNameChange: s }) {
20
- let [c, d] = u([]);
21
- l(() => {
18
+ }, P = 100;
19
+ function F({ categoryId: e, formSchema: t, formUiSchema: r, name: i, onCategoryIdChange: a, onFormChange: o, onNameChange: s }) {
20
+ let [c, l] = f([]);
21
+ d(() => {
22
22
  let e = !0;
23
23
  return (async () => {
24
24
  try {
25
- let t = await A({
25
+ let t = await M({
26
26
  page: 1,
27
- pageSize: M,
27
+ pageSize: P,
28
28
  searchText: "",
29
29
  status: "ACTIVE"
30
30
  });
31
- e && d(t.categories);
31
+ e && l(t.categories);
32
32
  } catch {
33
- e && d([]);
33
+ e && l([]);
34
34
  }
35
35
  })(), () => {
36
36
  e = !1;
37
37
  };
38
38
  }, []);
39
- let f = [j, ...c.map((e) => ({
39
+ let u = [N, ...c.map((e) => ({
40
40
  id: e.id,
41
41
  name: e.name
42
- }))], h = f.find((t) => t.id === e) ?? j;
43
- return /* @__PURE__ */ E(w, { children: [
44
- /* @__PURE__ */ E("div", {
45
- style: P,
46
- children: [/* @__PURE__ */ T(p, {
42
+ }))], p = u.find((t) => t.id === e) ?? N;
43
+ return /* @__PURE__ */ O(E, { children: [
44
+ /* @__PURE__ */ O("div", {
45
+ style: I,
46
+ children: [/* @__PURE__ */ D(h, {
47
47
  label: "名稱",
48
- layout: D.VERTICAL,
48
+ layout: k.VERTICAL,
49
49
  name: "composeName",
50
- children: /* @__PURE__ */ T(m, {
50
+ children: /* @__PURE__ */ D(g, {
51
51
  fullWidth: !0,
52
52
  onChange: (e) => s(e.target.value),
53
53
  placeholder: "例如:請款簽核",
54
54
  value: i
55
55
  })
56
- }), /* @__PURE__ */ T(p, {
56
+ }), /* @__PURE__ */ D(h, {
57
57
  label: "分類(選填)",
58
- layout: D.VERTICAL,
58
+ layout: k.VERTICAL,
59
59
  name: "composeCategory",
60
- children: /* @__PURE__ */ T(v, {
60
+ children: /* @__PURE__ */ D(b, {
61
61
  clearable: !1,
62
62
  fullWidth: !0,
63
- onChange: (e) => a(e && e.id !== j.id ? e.id : null),
64
- options: f,
63
+ onChange: (e) => a(e && e.id !== N.id ? e.id : null),
64
+ options: u,
65
65
  placeholder: "未分類",
66
- value: h
66
+ value: p
67
67
  })
68
68
  })]
69
69
  }),
70
- /* @__PURE__ */ T(C, {
70
+ /* @__PURE__ */ D(T, {
71
71
  color: "text-neutral",
72
72
  variant: "caption",
73
73
  children: "先設計表單欄位,下一步的流程條件分流即可直接引用這些欄位。"
74
74
  }),
75
- /* @__PURE__ */ T(n, {
75
+ /* @__PURE__ */ D(n, {
76
76
  onChange: o,
77
77
  value: {
78
78
  schema: t,
@@ -81,85 +81,90 @@ function N({ categoryId: e, formSchema: t, formUiSchema: r, name: i, onCategoryI
81
81
  })
82
82
  ] });
83
83
  }
84
- var P = {
84
+ var I = {
85
85
  display: "grid",
86
86
  gap: 16,
87
87
  gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))"
88
88
  };
89
89
  // src/views/templates/compose/steps/ComposeReviewStep.tsx
90
- function F({ formSchema: e, formUiSchema: t, initiatorPolicyCel: n, name: i, publishError: a, workflowDefinition: o }) {
91
- let s = o?.nodes ?? [], c = o?.edges ?? [], l = e.fields.length, u = new Map(s.map((e) => [e.id, e.data.label])), d = s.map((e) => ({
92
- detail: z(e) ?? "—",
90
+ function L({ formSchema: e, formUiSchema: t, initiatorPolicyCel: n, launchMode: i, name: a, publishError: o, workflowDefinition: s }) {
91
+ let l = s?.nodes ?? [], u = s?.edges ?? [], d = e.fields.length, f = new Map(l.map((e) => [e.id, e.data.label])), p = l.map((e) => ({
92
+ detail: V(e) ?? "—",
93
93
  key: e.id,
94
94
  label: e.data.label,
95
- typeLabel: R(e)
96
- })), p = c.filter((e) => !!e.data.condition).map((e) => ({
95
+ typeLabel: B(e)
96
+ })), h = u.filter((e) => !!e.data.condition).map((e) => ({
97
97
  condition: e.data.condition ?? "",
98
98
  key: e.id,
99
- source: u.get(e.source) ?? e.source,
100
- target: u.get(e.target) ?? e.target
99
+ source: f.get(e.source) ?? e.source,
100
+ target: f.get(e.target) ?? e.target
101
101
  }));
102
- return /* @__PURE__ */ E("div", {
103
- style: B,
102
+ return /* @__PURE__ */ O("div", {
103
+ style: H,
104
104
  children: [
105
- /* @__PURE__ */ T(C, {
105
+ /* @__PURE__ */ D(T, {
106
106
  component: "h2",
107
- style: V,
107
+ style: U,
108
108
  variant: "h2",
109
- children: i || "(未命名)"
109
+ children: a || "(未命名)"
110
110
  }),
111
- /* @__PURE__ */ E("div", {
112
- style: B,
113
- children: [/* @__PURE__ */ T(C, {
111
+ /* @__PURE__ */ O("div", {
112
+ style: H,
113
+ children: [/* @__PURE__ */ D(T, {
114
114
  variant: "h3",
115
115
  children: "表單預覽"
116
- }), l > 0 ? /* @__PURE__ */ T(r, {
116
+ }), d > 0 ? /* @__PURE__ */ D(c, {
117
117
  dataSourceContext: { kind: "preview" },
118
118
  readonly: !0,
119
119
  schema: e,
120
120
  uiSchema: t
121
- }) : /* @__PURE__ */ T(f, { title: "尚未設計表單欄位" })]
121
+ }) : /* @__PURE__ */ D(m, { title: "尚未設計表單欄位" })]
122
122
  }),
123
- /* @__PURE__ */ E("div", {
124
- style: B,
123
+ /* @__PURE__ */ O("div", {
124
+ style: H,
125
125
  children: [
126
- /* @__PURE__ */ T(C, {
126
+ /* @__PURE__ */ D(T, {
127
127
  variant: "h3",
128
128
  children: "流程概覽"
129
129
  }),
130
- s.length > 0 ? /* @__PURE__ */ T(x, {
131
- columns: I,
132
- dataSource: d,
130
+ l.length > 0 ? /* @__PURE__ */ D(C, {
131
+ columns: R,
132
+ dataSource: p,
133
133
  fullWidth: !0
134
- }) : /* @__PURE__ */ T(f, { title: "尚未設計流程節點" }),
135
- p.length > 0 ? /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T(C, {
134
+ }) : /* @__PURE__ */ D(m, { title: "尚未設計流程節點" }),
135
+ h.length > 0 ? /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(T, {
136
136
  color: "text-neutral",
137
137
  variant: "caption",
138
138
  children: "條件分流"
139
- }), /* @__PURE__ */ T(x, {
140
- columns: L,
141
- dataSource: p,
139
+ }), /* @__PURE__ */ D(C, {
140
+ columns: z,
141
+ dataSource: h,
142
142
  fullWidth: !0
143
143
  })] }) : null,
144
- n ? /* @__PURE__ */ E(C, {
144
+ /* @__PURE__ */ O(T, {
145
+ color: "text-neutral",
146
+ variant: "caption",
147
+ children: ["發起方式:", r(i).name]
148
+ }),
149
+ n ? /* @__PURE__ */ O(T, {
145
150
  color: "text-neutral",
146
151
  variant: "caption",
147
152
  children: ["發起權限:", n]
148
153
  }) : null
149
154
  ]
150
155
  }),
151
- a ? /* @__PURE__ */ T(C, {
156
+ o ? /* @__PURE__ */ D(T, {
152
157
  color: "text-error",
153
158
  variant: "body",
154
- children: a
159
+ children: o
155
160
  }) : null
156
161
  ]
157
162
  });
158
163
  }
159
- var I = [
164
+ var R = [
160
165
  {
161
166
  key: "type",
162
- render: (e) => /* @__PURE__ */ T(S, {
167
+ render: (e) => /* @__PURE__ */ D(w, {
163
168
  label: e.typeLabel,
164
169
  size: "sub",
165
170
  type: "static"
@@ -178,7 +183,7 @@ var I = [
178
183
  title: "簽核方式",
179
184
  width: 160
180
185
  }
181
- ], L = [
186
+ ], z = [
182
187
  {
183
188
  dataIndex: "source",
184
189
  key: "source",
@@ -197,7 +202,7 @@ var I = [
197
202
  title: "條件"
198
203
  }
199
204
  ];
200
- function R(e) {
205
+ function B(e) {
201
206
  switch (e.type) {
202
207
  case "startEvent": return "開始";
203
208
  case "endEvent": return e.data.endState === "REJECTED" ? "結束(駁回)" : "結束(核准)";
@@ -208,74 +213,78 @@ function R(e) {
208
213
  default: return "節點";
209
214
  }
210
215
  }
211
- function z(e) {
212
- return e.type === "userTask" ? a(e.data.approverResolver) : null;
216
+ function V(e) {
217
+ return e.type === "userTask" ? o(e.data.approverResolver) : null;
213
218
  }
214
- var B = {
219
+ var H = {
215
220
  display: "grid",
216
221
  gap: 12
217
- }, V = { marginTop: "var(--mzn-spacing-padding-vertical-spacious)" };
222
+ }, U = { marginTop: "var(--mzn-spacing-padding-vertical-spacious)" };
218
223
  // src/views/templates/compose/steps/ComposeWorkflowStep.tsx
219
- function H({ aiAssistantAvailable: e = !1, formSchema: t, initiatorPolicyCel: n, onInitiatorPolicyChange: r, onWorkflowChange: i, showAiAssistant: a = !1, workflowDefinition: s }) {
220
- return /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T(C, {
224
+ function W({ aiAssistantAvailable: e = !1, formSchema: t, initiatorPolicyCel: n, launchMode: r, onInitiatorPolicyChange: i, onLaunchModeChange: a, onWorkflowChange: o, showAiAssistant: c = !1, workflowDefinition: l }) {
225
+ return /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(T, {
221
226
  color: "text-neutral",
222
227
  variant: "caption",
223
228
  children: "設計簽核節點與條件分流;條件可直接引用上一步設計的表單欄位。"
224
- }), /* @__PURE__ */ T(o, {
229
+ }), /* @__PURE__ */ D(s, {
225
230
  aiAssistantAvailable: e,
226
231
  embedded: !0,
227
232
  formSchemaOverride: t,
228
233
  initialInitiatorPolicyCel: n,
229
- initialWorkflowDefinition: s ?? void 0,
230
- onInitiatorPolicyChange: r,
231
- onWorkflowChange: i,
232
- showAiAssistant: a
234
+ initialLaunchMode: r,
235
+ initialWorkflowDefinition: l ?? void 0,
236
+ onInitiatorPolicyChange: i,
237
+ onLaunchModeChange: a,
238
+ onWorkflowChange: o,
239
+ showAiAssistant: c
233
240
  })] });
234
241
  }
235
242
  // src/views/templates/compose/use-template-compose-wizard.ts
236
- var U = {
243
+ var G = {
237
244
  fields: [],
238
245
  schemaVersion: 1
239
- }, W = {
246
+ }, K = {
240
247
  layout: [],
241
248
  schemaVersion: 1
242
249
  };
243
- function G() {
244
- let e = s(), [t, n] = u(0), [r, a] = u(""), [o, l] = u(null), [d, f] = u(U), [p, m] = u(W), [h, g] = u(null), [_, v] = u(null), [y, b] = u("idle"), [x, S] = u(null), C = r.trim().length > 0 && d.fields.length > 0, w = c((e) => {
250
+ function q() {
251
+ let e = l(), [t, n] = f(0), [r, o] = f(""), [s, c] = f(null), [d, p] = f(G), [m, h] = f(K), [g, _] = f(null), [v, y] = f(null), [b, x] = f(i), [S, C] = f("idle"), [w, T] = f(null), E = r.trim().length > 0 && d.fields.length > 0, D = u((e) => {
245
252
  n(e);
246
- }, []), T = c(() => {
253
+ }, []), O = u(() => {
247
254
  n((e) => e < 2 ? e + 1 : e);
248
- }, []), E = c(() => {
255
+ }, []), k = u(() => {
249
256
  n((e) => e > 0 ? e - 1 : e);
250
- }, []), D = c((e) => {
251
- f(e.schema), m(e.uiSchema);
252
- }, []), O = c((e) => {
253
- g(e);
254
- }, []), A = c((e) => {
255
- v(e);
257
+ }, []), A = u((e) => {
258
+ p(e.schema), h(e.uiSchema);
259
+ }, []), M = u((e) => {
260
+ _(e);
261
+ }, []), N = u((e) => {
262
+ y(e);
256
263
  }, []);
257
264
  return {
258
- canLeaveBasics: C,
259
- categoryId: o,
265
+ canLeaveBasics: E,
266
+ categoryId: s,
260
267
  currentStep: t,
261
268
  formSchema: d,
262
- formUiSchema: p,
263
- goBack: E,
264
- goNext: T,
265
- goToStep: w,
266
- initiatorPolicyCel: _,
269
+ formUiSchema: m,
270
+ goBack: k,
271
+ goNext: O,
272
+ goToStep: D,
273
+ initiatorPolicyCel: v,
274
+ launchMode: b,
267
275
  name: r,
268
- publish: c(async () => {
269
- b("submitting"), S(null);
270
- let t = h ?? K;
276
+ publish: u(async () => {
277
+ C("submitting"), T(null);
278
+ let t = g ?? J;
271
279
  try {
272
- let e = await k({
280
+ let e = await j({
273
281
  category: null,
274
- categoryId: o,
282
+ categoryId: s,
275
283
  formDefinitionId: null,
276
284
  formDescription: null,
277
285
  formName: r,
278
- initiatorPolicyCel: _,
286
+ initiatorPolicyCel: v,
287
+ launchMode: b,
279
288
  notificationConfig: null,
280
289
  publish: !0,
281
290
  schema: d,
@@ -283,33 +292,35 @@ function G() {
283
292
  templateDescription: null,
284
293
  templateId: null,
285
294
  templateName: r,
286
- uiSchema: p,
295
+ uiSchema: m,
287
296
  workflowDefinition: t
288
297
  });
289
- return b("success"), e;
298
+ return C("success"), e;
290
299
  } catch (n) {
291
- return S(i(n, e, t)), b("error"), null;
300
+ return T(a(n, e, t)), C("error"), null;
292
301
  }
293
302
  }, [
294
- o,
303
+ s,
295
304
  d,
296
- p,
297
- _,
305
+ m,
306
+ v,
298
307
  e,
308
+ b,
299
309
  r,
300
- h
310
+ g
301
311
  ]),
302
- publishError: x,
303
- publishPhase: y,
304
- setCategoryId: l,
305
- setFormValue: D,
306
- setInitiatorPolicyCel: A,
307
- setName: a,
308
- setWorkflowDefinition: O,
309
- workflowDefinition: h
312
+ publishError: w,
313
+ publishPhase: S,
314
+ setCategoryId: c,
315
+ setFormValue: A,
316
+ setInitiatorPolicyCel: N,
317
+ setLaunchMode: x,
318
+ setName: o,
319
+ setWorkflowDefinition: M,
320
+ workflowDefinition: g
310
321
  };
311
322
  }
312
- var K = {
323
+ var J = {
313
324
  edges: [],
314
325
  expressionDialect: "cel-v2",
315
326
  meta: { schemaVersion: 1 },
@@ -336,40 +347,40 @@ var K = {
336
347
  }]
337
348
  };
338
349
  // src/views/templates/compose/TemplateComposeWizardView.tsx
339
- function q({ aiAssistantAvailable: n = !1, showAiAssistant: r = !1 } = {}) {
340
- let i = e(), a = t(), o = G(), s = o.publishPhase === "submitting";
350
+ function Y({ aiAssistantAvailable: n = !1, showAiAssistant: r = !1 } = {}) {
351
+ let i = e(), a = t(), o = q(), s = o.publishPhase === "submitting";
341
352
  async function c() {
342
353
  let e = await o.publish();
343
354
  e && i.push(a.templateDesigner(e.templateId));
344
355
  }
345
- return /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T(h, { children: /* @__PURE__ */ T(O, {
356
+ return /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(_, { children: /* @__PURE__ */ D(A, {
346
357
  description: "一次完成表單與流程設計,發佈後即可直接發起。",
347
358
  title: "建立模板(表單 + 流程)",
348
- children: /* @__PURE__ */ T(d, {
359
+ children: /* @__PURE__ */ D(p, {
349
360
  disabled: s,
350
361
  onClick: () => i.push(a.templates()),
351
362
  variant: "base-secondary",
352
363
  children: "返回模板列表"
353
364
  })
354
- }) }), /* @__PURE__ */ T(_, { children: /* @__PURE__ */ E(g, { children: [
355
- /* @__PURE__ */ E(b, {
365
+ }) }), /* @__PURE__ */ D(y, { children: /* @__PURE__ */ O(v, { children: [
366
+ /* @__PURE__ */ O(S, {
356
367
  currentStep: o.currentStep,
357
368
  children: [
358
- /* @__PURE__ */ T(y, {
369
+ /* @__PURE__ */ D(x, {
359
370
  description: "設計欄位與版面",
360
371
  title: "表單設計"
361
372
  }),
362
- /* @__PURE__ */ T(y, {
373
+ /* @__PURE__ */ D(x, {
363
374
  description: "設計簽核節點與條件",
364
375
  title: "流程設計"
365
376
  }),
366
- /* @__PURE__ */ T(y, {
377
+ /* @__PURE__ */ D(x, {
367
378
  description: "確認後發佈",
368
379
  title: "檢視並發佈"
369
380
  })
370
381
  ]
371
382
  }),
372
- o.currentStep === 0 ? /* @__PURE__ */ T(N, {
383
+ o.currentStep === 0 ? /* @__PURE__ */ D(F, {
373
384
  categoryId: o.categoryId,
374
385
  formSchema: o.formSchema,
375
386
  formUiSchema: o.formUiSchema,
@@ -378,42 +389,45 @@ function q({ aiAssistantAvailable: n = !1, showAiAssistant: r = !1 } = {}) {
378
389
  onFormChange: o.setFormValue,
379
390
  onNameChange: o.setName
380
391
  }) : null,
381
- o.currentStep === 1 ? /* @__PURE__ */ T(H, {
392
+ o.currentStep === 1 ? /* @__PURE__ */ D(W, {
382
393
  aiAssistantAvailable: n,
383
394
  formSchema: o.formSchema,
384
395
  initiatorPolicyCel: o.initiatorPolicyCel,
396
+ launchMode: o.launchMode,
385
397
  onInitiatorPolicyChange: o.setInitiatorPolicyCel,
398
+ onLaunchModeChange: o.setLaunchMode,
386
399
  onWorkflowChange: o.setWorkflowDefinition,
387
400
  showAiAssistant: r,
388
401
  workflowDefinition: o.workflowDefinition
389
402
  }) : null,
390
- o.currentStep === 2 ? /* @__PURE__ */ T(F, {
403
+ o.currentStep === 2 ? /* @__PURE__ */ D(L, {
391
404
  formSchema: o.formSchema,
392
405
  formUiSchema: o.formUiSchema,
393
406
  initiatorPolicyCel: o.initiatorPolicyCel,
407
+ launchMode: o.launchMode,
394
408
  name: o.name,
395
409
  publishError: o.publishError,
396
410
  workflowDefinition: o.workflowDefinition
397
411
  }) : null,
398
- /* @__PURE__ */ E("div", {
399
- style: J,
400
- children: [o.currentStep === 0 && !o.canLeaveBasics ? /* @__PURE__ */ T(C, {
412
+ /* @__PURE__ */ O("div", {
413
+ style: X,
414
+ children: [o.currentStep === 0 && !o.canLeaveBasics ? /* @__PURE__ */ D(T, {
401
415
  color: "text-neutral",
402
416
  variant: "caption",
403
417
  children: "請填寫模板名稱、表單名稱,並至少新增一個表單欄位。"
404
- }) : /* @__PURE__ */ T("span", {}), /* @__PURE__ */ E("div", {
405
- style: Y,
406
- children: [/* @__PURE__ */ T(d, {
418
+ }) : /* @__PURE__ */ D("span", {}), /* @__PURE__ */ O("div", {
419
+ style: Z,
420
+ children: [/* @__PURE__ */ D(p, {
407
421
  disabled: o.currentStep === 0 || s,
408
422
  onClick: o.goBack,
409
423
  variant: "base-secondary",
410
424
  children: "上一步"
411
- }), o.currentStep < 2 ? /* @__PURE__ */ T(d, {
425
+ }), o.currentStep < 2 ? /* @__PURE__ */ D(p, {
412
426
  disabled: o.currentStep === 0 && !o.canLeaveBasics,
413
427
  onClick: o.goNext,
414
428
  variant: "base-primary",
415
429
  children: "下一步"
416
- }) : /* @__PURE__ */ T(d, {
430
+ }) : /* @__PURE__ */ D(p, {
417
431
  disabled: s,
418
432
  loading: s,
419
433
  onClick: () => {
@@ -426,16 +440,16 @@ function q({ aiAssistantAvailable: n = !1, showAiAssistant: r = !1 } = {}) {
426
440
  })
427
441
  ] }) })] });
428
442
  }
429
- var J = {
443
+ var X = {
430
444
  alignItems: "center",
431
445
  display: "flex",
432
446
  marginTop: "var(--mzn-spacing-padding-vertical-spacious)",
433
447
  justifyContent: "space-between",
434
448
  gap: 16
435
- }, Y = {
449
+ }, Z = {
436
450
  display: "flex",
437
451
  gap: 8
438
452
  };
439
- export { G as i, U as n, W as r, q as t };
453
+ export { q as i, G as n, K as r, Y as t };
440
454
 
441
- //# sourceMappingURL=compose-U1zs3Yof.js.map
455
+ //# sourceMappingURL=compose-C7yS6bJm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-C7yS6bJm.js","names":["_Fragment","_Fragment","_Fragment","_Fragment","useRouterAdapter","useBPMRoutes","FormBuilderView","readLaunchModeOption","readTemplateErrorMessage","readApproverResolverDetail","TemplateDesignerView","FormRenderer","useBPMLanguage","Fragment$1","ContentHeader","UNCATEGORIZED_OPTION","CATEGORY_PAGE_SIZE","ComposeFormStep","categoryOptions","setCategoryOptions","useState","active","result","listApprovalTemplateCategoriesPage","selectOptions","category","selectedOption","option","categoryId","BASICS_GRID_STYLE","FormField","FormFieldLayout","Input","onNameChange","event","name","Select","onCategoryIdChange","Typography","onFormChange","formSchema","formUiSchema","ComposeReviewStep","nodes","workflowDefinition","edges","fieldCount","nodeLabelById","node","nodeRows","readNodeDetail","readNodeTypeLabel","branchRows","edge","STACK_STYLE","TITLE_STYLE","Empty","Table","NODE_COLUMNS","BRANCH_COLUMNS","launchMode","initiatorPolicyCel","publishError","Tag","record","ComposeWorkflowStep","EMPTY_COMPOSE_FORM_SCHEMA","EMPTY_COMPOSE_FORM_UI_SCHEMA","useTemplateComposeWizard","language","currentStep","setCurrentStep","setName","setCategoryId","setFormSchema","setFormUiSchema","setWorkflowDefinitionState","setInitiatorPolicyCelState","setLaunchMode","DEFAULT_LAUNCH_MODE","publishPhase","setPublishPhase","setPublishError","canLeaveBasics","goToStep","useCallback","step","goNext","goBack","setFormValue","next","setWorkflowDefinition","definition","setInitiatorPolicyCel","cel","submittedDefinition","EMPTY_WORKFLOW_DEFINITION","composeApprovalTemplateWithForm","requestError","TemplateComposeWizardView","router","routes","wizard","submitting","handlePublish","PageHeader","Button","SectionGroup","Section","Stepper","Step","FOOTER_STYLE","FOOTER_ACTIONS_STYLE"],"sources":["../../src/views/templates/compose/steps/ComposeFormStep.tsx","../../src/views/templates/compose/steps/ComposeReviewStep.tsx","../../src/views/templates/compose/steps/ComposeWorkflowStep.tsx","../../src/views/templates/compose/use-template-compose-wizard.ts","../../src/views/templates/compose/TemplateComposeWizardView.tsx"],"sourcesContent":["'use client';\n\nimport type { ChangeEvent, ReactElement } from 'react';\nimport { useEffect, useState } from 'react';\nimport { FormField, Input, Select, Typography } from '@mezzanine-ui/react';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport type { SelectValue } from '@mezzanine-ui/react/Select';\nimport type {\n FormDefinitionSchema,\n FormUiSchema,\n} from '@rytass/bpm-core-shared/form';\nimport {\n ApprovalTemplateCategoryRecord,\n listApprovalTemplateCategoriesPage,\n} from '@rytass/bpm-core-client/template';\nimport { FormBuilderView } from '../../../forms/builder';\n\nconst UNCATEGORIZED_OPTION: SelectValue = {\n id: 'UNCATEGORIZED',\n name: '未分類',\n};\n\nconst CATEGORY_PAGE_SIZE = 100;\n\nexport interface ComposeFormStepProps {\n readonly name: string;\n readonly categoryId: string | null;\n readonly formSchema: FormDefinitionSchema;\n readonly formUiSchema: FormUiSchema;\n readonly onNameChange: (value: string) => void;\n readonly onCategoryIdChange: (value: string | null) => void;\n readonly onFormChange: (next: {\n readonly schema: FormDefinitionSchema;\n readonly uiSchema: FormUiSchema;\n }) => void;\n}\n\nexport function ComposeFormStep({\n categoryId,\n formSchema,\n formUiSchema,\n name,\n onCategoryIdChange,\n onFormChange,\n onNameChange,\n}: ComposeFormStepProps): ReactElement {\n const [categoryOptions, setCategoryOptions] = useState<\n readonly ApprovalTemplateCategoryRecord[]\n >([]);\n\n useEffect((): (() => void) => {\n let active = true;\n\n void (async (): Promise<void> => {\n try {\n const result = await listApprovalTemplateCategoriesPage({\n page: 1,\n pageSize: CATEGORY_PAGE_SIZE,\n searchText: '',\n status: 'ACTIVE',\n });\n\n if (active) {\n setCategoryOptions(result.categories);\n }\n } catch {\n if (active) {\n setCategoryOptions([]);\n }\n }\n })();\n\n return (): void => {\n active = false;\n };\n }, []);\n\n const selectOptions: SelectValue[] = [\n UNCATEGORIZED_OPTION,\n ...categoryOptions.map((category) => ({\n id: category.id,\n name: category.name,\n })),\n ];\n const selectedOption =\n selectOptions.find((option) => option.id === categoryId) ??\n UNCATEGORIZED_OPTION;\n\n return (\n <>\n <div style={BASICS_GRID_STYLE}>\n <FormField\n label=\"名稱\"\n layout={FormFieldLayout.VERTICAL}\n name=\"composeName\"\n >\n <Input\n fullWidth\n onChange={(event: ChangeEvent<HTMLInputElement>): void =>\n onNameChange(event.target.value)\n }\n placeholder=\"例如:請款簽核\"\n value={name}\n />\n </FormField>\n <FormField\n label=\"分類(選填)\"\n layout={FormFieldLayout.VERTICAL}\n name=\"composeCategory\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void =>\n onCategoryIdChange(\n option && option.id !== UNCATEGORIZED_OPTION.id\n ? option.id\n : null,\n )\n }\n options={selectOptions}\n placeholder=\"未分類\"\n value={selectedOption}\n />\n </FormField>\n </div>\n <Typography color=\"text-neutral\" variant=\"caption\">\n 先設計表單欄位,下一步的流程條件分流即可直接引用這些欄位。\n </Typography>\n <FormBuilderView\n onChange={onFormChange}\n value={{ schema: formSchema, uiSchema: formUiSchema }}\n />\n </>\n );\n}\n\nconst BASICS_GRID_STYLE = {\n display: 'grid',\n gap: 16,\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n} as const;\n","'use client';\n\nimport type { CSSProperties, ReactElement } from 'react';\nimport { Empty, Table, Tag, Typography } from '@mezzanine-ui/react';\nimport type { TableColumn } from '@mezzanine-ui/core/table';\nimport type {\n FormDefinitionSchema,\n FormUiSchema,\n} from '@rytass/bpm-core-shared/form';\nimport type { ApprovalTemplateLaunchMode } from '@rytass/bpm-core-client/template';\nimport { readLaunchModeOption } from '../../designer/launch-mode';\nimport type {\n WorkflowDefinition,\n WorkflowNode,\n} from '@rytass/bpm-core-shared/workflow';\nimport { FormRenderer } from '../../../forms/renderer/FormRendererView';\nimport { readApproverResolverDetail } from '../../designer/approver-resolver-model';\n\ntype FlowNodeRow = Readonly<\n Record<string, unknown> & {\n detail: string;\n key: string;\n label: string;\n typeLabel: string;\n }\n>;\n\ntype BranchRow = Readonly<\n Record<string, unknown> & {\n condition: string;\n key: string;\n source: string;\n target: string;\n }\n>;\n\nexport interface ComposeReviewStepProps {\n readonly name: string;\n readonly formSchema: FormDefinitionSchema;\n readonly formUiSchema: FormUiSchema;\n readonly workflowDefinition: WorkflowDefinition | null;\n readonly initiatorPolicyCel: string | null;\n readonly launchMode: ApprovalTemplateLaunchMode;\n readonly publishError: string | null;\n}\n\nexport function ComposeReviewStep({\n formSchema,\n formUiSchema,\n initiatorPolicyCel,\n launchMode,\n name,\n publishError,\n workflowDefinition,\n}: ComposeReviewStepProps): ReactElement {\n const nodes = workflowDefinition?.nodes ?? [];\n const edges = workflowDefinition?.edges ?? [];\n const fieldCount = formSchema.fields.length;\n const nodeLabelById = new Map(\n nodes.map((node) => [node.id, node.data.label] as const),\n );\n const nodeRows: FlowNodeRow[] = nodes.map((node) => ({\n detail: readNodeDetail(node) ?? '—',\n key: node.id,\n label: node.data.label,\n typeLabel: readNodeTypeLabel(node),\n }));\n const branchRows: BranchRow[] = edges\n .filter((edge) => Boolean(edge.data.condition))\n .map((edge) => ({\n condition: edge.data.condition ?? '',\n key: edge.id,\n source: nodeLabelById.get(edge.source) ?? edge.source,\n target: nodeLabelById.get(edge.target) ?? edge.target,\n }));\n\n return (\n <div style={STACK_STYLE}>\n <Typography component=\"h2\" style={TITLE_STYLE} variant=\"h2\">\n {name || '(未命名)'}\n </Typography>\n\n <div style={STACK_STYLE}>\n <Typography variant=\"h3\">表單預覽</Typography>\n {fieldCount > 0 ? (\n <FormRenderer\n dataSourceContext={{ kind: 'preview' }}\n readonly\n schema={formSchema}\n uiSchema={formUiSchema}\n />\n ) : (\n <Empty title=\"尚未設計表單欄位\" />\n )}\n </div>\n\n <div style={STACK_STYLE}>\n <Typography variant=\"h3\">流程概覽</Typography>\n {nodes.length > 0 ? (\n <Table columns={NODE_COLUMNS} dataSource={nodeRows} fullWidth />\n ) : (\n <Empty title=\"尚未設計流程節點\" />\n )}\n {branchRows.length > 0 ? (\n <>\n <Typography color=\"text-neutral\" variant=\"caption\">\n 條件分流\n </Typography>\n <Table columns={BRANCH_COLUMNS} dataSource={branchRows} fullWidth />\n </>\n ) : null}\n <Typography color=\"text-neutral\" variant=\"caption\">\n 發起方式:{readLaunchModeOption(launchMode).name}\n </Typography>\n {initiatorPolicyCel ? (\n <Typography color=\"text-neutral\" variant=\"caption\">\n 發起權限:{initiatorPolicyCel}\n </Typography>\n ) : null}\n </div>\n\n {publishError ? (\n <Typography color=\"text-error\" variant=\"body\">\n {publishError}\n </Typography>\n ) : null}\n </div>\n );\n}\n\nconst NODE_COLUMNS: TableColumn<FlowNodeRow>[] = [\n {\n key: 'type',\n render: (record: FlowNodeRow): ReactElement => (\n <Tag label={record.typeLabel} size=\"sub\" type=\"static\" />\n ),\n title: '類型',\n width: 130,\n },\n { dataIndex: 'label', key: 'label', title: '節點' },\n { dataIndex: 'detail', key: 'detail', title: '簽核方式', width: 160 },\n];\n\nconst BRANCH_COLUMNS: TableColumn<BranchRow>[] = [\n { dataIndex: 'source', key: 'source', title: '來源', width: 180 },\n { dataIndex: 'target', key: 'target', title: '目標', width: 180 },\n { dataIndex: 'condition', key: 'condition', title: '條件' },\n];\n\nfunction readNodeTypeLabel(node: WorkflowNode): string {\n switch (node.type) {\n case 'startEvent':\n return '開始';\n case 'endEvent':\n return node.data.endState === 'REJECTED' ? '結束(駁回)' : '結束(核准)';\n case 'userTask':\n return '簽核';\n case 'serviceTask':\n return '服務';\n case 'exclusiveGateway':\n return '條件閘道';\n case 'parallelGateway':\n return '平行閘道';\n default:\n return '節點';\n }\n}\n\nfunction readNodeDetail(node: WorkflowNode): string | null {\n if (node.type !== 'userTask') {\n return null;\n }\n\n return readApproverResolverDetail(node.data.approverResolver);\n}\n\nconst STACK_STYLE: CSSProperties = {\n display: 'grid',\n gap: 12,\n};\n\n// Match the breathing room between the stepper and the PageHeader, which is the\n// Section's top padding token.\nconst TITLE_STYLE: CSSProperties = {\n marginTop: 'var(--mzn-spacing-padding-vertical-spacious)',\n};\n","'use client';\n\nimport type { ReactElement } from 'react';\nimport { Typography } from '@mezzanine-ui/react';\nimport type { FormDefinitionSchema } from '@rytass/bpm-core-shared/form';\nimport type { WorkflowDefinition } from '@rytass/bpm-core-shared/workflow';\nimport type { ApprovalTemplateLaunchMode } from '@rytass/bpm-core-client/template';\nimport { TemplateDesignerView } from '../../designer';\n\nexport interface ComposeWorkflowStepProps {\n readonly formSchema: FormDefinitionSchema;\n readonly workflowDefinition: WorkflowDefinition | null;\n readonly initiatorPolicyCel: string | null;\n readonly onWorkflowChange: (definition: WorkflowDefinition) => void;\n readonly onInitiatorPolicyChange: (cel: string | null) => void;\n readonly launchMode: ApprovalTemplateLaunchMode;\n readonly onLaunchModeChange: (launchMode: ApprovalTemplateLaunchMode) => void;\n /**\n * Show the AI assistant button inside the embedded designer's side panel.\n * Follows the same opt-in contract as the standalone designer page; default\n * hidden. Wired up the stack from the server page's `BPM_AI_ASSISTANT_ENABLED`.\n */\n readonly showAiAssistant?: boolean;\n /**\n * Whether the LLM backend is configured (host has an API key). When `false`\n * the AI button shows disabled as a placeholder. Default `false`.\n */\n readonly aiAssistantAvailable?: boolean;\n}\n\nexport function ComposeWorkflowStep({\n aiAssistantAvailable = false,\n formSchema,\n initiatorPolicyCel,\n launchMode,\n onInitiatorPolicyChange,\n onLaunchModeChange,\n onWorkflowChange,\n showAiAssistant = false,\n workflowDefinition,\n}: ComposeWorkflowStepProps): ReactElement {\n return (\n <>\n <Typography color=\"text-neutral\" variant=\"caption\">\n 設計簽核節點與條件分流;條件可直接引用上一步設計的表單欄位。\n </Typography>\n <TemplateDesignerView\n aiAssistantAvailable={aiAssistantAvailable}\n embedded\n formSchemaOverride={formSchema}\n initialInitiatorPolicyCel={initiatorPolicyCel}\n initialLaunchMode={launchMode}\n initialWorkflowDefinition={workflowDefinition ?? undefined}\n onInitiatorPolicyChange={onInitiatorPolicyChange}\n onLaunchModeChange={onLaunchModeChange}\n onWorkflowChange={onWorkflowChange}\n showAiAssistant={showAiAssistant}\n />\n </>\n );\n}\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport type {\n FormDefinitionSchema,\n FormUiSchema,\n} from '@rytass/bpm-core-shared/form';\nimport type { WorkflowDefinition } from '@rytass/bpm-core-shared/workflow';\nimport { useBPMLanguage } from '../../../lib/language-provider';\nimport {\n ApprovalTemplateLaunchMode,\n ComposeApprovalTemplateWithFormResult,\n composeApprovalTemplateWithForm,\n} from '@rytass/bpm-core-client/template';\nimport { DEFAULT_LAUNCH_MODE } from '../designer/launch-mode';\nimport { readTemplateErrorMessage } from '../template-error-message';\n\nexport type ComposeWizardStep = 0 | 1 | 2;\n\nexport type ComposePublishPhase = 'error' | 'idle' | 'submitting' | 'success';\n\nexport const EMPTY_COMPOSE_FORM_SCHEMA: FormDefinitionSchema = {\n fields: [],\n schemaVersion: 1,\n};\n\nexport const EMPTY_COMPOSE_FORM_UI_SCHEMA: FormUiSchema = {\n layout: [],\n schemaVersion: 1,\n};\n\nexport interface TemplateComposeWizard {\n readonly currentStep: ComposeWizardStep;\n /**\n * Single user-facing name. Persisted to both the template and the form\n * (`templateName` / `formName`) at the `composeApprovalTemplateWithForm`\n * boundary — the DB keeps two columns, the UI keeps one field.\n */\n readonly name: string;\n readonly categoryId: string | null;\n readonly formSchema: FormDefinitionSchema;\n readonly formUiSchema: FormUiSchema;\n readonly workflowDefinition: WorkflowDefinition | null;\n readonly initiatorPolicyCel: string | null;\n readonly launchMode: ApprovalTemplateLaunchMode;\n readonly publishPhase: ComposePublishPhase;\n readonly publishError: string | null;\n readonly canLeaveBasics: boolean;\n readonly goToStep: (step: ComposeWizardStep) => void;\n readonly goNext: () => void;\n readonly goBack: () => void;\n readonly setName: (value: string) => void;\n readonly setCategoryId: (value: string | null) => void;\n readonly setFormValue: (next: {\n readonly schema: FormDefinitionSchema;\n readonly uiSchema: FormUiSchema;\n }) => void;\n readonly setWorkflowDefinition: (definition: WorkflowDefinition) => void;\n readonly setInitiatorPolicyCel: (cel: string | null) => void;\n readonly setLaunchMode: (launchMode: ApprovalTemplateLaunchMode) => void;\n readonly publish: () => Promise<ComposeApprovalTemplateWithFormResult | null>;\n}\n\n/**\n * Owns the cross-step state for the unified \"form + flow\" template wizard.\n *\n * Step 0 (表單) edits `formSchema`/`formUiSchema`; that same in-memory schema\n * feeds Step 1 (流程) as the field source for condition branches, so the\n * embedded designer never needs a published form version. Step 2 (檢視發佈)\n * submits everything through the atomic `composeApprovalTemplateWithForm`\n * mutation.\n */\nexport function useTemplateComposeWizard(): TemplateComposeWizard {\n const language = useBPMLanguage();\n const [currentStep, setCurrentStep] = useState<ComposeWizardStep>(0);\n const [name, setName] = useState('');\n const [categoryId, setCategoryId] = useState<string | null>(null);\n const [formSchema, setFormSchema] = useState<FormDefinitionSchema>(\n EMPTY_COMPOSE_FORM_SCHEMA,\n );\n const [formUiSchema, setFormUiSchema] = useState<FormUiSchema>(\n EMPTY_COMPOSE_FORM_UI_SCHEMA,\n );\n const [workflowDefinition, setWorkflowDefinitionState] =\n useState<WorkflowDefinition | null>(null);\n const [initiatorPolicyCel, setInitiatorPolicyCelState] = useState<\n string | null\n >(null);\n const [launchMode, setLaunchMode] = useState<ApprovalTemplateLaunchMode>(\n DEFAULT_LAUNCH_MODE,\n );\n const [publishPhase, setPublishPhase] = useState<ComposePublishPhase>('idle');\n const [publishError, setPublishError] = useState<string | null>(null);\n\n const canLeaveBasics = name.trim().length > 0 && formSchema.fields.length > 0;\n\n const goToStep = useCallback((step: ComposeWizardStep): void => {\n setCurrentStep(step);\n }, []);\n\n const goNext = useCallback((): void => {\n setCurrentStep((step) =>\n step < 2 ? ((step + 1) as ComposeWizardStep) : step,\n );\n }, []);\n\n const goBack = useCallback((): void => {\n setCurrentStep((step) =>\n step > 0 ? ((step - 1) as ComposeWizardStep) : step,\n );\n }, []);\n\n const setFormValue = useCallback(\n (next: {\n readonly schema: FormDefinitionSchema;\n readonly uiSchema: FormUiSchema;\n }): void => {\n setFormSchema(next.schema);\n setFormUiSchema(next.uiSchema);\n },\n [],\n );\n\n const setWorkflowDefinition = useCallback(\n (definition: WorkflowDefinition): void => {\n setWorkflowDefinitionState(definition);\n },\n [],\n );\n\n const setInitiatorPolicyCel = useCallback((cel: string | null): void => {\n setInitiatorPolicyCelState(cel);\n }, []);\n\n const publish =\n useCallback(async (): Promise<ComposeApprovalTemplateWithFormResult | null> => {\n setPublishPhase('submitting');\n setPublishError(null);\n\n const submittedDefinition =\n workflowDefinition ?? EMPTY_WORKFLOW_DEFINITION;\n\n try {\n const result = await composeApprovalTemplateWithForm({\n category: null,\n categoryId,\n formDefinitionId: null,\n formDescription: null,\n // One UI name fans out to both persisted columns.\n formName: name,\n initiatorPolicyCel,\n launchMode,\n notificationConfig: null,\n publish: true,\n schema: formSchema,\n slaDefaults: null,\n templateDescription: null,\n templateId: null,\n templateName: name,\n uiSchema: formUiSchema,\n workflowDefinition: submittedDefinition,\n });\n\n setPublishPhase('success');\n\n return result;\n } catch (requestError: unknown) {\n setPublishError(\n readTemplateErrorMessage(requestError, language, submittedDefinition),\n );\n setPublishPhase('error');\n\n return null;\n }\n }, [\n categoryId,\n formSchema,\n formUiSchema,\n initiatorPolicyCel,\n language,\n launchMode,\n name,\n workflowDefinition,\n ]);\n\n return {\n canLeaveBasics,\n categoryId,\n currentStep,\n formSchema,\n formUiSchema,\n goBack,\n goNext,\n goToStep,\n initiatorPolicyCel,\n launchMode,\n name,\n publish,\n publishError,\n publishPhase,\n setCategoryId,\n setFormValue,\n setInitiatorPolicyCel,\n setLaunchMode,\n setName,\n setWorkflowDefinition,\n workflowDefinition,\n };\n}\n\n// Phase 23 P4: templates created through the wizard start on cel-v2.\nconst EMPTY_WORKFLOW_DEFINITION: WorkflowDefinition = {\n edges: [],\n expressionDialect: 'cel-v2',\n meta: { schemaVersion: 1 },\n nodes: [\n {\n data: { label: '開始' },\n id: 'start',\n position: { x: 80, y: 160 },\n type: 'startEvent',\n },\n {\n data: { endState: 'APPROVED', label: '完成', triggerMode: 'AND' },\n id: 'end',\n position: { x: 560, y: 160 },\n type: 'endEvent',\n },\n ],\n};\n","'use client';\n\nimport type { ReactElement } from 'react';\nimport {\n Button,\n PageHeader,\n Section,\n SectionGroup,\n Step,\n Stepper,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { useRouterAdapter } from '../../../lib/router-adapter';\nimport { useBPMRoutes } from '../../../lib/routes-config';\nimport { ComposeFormStep } from './steps/ComposeFormStep';\nimport { ComposeReviewStep } from './steps/ComposeReviewStep';\nimport { ComposeWorkflowStep } from './steps/ComposeWorkflowStep';\nimport { useTemplateComposeWizard } from './use-template-compose-wizard';\n\nexport interface TemplateComposeWizardViewProps {\n /**\n * Show the workflow designer AI assistant inside Step 1 (流程設計). Opt-in,\n * default hidden — the server page maps `BPM_AI_ASSISTANT_ENABLED` to it.\n */\n readonly showAiAssistant?: boolean;\n /**\n * Whether the LLM backend is configured (host has an API key). When `false`\n * the AI button shows disabled as a placeholder. Default `false`.\n */\n readonly aiAssistantAvailable?: boolean;\n}\n\n/**\n * Unified \"form + flow\" template creation wizard. Walks the user through\n * Step 0 表單設計 → Step 1 流程設計 → Step 2 檢視並發佈, then commits both\n * sides atomically through `composeApprovalTemplateWithForm`. This is the\n * template entry point; the form builder is intentionally controlled here\n * instead of exposed as a standalone `/forms` page.\n */\nexport function TemplateComposeWizardView({\n aiAssistantAvailable = false,\n showAiAssistant = false,\n}: TemplateComposeWizardViewProps = {}): ReactElement {\n const router = useRouterAdapter();\n const routes = useBPMRoutes();\n const wizard = useTemplateComposeWizard();\n const submitting = wizard.publishPhase === 'submitting';\n\n async function handlePublish(): Promise<void> {\n const result = await wizard.publish();\n\n if (result) {\n router.push(routes.templateDesigner(result.templateId));\n }\n }\n\n return (\n <>\n <PageHeader>\n <ContentHeader\n description=\"一次完成表單與流程設計,發佈後即可直接發起。\"\n title=\"建立模板(表單 + 流程)\"\n >\n <Button\n disabled={submitting}\n onClick={(): void => router.push(routes.templates())}\n variant=\"base-secondary\"\n >\n 返回模板列表\n </Button>\n </ContentHeader>\n </PageHeader>\n\n <SectionGroup>\n <Section>\n <Stepper currentStep={wizard.currentStep}>\n <Step description=\"設計欄位與版面\" title=\"表單設計\" />\n <Step description=\"設計簽核節點與條件\" title=\"流程設計\" />\n <Step description=\"確認後發佈\" title=\"檢視並發佈\" />\n </Stepper>\n\n {wizard.currentStep === 0 ? (\n <ComposeFormStep\n categoryId={wizard.categoryId}\n formSchema={wizard.formSchema}\n formUiSchema={wizard.formUiSchema}\n name={wizard.name}\n onCategoryIdChange={wizard.setCategoryId}\n onFormChange={wizard.setFormValue}\n onNameChange={wizard.setName}\n />\n ) : null}\n\n {wizard.currentStep === 1 ? (\n <ComposeWorkflowStep\n aiAssistantAvailable={aiAssistantAvailable}\n formSchema={wizard.formSchema}\n initiatorPolicyCel={wizard.initiatorPolicyCel}\n launchMode={wizard.launchMode}\n onInitiatorPolicyChange={wizard.setInitiatorPolicyCel}\n onLaunchModeChange={wizard.setLaunchMode}\n onWorkflowChange={wizard.setWorkflowDefinition}\n showAiAssistant={showAiAssistant}\n workflowDefinition={wizard.workflowDefinition}\n />\n ) : null}\n\n {wizard.currentStep === 2 ? (\n <ComposeReviewStep\n formSchema={wizard.formSchema}\n formUiSchema={wizard.formUiSchema}\n initiatorPolicyCel={wizard.initiatorPolicyCel}\n launchMode={wizard.launchMode}\n name={wizard.name}\n publishError={wizard.publishError}\n workflowDefinition={wizard.workflowDefinition}\n />\n ) : null}\n\n <div style={FOOTER_STYLE}>\n {wizard.currentStep === 0 && !wizard.canLeaveBasics ? (\n <Typography color=\"text-neutral\" variant=\"caption\">\n 請填寫模板名稱、表單名稱,並至少新增一個表單欄位。\n </Typography>\n ) : (\n <span />\n )}\n <div style={FOOTER_ACTIONS_STYLE}>\n <Button\n disabled={wizard.currentStep === 0 || submitting}\n onClick={wizard.goBack}\n variant=\"base-secondary\"\n >\n 上一步\n </Button>\n {wizard.currentStep < 2 ? (\n <Button\n disabled={wizard.currentStep === 0 && !wizard.canLeaveBasics}\n onClick={wizard.goNext}\n variant=\"base-primary\"\n >\n 下一步\n </Button>\n ) : (\n <Button\n disabled={submitting}\n loading={submitting}\n onClick={(): void => {\n void handlePublish();\n }}\n variant=\"base-primary\"\n >\n 發佈\n </Button>\n )}\n </div>\n </div>\n </Section>\n </SectionGroup>\n </>\n );\n}\n\nconst FOOTER_STYLE = {\n alignItems: 'center',\n display: 'flex',\n // Match the breathing room used elsewhere (the Section's top padding token).\n marginTop: 'var(--mzn-spacing-padding-vertical-spacious)',\n justifyContent: 'space-between',\n gap: 16,\n} as const;\n\nconst FOOTER_ACTIONS_STYLE = {\n display: 'flex',\n gap: 8,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,IAAMe,IAAoC;CACxC,IAAI;CACJ,MAAM;AACR,GAEMC,IAAqB;AAe3B,SAAgBC,EAAgB,EAC9B,eACA,eACA,iBACA,SACA,uBACA,iBACA,mBACqC;CACrC,IAAM,CAACC,GAAiBC,KAAsBC,EAE5C,CAAC,CAAC;CAEJ,QAA8B;EAC5B,IAAIC,IAAS;EAqBb,QAnBM,YAA2B;GAC/B,IAAI;IACF,IAAMC,IAAS,MAAMC,EAAmC;KACtD,MAAM;KACN,UAAUP;KACV,YAAY;KACZ,QAAQ;IACV,CAAC;IAED,AAAIK,KACFF,EAAmBG,EAAO,UAAU;GAExC,QAAQ;IACN,AAAID,KACFF,EAAmB,CAAC,CAAC;GAEzB;EACF,EAAA,CAAG,SAEgB;GACjB,IAAS;EACX;CACF,GAAG,CAAC,CAAC;CAEL,IAAMK,IAA+B,CACnCT,GACA,GAAGG,EAAgB,KAAK,OAAc;EACpC,IAAIO,EAAS;EACb,MAAMA,EAAS;CACjB,EAAE,CACJ,GACMC,IACJF,EAAc,MAAM,MAAWG,EAAO,OAAOC,CAAU,KACvDb;CAEF,OACE,kBAAAf,GAAA,EAAA,UAAA;EACE,kBAAC,OAAD;GAAK,OAAO6B;GAAZ,UAAA,CACE,kBAACC,GAAD;IACE,OAAM;IACN,QAAQC,EAAgB;IACxB,MAAK;IAEL,UAAA,kBAACC,GAAD;KACE,WAAA;KACA,WAAW,MACTC,EAAaC,EAAM,OAAO,KAAK;KAEjC,aAAY;KACZ,OAAOC;IACR,CAAA;GACQ,CAAA,GACX,kBAACL,GAAD;IACE,OAAM;IACN,QAAQC,EAAgB;IACxB,MAAK;IAEL,UAAA,kBAACK,GAAD;KACE,WAAW;KACX,WAAA;KACA,WAAW,MACTC,EACEV,KAAUA,EAAO,OAAOZ,EAAqB,KACzCY,EAAO,KACP,IACN;KAEF,SAASH;KACT,aAAY;KACZ,OAAOE;IACR,CAAA;GACQ,CAAA,CACR;;EACL,kBAACY,GAAD;GAAY,OAAM;GAAe,SAAQ;GAAU,UAAA;EAEvC,CAAA;EACZ,kBAAChC,GAAD;GACE,UAAUiC;GACV,OAAO;IAAE,QAAQC;IAAY,UAAUC;GAAa;EACrD,CAAA;CACD,EAAA,CAAA;AAEN;AAEA,IAAMZ,IAAoB;CACxB,SAAS;CACT,KAAK;CACL,qBAAqB;AACvB;;AC/FA,SAAgBa,EAAkB,EAChC,eACA,iBACA,uBACA,eACA,SACA,iBACA,yBACuC;CACvC,IAAMC,IAAQC,GAAoB,SAAS,CAAC,GACtCC,IAAQD,GAAoB,SAAS,CAAC,GACtCE,IAAaN,EAAW,OAAO,QAC/BO,IAAgB,IAAI,IACxBJ,EAAM,KAAK,MAAS,CAACK,EAAK,IAAIA,EAAK,KAAK,KAAK,CAAU,CACzD,GACMC,IAA0BN,EAAM,KAAK,OAAU;EACnD,QAAQO,EAAeF,CAAI,KAAK;EAChC,KAAKA,EAAK;EACV,OAAOA,EAAK,KAAK;EACjB,WAAWG,EAAkBH,CAAI;CACnC,EAAE,GACII,IAA0BP,EAC7B,QAAQ,MAAS,EAAQQ,EAAK,KAAK,SAAU,CAAC,CAC9C,KAAK,OAAU;EACd,WAAWA,EAAK,KAAK,aAAa;EAClC,KAAKA,EAAK;EACV,QAAQN,EAAc,IAAIM,EAAK,MAAM,KAAKA,EAAK;EAC/C,QAAQN,EAAc,IAAIM,EAAK,MAAM,KAAKA,EAAK;CACjD,EAAE;CAEJ,OACE,kBAAC,OAAD;EAAK,OAAOC;EAAZ,UAAA;GACE,kBAAChB,GAAD;IAAY,WAAU;IAAK,OAAOiB;IAAa,SAAQ;IACpD,UAAApB,KAAQ;GACC,CAAA;GAEZ,kBAAC,OAAD;IAAK,OAAOmB;IAAZ,UAAA,CACE,kBAAChB,GAAD;KAAY,SAAQ;KAAK,UAAA;IAAgB,CAAA,GACxCQ,IAAa,IACZ,kBAACnC,GAAD;KACE,mBAAmB,EAAE,MAAM,UAAU;KACrC,UAAA;KACA,QAAQ6B;KACR,UAAUC;IACX,CAAA,IAED,kBAACe,GAAD,EAAO,OAAM,WAAY,CAAA,CAExB;;GAEL,kBAAC,OAAD;IAAK,OAAOF;IAAZ,UAAA;KACE,kBAAChB,GAAD;MAAY,SAAQ;MAAK,UAAA;KAAgB,CAAA;KACxCK,EAAM,SAAS,IACd,kBAACc,GAAD;MAAO,SAASC;MAAc,YAAYT;MAAU,WAAA;KAAW,CAAA,IAE/D,kBAACO,GAAD,EAAO,OAAM,WAAY,CAAA;KAE1BJ,EAAW,SAAS,IACnB,kBAAAnD,GAAA,EAAA,UAAA,CACE,kBAACqC,GAAD;MAAY,OAAM;MAAe,SAAQ;MAAU,UAAA;KAEvC,CAAA,GACZ,kBAACmB,GAAD;MAAO,SAASE;MAAgB,YAAYP;MAAY,WAAA;KAAW,CAAA,CACnE,EAAA,CAAA,IACA;KACJ,kBAACd,GAAD;MAAY,OAAM;MAAe,SAAQ;MAAzC,UAAA,CAAmD,SAC3C/B,EAAqBqD,CAAU,CAAC,CAAC,IAC7B;;KACXC,IACC,kBAACvB,GAAD;MAAY,OAAM;MAAe,SAAQ;MAAzC,UAAA,CAAmD,SAC3CuB,CACI;KACV,CAAA,IAAA;IACD;;GAEJC,IACC,kBAACxB,GAAD;IAAY,OAAM;IAAa,SAAQ;IACpC,UAAAwB;GACS,CAAA,IACV;EACD;;AAET;AAEA,IAAMJ,IAA2C;CAC/C;EACE,KAAK;EACL,SAAS,MACP,kBAACK,GAAD;GAAK,OAAOC,EAAO;GAAW,MAAK;GAAM,MAAK;EAAU,CAAA;EAE1D,OAAO;EACP,OAAO;CACT;CACA;EAAE,WAAW;EAAS,KAAK;EAAS,OAAO;CAAK;CAChD;EAAE,WAAW;EAAU,KAAK;EAAU,OAAO;EAAQ,OAAO;CAAI;AAClE,GAEML,IAA2C;CAC/C;EAAE,WAAW;EAAU,KAAK;EAAU,OAAO;EAAM,OAAO;CAAI;CAC9D;EAAE,WAAW;EAAU,KAAK;EAAU,OAAO;EAAM,OAAO;CAAI;CAC9D;EAAE,WAAW;EAAa,KAAK;EAAa,OAAO;CAAK;AAC1D;AAEA,SAASR,EAAkB,GAA4B;CACrD,QAAQH,EAAK,MAAb;EACE,KAAK,cACH,OAAO;EACT,KAAK,YACH,OAAOA,EAAK,KAAK,aAAa,aAAa,WAAW;EACxD,KAAK,YACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,oBACH,OAAO;EACT,KAAK,mBACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAASE,EAAe,GAAmC;CAKzD,OAJIF,EAAK,SAAS,aAIXvC,EAA2BuC,EAAK,KAAK,gBAAgB,IAHnD;AAIX;AAEA,IAAMM,IAA6B;CACjC,SAAS;CACT,KAAK;AACP,GAIMC,IAA6B,EACjC,WAAW,+CACb;;AC3JA,SAAgBU,EAAoB,EAClC,0BAAuB,IACvB,eACA,uBACA,eACA,4BACA,uBACA,qBACA,qBAAkB,IAClB,yBACyC;CACzC,OACE,kBAAA/D,GAAA,EAAA,UAAA,CACE,kBAACoC,GAAD;EAAY,OAAM;EAAe,SAAQ;EAAU,UAAA;CAEvC,CAAA,GACZ,kBAAC5B,GAAD;EACwB;EACtB,UAAA;EACA,oBAAoB8B;EACpB,2BAA2BqB;EAC3B,mBAAmBD;EACnB,2BAA2BhB,KAAsB,KAAA;EACxB;EACL;EACF;EACD;CAClB,CAAA,CACD,EAAA,CAAA;AAEN;;ACvCA,IAAasB,IAAkD;CAC7D,QAAQ,CAAC;CACT,eAAe;AACjB,GAEaC,IAA6C;CACxD,QAAQ,CAAC;CACT,eAAe;AACjB;AA2CA,SAAgBC,IAAkD;CAChE,IAAMC,IAAWzD,EAAe,GAC1B,CAAC0D,GAAaC,KAAkBnD,EAA4B,CAAC,GAC7D,CAACe,GAAMqC,KAAWpD,EAAS,EAAE,GAC7B,CAACQ,GAAY6C,KAAiBrD,EAAwB,IAAI,GAC1D,CAACoB,GAAYkC,KAAiBtD,EAClC8C,CACF,GACM,CAACzB,GAAckC,KAAmBvD,EACtC+C,CACF,GACM,CAACvB,GAAoBgC,KACzBxD,EAAoC,IAAI,GACpC,CAACyC,GAAoBgB,KAA8BzD,EAEvD,IAAI,GACA,CAACwC,GAAYkB,KAAiB1D,EAClC2D,CACF,GACM,CAACC,GAAcC,KAAmB7D,EAA8B,MAAM,GACtE,CAAC0C,GAAcoB,KAAmB9D,EAAwB,IAAI,GAE9D+D,IAAiBhD,EAAK,KAAK,CAAC,CAAC,SAAS,KAAKK,EAAW,OAAO,SAAS,GAEtE4C,IAAWC,GAAa,MAAkC;EAC9D,EAAeC,CAAI;CACrB,GAAG,CAAC,CAAC,GAECC,IAASF,QAAwB;EACrC,GAAgB,MACdC,IAAO,IAAMA,IAAO,IAA2BA,CACjD;CACF,GAAG,CAAC,CAAC,GAECE,IAASH,QAAwB;EACrC,GAAgB,MACdC,IAAO,IAAMA,IAAO,IAA2BA,CACjD;CACF,GAAG,CAAC,CAAC,GAECG,IAAeJ,GAClB,MAGW;EAEV,AADAX,EAAcgB,EAAK,MAAM,GACzBf,EAAgBe,EAAK,QAAQ;CAC/B,GACA,CAAC,CACH,GAEMC,IAAwBN,GAC3B,MAAyC;EACxC,EAA2BO,CAAU;CACvC,GACA,CAAC,CACH,GAEMC,IAAwBR,GAAa,MAA6B;EACtE,EAA2BS,CAAG;CAChC,GAAG,CAAC,CAAC;CAqDL,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SA9DAT,EAAY,YAAmE;GAE7E,AADAJ,EAAgB,YAAY,GAC5BC,EAAgB,IAAI;GAEpB,IAAMa,IACJnD,KAAsBoD;GAExB,IAAI;IACF,IAAM1E,IAAS,MAAM2E,EAAgC;KACnD,UAAU;KACV;KACA,kBAAkB;KAClB,iBAAiB;KAEjB,UAAU9D;KACV;KACA;KACA,oBAAoB;KACpB,SAAS;KACT,QAAQK;KACR,aAAa;KACb,qBAAqB;KACrB,YAAY;KACZ,cAAcL;KACd,UAAUM;KACV,oBAAoBsD;IACtB,CAAC;IAID,OAFAd,EAAgB,SAAS,GAElB3D;GACT,SAAS4E,GAAuB;IAM9B,OALAhB,EACE1E,EAAyB0F,GAAc7B,GAAU0B,CAAmB,CACtE,GACAd,EAAgB,OAAO,GAEhB;GACT;EACF,GAAG;GACDrD;GACAY;GACAC;GACAoB;GACAQ;GACAT;GACAzB;GACAS;EACF,CAcA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAGA,IAAMoD,IAAgD;CACpD,OAAO,CAAC;CACR,mBAAmB;CACnB,MAAM,EAAE,eAAe,EAAE;CACzB,OAAO,CACL;EACE,MAAM,EAAE,OAAO,KAAK;EACpB,IAAI;EACJ,UAAU;GAAE,GAAG;GAAI,GAAG;EAAI;EAC1B,MAAM;CACR,GACA;EACE,MAAM;GAAE,UAAU;GAAY,OAAO;GAAM,aAAa;EAAM;EAC9D,IAAI;EACJ,UAAU;GAAE,GAAG;GAAK,GAAG;EAAI;EAC3B,MAAM;CACR,CACF;AACF;;AC7LA,SAAgBG,EAA0B,EACxC,0BAAuB,IACvB,qBAAkB,OACgB,CAAC,GAAiB;CACpD,IAAMC,IAAShG,EAAiB,GAC1BiG,IAAShG,EAAa,GACtBiG,IAASlC,EAAyB,GAClCmC,IAAaD,EAAO,iBAAiB;CAE3C,eAAeE,IAA+B;EAC5C,IAAMlF,IAAS,MAAMgF,EAAO,QAAQ;EAEpC,AAAIhF,KACF8E,EAAO,KAAKC,EAAO,iBAAiB/E,EAAO,UAAU,CAAC;CAE1D;CAEA,OACE,kBAAAnB,GAAA,EAAA,UAAA,CACE,kBAACsG,GAAD,EAAA,UACE,kBAAC3F,GAAD;EACE,aAAY;EACZ,OAAM;EAEN,UAAA,kBAAC4F,GAAD;GACE,UAAUH;GACV,eAAqBH,EAAO,KAAKC,EAAO,UAAU,CAAC;GACnD,SAAQ;GACT,UAAA;EAEO,CAAA;CACK,CAAA,EACL,CAAA,GAEZ,kBAACM,GAAD,EAAA,UACE,kBAACC,GAAD,EAAA,UAAA;EACE,kBAACC,GAAD;GAAS,aAAaP,EAAO;GAA7B,UAAA;IACE,kBAACQ,GAAD;KAAM,aAAY;KAAU,OAAM;IAAQ,CAAA;IAC1C,kBAACA,GAAD;KAAM,aAAY;KAAY,OAAM;IAAQ,CAAA;IAC5C,kBAACA,GAAD;KAAM,aAAY;KAAQ,OAAM;IAAS,CAAA;GAClC;;EAERR,EAAO,gBAAgB,IACtB,kBAACrF,GAAD;GACE,YAAYqF,EAAO;GACnB,YAAYA,EAAO;GACnB,cAAcA,EAAO;GACrB,MAAMA,EAAO;GACb,oBAAoBA,EAAO;GAC3B,cAAcA,EAAO;GACrB,cAAcA,EAAO;EACtB,CAAA,IACC;EAEHA,EAAO,gBAAgB,IACtB,kBAACrC,GAAD;GACwB;GACtB,YAAYqC,EAAO;GACnB,oBAAoBA,EAAO;GAC3B,YAAYA,EAAO;GACnB,yBAAyBA,EAAO;GAChC,oBAAoBA,EAAO;GAC3B,kBAAkBA,EAAO;GACR;GACjB,oBAAoBA,EAAO;EAC5B,CAAA,IACC;EAEHA,EAAO,gBAAgB,IACtB,kBAAC5D,GAAD;GACE,YAAY4D,EAAO;GACnB,cAAcA,EAAO;GACrB,oBAAoBA,EAAO;GAC3B,YAAYA,EAAO;GACnB,MAAMA,EAAO;GACb,cAAcA,EAAO;GACrB,oBAAoBA,EAAO;EAC5B,CAAA,IACC;EAEJ,kBAAC,OAAD;GAAK,OAAOS;GAAZ,UAAA,CACGT,EAAO,gBAAgB,KAAK,CAACA,EAAO,iBACnC,kBAAChE,GAAD;IAAY,OAAM;IAAe,SAAQ;IAAU,UAAA;GAEvC,CAAA,IAEZ,kBAAC,QAAD,CAAO,CAAA,GAET,kBAAC,OAAD;IAAK,OAAO0E;IAAZ,UAAA,CACE,kBAACN,GAAD;KACE,UAAUJ,EAAO,gBAAgB,KAAKC;KACtC,SAASD,EAAO;KAChB,SAAQ;KACT,UAAA;IAEO,CAAA,GACPA,EAAO,cAAc,IACpB,kBAACI,GAAD;KACE,UAAUJ,EAAO,gBAAgB,KAAK,CAACA,EAAO;KAC9C,SAASA,EAAO;KAChB,SAAQ;KACT,UAAA;IAEO,CAAA,IAER,kBAACI,GAAD;KACE,UAAUH;KACV,SAASA;KACT,eAAqB;MACnB,EAAmB;KACrB;KACA,SAAQ;KACT,UAAA;IAEO,CAAA,CAEP;GACF,CAAA,CAAA;;CACE,EAAA,CAAA,EACG,CAAA,CACd,EAAA,CAAA;AAEN;AAEA,IAAMQ,IAAe;CACnB,YAAY;CACZ,SAAS;CAET,WAAW;CACX,gBAAgB;CAChB,KAAK;AACP,GAEMC,IAAuB;CAC3B,SAAS;CACT,KAAK;AACP"}