@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,41 +1,42 @@
1
1
  "use client";
2
2
  import { a as e, n as t } from "../../../chunks/auth-provider-Bnox5gsx.js";
3
3
  import { t as n } from "../../../chunks/format-date-time-CB-LxzqT.js";
4
- import { t as r } from "../../../chunks/app-navigation-uwbNEw9P.js";
5
- import { t as i } from "../../../chunks/FormRendererView-DrHsuSVo.js";
6
- import { Suspense as a, useEffect as o, useMemo as s, useState as c } from "react";
7
- import { Button as l, PageHeader as u, Section as d, SectionGroup as f, Table as p, Typography as m } from "@mezzanine-ui/react";
8
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
9
- import { listLaunchableTemplates as _, readFormDataCaseTitle as v, readLaunchContext as y, submitApprovalInstance as b, uploadAttachment as x } from "@rytass/bpm-core-client/workflow";
10
- import { CheckedIcon as S } from "@mezzanine-ui/icons";
11
- import C from "@mezzanine-ui/react/ContentHeader";
12
- import { focusFormRendererField as w, validateFormRendererValues as T } from "@rytass/bpm-core-client/form";
4
+ import { t as r } from "../../../chunks/app-navigation-BSkMsEhy.js";
5
+ import { r as i } from "../../../chunks/routes-config-dxahImVe.js";
6
+ import { t as a } from "../../../chunks/FormRendererView-DrHsuSVo.js";
7
+ import { Suspense as o, useEffect as s, useMemo as c, useState as l } from "react";
8
+ import { Button as u, PageHeader as d, Section as f, SectionGroup as p, Table as m, Typography as h } from "@mezzanine-ui/react";
9
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
10
+ import { listLaunchableTemplates as v, readFormDataCaseTitle as y, readLaunchContext as b, submitApprovalInstance as x, uploadAttachment as S } from "@rytass/bpm-core-client/workflow";
11
+ import { CheckedIcon as C } from "@mezzanine-ui/icons";
12
+ import w from "@mezzanine-ui/react/ContentHeader";
13
+ import { focusFormRendererField as T, validateFormRendererValues as E } from "@rytass/bpm-core-client/form";
13
14
  //#region src/views/instances/new/InstanceNewView.tsx
14
- var E = {
15
+ var D = {
15
16
  display: "grid",
16
17
  gap: 16
17
18
  };
18
- function D(e = {}) {
19
- return /* @__PURE__ */ h(a, {
20
- fallback: /* @__PURE__ */ h(k, {}),
21
- children: /* @__PURE__ */ h(O, { templateId: e.templateId ?? void 0 })
19
+ function O(e = {}) {
20
+ return /* @__PURE__ */ g(o, {
21
+ fallback: /* @__PURE__ */ g(A, {}),
22
+ children: /* @__PURE__ */ g(k, { templateId: e.templateId ?? void 0 })
22
23
  });
23
24
  }
24
- function O({ templateId: a }) {
25
- let D = e(), { member: O } = t(), k = O?.memberId ?? null, j = a ?? null, [M, N] = c(null), [P, F] = c({}), [I, L] = c([]), [R, z] = c(null), [B, V] = c({}), [H, U] = c(!0), [W, G] = c(!1);
26
- o(() => {
27
- if (!j) {
28
- Y();
25
+ function k({ templateId: o }) {
26
+ let O = e(), k = i(), { member: A } = t(), M = A?.memberId ?? null, N = o ?? null, [P, F] = l(null), [I, L] = l({}), [R, z] = l([]), [B, V] = l(null), [H, U] = l({}), [W, G] = l(!0), [K, q] = l(!1);
27
+ s(() => {
28
+ if (!N) {
29
+ Z();
29
30
  return;
30
31
  }
31
- X(j);
32
- }, [j]);
33
- let K = s(() => I.map((e) => ({
32
+ Q(N);
33
+ }, [N]);
34
+ let J = c(() => R.map((e) => ({
34
35
  ...e,
35
36
  key: e.id,
36
37
  updatedAt: n(e.updatedAt),
37
38
  versionLabel: `v${e.version}`
38
- })), [I]), q = s(() => [
39
+ })), [R]), Y = c(() => [
39
40
  {
40
41
  dataIndex: "name",
41
42
  key: "name",
@@ -54,117 +55,117 @@ function O({ templateId: a }) {
54
55
  title: "更新時間",
55
56
  width: 220
56
57
  }
57
- ], []), J = s(() => ({
58
+ ], []), X = c(() => ({
58
59
  render: (e) => [{
59
60
  name: "發起",
60
- onClick: () => D.push(`/instances/new?templateId=${e.id}`),
61
+ onClick: () => O.push(k.caseNew(e.id)),
61
62
  variant: "base-primary"
62
63
  }],
63
64
  variant: "base-secondary",
64
65
  width: 88
65
- }), [D]);
66
- async function Y() {
67
- U(!0), z(null), N(null);
66
+ }), [O]);
67
+ async function Z() {
68
+ G(!0), V(null), F(null);
68
69
  try {
69
- L(await _());
70
+ z(await v());
70
71
  } catch (e) {
71
- z(A(e));
72
+ V(j(e));
72
73
  } finally {
73
- U(!1);
74
+ G(!1);
74
75
  }
75
76
  }
76
- async function X(e) {
77
- U(!0), z(null), L([]);
77
+ async function Q(e) {
78
+ G(!0), V(null), z([]);
78
79
  try {
79
- N(await y(e));
80
+ F(await b(e));
80
81
  } catch (e) {
81
- z(A(e));
82
+ V(j(e));
82
83
  } finally {
83
- U(!1);
84
+ G(!1);
84
85
  }
85
86
  }
86
- async function Z() {
87
- if (!M || !k) return;
88
- G(!0), z(null), V({});
89
- let e = T({
90
- schema: M.formVersion.schema,
91
- uiSchema: M.formVersion.uiSchema,
92
- values: P
87
+ async function $() {
88
+ if (!P || !M) return;
89
+ q(!0), V(null), U({});
90
+ let e = E({
91
+ schema: P.formVersion.schema,
92
+ uiSchema: P.formVersion.uiSchema,
93
+ values: I
93
94
  });
94
95
  if (!e.valid) {
95
- V(e.errors), z("請先補齊必填欄位。"), e.firstInvalidFieldKey && w(e.firstInvalidFieldKey), G(!1);
96
+ U(e.errors), V("請先補齊必填欄位。"), e.firstInvalidFieldKey && T(e.firstInvalidFieldKey), q(!1);
96
97
  return;
97
98
  }
98
99
  try {
99
- let e = await b({
100
- formData: P,
101
- initiatorMemberId: k,
102
- templateId: M.template.id,
103
- title: v({
104
- fallbackTitle: M.template.name,
105
- formData: P,
106
- schema: M.formVersion.schema,
107
- uiSchema: M.formVersion.uiSchema
100
+ let e = await x({
101
+ formData: I,
102
+ initiatorMemberId: M,
103
+ templateId: P.template.id,
104
+ title: y({
105
+ fallbackTitle: P.template.name,
106
+ formData: I,
107
+ schema: P.formVersion.schema,
108
+ uiSchema: P.formVersion.uiSchema
108
109
  })
109
110
  });
110
- D.push(`/instances/${e}`);
111
+ O.push(k.caseDetail(e));
111
112
  } catch (e) {
112
- z(A(e));
113
+ V(j(e));
113
114
  } finally {
114
- G(!1);
115
+ q(!1);
115
116
  }
116
117
  }
117
- async function Q(e, t) {
118
- if (!k) throw Error("尚未登入,無法上傳附件");
119
- return { id: (await x({
118
+ async function ee(e, t) {
119
+ if (!M) throw Error("尚未登入,無法上傳附件");
120
+ return { id: (await S({
120
121
  file: t,
121
122
  formFieldPath: `form.${e.fieldKey}`
122
123
  })).id };
123
124
  }
124
- return /* @__PURE__ */ g(r, {
125
+ return /* @__PURE__ */ _(r, {
125
126
  activeHref: "/",
126
- children: [/* @__PURE__ */ h(u, { children: /* @__PURE__ */ h(C, {
127
- description: M ? `${M.template.name} · 表單 v${M.formVersion.version}` : "選擇可發起的已發布模板後填寫表單內容。",
127
+ children: [/* @__PURE__ */ g(d, { children: /* @__PURE__ */ g(w, {
128
+ description: P ? `${P.template.name} · 表單 v${P.formVersion.version}` : "選擇可發起的已發布模板後填寫表單內容。",
128
129
  title: "發起簽核",
129
- children: M ? /* @__PURE__ */ h(l, {
130
- disabled: H || W,
131
- icon: S,
130
+ children: P ? /* @__PURE__ */ g(u, {
131
+ disabled: W || K,
132
+ icon: C,
132
133
  iconType: "leading",
133
- onClick: Z,
134
+ onClick: $,
134
135
  variant: "base-primary",
135
136
  children: "送出"
136
137
  }) : null
137
- }) }), /* @__PURE__ */ h(f, { children: /* @__PURE__ */ h(d, { children: /* @__PURE__ */ g("div", {
138
- style: E,
138
+ }) }), /* @__PURE__ */ g(p, { children: /* @__PURE__ */ g(f, { children: /* @__PURE__ */ _("div", {
139
+ style: D,
139
140
  children: [
140
- R ? /* @__PURE__ */ h(m, {
141
+ B ? /* @__PURE__ */ g(h, {
141
142
  color: "text-error",
142
143
  variant: "body",
143
- children: R
144
+ children: B
144
145
  }) : null,
145
- H ? /* @__PURE__ */ h(m, {
146
+ W ? /* @__PURE__ */ g(h, {
146
147
  color: "text-neutral",
147
148
  variant: "body",
148
149
  children: "載入中..."
149
150
  }) : null,
150
- M ? /* @__PURE__ */ h(i, {
151
- errors: B,
151
+ P ? /* @__PURE__ */ g(a, {
152
+ errors: H,
152
153
  maxWidth: 480,
153
154
  onChange: (e) => {
154
- F(e), V({});
155
+ L(e), U({});
155
156
  },
156
- onUploadAttachment: Q,
157
- schema: M.formVersion.schema,
157
+ onUploadAttachment: ee,
158
+ schema: P.formVersion.schema,
158
159
  singleColumn: !0,
159
- uiSchema: M.formVersion.uiSchema,
160
- value: P
160
+ uiSchema: P.formVersion.uiSchema,
161
+ value: I
161
162
  }) : null,
162
- !j && !H ? K.length > 0 ? /* @__PURE__ */ h(p, {
163
- actions: J,
164
- columns: q,
165
- dataSource: K,
163
+ !N && !W ? J.length > 0 ? /* @__PURE__ */ g(m, {
164
+ actions: X,
165
+ columns: Y,
166
+ dataSource: J,
166
167
  fullWidth: !0
167
- }) : /* @__PURE__ */ h(m, {
168
+ }) : /* @__PURE__ */ g(h, {
168
169
  color: "text-neutral",
169
170
  variant: "body",
170
171
  children: "目前沒有可發起的已發布模板。"
@@ -173,23 +174,23 @@ function O({ templateId: a }) {
173
174
  }) }) })]
174
175
  });
175
176
  }
176
- function k() {
177
- return /* @__PURE__ */ g(r, {
177
+ function A() {
178
+ return /* @__PURE__ */ _(r, {
178
179
  activeHref: "/",
179
- children: [/* @__PURE__ */ h(u, { children: /* @__PURE__ */ h(C, {
180
+ children: [/* @__PURE__ */ g(d, { children: /* @__PURE__ */ g(w, {
180
181
  description: "選擇可發起的已發布模板後填寫表單內容。",
181
182
  title: "發起簽核"
182
- }) }), /* @__PURE__ */ h(f, { children: /* @__PURE__ */ h(d, { children: /* @__PURE__ */ h(m, {
183
+ }) }), /* @__PURE__ */ g(p, { children: /* @__PURE__ */ g(f, { children: /* @__PURE__ */ g(h, {
183
184
  color: "text-neutral",
184
185
  variant: "body",
185
186
  children: "載入中..."
186
187
  }) }) })]
187
188
  });
188
189
  }
189
- function A(e) {
190
+ function j(e) {
190
191
  return e instanceof Error ? e.message : "發生未知錯誤";
191
192
  }
192
193
  //#endregion
193
- export { D as InstanceNewView };
194
+ export { O as InstanceNewView };
194
195
 
195
196
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/views/instances/new/InstanceNewView.tsx"],"sourcesContent":["'use client';\n\nimport {\n CSSProperties,\n ReactElement,\n Suspense,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n PageHeader,\n Section,\n SectionGroup,\n Table,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { CheckedIcon } from '@mezzanine-ui/icons';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport { FormFieldDefinition } from '@rytass/bpm-core-shared/form';\nimport {\n focusFormRendererField,\n FormRendererValues,\n validateFormRendererValues,\n} from '@rytass/bpm-core-client/form';\nimport {\n LaunchContext,\n LaunchableTemplateRecord,\n listLaunchableTemplates,\n readFormDataCaseTitle,\n readLaunchContext,\n submitApprovalInstance,\n uploadAttachment,\n} from '@rytass/bpm-core-client/workflow';\nimport { formatDateTime } from '../../../lib/format-date-time';\nimport { useAuth } from '../../../lib/auth-provider';\nimport { useRouterAdapter } from '../../../lib/router-adapter';\nimport { AppLayout } from '../../../components/app-navigation';\nimport { FormRenderer } from '../../forms/renderer/FormRendererView';\n\nconst FORM_SECTION_STYLE: CSSProperties = {\n display: 'grid',\n gap: 16,\n};\n\ntype LaunchableTemplateRow = Readonly<\n Record<string, unknown> &\n LaunchableTemplateRecord & {\n key: string;\n versionLabel: string;\n }\n>;\n\nexport interface InstanceNewViewProps {\n /**\n * Optional template id pre-selected by the host. The Server Component\n * page should read `?templateId=` from its `searchParams` and pass the\n * value through this prop.\n */\n readonly templateId?: string | null;\n}\n\n/**\n * Framework-agnostic view for the BPM \"發起簽核\" launch page. Mechanical port\n * of `apps/client/src/app/instances/new/page.tsx` — picks a launchable\n * template and submits the launch form.\n */\nexport function InstanceNewView(\n props: InstanceNewViewProps = {},\n): ReactElement {\n return (\n <Suspense fallback={<NewApprovalInstanceLoading />}>\n <NewApprovalInstanceContent templateId={props.templateId ?? undefined} />\n </Suspense>\n );\n}\n\nfunction NewApprovalInstanceContent({\n templateId: templateIdProp,\n}: {\n readonly templateId?: string;\n}): ReactElement {\n const router = useRouterAdapter();\n const { member } = useAuth();\n const currentMemberId = member?.memberId ?? null;\n const templateId = templateIdProp ?? null;\n const [context, setContext] = useState<LaunchContext | null>(null);\n const [formValues, setFormValues] = useState<FormRendererValues>({});\n const [templates, setTemplates] = useState<\n readonly LaunchableTemplateRecord[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n const [formErrors, setFormErrors] = useState<\n Readonly<Record<string, string>>\n >({});\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect((): void => {\n if (!templateId) {\n void refreshTemplates();\n\n return;\n }\n\n void refreshContext(templateId);\n }, [templateId]);\n\n const rows = useMemo(\n (): LaunchableTemplateRow[] =>\n templates.map((template) => ({\n ...template,\n key: template.id,\n updatedAt: formatDateTime(template.updatedAt),\n versionLabel: `v${template.version}`,\n })),\n [templates],\n );\n const columns = useMemo(\n (): TableColumn<LaunchableTemplateRow>[] => [\n { dataIndex: 'name', key: 'name', title: '模板名稱', width: 240 },\n {\n dataIndex: 'versionLabel',\n key: 'versionLabel',\n title: '發布版本',\n width: 120,\n },\n {\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n title: '更新時間',\n width: 220,\n },\n ],\n [],\n );\n const tableActions = useMemo(\n (): TableActions<LaunchableTemplateRow> => ({\n render: (\n record,\n ): ReturnType<TableActions<LaunchableTemplateRow>['render']> => [\n {\n name: '發起',\n onClick: (): void =>\n router.push(`/instances/new?templateId=${record.id}`),\n variant: 'base-primary',\n },\n ],\n variant: 'base-secondary',\n width: 88,\n }),\n [router],\n );\n\n async function refreshTemplates(): Promise<void> {\n setLoading(true);\n setError(null);\n setContext(null);\n\n try {\n setTemplates(await listLaunchableTemplates());\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }\n\n async function refreshContext(nextTemplateId: string): Promise<void> {\n setLoading(true);\n setError(null);\n setTemplates([]);\n\n try {\n setContext(await readLaunchContext(nextTemplateId));\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }\n\n async function handleSubmit(): Promise<void> {\n if (!context || !currentMemberId) {\n return;\n }\n\n setSubmitting(true);\n setError(null);\n setFormErrors({});\n\n const validation = validateFormRendererValues({\n schema: context.formVersion.schema,\n uiSchema: context.formVersion.uiSchema,\n values: formValues,\n });\n\n if (!validation.valid) {\n setFormErrors(validation.errors);\n setError('請先補齊必填欄位。');\n\n if (validation.firstInvalidFieldKey) {\n focusFormRendererField(validation.firstInvalidFieldKey);\n }\n\n setSubmitting(false);\n\n return;\n }\n\n try {\n const instanceId = await submitApprovalInstance({\n formData: formValues,\n initiatorMemberId: currentMemberId,\n templateId: context.template.id,\n title: readFormDataCaseTitle({\n fallbackTitle: context.template.name,\n formData: formValues,\n schema: context.formVersion.schema,\n uiSchema: context.formVersion.uiSchema,\n }),\n });\n\n router.push(`/instances/${instanceId}`);\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setSubmitting(false);\n }\n }\n\n async function handleUploadAttachment(\n field: FormFieldDefinition,\n file: File,\n ): Promise<{ readonly id: string }> {\n if (!currentMemberId) {\n throw new Error('尚未登入,無法上傳附件');\n }\n\n const attachment = await uploadAttachment({\n file,\n formFieldPath: `form.${field.fieldKey}`,\n });\n\n return { id: attachment.id };\n }\n\n return (\n <AppLayout activeHref=\"/\">\n <PageHeader>\n <ContentHeader\n description={\n context\n ? `${context.template.name} · 表單 v${context.formVersion.version}`\n : '選擇可發起的已發布模板後填寫表單內容。'\n }\n title=\"發起簽核\"\n >\n {context ? (\n <Button\n disabled={loading || submitting}\n icon={CheckedIcon}\n iconType=\"leading\"\n onClick={handleSubmit}\n variant=\"base-primary\"\n >\n 送出\n </Button>\n ) : null}\n </ContentHeader>\n </PageHeader>\n\n <SectionGroup>\n <Section>\n <div style={FORM_SECTION_STYLE}>\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n\n {loading ? (\n <Typography color=\"text-neutral\" variant=\"body\">\n 載入中...\n </Typography>\n ) : null}\n\n {context ? (\n <FormRenderer\n errors={formErrors}\n maxWidth={480}\n onChange={(values): void => {\n setFormValues(values);\n setFormErrors({});\n }}\n onUploadAttachment={handleUploadAttachment}\n schema={context.formVersion.schema}\n singleColumn\n uiSchema={context.formVersion.uiSchema}\n value={formValues}\n />\n ) : null}\n\n {!templateId && !loading ? (\n rows.length > 0 ? (\n <Table\n actions={tableActions}\n columns={columns}\n dataSource={rows}\n fullWidth\n />\n ) : (\n <Typography color=\"text-neutral\" variant=\"body\">\n 目前沒有可發起的已發布模板。\n </Typography>\n )\n ) : null}\n </div>\n </Section>\n </SectionGroup>\n </AppLayout>\n );\n}\n\nfunction NewApprovalInstanceLoading(): ReactElement {\n return (\n <AppLayout activeHref=\"/\">\n <PageHeader>\n <ContentHeader\n description=\"選擇可發起的已發布模板後填寫表單內容。\"\n title=\"發起簽核\"\n />\n </PageHeader>\n\n <SectionGroup>\n <Section>\n <Typography color=\"text-neutral\" variant=\"body\">\n 載入中...\n </Typography>\n </Section>\n </SectionGroup>\n </AppLayout>\n );\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '發生未知錯誤';\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/views/instances/new/InstanceNewView.tsx"],"sourcesContent":["'use client';\n\nimport {\n CSSProperties,\n ReactElement,\n Suspense,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n PageHeader,\n Section,\n SectionGroup,\n Table,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { CheckedIcon } from '@mezzanine-ui/icons';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport { FormFieldDefinition } from '@rytass/bpm-core-shared/form';\nimport {\n focusFormRendererField,\n FormRendererValues,\n validateFormRendererValues,\n} from '@rytass/bpm-core-client/form';\nimport {\n LaunchContext,\n LaunchableTemplateRecord,\n listLaunchableTemplates,\n readFormDataCaseTitle,\n readLaunchContext,\n submitApprovalInstance,\n uploadAttachment,\n} from '@rytass/bpm-core-client/workflow';\nimport { formatDateTime } from '../../../lib/format-date-time';\nimport { useAuth } from '../../../lib/auth-provider';\nimport { useRouterAdapter } from '../../../lib/router-adapter';\nimport { useBPMRoutes } from '../../../lib/routes-config';\nimport { AppLayout } from '../../../components/app-navigation';\nimport { FormRenderer } from '../../forms/renderer/FormRendererView';\n\nconst FORM_SECTION_STYLE: CSSProperties = {\n display: 'grid',\n gap: 16,\n};\n\ntype LaunchableTemplateRow = Readonly<\n Record<string, unknown> &\n LaunchableTemplateRecord & {\n key: string;\n versionLabel: string;\n }\n>;\n\nexport interface InstanceNewViewProps {\n /**\n * Optional template id pre-selected by the host. The Server Component\n * page should read `?templateId=` from its `searchParams` and pass the\n * value through this prop.\n */\n readonly templateId?: string | null;\n}\n\n/**\n * Framework-agnostic view for the BPM \"發起簽核\" launch page. Mechanical port\n * of `apps/client/src/app/instances/new/page.tsx` — picks a launchable\n * template and submits the launch form.\n */\nexport function InstanceNewView(\n props: InstanceNewViewProps = {},\n): ReactElement {\n return (\n <Suspense fallback={<NewApprovalInstanceLoading />}>\n <NewApprovalInstanceContent templateId={props.templateId ?? undefined} />\n </Suspense>\n );\n}\n\nfunction NewApprovalInstanceContent({\n templateId: templateIdProp,\n}: {\n readonly templateId?: string;\n}): ReactElement {\n const router = useRouterAdapter();\n const routes = useBPMRoutes();\n const { member } = useAuth();\n const currentMemberId = member?.memberId ?? null;\n const templateId = templateIdProp ?? null;\n const [context, setContext] = useState<LaunchContext | null>(null);\n const [formValues, setFormValues] = useState<FormRendererValues>({});\n const [templates, setTemplates] = useState<\n readonly LaunchableTemplateRecord[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n const [formErrors, setFormErrors] = useState<\n Readonly<Record<string, string>>\n >({});\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect((): void => {\n if (!templateId) {\n void refreshTemplates();\n\n return;\n }\n\n void refreshContext(templateId);\n }, [templateId]);\n\n const rows = useMemo(\n (): LaunchableTemplateRow[] =>\n templates.map((template) => ({\n ...template,\n key: template.id,\n updatedAt: formatDateTime(template.updatedAt),\n versionLabel: `v${template.version}`,\n })),\n [templates],\n );\n const columns = useMemo(\n (): TableColumn<LaunchableTemplateRow>[] => [\n { dataIndex: 'name', key: 'name', title: '模板名稱', width: 240 },\n {\n dataIndex: 'versionLabel',\n key: 'versionLabel',\n title: '發布版本',\n width: 120,\n },\n {\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n title: '更新時間',\n width: 220,\n },\n ],\n [],\n );\n const tableActions = useMemo(\n (): TableActions<LaunchableTemplateRow> => ({\n render: (\n record,\n ): ReturnType<TableActions<LaunchableTemplateRow>['render']> => [\n {\n name: '發起',\n onClick: (): void =>\n router.push(routes.caseNew(record.id)),\n variant: 'base-primary',\n },\n ],\n variant: 'base-secondary',\n width: 88,\n }),\n [router],\n );\n\n async function refreshTemplates(): Promise<void> {\n setLoading(true);\n setError(null);\n setContext(null);\n\n try {\n setTemplates(await listLaunchableTemplates());\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }\n\n async function refreshContext(nextTemplateId: string): Promise<void> {\n setLoading(true);\n setError(null);\n setTemplates([]);\n\n try {\n setContext(await readLaunchContext(nextTemplateId));\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\n }\n }\n\n async function handleSubmit(): Promise<void> {\n if (!context || !currentMemberId) {\n return;\n }\n\n setSubmitting(true);\n setError(null);\n setFormErrors({});\n\n const validation = validateFormRendererValues({\n schema: context.formVersion.schema,\n uiSchema: context.formVersion.uiSchema,\n values: formValues,\n });\n\n if (!validation.valid) {\n setFormErrors(validation.errors);\n setError('請先補齊必填欄位。');\n\n if (validation.firstInvalidFieldKey) {\n focusFormRendererField(validation.firstInvalidFieldKey);\n }\n\n setSubmitting(false);\n\n return;\n }\n\n try {\n const instanceId = await submitApprovalInstance({\n formData: formValues,\n initiatorMemberId: currentMemberId,\n templateId: context.template.id,\n title: readFormDataCaseTitle({\n fallbackTitle: context.template.name,\n formData: formValues,\n schema: context.formVersion.schema,\n uiSchema: context.formVersion.uiSchema,\n }),\n });\n\n router.push(routes.caseDetail(instanceId));\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setSubmitting(false);\n }\n }\n\n async function handleUploadAttachment(\n field: FormFieldDefinition,\n file: File,\n ): Promise<{ readonly id: string }> {\n if (!currentMemberId) {\n throw new Error('尚未登入,無法上傳附件');\n }\n\n const attachment = await uploadAttachment({\n file,\n formFieldPath: `form.${field.fieldKey}`,\n });\n\n return { id: attachment.id };\n }\n\n return (\n <AppLayout activeHref=\"/\">\n <PageHeader>\n <ContentHeader\n description={\n context\n ? `${context.template.name} · 表單 v${context.formVersion.version}`\n : '選擇可發起的已發布模板後填寫表單內容。'\n }\n title=\"發起簽核\"\n >\n {context ? (\n <Button\n disabled={loading || submitting}\n icon={CheckedIcon}\n iconType=\"leading\"\n onClick={handleSubmit}\n variant=\"base-primary\"\n >\n 送出\n </Button>\n ) : null}\n </ContentHeader>\n </PageHeader>\n\n <SectionGroup>\n <Section>\n <div style={FORM_SECTION_STYLE}>\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n\n {loading ? (\n <Typography color=\"text-neutral\" variant=\"body\">\n 載入中...\n </Typography>\n ) : null}\n\n {context ? (\n <FormRenderer\n errors={formErrors}\n maxWidth={480}\n onChange={(values): void => {\n setFormValues(values);\n setFormErrors({});\n }}\n onUploadAttachment={handleUploadAttachment}\n schema={context.formVersion.schema}\n singleColumn\n uiSchema={context.formVersion.uiSchema}\n value={formValues}\n />\n ) : null}\n\n {!templateId && !loading ? (\n rows.length > 0 ? (\n <Table\n actions={tableActions}\n columns={columns}\n dataSource={rows}\n fullWidth\n />\n ) : (\n <Typography color=\"text-neutral\" variant=\"body\">\n 目前沒有可發起的已發布模板。\n </Typography>\n )\n ) : null}\n </div>\n </Section>\n </SectionGroup>\n </AppLayout>\n );\n}\n\nfunction NewApprovalInstanceLoading(): ReactElement {\n return (\n <AppLayout activeHref=\"/\">\n <PageHeader>\n <ContentHeader\n description=\"選擇可發起的已發布模板後填寫表單內容。\"\n title=\"發起簽核\"\n />\n </PageHeader>\n\n <SectionGroup>\n <Section>\n <Typography color=\"text-neutral\" variant=\"body\">\n 載入中...\n </Typography>\n </Section>\n </SectionGroup>\n </AppLayout>\n );\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '發生未知錯誤';\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/approval-instance-list-page-Mo6wpDPb.cjs");let t=require("react/jsx-runtime");function n(n={}){return(0,t.jsx)(e.t,{activeHref:`/search`,defaultState:null,description:`以關鍵字與狀態查詢你有權限查看的簽核案件。`,emptyMessage:`沒有符合條件的簽核案件。`,searchPlaceholder:`關鍵字:搜尋案件、發起人、模板或狀態`,title:`案件搜尋`,view:`ALL`})}exports.SearchView=n;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/approval-instance-list-page-CVXgE2K3.cjs");let t=require("react/jsx-runtime");function n(n={}){return(0,t.jsx)(e.t,{activeHref:`/search`,defaultState:null,description:`以關鍵字與狀態查詢你有權限查看的簽核案件。`,emptyMessage:`沒有符合條件的簽核案件。`,searchPlaceholder:`關鍵字:搜尋案件、發起人、模板或狀態`,title:`案件搜尋`,view:`ALL`})}exports.SearchView=n;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "../../chunks/approval-instance-list-page-nmzMrj0b.js";
2
+ import { t as e } from "../../chunks/approval-instance-list-page-CqNdoZqx.js";
3
3
  import { jsx as t } from "react/jsx-runtime";
4
4
  //#region src/views/search/SearchView.tsx
5
5
  function n(n = {}) {
@@ -1,2 +1,2 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/approval-instance-list-page-Mo6wpDPb.cjs");let t=require("react/jsx-runtime");function n(n={}){return(0,t.jsx)(e.t,{activeHref:`/sent`,defaultState:null,description:`查看由你發起的簽核案件與目前流程狀態。`,emptyMessage:`目前沒有由你發起的簽核案件。`,searchPlaceholder:`關鍵字:搜尋案件、發起人、模板或狀態`,title:`我發起的`,view:`SENT`})}exports.SentView=n;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/approval-instance-list-page-CVXgE2K3.cjs");let t=require("react/jsx-runtime");function n(n={}){return(0,t.jsx)(e.t,{activeHref:`/sent`,defaultState:null,description:`查看由你發起的簽核案件與目前流程狀態。`,emptyMessage:`目前沒有由你發起的簽核案件。`,searchPlaceholder:`關鍵字:搜尋案件、發起人、模板或狀態`,title:`我發起的`,view:`SENT`})}exports.SentView=n;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "../../chunks/approval-instance-list-page-nmzMrj0b.js";
2
+ import { t as e } from "../../chunks/approval-instance-list-page-CqNdoZqx.js";
3
3
  import { jsx as t } from "react/jsx-runtime";
4
4
  //#region src/views/sent/SentView.tsx
5
5
  function n(n = {}) {
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/notifications-CPQ-nVar.cjs");exports.SettingsNotificationsView=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/notifications-BaYDebFt.cjs");exports.SettingsNotificationsView=e.t;
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/notifications-DweexUVy.js";
1
+ import { t as e } from "../../chunks/notifications-2swRqDPF.js";
2
2
  export { e as SettingsNotificationsView };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/notifications-CPQ-nVar.cjs");exports.SettingsNotificationsView=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/notifications-BaYDebFt.cjs");exports.SettingsNotificationsView=e.t;
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../../chunks/notifications-DweexUVy.js";
1
+ import { t as e } from "../../../chunks/notifications-2swRqDPF.js";
2
2
  export { e as SettingsNotificationsView };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/categories-DEijUOnw.cjs");exports.TemplateCategoriesView=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../chunks/categories-5yEM3p3N.cjs");exports.TemplateCategoriesView=e.t;
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../../chunks/categories-DTEl182t.js";
1
+ import { t as e } from "../../../chunks/categories-BIpOG451.js";
2
2
  export { e as TemplateCategoriesView };