@rytass/bpm-core-react 0.3.1 → 0.3.3

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 (182) hide show
  1. package/CHANGELOG.md +166 -0
  2. package/dist/chunks/app-navigation-BSkMsEhy.js +268 -0
  3. package/dist/chunks/app-navigation-BSkMsEhy.js.map +1 -0
  4. package/dist/chunks/app-navigation-KnlJCUp1.cjs +2 -0
  5. package/dist/chunks/app-navigation-KnlJCUp1.cjs.map +1 -0
  6. package/dist/chunks/approval-instance-list-page-CVXgE2K3.cjs +2 -0
  7. package/dist/chunks/approval-instance-list-page-CVXgE2K3.cjs.map +1 -0
  8. package/dist/chunks/{approval-instance-list-page-nmzMrj0b.js → approval-instance-list-page-CqNdoZqx.js} +73 -72
  9. package/dist/chunks/approval-instance-list-page-CqNdoZqx.js.map +1 -0
  10. package/dist/chunks/builder-CMlJfQHE.cjs +3 -0
  11. package/dist/chunks/builder-CMlJfQHE.cjs.map +1 -0
  12. package/dist/chunks/{builder-DqZskyXC.js → builder-D950gct_.js} +492 -491
  13. package/dist/chunks/builder-D950gct_.js.map +1 -0
  14. package/dist/chunks/categories-5yEM3p3N.cjs +2 -0
  15. package/dist/chunks/categories-5yEM3p3N.cjs.map +1 -0
  16. package/dist/chunks/{categories-DTEl182t.js → categories-BIpOG451.js} +115 -114
  17. package/dist/chunks/categories-BIpOG451.js.map +1 -0
  18. package/dist/chunks/dashboard-page-1K_jQXQk.cjs +2 -0
  19. package/dist/chunks/dashboard-page-1K_jQXQk.cjs.map +1 -0
  20. package/dist/chunks/dashboard-page-R_T2OEiE.js +122 -0
  21. package/dist/chunks/dashboard-page-R_T2OEiE.js.map +1 -0
  22. package/dist/chunks/{delegations-C5PzZ5Kn.js → delegations-B2j-wNEO.js} +193 -192
  23. package/dist/chunks/delegations-B2j-wNEO.js.map +1 -0
  24. package/dist/chunks/delegations-CsB9ozLu.cjs +2 -0
  25. package/dist/chunks/delegations-CsB9ozLu.cjs.map +1 -0
  26. package/dist/chunks/delegations-CvtwTXNP.cjs +2 -0
  27. package/dist/chunks/delegations-CvtwTXNP.cjs.map +1 -0
  28. package/dist/chunks/{delegations-C-ZrwzvU.js → delegations-dKodb0WW.js} +175 -174
  29. package/dist/chunks/delegations-dKodb0WW.js.map +1 -0
  30. package/dist/chunks/{detail-CfFyU5zC.js → detail-BcGAqJ_R.js} +465 -464
  31. package/dist/chunks/detail-BcGAqJ_R.js.map +1 -0
  32. package/dist/chunks/detail-CqjqLd65.cjs +2 -0
  33. package/dist/chunks/detail-CqjqLd65.cjs.map +1 -0
  34. package/dist/chunks/{format-date-time-isOa3e9q.cjs → format-date-time-26_pFvv4.cjs} +2 -2
  35. package/dist/chunks/{format-date-time-isOa3e9q.cjs.map → format-date-time-26_pFvv4.cjs.map} +1 -1
  36. package/dist/chunks/notifications-2swRqDPF.js +198 -0
  37. package/dist/chunks/notifications-2swRqDPF.js.map +1 -0
  38. package/dist/chunks/notifications-BaYDebFt.cjs +2 -0
  39. package/dist/chunks/notifications-BaYDebFt.cjs.map +1 -0
  40. package/dist/chunks/{orgs-xrdhb3hS.js → orgs-CuHxxd_n.js} +608 -607
  41. package/dist/chunks/orgs-CuHxxd_n.js.map +1 -0
  42. package/dist/chunks/orgs-YMiVLNvL.cjs +2 -0
  43. package/dist/chunks/orgs-YMiVLNvL.cjs.map +1 -0
  44. package/dist/chunks/routes-config-2aKbWq2H.cjs +2 -0
  45. package/dist/chunks/routes-config-2aKbWq2H.cjs.map +1 -0
  46. package/dist/chunks/routes-config-dxahImVe.js +43 -0
  47. package/dist/chunks/routes-config-dxahImVe.js.map +1 -0
  48. package/dist/chunks/templates-DTkbSgFY.cjs +2 -0
  49. package/dist/chunks/templates-DTkbSgFY.cjs.map +1 -0
  50. package/dist/chunks/templates-DoDWM68t.js +384 -0
  51. package/dist/chunks/templates-DoDWM68t.js.map +1 -0
  52. package/dist/chunks/users-3ySyUW4u.cjs +2 -0
  53. package/dist/chunks/users-3ySyUW4u.cjs.map +1 -0
  54. package/dist/chunks/{users-CY4-NK3j.js → users-sMfrSjRQ.js} +75 -74
  55. package/dist/chunks/users-sMfrSjRQ.js.map +1 -0
  56. package/dist/components/admin-pickers.d.ts +1 -1
  57. package/dist/components/approval-instance-list-page.d.ts +1 -1
  58. package/dist/components/org-unit-tree-draft-editor.d.ts +1 -1
  59. package/dist/index.cjs +1 -1
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.ts +1 -0
  62. package/dist/index.js +101 -99
  63. package/dist/index.js.map +1 -1
  64. package/dist/lib/auth-provider.d.ts +1 -1
  65. package/dist/lib/org-tree-draft.d.ts +1 -1
  66. package/dist/lib/routes-config.d.ts +105 -0
  67. package/dist/next/BPMNextProviders.d.ts +48 -3
  68. package/dist/next/index.cjs +1 -1
  69. package/dist/next/index.cjs.map +1 -1
  70. package/dist/next/index.d.ts +1 -0
  71. package/dist/next/index.js +27 -21
  72. package/dist/next/index.js.map +1 -1
  73. package/dist/pages/admin/delegations/index.cjs +1 -1
  74. package/dist/pages/admin/delegations/index.js +1 -1
  75. package/dist/pages/admin/orgs/index.cjs +1 -1
  76. package/dist/pages/admin/orgs/index.js +1 -1
  77. package/dist/pages/admin/users/index.cjs +1 -1
  78. package/dist/pages/admin/users/index.js +1 -1
  79. package/dist/pages/delegations/index.cjs +1 -1
  80. package/dist/pages/delegations/index.js +1 -1
  81. package/dist/pages/forms/builder/index.cjs +1 -1
  82. package/dist/pages/forms/builder/index.js +1 -1
  83. package/dist/pages/instances/detail/index.cjs +1 -1
  84. package/dist/pages/instances/detail/index.js +1 -1
  85. package/dist/pages/settings/notifications/index.cjs +1 -1
  86. package/dist/pages/settings/notifications/index.js +1 -1
  87. package/dist/pages/templates/categories/index.cjs +1 -1
  88. package/dist/pages/templates/categories/index.js +1 -1
  89. package/dist/pages/templates/index.cjs +1 -1
  90. package/dist/pages/templates/index.js +1 -1
  91. package/dist/views/admin/delegations/index.cjs +1 -1
  92. package/dist/views/admin/delegations/index.js +1 -1
  93. package/dist/views/admin/index.cjs +1 -1
  94. package/dist/views/admin/index.js +3 -3
  95. package/dist/views/admin/orgs/index.cjs +1 -1
  96. package/dist/views/admin/orgs/index.js +1 -1
  97. package/dist/views/admin/users/index.cjs +1 -1
  98. package/dist/views/admin/users/index.js +1 -1
  99. package/dist/views/cc/index.cjs +1 -1
  100. package/dist/views/cc/index.js +1 -1
  101. package/dist/views/dashboard/index.cjs +1 -1
  102. package/dist/views/dashboard/index.js +1 -1
  103. package/dist/views/delegations/index.cjs +1 -1
  104. package/dist/views/delegations/index.js +1 -1
  105. package/dist/views/forms/builder/index.cjs +1 -1
  106. package/dist/views/forms/builder/index.js +1 -1
  107. package/dist/views/forms/index.cjs +1 -1
  108. package/dist/views/forms/index.cjs.map +1 -1
  109. package/dist/views/forms/index.js +78 -77
  110. package/dist/views/forms/index.js.map +1 -1
  111. package/dist/views/forms/renderer/FormRendererView.d.ts +2 -2
  112. package/dist/views/inbox/index.cjs +1 -1
  113. package/dist/views/inbox/index.cjs.map +1 -1
  114. package/dist/views/inbox/index.js +106 -105
  115. package/dist/views/inbox/index.js.map +1 -1
  116. package/dist/views/instances/detail/index.cjs +1 -1
  117. package/dist/views/instances/detail/index.js +1 -1
  118. package/dist/views/instances/new/index.cjs +1 -1
  119. package/dist/views/instances/new/index.cjs.map +1 -1
  120. package/dist/views/instances/new/index.js +90 -89
  121. package/dist/views/instances/new/index.js.map +1 -1
  122. package/dist/views/search/index.cjs +1 -1
  123. package/dist/views/search/index.js +1 -1
  124. package/dist/views/sent/index.cjs +1 -1
  125. package/dist/views/sent/index.js +1 -1
  126. package/dist/views/settings/index.cjs +1 -1
  127. package/dist/views/settings/index.js +1 -1
  128. package/dist/views/settings/notifications/index.cjs +1 -1
  129. package/dist/views/settings/notifications/index.js +1 -1
  130. package/dist/views/templates/categories/index.cjs +1 -1
  131. package/dist/views/templates/categories/index.js +1 -1
  132. package/dist/views/templates/designer/index.cjs +6 -6
  133. package/dist/views/templates/designer/index.cjs.map +1 -1
  134. package/dist/views/templates/designer/index.js +589 -588
  135. package/dist/views/templates/designer/index.js.map +1 -1
  136. package/dist/views/templates/index.cjs +1 -1
  137. package/dist/views/templates/index.js +2 -2
  138. package/dist/views/templates/versions/index.cjs +1 -1
  139. package/dist/views/templates/versions/index.cjs.map +1 -1
  140. package/dist/views/templates/versions/index.js +44 -43
  141. package/dist/views/templates/versions/index.js.map +1 -1
  142. package/package.json +3 -3
  143. package/dist/chunks/app-navigation-C_mbz7jx.cjs +0 -2
  144. package/dist/chunks/app-navigation-C_mbz7jx.cjs.map +0 -1
  145. package/dist/chunks/app-navigation-uwbNEw9P.js +0 -262
  146. package/dist/chunks/app-navigation-uwbNEw9P.js.map +0 -1
  147. package/dist/chunks/approval-instance-list-page-Mo6wpDPb.cjs +0 -2
  148. package/dist/chunks/approval-instance-list-page-Mo6wpDPb.cjs.map +0 -1
  149. package/dist/chunks/approval-instance-list-page-nmzMrj0b.js.map +0 -1
  150. package/dist/chunks/builder-DPhAH381.cjs +0 -3
  151. package/dist/chunks/builder-DPhAH381.cjs.map +0 -1
  152. package/dist/chunks/builder-DqZskyXC.js.map +0 -1
  153. package/dist/chunks/categories-DEijUOnw.cjs +0 -2
  154. package/dist/chunks/categories-DEijUOnw.cjs.map +0 -1
  155. package/dist/chunks/categories-DTEl182t.js.map +0 -1
  156. package/dist/chunks/dashboard-page-DCmuB0Rw.cjs +0 -2
  157. package/dist/chunks/dashboard-page-DCmuB0Rw.cjs.map +0 -1
  158. package/dist/chunks/dashboard-page-Dx5PeEeN.js +0 -117
  159. package/dist/chunks/dashboard-page-Dx5PeEeN.js.map +0 -1
  160. package/dist/chunks/delegations-C-ZrwzvU.js.map +0 -1
  161. package/dist/chunks/delegations-C5PzZ5Kn.js.map +0 -1
  162. package/dist/chunks/delegations-DOGDvybX.cjs +0 -2
  163. package/dist/chunks/delegations-DOGDvybX.cjs.map +0 -1
  164. package/dist/chunks/delegations-DkDBWOQ7.cjs +0 -2
  165. package/dist/chunks/delegations-DkDBWOQ7.cjs.map +0 -1
  166. package/dist/chunks/detail-B2gcOPkd.cjs +0 -2
  167. package/dist/chunks/detail-B2gcOPkd.cjs.map +0 -1
  168. package/dist/chunks/detail-CfFyU5zC.js.map +0 -1
  169. package/dist/chunks/notifications-CPQ-nVar.cjs +0 -2
  170. package/dist/chunks/notifications-CPQ-nVar.cjs.map +0 -1
  171. package/dist/chunks/notifications-DweexUVy.js +0 -197
  172. package/dist/chunks/notifications-DweexUVy.js.map +0 -1
  173. package/dist/chunks/orgs-DgZ0DQ3-.cjs +0 -2
  174. package/dist/chunks/orgs-DgZ0DQ3-.cjs.map +0 -1
  175. package/dist/chunks/orgs-xrdhb3hS.js.map +0 -1
  176. package/dist/chunks/templates-PK_VYvcy.js +0 -383
  177. package/dist/chunks/templates-PK_VYvcy.js.map +0 -1
  178. package/dist/chunks/templates-x1OJZmsG.cjs +0 -2
  179. package/dist/chunks/templates-x1OJZmsG.cjs.map +0 -1
  180. package/dist/chunks/users-CY4-NK3j.js.map +0 -1
  181. package/dist/chunks/users-DHnu_056.cjs +0 -2
  182. package/dist/chunks/users-DHnu_056.cjs.map +0 -1
@@ -1,19 +1,20 @@
1
1
  "use client";
2
2
  import { a as e } from "./auth-provider-Bnox5gsx.js";
3
3
  import { t } from "./format-date-time-CB-LxzqT.js";
4
- import { t as n } from "./app-navigation-uwbNEw9P.js";
5
- import { useCallback as r, useEffect as i, useMemo as a, useState as o } from "react";
6
- import { Filter as s, FilterArea as c, FilterLine as ee, FormField as l, Input as u, PageHeader as d, Section as f, SectionGroup as p, Select as te, Table as ne, Typography as m } from "@mezzanine-ui/react";
7
- import { resolveMembers as h } from "@rytass/bpm-core-client";
8
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
9
- import { listApprovalInstancesPage as v, readApprovalInstanceCaseTitle as y } from "@rytass/bpm-core-client/workflow";
10
- import b from "@mezzanine-ui/react/ContentHeader";
11
- import { FormFieldLayout as x } from "@mezzanine-ui/core/form";
12
- import '../approval-instance-list-page.css';var S = { instanceFilterArea: "bpm_instanceFilterArea_qpvJq" }, C = [
4
+ import { t as n } from "./app-navigation-BSkMsEhy.js";
5
+ import { r } from "./routes-config-dxahImVe.js";
6
+ import { useCallback as ee, useEffect as i, useMemo as a, useState as o } from "react";
7
+ import { Filter as s, FilterArea as te, FilterLine as c, FormField as l, Input as u, PageHeader as d, Section as f, SectionGroup as p, Select as m, Table as ne, Typography as h } from "@mezzanine-ui/react";
8
+ import { resolveMembers as g } from "@rytass/bpm-core-client";
9
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
10
+ import { listApprovalInstancesPage as y, readApprovalInstanceCaseTitle as b } from "@rytass/bpm-core-client/workflow";
11
+ import x from "@mezzanine-ui/react/ContentHeader";
12
+ import { FormFieldLayout as S } from "@mezzanine-ui/core/form";
13
+ import '../approval-instance-list-page.css';var C = { instanceFilterArea: "bpm_instanceFilterArea_qpvJq" }, w = [
13
14
  10,
14
15
  20,
15
16
  50
16
- ], w = [
17
+ ], T = [
17
18
  {
18
19
  id: "ALL",
19
20
  name: "全部狀態",
@@ -55,21 +56,21 @@ import '../approval-instance-list-page.css';var S = { instanceFilterArea: "bpm_i
55
56
  state: "DRAFT"
56
57
  }
57
58
  ];
58
- function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, searchPlaceholder: P, title: F, view: I }) {
59
- let L = e(), [R, z] = o(null), [B, V] = o(/* @__PURE__ */ new Map()), [H, U] = o(1), [W, G] = o(10), [K, q] = o(0), [J, Y] = o(!0), [X, ie] = o([]), [Z, ae] = o(""), [Q, oe] = o(O(T)), $ = r(async () => {
59
+ function E({ activeHref: b, defaultState: E, description: O, emptyMessage: k, searchPlaceholder: N, title: P, view: F }) {
60
+ let I = e(), L = r(), [R, z] = o(null), [B, V] = o(/* @__PURE__ */ new Map()), [H, U] = o(1), [W, G] = o(10), [K, q] = o(0), [J, Y] = o(!0), [X, oe] = o([]), [Z, se] = o(""), [Q, ce] = o(D(E)), $ = ee(async () => {
60
61
  Y(!0), z(null);
61
62
  try {
62
- let e = await v({
63
+ let e = await y({
63
64
  page: H,
64
65
  pageSize: W,
65
66
  searchText: Z,
66
67
  state: Q.state,
67
68
  templateId: null,
68
- view: I
69
+ view: F
69
70
  });
70
- ie(e.instances.map(E)), q(e.totalCount);
71
+ oe(e.instances.map(re)), q(e.totalCount);
71
72
  } catch (e) {
72
- z(N(e));
73
+ z(M(e));
73
74
  } finally {
74
75
  Y(!1);
75
76
  }
@@ -78,7 +79,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
78
79
  W,
79
80
  Z,
80
81
  Q,
81
- I
82
+ F
82
83
  ]);
83
84
  i(() => {
84
85
  $();
@@ -91,7 +92,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
91
92
  let t = !1;
92
93
  return (async () => {
93
94
  try {
94
- let n = await h(e);
95
+ let n = await g(e);
95
96
  if (t) return;
96
97
  V(new Map(n.map((e) => [e.memberId, e])));
97
98
  } catch {
@@ -102,7 +103,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
102
103
  t = !0;
103
104
  };
104
105
  }, [X]);
105
- let se = a(() => [
106
+ let le = a(() => [
106
107
  {
107
108
  dataIndex: "caseTitle",
108
109
  key: "caseTitle",
@@ -111,8 +112,8 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
111
112
  },
112
113
  {
113
114
  key: "state",
114
- render: (e) => /* @__PURE__ */ g(m, {
115
- color: j(e.state),
115
+ render: (e) => /* @__PURE__ */ _(h, {
116
+ color: A(e.state),
116
117
  component: "span",
117
118
  variant: "body",
118
119
  children: e.stateLabel
@@ -122,17 +123,17 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
122
123
  },
123
124
  {
124
125
  key: "initiatorMemberId",
125
- render: (e) => /* @__PURE__ */ g(m, {
126
+ render: (e) => /* @__PURE__ */ _(h, {
126
127
  component: "span",
127
128
  variant: "body",
128
- children: M(e.initiatorMemberId, B)
129
+ children: j(e.initiatorMemberId, B)
129
130
  }),
130
131
  title: "發起人",
131
132
  width: 180
132
133
  },
133
134
  {
134
135
  key: "startedAt",
135
- render: (e) => /* @__PURE__ */ g(m, {
136
+ render: (e) => /* @__PURE__ */ _(h, {
136
137
  component: "span",
137
138
  variant: "body",
138
139
  children: t(e.startedAt)
@@ -142,7 +143,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
142
143
  },
143
144
  {
144
145
  key: "completedAt",
145
- render: (e) => /* @__PURE__ */ g(m, {
146
+ render: (e) => /* @__PURE__ */ _(h, {
146
147
  component: "span",
147
148
  variant: "body",
148
149
  children: t(e.completedAt)
@@ -150,55 +151,55 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
150
151
  title: "完成時間",
151
152
  width: 220
152
153
  }
153
- ], [B]), ce = a(() => ({
154
+ ], [B]), ue = a(() => ({
154
155
  render: (e) => [{
155
156
  name: "查看",
156
- onClick: () => L.push(`/instances/${e.id}`)
157
+ onClick: () => I.push(L.caseDetail(e.id))
157
158
  }],
158
159
  variant: "base-secondary",
159
160
  width: 88
160
- }), [L]);
161
- return /* @__PURE__ */ _(n, {
162
- activeHref: y,
163
- children: [/* @__PURE__ */ g(d, { children: /* @__PURE__ */ g(b, {
164
- description: k,
165
- title: F
166
- }) }), /* @__PURE__ */ g(p, { children: /* @__PURE__ */ _(f, {
167
- filterArea: /* @__PURE__ */ g(c, {
168
- className: S.instanceFilterArea,
161
+ }), [I]);
162
+ return /* @__PURE__ */ v(n, {
163
+ activeHref: b,
164
+ children: [/* @__PURE__ */ _(d, { children: /* @__PURE__ */ _(x, {
165
+ description: O,
166
+ title: P
167
+ }) }), /* @__PURE__ */ _(p, { children: /* @__PURE__ */ v(f, {
168
+ filterArea: /* @__PURE__ */ _(te, {
169
+ className: C.instanceFilterArea,
169
170
  size: "sub",
170
- children: /* @__PURE__ */ _(ee, { children: [/* @__PURE__ */ g(s, {
171
+ children: /* @__PURE__ */ v(c, { children: [/* @__PURE__ */ _(s, {
171
172
  span: 3,
172
- children: /* @__PURE__ */ g(l, {
173
+ children: /* @__PURE__ */ _(l, {
173
174
  fullWidth: !0,
174
- layout: x.VERTICAL,
175
+ layout: S.VERTICAL,
175
176
  name: "instanceSearchText",
176
- children: /* @__PURE__ */ g(u, {
177
+ children: /* @__PURE__ */ _(u, {
177
178
  fullWidth: !0,
178
179
  onChange: (e) => {
179
- ae(e.target.value), U(1);
180
+ se(e.target.value), U(1);
180
181
  },
181
- placeholder: P,
182
+ placeholder: N,
182
183
  size: "sub",
183
184
  value: Z,
184
185
  variant: "base"
185
186
  })
186
187
  })
187
- }), /* @__PURE__ */ g(s, {
188
+ }), /* @__PURE__ */ _(s, {
188
189
  span: 2,
189
- children: /* @__PURE__ */ g(l, {
190
+ children: /* @__PURE__ */ _(l, {
190
191
  fullWidth: !0,
191
- layout: x.VERTICAL,
192
+ layout: S.VERTICAL,
192
193
  name: "instanceState",
193
- children: /* @__PURE__ */ g(te, {
194
+ children: /* @__PURE__ */ _(m, {
194
195
  clearable: !1,
195
196
  fullWidth: !0,
196
197
  onChange: (e) => {
197
- oe(D(e)), U(1);
198
+ ce(ie(e)), U(1);
198
199
  },
199
- options: [...w],
200
+ options: [...T],
200
201
  placeholder: "狀態",
201
- renderValue: (e) => `狀態:${re(e)}`,
202
+ renderValue: (e) => `狀態:${ae(e)}`,
202
203
  size: "sub",
203
204
  value: Q
204
205
  })
@@ -206,19 +207,19 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
206
207
  })] })
207
208
  }),
208
209
  children: [
209
- R ? /* @__PURE__ */ g(m, {
210
+ R ? /* @__PURE__ */ _(h, {
210
211
  color: "text-error",
211
212
  variant: "body",
212
213
  children: R
213
214
  }) : null,
214
- !R && !J && X.length === 0 ? /* @__PURE__ */ g(m, {
215
+ !R && !J && X.length === 0 ? /* @__PURE__ */ _(h, {
215
216
  color: "text-neutral",
216
217
  variant: "body",
217
- children: A
218
+ children: k
218
219
  }) : null,
219
- /* @__PURE__ */ g(ne, {
220
- actions: ce,
221
- columns: se,
220
+ /* @__PURE__ */ _(ne, {
221
+ actions: ue,
222
+ columns: le,
222
223
  dataSource: [...X],
223
224
  fullWidth: !0,
224
225
  loading: J,
@@ -232,7 +233,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
232
233
  },
233
234
  pageSize: W,
234
235
  pageSizeLabel: "每頁筆數",
235
- pageSizeOptions: C,
236
+ pageSizeOptions: w,
236
237
  renderResultSummary: (e, t, n) => `顯示 ${e}-${t} 筆,共 ${n} 筆`,
237
238
  showPageSizeOptions: !0,
238
239
  total: K
@@ -242,40 +243,40 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
242
243
  }) })]
243
244
  });
244
245
  }
245
- function E(e) {
246
+ function re(e) {
246
247
  return {
247
248
  ...e,
248
- caseTitle: y(e),
249
+ caseTitle: b(e),
249
250
  key: e.id,
250
- stateLabel: A(e.state)
251
+ stateLabel: k(e.state)
251
252
  };
252
253
  }
253
- function D(e) {
254
- return k(e) ? O(e.state) : w[0];
254
+ function ie(e) {
255
+ return O(e) ? D(e.state) : T[0];
255
256
  }
256
- function O(e) {
257
- return w.find((t) => t.state === e) ?? w[0];
257
+ function D(e) {
258
+ return T.find((t) => t.state === e) ?? T[0];
258
259
  }
259
- function re(e) {
260
- return k(e) ? e.name : w[0].name;
260
+ function ae(e) {
261
+ return O(e) ? e.name : T[0].name;
261
262
  }
262
- function k(e) {
263
+ function O(e) {
263
264
  return typeof e == "object" && !!e && "id" in e && "name" in e && "state" in e;
264
265
  }
265
- function A(e) {
266
+ function k(e) {
266
267
  return e === "RUNNING" ? "進行中" : e === "APPROVED" ? "已通過" : e === "REJECTED" ? "已拒絕" : e === "RETURNED" ? "已退回" : e === "CANCELLED" ? "已取消" : e === "EXPIRED" ? "已逾期" : "草稿";
267
268
  }
268
- function j(e) {
269
+ function A(e) {
269
270
  return e === "APPROVED" ? "text-success" : e === "REJECTED" || e === "CANCELLED" || e === "EXPIRED" ? "text-error" : "text-neutral";
270
271
  }
271
- function M(e, t) {
272
+ function j(e, t) {
272
273
  let n = (e ?? "").trim();
273
274
  return n ? t.get(n)?.name ?? n : "未知發起人";
274
275
  }
275
- function N(e) {
276
+ function M(e) {
276
277
  return e instanceof Error ? e.message : "讀取簽核案件失敗。";
277
278
  }
278
279
  //#endregion
279
- export { T as t };
280
+ export { E as t };
280
281
 
281
- //# sourceMappingURL=approval-instance-list-page-nmzMrj0b.js.map
282
+ //# sourceMappingURL=approval-instance-list-page-CqNdoZqx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-instance-list-page-CqNdoZqx.js","names":[],"sources":["../../src/components/approval-instance-list-page.module.scss","../../src/components/approval-instance-list-page.tsx"],"sourcesContent":[".instanceFilterArea {\n :global(.mzn-filter-area__actions) {\n display: none;\n }\n\n :global(.mzn-form-field__label-area) {\n display: none;\n }\n\n :global(.mzn-form-field__control-field-slot--main) {\n width: 100%;\n min-width: 0;\n }\n}\n","'use client';\n\nimport type { ChangeEvent, ReactElement } from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n Filter,\n FilterArea,\n FilterLine,\n FormField,\n Input,\n PageHeader,\n Section,\n SectionGroup,\n Select,\n Table,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport { resolveMembers, type MemberProfileRecord } from '@rytass/bpm-core-client';\nimport {\n listApprovalInstancesPage,\n readApprovalInstanceCaseTitle,\n type ApprovalInstanceRecord,\n type ApprovalInstanceState,\n type ApprovalInstanceView,\n} from '@rytass/bpm-core-client/workflow';\nimport { useRouterAdapter } from '../lib/router-adapter';\nimport { useBPMRoutes } from '../lib/routes-config';\nimport { formatDateTime } from '../lib/format-date-time';\nimport { AppLayout } from './app-navigation';\nimport styles from './approval-instance-list-page.module.scss';\n\nexport interface ApprovalInstanceListPageProps {\n readonly activeHref: string;\n readonly defaultState: ApprovalInstanceState | null;\n readonly description: string;\n readonly emptyMessage: string;\n readonly searchPlaceholder: string;\n readonly title: string;\n readonly view: ApprovalInstanceView;\n}\n\ntype StateFilterOption = Readonly<{\n id: 'ALL' | ApprovalInstanceState;\n name: string;\n state: ApprovalInstanceState | null;\n}>;\n\ntype ApprovalInstanceRow = Readonly<\n Record<string, unknown> &\n ApprovalInstanceRecord & {\n caseTitle: string;\n key: string;\n stateLabel: string;\n }\n>;\n\nconst INSTANCE_PAGE_SIZE_OPTIONS = [10, 20, 50];\nconst STATE_FILTER_OPTIONS: readonly StateFilterOption[] = [\n { id: 'ALL', name: '全部狀態', state: null },\n { id: 'RUNNING', name: '進行中', state: 'RUNNING' },\n { id: 'APPROVED', name: '已通過', state: 'APPROVED' },\n { id: 'REJECTED', name: '已拒絕', state: 'REJECTED' },\n { id: 'RETURNED', name: '已退回', state: 'RETURNED' },\n { id: 'CANCELLED', name: '已取消', state: 'CANCELLED' },\n { id: 'EXPIRED', name: '已逾期', state: 'EXPIRED' },\n { id: 'DRAFT', name: '草稿', state: 'DRAFT' },\n];\n\n/**\n * Shared list page for any approval-instance \"view\" (inbox / sent / cc /\n * delegated). Caller picks the view + default state filter; the page renders\n * the standard BPM filter bar + paginated table and navigates to\n * `/instances/:id` on row action.\n */\nexport function ApprovalInstanceListPage({\n activeHref,\n defaultState,\n description,\n emptyMessage,\n searchPlaceholder,\n title,\n view,\n}: ApprovalInstanceListPageProps): ReactElement {\n const router = useRouterAdapter();\n const routes = useBPMRoutes();\n const [error, setError] = useState<string | null>(null);\n const [initiatorProfilesById, setInitiatorProfilesById] = useState<\n ReadonlyMap<string, MemberProfileRecord>\n >(new Map());\n const [instancePage, setInstancePage] = useState(1);\n const [instancePageSize, setInstancePageSize] = useState(10);\n const [instanceTotalCount, setInstanceTotalCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [rows, setRows] = useState<readonly ApprovalInstanceRow[]>([]);\n const [searchText, setSearchText] = useState('');\n const [stateFilter, setStateFilter] = useState<StateFilterOption>(\n readStateFilterOption(defaultState),\n );\n\n const refreshInstances = useCallback(async (): Promise<void> => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await listApprovalInstancesPage({\n page: instancePage,\n pageSize: instancePageSize,\n searchText,\n state: stateFilter.state,\n templateId: null,\n view,\n });\n\n setRows(result.instances.map(readApprovalInstanceRow));\n setInstanceTotalCount(result.totalCount);\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }, [instancePage, instancePageSize, searchText, stateFilter, view]);\n\n useEffect((): void => {\n void refreshInstances();\n }, [refreshInstances]);\n\n useEffect((): (() => void) | void => {\n const initiatorMemberIds = Array.from(\n new Set(rows.map((row) => row.initiatorMemberId).filter(Boolean)),\n );\n\n if (initiatorMemberIds.length === 0) {\n setInitiatorProfilesById(new Map());\n\n return;\n }\n\n let cancelled = false;\n\n void (async (): Promise<void> => {\n try {\n const profiles = await resolveMembers(initiatorMemberIds);\n\n if (cancelled) {\n return;\n }\n\n setInitiatorProfilesById(\n new Map(profiles.map((profile) => [profile.memberId, profile])),\n );\n } catch {\n if (cancelled) {\n return;\n }\n\n setInitiatorProfilesById(new Map());\n }\n })();\n\n return (): void => {\n cancelled = true;\n };\n }, [rows]);\n\n const columns = useMemo(\n (): TableColumn<ApprovalInstanceRow>[] => [\n { dataIndex: 'caseTitle', key: 'caseTitle', title: '案件', width: 300 },\n {\n key: 'state',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography\n color={readInstanceStateColor(record.state)}\n component=\"span\"\n variant=\"body\"\n >\n {record.stateLabel}\n </Typography>\n ),\n title: '狀態',\n width: 120,\n },\n {\n key: 'initiatorMemberId',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {readInitiatorLabel(\n record.initiatorMemberId,\n initiatorProfilesById,\n )}\n </Typography>\n ),\n title: '發起人',\n width: 180,\n },\n {\n key: 'startedAt',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {formatDateTime(record.startedAt)}\n </Typography>\n ),\n title: '發起時間',\n width: 220,\n },\n {\n key: 'completedAt',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {formatDateTime(record.completedAt)}\n </Typography>\n ),\n title: '完成時間',\n width: 220,\n },\n ],\n [initiatorProfilesById],\n );\n const tableActions = useMemo(\n (): TableActions<ApprovalInstanceRow> => ({\n render: (\n record,\n ): ReturnType<TableActions<ApprovalInstanceRow>['render']> => [\n {\n name: '查看',\n onClick: (): void => router.push(routes.caseDetail(record.id)),\n },\n ],\n variant: 'base-secondary',\n width: 88,\n }),\n [router],\n );\n\n return (\n <AppLayout activeHref={activeHref}>\n <PageHeader>\n <ContentHeader description={description} title={title} />\n </PageHeader>\n\n <SectionGroup>\n <Section\n filterArea={\n <FilterArea className={styles.instanceFilterArea} size=\"sub\">\n <FilterLine>\n <Filter span={3}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"instanceSearchText\"\n >\n <Input\n fullWidth\n onChange={(\n event: ChangeEvent<HTMLInputElement>,\n ): void => {\n setSearchText(event.target.value);\n setInstancePage(1);\n }}\n placeholder={searchPlaceholder}\n size=\"sub\"\n value={searchText}\n variant=\"base\"\n />\n </FormField>\n </Filter>\n <Filter span={2}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"instanceState\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setStateFilter(readSelectedStateFilterOption(option));\n setInstancePage(1);\n }}\n options={[...STATE_FILTER_OPTIONS]}\n placeholder=\"狀態\"\n renderValue={(value): string =>\n `狀態:${readStateFilterLabel(value)}`\n }\n size=\"sub\"\n value={stateFilter}\n />\n </FormField>\n </Filter>\n </FilterLine>\n </FilterArea>\n }\n >\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n {!error && !loading && rows.length === 0 ? (\n <Typography color=\"text-neutral\" variant=\"body\">\n {emptyMessage}\n </Typography>\n ) : null}\n <Table\n actions={tableActions}\n columns={columns}\n dataSource={[...rows]}\n fullWidth\n loading={loading}\n pagination={{\n current: instancePage,\n onChange: (page): void => {\n setInstancePage(page);\n },\n onChangePageSize: (pageSize): void => {\n setInstancePage(1);\n setInstancePageSize(pageSize);\n },\n pageSize: instancePageSize,\n pageSizeLabel: '每頁筆數',\n pageSizeOptions: INSTANCE_PAGE_SIZE_OPTIONS,\n renderResultSummary: (from, to, total): string =>\n `顯示 ${from}-${to} 筆,共 ${total} 筆`,\n showPageSizeOptions: true,\n total: instanceTotalCount,\n }}\n />\n </Section>\n </SectionGroup>\n </AppLayout>\n );\n}\n\nfunction readApprovalInstanceRow(\n instance: ApprovalInstanceRecord,\n): ApprovalInstanceRow {\n return {\n ...instance,\n caseTitle: readApprovalInstanceCaseTitle(instance),\n key: instance.id,\n stateLabel: readInstanceStateLabel(instance.state),\n };\n}\n\nfunction readSelectedStateFilterOption(option: unknown): StateFilterOption {\n if (!isStateFilterOption(option)) {\n return STATE_FILTER_OPTIONS[0];\n }\n return readStateFilterOption(option.state);\n}\n\nfunction readStateFilterOption(\n state: ApprovalInstanceState | null,\n): StateFilterOption {\n return (\n STATE_FILTER_OPTIONS.find((option) => option.state === state) ??\n STATE_FILTER_OPTIONS[0]\n );\n}\n\nfunction readStateFilterLabel(value: unknown): string {\n return isStateFilterOption(value) ? value.name : STATE_FILTER_OPTIONS[0].name;\n}\n\nfunction isStateFilterOption(value: unknown): value is StateFilterOption {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'name' in value &&\n 'state' in value\n );\n}\n\nfunction readInstanceStateLabel(state: ApprovalInstanceState): string {\n if (state === 'RUNNING') return '進行中';\n if (state === 'APPROVED') return '已通過';\n if (state === 'REJECTED') return '已拒絕';\n if (state === 'RETURNED') return '已退回';\n if (state === 'CANCELLED') return '已取消';\n if (state === 'EXPIRED') return '已逾期';\n return '草稿';\n}\n\nfunction readInstanceStateColor(\n state: ApprovalInstanceState,\n): 'text-error' | 'text-neutral' | 'text-success' {\n if (state === 'APPROVED') return 'text-success';\n if (state === 'REJECTED' || state === 'CANCELLED' || state === 'EXPIRED') {\n return 'text-error';\n }\n return 'text-neutral';\n}\n\nfunction readInitiatorLabel(\n initiatorMemberId: string | null | undefined,\n initiatorProfilesById: ReadonlyMap<string, MemberProfileRecord>,\n): string {\n const trimmedMemberId = (initiatorMemberId ?? '').trim();\n if (!trimmedMemberId) return '未知發起人';\n return initiatorProfilesById.get(trimmedMemberId)?.name ?? trimmedMemberId;\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '讀取簽核案件失敗。';\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use client";const e=require("./app-navigation-KnlJCUp1.cjs"),t=require("./auth-provider-BV8Iiwfb.cjs"),n=require("./format-date-time-26_pFvv4.cjs"),r=require("./routes-config-2aKbWq2H.cjs"),i=require("./bpm-form-field-Bc6k4ZEO.cjs"),a=require("./FormRendererView-BwVsH2eX.cjs"),o=require("./form-name-modal-uZCHbtRH.cjs");let s=require("react"),c=require("@mezzanine-ui/react"),l=require("react/jsx-runtime"),u=require("@mezzanine-ui/icons"),d=require("@mezzanine-ui/react/ContentHeader");d=e.o(d,1);let f=require("@rytass/bpm-core-client/form"),p=require("@hello-pangea/dnd"),m=require("next/dynamic");m=e.o(m,1);let h=require("@codemirror/lang-json"),g=require("@codemirror/view");var _={alignItems:`center`,border:`1px solid var(--mzn-color-border-neutral)`,borderRadius:4,color:`var(--mzn-color-text-neutral)`,display:`flex`,minHeight:160,padding:12,width:`100%`},v=[(0,h.json)(),g.EditorView.lineWrapping,g.EditorView.theme({"&":{border:`1px solid var(--mzn-color-border-neutral)`,borderRadius:`4px`,fontSize:`13px`,width:`100%`},"&.cm-focused":{outline:`1px solid var(--mzn-color-border-primary)`},".cm-content":{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`,minHeight:`100%`},".cm-editor":{width:`100%`},".cm-gutters":{borderRight:`1px solid var(--mzn-color-border-neutral)`},".cm-scroller":{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`}})],y=(0,m.default)(()=>import(`@uiw/react-codemirror`),{loading:()=>(0,l.jsx)(`div`,{style:_,children:`載入 JSON 編輯器`}),ssr:!1});function ee({disabled:e,height:t,name:n,onChange:r,placeholder:i,value:a}){return(0,l.jsx)(y,{"aria-label":n,basicSetup:{autocompletion:!0,bracketMatching:!0,closeBrackets:!0,defaultKeymap:!0,foldGutter:!0,highlightActiveLine:!0,highlightSelectionMatches:!0,lineNumbers:!0,syntaxHighlighting:!0},editable:!e,extensions:[...v],height:t,indentWithTab:!1,onChange:r,placeholder:i,readOnly:e,theme:`light`,value:a,width:`100%`})}var te=[{description:`單行文字、姓名、編號`,icon:u.AlignLeftIcon,label:`文字`,type:`text`},{description:`多行補充內容`,icon:u.FileIcon,label:`長文字`,type:`textarea`},{description:`金額、數量、分數`,icon:u.CurrencyDollarIcon,label:`數字`,type:`number`},{description:`金額與費用`,icon:u.CurrencyDollarIcon,label:`金額`,type:`money`},{description:`日期或到期日`,icon:u.CalendarIcon,label:`日期`,type:`date`},{description:`日期與時間`,icon:u.CalendarIcon,label:`日期時間`,type:`datetime`},{description:`是 / 否狀態`,icon:u.CheckedIcon,label:`開關`,type:`boolean`},{description:`固定選項擇一`,icon:u.ListIcon,label:`下拉選單`,type:`select`},{description:`固定選項單選`,icon:u.DotGridIcon,label:`單選`,type:`radio`},{description:`固定選項複選`,icon:u.CheckedOutlineIcon,label:`複選`,type:`checkbox`},{description:`附件或佐證資料`,icon:u.FileAttachmentIcon,label:`附件`,type:`file_upload`}],ne={alignItems:`start`,display:`flex`,flexWrap:`wrap`,gap:16},re={flex:`0.55 1 300px`,minWidth:0},ie={flex:`1.45 1 720px`,minWidth:620},b={display:`grid`,gap:12},ae={display:`flex`,flexWrap:`wrap`,gap:6},oe={flex:`0 0 auto`,whiteSpace:`nowrap`},se={display:`grid`,gap:8},ce={alignItems:`center`,cursor:`grab`,display:`flex`,gap:12,touchAction:`none`},le={display:`grid`,flex:`1 1 auto`,gap:2,minWidth:0},ue={alignItems:`center`,display:`flex`,flex:`0 0 auto`,gap:4},de={alignItems:`center`,display:`flex`,gap:6},fe={userSelect:`none`},pe={filter:`drop-shadow(0 8px 18px rgba(0, 0, 0, 0.12))`},me={alignItems:`center`,border:`1px dashed var(--mzn-color-border-neutral)`,borderRadius:6,display:`grid`,gap:12,minHeight:240,padding:32,textAlign:`center`},he={display:`flex`,gap:8,justifyContent:`center`},ge={display:`grid`,gap:14},_e={display:`grid`,columnGap:16,gridTemplateColumns:`repeat(auto-fit, minmax(280px, 1fr))`,rowGap:8},ve={gridColumn:`1 / -1`},ye={alignItems:`center`,display:`flex`,gap:8,gridColumn:`1 / -1`,justifyContent:`flex-end`},be={gridColumn:`1 / -1`},xe={alignItems:`start`,display:`block`,width:`100%`},Se={...xe,gridColumn:`1 / -1`},Ce={minWidth:0,width:`100%`},we={minWidth:`100%`,width:`100%`},Te={display:`grid`,gap:14},Ee={alignItems:`start`,display:`block`,width:`100%`},De={minWidth:0,width:`100%`},Oe={gridColumn:`2 / -1`},ke={display:`grid`,gap:10,width:`100%`},Ae={display:`grid`,gap:8,gridTemplateColumns:`repeat(auto-fit, minmax(160px, 1fr))`},je={display:`inline-flex`},Me={display:`grid`,gap:16},Ne={display:`grid`,gap:8},Pe={display:`flex`,justifyContent:`flex-end`},Fe={color:`var(--mzn-color-text-error)`,fontSize:`0.72em`,lineHeight:0,marginLeft:2,verticalAlign:`super`};function Ie(e){e&&(e.style.width=`100%`)}var x={fields:[],schemaVersion:1},S={layout:[],schemaVersion:1},Le=[{id:`unset`,name:`不預設`},{id:`true`,name:`是`},{id:`false`,name:`否`}],Re=[{id:`true`,name:`是`},{id:`false`,name:`否`}],ze=[{label:`顯示`,name:`fieldVisibleWhen`,supportingText:`符合條件時才顯示這個欄位。`,target:`visibleWhen`},{label:`必填`,name:`fieldRequiredWhen`,supportingText:`符合條件時才要求填寫這個欄位。`,target:`requiredWhen`},{label:`唯讀`,name:`fieldReadonlyWhen`,supportingText:`符合條件時不允許修改這個欄位。`,target:`readonlyWhen`}];function C({formId:m}){let h=t.a(),g=r.r(),_=m,[v,y]=(0,s.useState)(null),[C,E]=(0,s.useState)(null),[O,A]=(0,s.useState)(x),[j,M]=(0,s.useState)(S),[Qe,N]=(0,s.useState)(T(x)),[$e,P]=(0,s.useState)(T(S)),[et,tt]=(0,s.useState)({}),[nt,F]=(0,s.useState)(null),[I,rt]=(0,s.useState)(`design`),[L,R]=(0,s.useState)(null),[it,z]=(0,s.useState)(null),[at,B]=(0,s.useState)(!1),[ot,st]=(0,s.useState)(D(x,S)),[ct,lt]=(0,s.useState)(!0),[ut,dt]=(0,s.useState)(!1),[V,H]=(0,s.useState)(!1);(0,s.useEffect)(()=>{K()},[_]),(0,s.useEffect)(()=>{O.fields.some(e=>e.fieldKey===L)||R(O.fields[0]?.fieldKey??null)},[O.fields,L]),(0,s.useEffect)(()=>{tt(e=>(0,f.buildFormRendererValues)(O.fields,e))},[O.fields]),(0,s.useEffect)(()=>{I!==`advanced`&&(N(T(O)),P(T(j)))},[I,O,j]);let U=(0,s.useMemo)(()=>O.fields.find(e=>e.fieldKey===L)??O.fields[0]??null,[O.fields,L]),ft=(0,s.useMemo)(()=>(v?.versions??[]).map(e=>({key:e.id,publishedAt:n.t(e.publishedAt),status:e.status,updatedAt:n.t(e.updatedAt),version:`v${e.version}`})),[v]),pt=(0,s.useMemo)(()=>[{dataIndex:`version`,key:`version`,title:`版本`,width:120},{key:`status`,render:e=>(0,l.jsx)(Ze,{status:e.status}),title:`狀態`,width:140},{dataIndex:`updatedAt`,key:`updatedAt`,title:`最後更新`,width:180},{dataIndex:`publishedAt`,key:`publishedAt`,title:`發布時間`,width:180}],[]),mt=(0,s.useMemo)(()=>D(O,j),[O,j]),W=mt.schemaJson!==ot.schemaJson||mt.uiSchemaJson!==ot.uiSchemaJson;(0,s.useEffect)(()=>{function e(e){W&&(e.preventDefault(),e.returnValue=``)}return window.addEventListener(`beforeunload`,e),()=>{window.removeEventListener(`beforeunload`,e)}},[W]);function ht(){W&&!window.confirm(`目前有尚未儲存的表單草稿,確定要離開嗎?`)||h.push(g.forms())}let gt=(0,s.useMemo)(()=>Je(v?.versions??[],v?.definition.currentVersionId),[v?.definition.currentVersionId,v?.versions]),_t=C??gt??v?.versions[0]??null,G=!W&&_t?.status===`PUBLISHED`,vt=Ye({hasUnsavedChanges:W,latestPublishedVersion:gt,openedContentPublished:G,openedVersion:_t}),yt=V||!W&&G&&!C,bt=W?`保存並發布`:C?`發布草稿`:G?`已發布`:`發布版本`;async function K(){lt(!0),z(null);try{let e=await(0,f.readFormBuilder)(_),t=e.versions.find(e=>e.status===`DRAFT`)??null;y(e),E(t);let n=t?.schema??e.versions[0]?.schema??x,r=t?.uiSchema??e.versions[0]?.uiSchema??S;A(n),M(r),st(D(n,r)),N(T(n)),P(T(r)),R(t?.schema.fields[0]?.fieldKey??e.versions[0]?.schema.fields[0]?.fieldKey??null),F(null)}catch(e){z(k(e))}finally{lt(!1)}}async function xt(){let e=await(0,f.updateFormDefinitionDraft)((C??await(0,f.forkFormDefinition)(_)).id,O,j);return E(e),e}async function St(){H(!0),z(null);try{await xt(),await K()}catch(e){z(k(e))}finally{H(!1)}}async function Ct(){H(!0),z(null);try{await(0,f.publishFormDefinitionVersion)((await xt()).id),await K()}catch(e){z(k(e))}finally{H(!1)}}async function wt(e){if(!v)throw Error(`尚未載入表單資料`);dt(!0);try{let t=await(0,f.updateFormDefinition)(v.definition.id,e);y({...v,definition:t}),B(!1)}finally{dt(!1)}}function Tt(e){let t=(0,f.createFieldDefinition)(e,O.fields.length+1);A({...O,fields:[...O.fields,t]}),M({...j,layout:[...j.layout,{fieldKey:t.fieldKey,width:e===`textarea`||e===`file_upload`?`FULL`:`HALF`}]}),R(t.fieldKey),rt(`design`),F(null)}function Et(e){let t=e;t===`advanced`&&I!==`advanced`&&(N(T(O)),P(T(j))),rt(t)}function Dt(e){let t=O.fields.filter(t=>t.fieldKey!==e);A({...O,fields:t}),M({...j,layout:j.layout.filter(t=>t.fieldKey!==e)}),R(L===e?t[0]?.fieldKey??null:L),F(null)}function Ot(e){let t=e.destination;t&&e.source.index!==t.index&&(A(n=>({...n,fields:Xe(n.fields,e.source.index,t.index)})),M(n=>({...n,layout:Xe(n.layout,e.source.index,t.index)})),F(null))}function q(e){J(t=>({...t,...e}))}function J(e){if(!U)return;let t=U.fieldKey,n=e(U),r=n.fieldKey;A({...O,fields:O.fields.map(e=>e.fieldKey===t?n:e)}),M({...j,layout:j.layout.map(e=>e.fieldKey===t?{...e,fieldKey:r}:e)}),R(r),F(null)}function Y(e){J(t=>Ue(t)?{...t,...e}:t)}function kt(e){J(t=>(0,f.isNumberFieldDefinition)(t)?{...t,...e}:t)}function At(e){J(t=>(0,f.isDateFieldDefinition)(t)?{...t,...e}:t)}function X(e){J(t=>(0,f.isSelectFieldDefinition)(t)?{...t,...e}:t)}function jt(e){J(t=>t.type===`boolean`?{...t,...e}:t)}function Mt(e){J(t=>t.type===`file_upload`?{...t,...e}:t)}function Nt(e){tt(e)}function Pt(e,t){A(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e?{...n,required:t}:n)})),F(null)}function Ft(e){N(e);try{A(JSON.parse(e)),F(null)}catch{F(`Form Schema JSON 格式不正確`)}}function It(e){P(e);try{M(JSON.parse(e)),F(null)}catch{F(`UI Schema JSON 格式不正確`)}}return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(e.t,{activeHref:g.forms(),children:[(0,l.jsx)(c.PageHeader,{children:(0,l.jsxs)(d.default,{description:vt,onBackClick:ht,title:v?.definition.name??`表單設計器`,children:[(0,l.jsx)(c.Button,{"aria-label":`修改表單名稱`,disabled:ut||!v,icon:u.EditIcon,iconType:`icon-only`,onClick:()=>B(!0),variant:`base-ghost`,children:`修改表單名稱`}),(0,l.jsx)(c.Button,{"aria-label":`儲存草稿`,disabled:V||!W,icon:u.SaveIcon,iconType:`icon-only`,onClick:()=>void St(),variant:`base-secondary`,children:`儲存草稿`}),(0,l.jsx)(c.Button,{disabled:yt,icon:u.CheckedIcon,iconType:`leading`,onClick:()=>void Ct(),variant:`base-primary`,children:bt})]})}),(0,l.jsx)(c.SectionGroup,{children:(0,l.jsx)(c.Section,{children:(0,l.jsxs)(`div`,{style:Me,children:[it?(0,l.jsx)(c.Typography,{color:`text-error`,variant:`body`,children:it}):null,(0,l.jsxs)(c.Tab,{activeKey:I,onChange:Et,size:`sub`,children:[(0,l.jsx)(c.TabItem,{children:`設計`},`design`),(0,l.jsx)(c.TabItem,{children:`預覽`},`preview`),(0,l.jsx)(c.TabItem,{children:`版本`},`versions`),(0,l.jsx)(c.TabItem,{children:`進階`},`advanced`)]}),I===`design`?Lt():null,I===`preview`?nn():null,I===`versions`?rn():null,I===`advanced`?an():null]})})})]}),(0,l.jsx)(o.t,{confirmText:`儲存`,initialName:v?.definition.name??``,loading:ut,onClose:()=>B(!1),onSubmit:wt,open:at,title:`修改表單名稱`})]});function Lt(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsxs)(`div`,{style:se,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`label-primary`,children:`新增欄位`}),(0,l.jsx)(`div`,{style:ae,children:te.map(e=>(0,l.jsx)(c.Button,{disabled:V,icon:e.icon,iconType:`leading`,onClick:()=>Tt(e.type),size:`sub`,style:oe,type:`button`,variant:`base-secondary`,children:e.label},e.type))})]}),(0,l.jsxs)(`div`,{style:ne,children:[(0,l.jsxs)(`div`,{style:{...b,...re},children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`label-primary`,children:`表單畫布`}),O.fields.length>0?(0,l.jsx)(p.DragDropContext,{onDragEnd:Ot,children:(0,l.jsx)(p.Droppable,{droppableId:`form-builder-fields`,children:e=>(0,l.jsxs)(`div`,{...e.droppableProps,ref:e.innerRef,style:b,children:[O.fields.map((e,t)=>(0,l.jsx)(p.Draggable,{draggableId:e.fieldKey,index:t,isDragDisabled:V,children:(t,n)=>en(e,t,n.isDragging)},e.fieldKey)),e.placeholder]})})}):(0,l.jsxs)(`div`,{style:me,children:[(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h3`,variant:`h3`,children:`尚未建立欄位`}),(0,l.jsx)(c.Typography,{color:`text-neutral`,variant:`body`,children:`從上方新增第一個欄位,或直接建立常用文字欄位開始設計。`})]}),(0,l.jsxs)(`div`,{style:he,children:[(0,l.jsx)(c.Button,{disabled:V,onClick:()=>Tt(`text`),variant:`base-primary`,children:`新增文字欄位`}),(0,l.jsx)(c.Button,{disabled:V,onClick:()=>Tt(`textarea`),variant:`base-secondary`,children:`新增長文字`})]})]})]}),(0,l.jsxs)(`div`,{style:{...b,...ie},children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`label-primary`,children:`欄位設定`}),U?Rt(U):(0,l.jsx)(c.Typography,{color:`text-neutral`,variant:`body`,children:`請先新增或選取欄位。`})]})]})]})}function Rt(e){return(0,l.jsxs)(`div`,{style:ge,children:[zt(e),Bt(e)]})}function zt(e){return(0,l.jsxs)(`div`,{style:_e,children:[(0,l.jsx)(`div`,{style:ye,children:(0,l.jsx)(c.Badge,{size:`main`,text:Be(e.type),variant:`text-info`})}),$(`標題`,`fieldLabel`,(0,l.jsx)(c.Input,{onChange:e=>q({label:e.target.value}),placeholder:`例如:申請金額`,value:e.label,variant:`base`}),V),$(`欄位 Key`,`fieldKey`,(0,l.jsx)(c.Input,{onChange:e=>q({fieldKey:e.target.value}),placeholder:`例如:amount`,value:e.fieldKey,variant:`base`}),V),$(`提示文字`,`fieldPlaceholder`,(0,l.jsx)(c.Input,{onChange:e=>q({placeholder:e.target.value||void 0}),placeholder:`例如:請輸入申請金額`,value:e.placeholder??``,variant:`base`}),V),Vt(e)]})}function Bt(e){return(0,l.jsx)(c.Accordion,{defaultExpanded:Ve(e),size:`sub`,title:`進階設定`,children:(0,l.jsxs)(`div`,{style:_e,children:[(0,l.jsx)(c.Typography,{component:`h3`,style:ve,variant:`label-primary`,children:`條件規則`}),(0,l.jsx)(c.Typography,{color:`text-neutral`,style:be,variant:`body`,children:`只有需要根據其他欄位改變顯示、必填或唯讀狀態時才需要設定。`}),Jt(e)]})})}function Vt(e){return Ue(e)?Ht(e):(0,f.isNumberFieldDefinition)(e)?Ut(e):(0,f.isDateFieldDefinition)(e)?Wt(e):(0,f.isSelectFieldDefinition)(e)?Gt(e):e.type===`boolean`?Kt(e):qt(e)}function Ht(e){return(0,l.jsxs)(l.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,e.type===`textarea`?Zt({disabled:V,name:`fieldDefaultValue`,onChange:e=>Y({defaultValue:e||void 0}),placeholder:`輸入此欄位的預設文字`,rows:3,value:w(e.defaultValue)}):(0,l.jsx)(c.Input,{onChange:e=>Y({defaultValue:e.target.value||void 0}),placeholder:`輸入此欄位的預設文字`,value:w(e.defaultValue),variant:`base`}),V),$(`最小長度`,`fieldMinLength`,Q(e.minLength,e=>Y({minLength:e}),`例如:2`,{min:0}),V),$(`最大長度`,`fieldMaxLength`,Q(e.maxLength,e=>Y({maxLength:e}),`例如:100`,{min:1}),V)]})}function Ut(e){return(0,l.jsxs)(l.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,Q(typeof e.defaultValue==`number`?e.defaultValue:void 0,e=>kt({defaultValue:e}),e.type===`money`?`例如:1000`:`輸入預設數值`,{max:e.maximum,min:e.minimum}),V),$(`最小值`,`fieldMinimum`,Q(e.minimum,e=>kt({minimum:e}),`例如:0`),V),$(`最大值`,`fieldMaximum`,Q(e.maximum,e=>kt({maximum:e}),`例如:999999`),V)]})}function Wt(e){return $(`預設值`,`fieldDefaultValue`,Qt(e,w(e.defaultValue),e=>At({defaultValue:e})),V)}function Gt(e){let t=Array.isArray(e.defaultValue)?e.defaultValue:[],n=e.options.filter(e=>t.includes(e.value)).map(f.readFieldOptionAsSelectOption);return(0,l.jsxs)(l.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,e.type===`checkbox`?(0,l.jsx)(c.Select,{clearable:!0,mode:`multiple`,onChange:e=>X({defaultValue:e.length?e.map(e=>e.id):void 0}),options:e.options.map(f.readFieldOptionAsSelectOption),placeholder:`選擇一或多個預設選項`,value:n}):(0,l.jsx)(c.Select,{clearable:!0,onChange:e=>X({defaultValue:e?.id||void 0}),options:e.options.map(f.readFieldOptionAsSelectOption),placeholder:`選擇預設選項`,value:typeof e.defaultValue==`string`?(0,f.readSelectOption)(e.options.map(f.readFieldOptionAsSelectOption),e.defaultValue):null}),V),$(`選項`,`fieldOptions`,$t(e),V,!0)]})}function Kt(e){let t=typeof e.defaultValue==`boolean`?String(e.defaultValue):`unset`;return $(`預設值`,`fieldDefaultValue`,(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>jt({defaultValue:e?.id===`true`?!0:e?.id===`false`?!1:void 0}),options:[...Le],placeholder:`選擇預設狀態`,value:(0,f.readSelectOption)(Le,t)}),V)}function qt(e){return(0,l.jsxs)(l.Fragment,{children:[$(`檔案數`,`fieldMaxFiles`,Q(e.maxFiles,e=>Mt({maxFiles:e}),`例如:1`,{min:1}),V),$(`MIME`,`fieldAcceptedMimeTypes`,Zt({disabled:V,name:`fieldAcceptedMimeTypes`,onChange:e=>Mt({acceptedMimeTypes:We(e)}),placeholder:`每行一個 MIME type,例如:application/pdf`,rows:3,value:Ge(e.acceptedMimeTypes)}),!1)]})}function Jt(e){let t=O.fields.filter(t=>t.fieldKey!==e.fieldKey);return t.length?(0,l.jsx)(l.Fragment,{children:ze.map(n=>Yt(e,n,t))}):(0,l.jsx)(c.Typography,{color:`text-neutral`,style:be,variant:`body`,children:`目前沒有其他欄位可作為條件來源。新增更多欄位後即可設定條件規則。`})}function Yt(e,t,n){let r=e[t.target],i=r?(0,f.parseConditionRule)(r):null,a=n.find(e=>e.fieldKey===i?.fieldKey),o=a??n[0],s=n.map(He),u=(0,f.readConditionOperatorOptions)(o),d=i&&u.some(e=>e.id===i.operator)?i.operator:(0,f.readDefaultConditionOperator)(o),p=i?.value??(0,f.readDefaultConditionValue)(o),m=!!r,h=m&&(!i||!a);return $(t.label,t.name,(0,l.jsxs)(`div`,{style:ke,children:[(0,l.jsx)(c.Toggle,{checked:m,disabled:V,label:m?`已啟用`:`不啟用`,onChange:e=>Z(t.target,e.target.checked?(0,f.buildConditionExpression)(o,(0,f.readDefaultConditionOperator)(o),(0,f.readDefaultConditionValue)(o)):void 0),size:`sub`,supportingText:t.supportingText}),m?h?(0,l.jsx)(c.Typography,{color:`text-warning`,variant:`body`,children:`這個規則不是目前 UI 支援的格式。重新選擇條件後會取代既有規則。`}):(0,l.jsxs)(`div`,{style:Ae,children:[(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>{let r=n.find(t=>t.fieldKey===e?.id)??o;Z(t.target,(0,f.buildConditionExpression)(r,(0,f.readDefaultConditionOperator)(r),(0,f.readDefaultConditionValue)(r)))},options:s,placeholder:`選擇欄位`,value:(0,f.readSelectOption)(s,o.fieldKey)}),(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>Z(t.target,(0,f.buildConditionExpression)(o,(0,f.readConditionOperatorOption)(e?.id)??d,p)),options:[...u],placeholder:`判斷方式`,value:(0,f.readSelectOption)(u,d)}),Xt(o,p,e=>Z(t.target,(0,f.buildConditionExpression)(o,d,e)))]}):null]}),V,!0)}function Z(e,t){q({[e]:t})}function Xt(e,t,n){if(e.type===`boolean`)return(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>n(e?.id??`true`),options:[...Re],placeholder:`比較值`,value:(0,f.readSelectOption)(Re,t===`false`?`false`:`true`)});if((0,f.isSelectFieldDefinition)(e)){let r=e.options.map(f.readFieldOptionAsSelectOption);return(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>n(e?.id??r[0]?.id??``),options:r,placeholder:`比較值`,value:(0,f.readSelectOption)(r,t)})}return(0,f.isNumberFieldDefinition)(e)?Q((0,f.parseOptionalNumberInput)(t),e=>n(String(e??0)),`比較值`):(0,f.isDateFieldDefinition)(e)?Qt(e,t,e=>n(e??``)):(0,l.jsx)(c.Input,{onChange:e=>n(e.target.value),placeholder:`比較值`,value:t,variant:`base`})}function Zt({disabled:e,name:t,onChange:n,placeholder:r,rows:i,value:a}){return(0,l.jsx)(c.Textarea,{"aria-label":t,disabled:e,onChange:e=>n(e.target.value),placeholder:r,ref:Ie,resize:`vertical`,rows:i,style:we,value:a})}function Q(e,t,n,r={}){return(0,l.jsx)(c.Input,{max:r.max,min:r.min,onChange:e=>t((0,f.clampOptionalNumber)((0,f.parseOptionalNumberInput)(e.target.value),r)),placeholder:n,showSpinner:!0,step:r.step??1,value:typeof e==`number`?String(e):``,variant:`measure`})}function Qt(e,t,n){return e.type===`datetime`?(0,l.jsx)(c.DateTimePicker,{formatDate:`YYYY-MM-DD`,formatTime:`HH:mm`,hideSecond:!0,onChange:e=>n((0,f.formatDateTimePickerValue)(e)),placeholderLeft:`選擇日期`,placeholderRight:`選擇時間`,value:(0,f.readDatePickerValue)(t)}):(0,l.jsx)(c.DatePicker,{format:`YYYY-MM-DD`,onChange:e=>n((0,f.formatDatePickerValue)(e)),placeholder:`選擇日期`,value:(0,f.readDatePickerValue)(t)})}function $t(e){return(0,l.jsxs)(`div`,{style:Ne,children:[(0,l.jsx)(c.Table,{actions:{render:t=>[{disabled:()=>V||e.options.length<=1,icon:u.TrashIcon,iconType:`icon-only`,name:`移除選項`,onClick:()=>X({options:e.options.filter((e,n)=>n!==t.index)}),variant:`destructive-ghost`}],width:56},columns:[{key:`label`,render:t=>(0,l.jsx)(c.Input,{onChange:n=>X({options:Ke(e.options,t.index,{label:n.target.value})}),placeholder:`例如:主管`,size:`sub`,value:t.label,variant:`base`}),title:`Label`},{key:`value`,render:t=>(0,l.jsx)(c.Input,{onChange:n=>X({options:Ke(e.options,t.index,{value:n.target.value})}),placeholder:`例如:manager`,size:`sub`,value:t.value,variant:`base`}),title:`Value`}],dataSource:e.options.map((t,n)=>({index:n,key:`${e.fieldKey}-${n}`,label:t.label,value:t.value})),showHeader:!0,size:`sub`}),(0,l.jsx)(`div`,{style:Pe,children:(0,l.jsx)(c.Button,{disabled:V,icon:u.PlusIcon,iconType:`leading`,onClick:()=>X({options:[...e.options,qe(e.options)]}),variant:`base-secondary`,children:`新增選項`})})]})}function en(e,t,n){return(0,l.jsx)(`div`,{...t.draggableProps,"data-form-builder-field-key":e.fieldKey,ref:t.innerRef,style:{...fe,...n?pe:null,...t.draggableProps.style},children:(0,l.jsx)(c.BaseCard,{children:tn(e,t,n)})})}function $(e,t,n,r,a=!1){return(0,l.jsx)(`div`,{style:a?Se:xe,children:(0,l.jsx)(`div`,{style:Ce,children:(0,l.jsx)(i.t,{disabled:r,label:e,name:t,children:n})})})}function tn(e,t,n){return(0,l.jsxs)(`div`,{...t.dragHandleProps??{},"aria-label":`拖曳排序欄位`,style:ce,title:`拖曳排序`,children:[(0,l.jsx)(`span`,{"aria-label":`拖曳排序`,role:`img`,style:je,title:`拖曳排序`,children:(0,l.jsx)(c.Icon,{icon:u.DotDragVerticalIcon,size:20})}),(0,l.jsxs)(`div`,{style:le,children:[(0,l.jsxs)(c.Typography,{component:`span`,ellipsis:!0,variant:`label-primary`,children:[e.label,e.required?(0,l.jsx)(`sup`,{"aria-label":`必填`,style:Fe,children:`*`}):null]}),(0,l.jsxs)(c.Typography,{color:`text-neutral`,component:`span`,ellipsis:!0,variant:`caption`,children:[Be(e.type),` ·`,e.required?` 必填`:` 選填`,` ·`,e.fieldKey]})]}),(0,l.jsxs)(`div`,{style:ue,children:[(0,l.jsx)(`div`,{style:de,children:(0,l.jsx)(c.Toggle,{checked:!!e.required,disabled:V||n,label:`必填`,onChange:t=>Pt(e.fieldKey,t.target.checked)})}),(0,l.jsx)(c.Button,{disabled:n,icon:u.EditIcon,iconType:`icon-only`,onClick:()=>R(e.fieldKey),variant:e.fieldKey===U?.fieldKey?`base-primary`:`base-ghost`,children:`編輯欄位`}),(0,l.jsx)(c.Button,{disabled:V||n,icon:u.TrashIcon,iconType:`icon-only`,onClick:()=>Dt(e.fieldKey),variant:`destructive-ghost`,children:`移除欄位`})]})]})}function nn(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`h3`,children:`填寫預覽`}),(0,l.jsx)(a.t,{onChange:Nt,schema:O,uiSchema:j,value:et})]})}function rn(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`h3`,children:`版本紀錄`}),(0,l.jsx)(c.Table,{columns:pt,dataSource:ft,loading:ct})]})}function an(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`h3`,children:`Schema`}),(0,l.jsxs)(`div`,{style:Te,children:[on(`Form Schema`,`schemaJson`,(0,l.jsx)(ee,{disabled:V,height:`360px`,name:`schemaJson`,onChange:Ft,placeholder:`輸入 Form Schema JSON`,value:Qe})),on(`UI Schema`,`uiSchemaJson`,(0,l.jsx)(ee,{disabled:V,height:`240px`,name:`uiSchemaJson`,onChange:It,placeholder:`輸入 UI Schema JSON`,value:$e})),nt?(0,l.jsx)(c.Typography,{color:`text-error`,style:Oe,variant:`body`,children:nt}):null]})]})}function on(e,t,n){return(0,l.jsx)(`div`,{style:Ee,children:(0,l.jsx)(`div`,{style:De,children:(0,l.jsx)(i.t,{disabled:V,label:e,name:t,children:n})})})}}function Be(e){return te.find(t=>t.type===e)?.label??e}function Ve(e){return!!(e.visibleWhen||e.requiredWhen||e.readonlyWhen)}function He(e){return{id:e.fieldKey,name:e.label}}function Ue(e){return e.type===`text`||e.type===`textarea`}function w(e){return typeof e==`string`?e:``}function We(e){let t=e.split(/[\n,]/u).map(e=>e.trim()).filter(Boolean);return t.length?t:void 0}function Ge(e){return e?.join(`
2
+ `)??``}function T(e){return JSON.stringify(e,null,2)}function Ke(e,t,n){return e.map((e,r)=>r===t?{...e,...n}:e)}function qe(e){let t=e.length+1;return{label:`選項 ${t}`,value:E(e,t)}}function E(e,t){let n=`option_${t}`;return e.some(e=>e.value===n)?E(e,t+1):n}function D(e,t){return{schemaJson:T(e),uiSchemaJson:T(t)}}function Je(e,t){return(t?e.find(e=>e.id===t):null)??e.find(e=>e.status===`PUBLISHED`)??null}function Ye({hasUnsavedChanges:e,latestPublishedVersion:t,openedContentPublished:r,openedVersion:i}){return`${e?`有未儲存修改`:`沒有未儲存修改`} · ${O({hasUnsavedChanges:e,openedContentPublished:r,openedVersion:i})} · ${t?`目前發布 v${t.version}:${n.t(t.publishedAt)}`:`目前沒有已發布版本`}`}function O({hasUnsavedChanges:e,openedContentPublished:t,openedVersion:n}){return e?n?`修改尚未發布,來源 v${n.version}`:`修改尚未發布`:t&&n?`當前內容已發布 v${n.version}`:n?`當前內容尚未發布 v${n.version}`:`當前內容尚未發布`}function Xe(e,t,n){let r=e[t];if(!r||t===n)return[...e];let i=e.filter((e,n)=>n!==t);return[...i.slice(0,n),r,...i.slice(n)]}function Ze({status:e}){return e===`PUBLISHED`?(0,l.jsx)(c.Badge,{size:`sub`,text:`已發布`,variant:`dot-success`}):e===`ARCHIVED`?(0,l.jsx)(c.Badge,{size:`sub`,text:`已封存`,variant:`dot-inactive`}):(0,l.jsx)(c.Badge,{size:`sub`,text:`草稿`,variant:`dot-warning`})}function k(e){return e instanceof Error?e.message:`發生未知錯誤`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return C}});
3
+ //# sourceMappingURL=builder-CMlJfQHE.cjs.map