wcz-layout 6.7.2 → 9.4.2

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 (271) hide show
  1. package/dist/Approval-Co6D1BNq.mjs +194 -0
  2. package/dist/Approval-Co6D1BNq.mjs.map +1 -0
  3. package/dist/DialogsContext-DLqA8RJ_.mjs +7 -0
  4. package/dist/DialogsContext-DLqA8RJ_.mjs.map +1 -0
  5. package/dist/Email-BzQQkbe9.mjs +20 -0
  6. package/dist/Email-BzQQkbe9.mjs.map +1 -0
  7. package/dist/FileMeta-DDqUju1Y.mjs +19 -0
  8. package/dist/FileMeta-DDqUju1Y.mjs.map +1 -0
  9. package/dist/FileMeta-ILLTOjaM.d.mts +20 -0
  10. package/dist/NotificationContext-CgwUOeW0.mjs +7 -0
  11. package/dist/NotificationContext-CgwUOeW0.mjs.map +1 -0
  12. package/dist/QueryClientParam-CzaM3akD.d.mts +11 -0
  13. package/dist/RouterListItemButton-owZVvuC_.mjs +78 -0
  14. package/dist/RouterListItemButton-owZVvuC_.mjs.map +1 -0
  15. package/dist/User-1gKoYJvW.d.mts +12 -0
  16. package/dist/auth.d.mts +25 -0
  17. package/dist/auth.mjs +88 -0
  18. package/dist/auth.mjs.map +1 -0
  19. package/dist/authMiddleware--HdlhhZO.mjs +78 -0
  20. package/dist/authMiddleware--HdlhhZO.mjs.map +1 -0
  21. package/dist/components.d.mts +107 -0
  22. package/dist/components.mjs +1500 -0
  23. package/dist/components.mjs.map +1 -0
  24. package/dist/data/client.d.mts +3217 -0
  25. package/dist/data/client.mjs +187 -0
  26. package/dist/data/client.mjs.map +1 -0
  27. package/dist/data/server.d.mts +19 -0
  28. package/dist/data/server.mjs +16 -0
  29. package/dist/data/server.mjs.map +1 -0
  30. package/dist/entra-s4ZjHq5o.mjs +101 -0
  31. package/dist/entra-s4ZjHq5o.mjs.map +1 -0
  32. package/dist/env-CoveIivr.mjs +30 -0
  33. package/dist/env-CoveIivr.mjs.map +1 -0
  34. package/dist/file-C5-a_6W6.mjs +148 -0
  35. package/dist/file-C5-a_6W6.mjs.map +1 -0
  36. package/dist/file-DM1x40eJ.mjs +179 -0
  37. package/dist/file-DM1x40eJ.mjs.map +1 -0
  38. package/dist/hooks.d.mts +226 -0
  39. package/dist/hooks.mjs +1087 -0
  40. package/dist/hooks.mjs.map +1 -0
  41. package/dist/index.d.mts +48 -0
  42. package/dist/index.mjs +1944 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/middleware.d.mts +46 -0
  45. package/dist/middleware.mjs +27 -0
  46. package/dist/middleware.mjs.map +1 -0
  47. package/dist/models.d.mts +598 -0
  48. package/dist/models.mjs +74 -0
  49. package/dist/models.mjs.map +1 -0
  50. package/dist/msalServer-CkNOOjjH.mjs +44 -0
  51. package/dist/msalServer-CkNOOjjH.mjs.map +1 -0
  52. package/dist/peoplesoft-DIe8H1Nu.mjs +240 -0
  53. package/dist/peoplesoft-DIe8H1Nu.mjs.map +1 -0
  54. package/dist/peoplesoft-gKd-Jh5L.d.mts +1219 -0
  55. package/dist/useDialogs-BUzVrTSP.mjs +248 -0
  56. package/dist/useDialogs-BUzVrTSP.mjs.map +1 -0
  57. package/dist/user-Cen43mlr.d.mts +19 -0
  58. package/dist/utils-2XiozDlV.mjs +156 -0
  59. package/dist/utils-2XiozDlV.mjs.map +1 -0
  60. package/dist/utils-BuWEQOuy.d.mts +65 -0
  61. package/dist/utils.d.mts +5 -0
  62. package/dist/utils.mjs +5 -0
  63. package/dist/vite.d.mts +7 -0
  64. package/dist/vite.mjs +182 -0
  65. package/dist/vite.mjs.map +1 -0
  66. package/package.json +129 -62
  67. package/skills/client-db/SKILL.md +93 -0
  68. package/skills/data-grid/SKILL.md +142 -0
  69. package/skills/db-schema/SKILL.md +71 -0
  70. package/skills/dialogs/SKILL.md +79 -0
  71. package/skills/forms/SKILL.md +82 -0
  72. package/skills/general/SKILL.md +17 -0
  73. package/skills/notifications/SKILL.md +43 -0
  74. package/skills/routing/SKILL.md +128 -0
  75. package/skills/server-functions/SKILL.md +113 -0
  76. package/skills/services/SKILL.md +30 -0
  77. package/skills/services/docs/approval.md +257 -0
  78. package/skills/services/docs/email.md +32 -0
  79. package/skills/services/docs/file.md +81 -0
  80. package/skills/services/docs/peoplesoft.md +110 -0
  81. package/skills/start/SKILL.md +46 -0
  82. package/skills/start/steps/01-git-setup.md +11 -0
  83. package/skills/start/steps/02-project-name-setup.md +14 -0
  84. package/skills/start/steps/03-apm-setup.md +208 -0
  85. package/skills/start/steps/04-database-setup.md +39 -0
  86. package/skills/start/steps/05-entra-setup.md +59 -0
  87. package/skills/start/steps/06-vault-setup.md +70 -0
  88. package/skills/start/steps/07-generate-favicon.md +10 -0
  89. package/skills/start/steps/08-commit.md +15 -0
  90. package/dist/src/components/Layout.d.ts +0 -16
  91. package/dist/src/components/Layout.js +0 -122
  92. package/dist/src/components/Layout.js.map +0 -1
  93. package/dist/src/components/dataGrid/ChipInputCell.d.ts +0 -9
  94. package/dist/src/components/dataGrid/ChipInputCell.js +0 -17
  95. package/dist/src/components/dataGrid/ChipInputCell.js.map +0 -1
  96. package/dist/src/components/dataGrid/EditableColumnHeader.d.ts +0 -2
  97. package/dist/src/components/dataGrid/EditableColumnHeader.js +0 -7
  98. package/dist/src/components/dataGrid/EditableColumnHeader.js.map +0 -1
  99. package/dist/src/components/dataGrid/GridToolbar.d.ts +0 -8
  100. package/dist/src/components/dataGrid/GridToolbar.js +0 -40
  101. package/dist/src/components/dataGrid/GridToolbar.js.map +0 -1
  102. package/dist/src/components/dataGrid/TableContainer.d.ts +0 -3
  103. package/dist/src/components/dataGrid/TableContainer.js +0 -32
  104. package/dist/src/components/dataGrid/TableContainer.js.map +0 -1
  105. package/dist/src/components/form/FormAutocomplete.d.ts +0 -7
  106. package/dist/src/components/form/FormAutocomplete.js +0 -10
  107. package/dist/src/components/form/FormAutocomplete.js.map +0 -1
  108. package/dist/src/components/form/FormCheckbox.d.ts +0 -7
  109. package/dist/src/components/form/FormCheckbox.js +0 -11
  110. package/dist/src/components/form/FormCheckbox.js.map +0 -1
  111. package/dist/src/components/form/FormDatePicker.d.ts +0 -9
  112. package/dist/src/components/form/FormDatePicker.js +0 -19
  113. package/dist/src/components/form/FormDatePicker.js.map +0 -1
  114. package/dist/src/components/form/FormDateTimePicker.d.ts +0 -9
  115. package/dist/src/components/form/FormDateTimePicker.js +0 -19
  116. package/dist/src/components/form/FormDateTimePicker.js.map +0 -1
  117. package/dist/src/components/form/FormNumberField.d.ts +0 -12
  118. package/dist/src/components/form/FormNumberField.js +0 -12
  119. package/dist/src/components/form/FormNumberField.js.map +0 -1
  120. package/dist/src/components/form/FormRadioGroup.d.ts +0 -13
  121. package/dist/src/components/form/FormRadioGroup.js +0 -11
  122. package/dist/src/components/form/FormRadioGroup.js.map +0 -1
  123. package/dist/src/components/form/FormSlider.d.ts +0 -7
  124. package/dist/src/components/form/FormSlider.js +0 -11
  125. package/dist/src/components/form/FormSlider.js.map +0 -1
  126. package/dist/src/components/form/FormSubmitButton.d.ts +0 -5
  127. package/dist/src/components/form/FormSubmitButton.js +0 -13
  128. package/dist/src/components/form/FormSubmitButton.js.map +0 -1
  129. package/dist/src/components/form/FormSwitch.d.ts +0 -7
  130. package/dist/src/components/form/FormSwitch.js +0 -11
  131. package/dist/src/components/form/FormSwitch.js.map +0 -1
  132. package/dist/src/components/form/FormTextField.d.ts +0 -7
  133. package/dist/src/components/form/FormTextField.js +0 -11
  134. package/dist/src/components/form/FormTextField.js.map +0 -1
  135. package/dist/src/components/layout/AccountMenu.d.ts +0 -9
  136. package/dist/src/components/layout/AccountMenu.js +0 -44
  137. package/dist/src/components/layout/AccountMenu.js.map +0 -1
  138. package/dist/src/components/layout/DevelopmentBanner.d.ts +0 -7
  139. package/dist/src/components/layout/DevelopmentBanner.js +0 -29
  140. package/dist/src/components/layout/DevelopmentBanner.js.map +0 -1
  141. package/dist/src/components/layout/ErrorPage.d.ts +0 -2
  142. package/dist/src/components/layout/ErrorPage.js +0 -25
  143. package/dist/src/components/layout/ErrorPage.js.map +0 -1
  144. package/dist/src/components/layout/LayoutDialog.d.ts +0 -12
  145. package/dist/src/components/layout/LayoutDialog.js +0 -12
  146. package/dist/src/components/layout/LayoutDialog.js.map +0 -1
  147. package/dist/src/components/layout/LayoutSnackbar.d.ts +0 -8
  148. package/dist/src/components/layout/LayoutSnackbar.js +0 -25
  149. package/dist/src/components/layout/LayoutSnackbar.js.map +0 -1
  150. package/dist/src/components/layout/NavigationDrawer.d.ts +0 -11
  151. package/dist/src/components/layout/NavigationDrawer.js +0 -70
  152. package/dist/src/components/layout/NavigationDrawer.js.map +0 -1
  153. package/dist/src/components/layout/NotificationMenu.d.ts +0 -8
  154. package/dist/src/components/layout/NotificationMenu.js +0 -26
  155. package/dist/src/components/layout/NotificationMenu.js.map +0 -1
  156. package/dist/src/components/layout/TypographyWithIcon.d.ts +0 -7
  157. package/dist/src/components/layout/TypographyWithIcon.js +0 -22
  158. package/dist/src/components/layout/TypographyWithIcon.js.map +0 -1
  159. package/dist/src/components/layout/Unauthorized.d.ts +0 -2
  160. package/dist/src/components/layout/Unauthorized.js +0 -26
  161. package/dist/src/components/layout/Unauthorized.js.map +0 -1
  162. package/dist/src/contexts/LayoutContext.d.ts +0 -40
  163. package/dist/src/contexts/LayoutContext.js +0 -60
  164. package/dist/src/contexts/LayoutContext.js.map +0 -1
  165. package/dist/src/contexts/UserContext.d.ts +0 -24
  166. package/dist/src/contexts/UserContext.js +0 -55
  167. package/dist/src/contexts/UserContext.js.map +0 -1
  168. package/dist/src/hooks/FormHooks.d.ts +0 -46
  169. package/dist/src/hooks/FormHooks.js +0 -31
  170. package/dist/src/hooks/FormHooks.js.map +0 -1
  171. package/dist/src/hooks/UseSnackbar.d.ts +0 -10
  172. package/dist/src/hooks/UseSnackbar.js +0 -23
  173. package/dist/src/hooks/UseSnackbar.js.map +0 -1
  174. package/dist/src/hooks/UseUser.d.ts +0 -10
  175. package/dist/src/hooks/UseUser.js +0 -25
  176. package/dist/src/hooks/UseUser.js.map +0 -1
  177. package/dist/src/index.d.ts +0 -20
  178. package/dist/src/index.js +0 -15
  179. package/dist/src/index.js.map +0 -1
  180. package/dist/src/models/Error.d.ts +0 -6
  181. package/dist/src/models/Error.js +0 -2
  182. package/dist/src/models/Error.js.map +0 -1
  183. package/dist/src/models/KeycloakSettings.d.ts +0 -8
  184. package/dist/src/models/KeycloakSettings.js +0 -2
  185. package/dist/src/models/KeycloakSettings.js.map +0 -1
  186. package/dist/src/models/LayoutPaletteColorOptions.d.ts +0 -6
  187. package/dist/src/models/LayoutPaletteColorOptions.js +0 -2
  188. package/dist/src/models/LayoutPaletteColorOptions.js.map +0 -1
  189. package/dist/src/models/LayoutRoute.d.ts +0 -14
  190. package/dist/src/models/LayoutRoute.js +0 -2
  191. package/dist/src/models/LayoutRoute.js.map +0 -1
  192. package/dist/src/models/Notification.d.ts +0 -9
  193. package/dist/src/models/Notification.js +0 -2
  194. package/dist/src/models/Notification.js.map +0 -1
  195. package/dist/src/models/PeoplesoftDepartment.d.ts +0 -14
  196. package/dist/src/models/PeoplesoftDepartment.js +0 -2
  197. package/dist/src/models/PeoplesoftDepartment.js.map +0 -1
  198. package/dist/src/models/PeoplesoftEmployee.d.ts +0 -34
  199. package/dist/src/models/PeoplesoftEmployee.js +0 -2
  200. package/dist/src/models/PeoplesoftEmployee.js.map +0 -1
  201. package/dist/src/models/Snackbar.d.ts +0 -15
  202. package/dist/src/models/Snackbar.js +0 -2
  203. package/dist/src/models/Snackbar.js.map +0 -1
  204. package/dist/src/models/User.d.ts +0 -27
  205. package/dist/src/models/User.js +0 -11
  206. package/dist/src/models/User.js.map +0 -1
  207. package/dist/src/models/types/EmployeeCategoryGroup.d.ts +0 -1
  208. package/dist/src/models/types/EmployeeCategoryGroup.js +0 -2
  209. package/dist/src/models/types/EmployeeCategoryGroup.js.map +0 -1
  210. package/dist/src/models/types/EmployeeStatus.d.ts +0 -1
  211. package/dist/src/models/types/EmployeeStatus.js +0 -2
  212. package/dist/src/models/types/EmployeeStatus.js.map +0 -1
  213. package/dist/src/utils/Auth.d.ts +0 -12
  214. package/dist/src/utils/Auth.js +0 -49
  215. package/dist/src/utils/Auth.js.map +0 -1
  216. package/dist/src/utils/Fetches.d.ts +0 -5
  217. package/dist/src/utils/Fetches.js +0 -66
  218. package/dist/src/utils/Fetches.js.map +0 -1
  219. package/dist/src/utils/FormUtils.d.ts +0 -7
  220. package/dist/src/utils/FormUtils.js +0 -9
  221. package/dist/src/utils/FormUtils.js.map +0 -1
  222. package/dist/src/utils/Helpers.d.ts +0 -11
  223. package/dist/src/utils/Helpers.js +0 -26
  224. package/dist/src/utils/Helpers.js.map +0 -1
  225. package/dist/tsconfig.tsbuildinfo +0 -1
  226. package/src/components/Layout.tsx +0 -183
  227. package/src/components/dataGrid/ChipInputCell.tsx +0 -31
  228. package/src/components/dataGrid/EditableColumnHeader.tsx +0 -7
  229. package/src/components/dataGrid/GridToolbar.tsx +0 -63
  230. package/src/components/dataGrid/TableContainer.tsx +0 -39
  231. package/src/components/form/FormAutocomplete.tsx +0 -34
  232. package/src/components/form/FormCheckbox.tsx +0 -32
  233. package/src/components/form/FormDatePicker.tsx +0 -34
  234. package/src/components/form/FormDateTimePicker.tsx +0 -34
  235. package/src/components/form/FormNumberField.tsx +0 -33
  236. package/src/components/form/FormRadioGroup.tsx +0 -43
  237. package/src/components/form/FormSlider.tsx +0 -28
  238. package/src/components/form/FormSubmitButton.tsx +0 -29
  239. package/src/components/form/FormSwitch.tsx +0 -32
  240. package/src/components/form/FormTextField.tsx +0 -26
  241. package/src/components/layout/AccountMenu.tsx +0 -160
  242. package/src/components/layout/DevelopmentBanner.tsx +0 -54
  243. package/src/components/layout/ErrorPage.tsx +0 -34
  244. package/src/components/layout/LayoutDialog.tsx +0 -50
  245. package/src/components/layout/LayoutSnackbar.tsx +0 -44
  246. package/src/components/layout/NavigationDrawer.tsx +0 -131
  247. package/src/components/layout/NotificationMenu.tsx +0 -76
  248. package/src/components/layout/TypographyWithIcon.tsx +0 -35
  249. package/src/components/layout/Unauthorized.tsx +0 -37
  250. package/src/contexts/LayoutContext.tsx +0 -127
  251. package/src/contexts/UserContext.tsx +0 -88
  252. package/src/hooks/FormHooks.ts +0 -33
  253. package/src/hooks/UseSnackbar.tsx +0 -28
  254. package/src/hooks/UseUser.tsx +0 -29
  255. package/src/index.ts +0 -27
  256. package/src/models/Error.tsx +0 -6
  257. package/src/models/KeycloakSettings.ts +0 -8
  258. package/src/models/LayoutPaletteColorOptions.tsx +0 -7
  259. package/src/models/LayoutRoute.ts +0 -15
  260. package/src/models/Notification.ts +0 -10
  261. package/src/models/PeoplesoftDepartment.ts +0 -15
  262. package/src/models/PeoplesoftEmployee.ts +0 -35
  263. package/src/models/Snackbar.ts +0 -16
  264. package/src/models/User.ts +0 -13
  265. package/src/models/types/EmployeeCategoryGroup.ts +0 -1
  266. package/src/models/types/EmployeeStatus.ts +0 -1
  267. package/src/utils/Auth.ts +0 -58
  268. package/src/utils/Fetches.ts +0 -83
  269. package/src/utils/FormUtils.ts +0 -22
  270. package/src/utils/Helpers.ts +0 -27
  271. package/tsconfig.json +0 -29
@@ -0,0 +1,257 @@
1
+ # approval
2
+
3
+ ## Client
4
+
5
+ - Query:
6
+ `approvalsQueryOptions`
7
+ `approvalQueryOptions`
8
+ - Mutation:
9
+ `createApprovalMutationOptions`
10
+ `approveApprovalMutationOptions`
11
+ `resubmitApprovalMutationOptions`
12
+ `withdrawApprovalMutationOptions`
13
+ `cancelApprovalMutationOptions`
14
+
15
+ ## Server
16
+
17
+ - Fetch:
18
+ `getApprovals`
19
+ `getApproval`
20
+ - Mutate:
21
+ `createApproval`
22
+ `approveApproval`
23
+ `resubmitApproval`
24
+ `withdrawApproval`
25
+ `cancelApproval`
26
+
27
+ ## Schemas/Models
28
+
29
+ ```ts
30
+ const ApprovalRequestType = z.enum(["Single", "Batch"]);
31
+
32
+ const ApprovalStatus = z.enum([
33
+ "WaitingForApproval",
34
+ "Approved",
35
+ "PartiallyApproved",
36
+ "Rejected",
37
+ "Withdrawn",
38
+ "Cancelled",
39
+ ]);
40
+
41
+ const ApprovalStepResult = z.enum([
42
+ "NotAvailable",
43
+ "FutureApproval",
44
+ "WaitingForApproval",
45
+ "Approved",
46
+ "Rejected",
47
+ "Skipped",
48
+ "Withdrawn",
49
+ "Cancelled",
50
+ ]);
51
+
52
+ const StepApprovalOrder = z.enum(["Serial", "Parallel", "OneOfThem"]);
53
+
54
+ const ApprovalEmployeeSchema = z.object({
55
+ employeeId: z.string().trim().min(1).max(20),
56
+ name: z.string().trim().min(1).max(50),
57
+ email: z.email().min(1).max(100),
58
+ });
59
+
60
+ const ApprovalFlowStepSchema = z.object({
61
+ id: z.uuid(),
62
+ order: z.number(),
63
+ approverRole: z.string().trim().min(1).max(100).default("Approver").optional(),
64
+ approver: ApprovalEmployeeSchema,
65
+ actualApprover: ApprovalEmployeeSchema.optional(),
66
+ result: ApprovalStepResult.default("NotAvailable").optional(),
67
+ resultDate: z.date().optional(),
68
+ resultComment: z.string().trim().max(2000).optional(),
69
+ });
70
+
71
+ const ApprovalFlowSchema = z.object({
72
+ id: z.uuid(),
73
+ approvalStage: z.number(),
74
+ batchSequence: z.number().optional(),
75
+ approvalSequence: z.number(),
76
+ stepApprovalOrder: StepApprovalOrder,
77
+ steps: z.array(ApprovalFlowStepSchema),
78
+ isActive: z.boolean().default(false).optional(),
79
+ });
80
+
81
+ const ApprovalCoRequestorGroupSchema = z.object({
82
+ role: z.string().trim().min(1),
83
+ email: z.email().optional(),
84
+ });
85
+
86
+ const ApprovalCoRequestorEmployeeSchema = z.object({
87
+ employeeId: z.string().trim().min(1),
88
+ name: z.string().trim().min(1),
89
+ email: z.email().optional(),
90
+ });
91
+
92
+ const ApprovalCoRequestorPrincipalSchema = z.union([
93
+ ApprovalCoRequestorGroupSchema,
94
+ ApprovalCoRequestorEmployeeSchema,
95
+ ]);
96
+
97
+ const ApprovalCoRequestorPermissionsSchema = z.object({
98
+ withdraw: z.boolean().default(false).optional(),
99
+ cancel: z.boolean().default(false).optional(),
100
+ });
101
+
102
+ const ApprovalCoRequestorSchema = z.object({
103
+ id: z.uuid(),
104
+ principal: ApprovalCoRequestorPrincipalSchema,
105
+ permissions: ApprovalCoRequestorPermissionsSchema,
106
+ });
107
+
108
+ const HqApprovalColSchema = z.object({
109
+ title: z.string().optional(),
110
+ text: z.string().optional(),
111
+ textColor: z.string().optional(),
112
+ textSize: z.string().optional(),
113
+ });
114
+
115
+ const HqApprovalRowSchema = z.object({ col: z.array(HqApprovalColSchema) });
116
+
117
+ const HqApprovalSectionSchema = z.object({
118
+ row: z.array(HqApprovalRowSchema),
119
+ title: z.string().optional(),
120
+ type: z.string().optional(),
121
+ text: z.string().optional(),
122
+ });
123
+
124
+ const HqApprovalPageSchema = z.object({ section: z.array(HqApprovalSectionSchema) });
125
+
126
+ const HqApprovalSummarySchema = z.object({ page: z.array(HqApprovalPageSchema) });
127
+
128
+ const HqApprovalFormDataSchema = z.object({
129
+ systemId: z.string().optional(),
130
+ formType: z.string().optional(),
131
+ formId: z.string().optional(),
132
+ stepName: z.string().optional(),
133
+ userId: z.string().optional(),
134
+ title: z.string().optional(),
135
+ subject: z.string().optional(),
136
+ summary: HqApprovalSummarySchema.optional(),
137
+ messageId: z.string().optional(),
138
+ attachList: z.string().optional(),
139
+ chkResult: z.string().optional(),
140
+ apprSummary: z.string().optional(),
141
+ approvalComment: z.string().optional(),
142
+ });
143
+
144
+ const HqApprovalHeaderSchema = z.object({
145
+ serviceId: z.string().optional(),
146
+ authorizationCode: z.string().optional(),
147
+ dataCreatedTime: z.string().optional(),
148
+ characterEnable: z.boolean().default(false).optional(),
149
+ });
150
+
151
+ const HqApprovalRequestSchema = z.object({
152
+ header: HqApprovalHeaderSchema.optional(),
153
+ formData: HqApprovalFormDataSchema.optional(),
154
+ });
155
+
156
+ const ApprovalSchema = z.object({
157
+ id: z.uuid(),
158
+ number: z.string().trim().max(30).optional(),
159
+ applicationName: z.string().trim().min(1).max(50),
160
+ type: ApprovalRequestType.default("Single").optional(),
161
+ status: ApprovalStatus,
162
+ created: z.date(),
163
+ createdBy: z.custom<ApprovalEmployee>(),
164
+ updated: z.date().optional(),
165
+ updatedBy: z.custom<ApprovalEmployee>().optional(),
166
+ approvalFlows: z.array(ApprovalFlow).min(1),
167
+ currentApprovers: z.array(ApprovalEmployee),
168
+ coRequestors: z.array(ApprovalCoRequestorSchema).optional(),
169
+ });
170
+
171
+ const GetApprovalsSchema = z.object({
172
+ appName: z.string().min(1).max(255),
173
+ status: ApprovalStatus.optional(),
174
+ approverEmployeeId: z.string().min(1).max(20).optional(),
175
+ stepResult: ApprovalStepResult.optional(),
176
+ });
177
+
178
+ const GetApprovalSchema = z.object({
179
+ id: z.uuid(),
180
+ });
181
+
182
+ const CreateApprovalSchema = ApprovalSchema.pick({
183
+ id: true,
184
+ number: true,
185
+ applicationName: true,
186
+ type: true,
187
+ status: true,
188
+ approvalFlows: true,
189
+ }).extend({
190
+ emailBody: z.string().trim().min(1),
191
+ hqApprovalRequest: HqApprovalRequestSchema.optional(),
192
+ approvalFlows: z
193
+ .array(
194
+ ApprovalFlowSchema.pick({
195
+ approvalStage: true,
196
+ batchSequence: true,
197
+ stepApprovalOrder: true,
198
+ steps: true,
199
+ }).extend({
200
+ steps: z.array(ApprovalFlowStepSchema.pick({ approverRole: true, approver: true })),
201
+ }),
202
+ )
203
+ .min(1),
204
+ coRequestors: z.array(ApprovalCoRequestorSchema).optional(),
205
+ });
206
+
207
+ const ApproveApprovalSchema = z.object({
208
+ id: z.uuid(),
209
+ result: ApprovalStepResult,
210
+ resultComment: z.string().trim().max(2000).optional(),
211
+ emailBody: z.string().trim().min(1),
212
+ });
213
+
214
+ const ResubmitApprovalSchema = ApprovalSchema.pick({
215
+ id: true,
216
+ approvalFlows: true,
217
+ }).extend({
218
+ approvalFlows: z
219
+ .array(
220
+ ApprovalFlowSchema.pick({
221
+ approvalStage: true,
222
+ batchSequence: true,
223
+ stepApprovalOrder: true,
224
+ steps: true,
225
+ }).extend({
226
+ steps: z.array(ApprovalFlowStepSchema.pick({ approverRole: true, approver: true })),
227
+ }),
228
+ )
229
+ .min(1),
230
+ });
231
+
232
+ const CancelApprovalSchema = z.object({
233
+ id: z.uuid(),
234
+ comment: z.string().trim().min(1).max(2000),
235
+ emailBody: z.string().trim().min(1),
236
+ });
237
+
238
+ const WithdrawApprovalSchema = z.object({
239
+ id: z.uuid(),
240
+ comment: z.string().trim().min(1).max(2000),
241
+ emailBody: z.string().trim().min(1),
242
+ });
243
+ ```
244
+
245
+ ## Examples
246
+
247
+ ```ts
248
+ import { approvalQueryOptions, approveApprovalMutationOptions } from "wcz-layout/data/client";
249
+ import { approveApproval } from "wcz-layout/data/server";
250
+
251
+ // client
252
+ const { data: approval } = useQuery(approvalQueryOptions({ id }));
253
+ const { mutate: approve } = useMutation(approveApprovalMutationOptions({ queryClient }));
254
+
255
+ // server
256
+ await approveApproval({ data: { id, result: "Approved", emailBody } });
257
+ ```
@@ -0,0 +1,32 @@
1
+ # email
2
+
3
+ ## Server
4
+
5
+ - `sendEmail`
6
+
7
+ ## Schemas/Models
8
+
9
+ ```ts
10
+ const EmailSchema = z.object({
11
+ subject: z.string().trim().min(1).max(60),
12
+ body: z.string().trim().min(1),
13
+ to: z.array(z.email()).min(1),
14
+ bcc: z.array(z.email()).optional(),
15
+ cc: z.array(z.email()).optional(),
16
+ attachments: z.array(EmailAttachmentSchema).optional(),
17
+ });
18
+
19
+ const EmailAttachmentSchema = z.object({
20
+ appName: z.string().trim().min(1).max(100),
21
+ subId: z.uuid(),
22
+ });
23
+ ```
24
+
25
+ ## Examples
26
+
27
+ ```ts
28
+ import { sendEmail } from "wcz-layout/data/server";
29
+
30
+ // server
31
+ await sendEmail({ data: { subject: "Hello", body: "<p>Hi</p>", to: ["user@example.com"] } });
32
+ ```
@@ -0,0 +1,81 @@
1
+ # file
2
+
3
+ ## Client
4
+
5
+ - Query:
6
+ `fileMetasQueryOptions`
7
+ `fileThumbnailQueryOptions`
8
+ `fileQueryOptions`
9
+ - Mutation:
10
+ `downloadFileMutationOptions`
11
+ `openFileMutationOptions`
12
+ `updateFileMetaMutationOptions`
13
+ `deleteFileMutationOptions`
14
+ `batchDeleteFilesMutationOptions`
15
+ `uploadFileMutationOptions`
16
+
17
+ ## Server
18
+
19
+ - Fetch:
20
+ `getFileMetas`
21
+ `getFileThumbnail`
22
+ `getFile`
23
+ `downloadFile`.
24
+ - Mutate:
25
+ `updateFileMeta`
26
+ `deleteFile`
27
+ `batchDeleteFiles`
28
+ `uploadFile`
29
+
30
+ ## Schemas/Models
31
+
32
+ ```ts
33
+ const FileMetaSchema = z.object({
34
+ id: z.uuid(),
35
+ subId: z.uuid(),
36
+ appName: z.string().trim().min(1).max(255),
37
+ fileName: z.string().trim().min(1).max(255),
38
+ fileExtension: z.string().trim().min(1).max(255),
39
+ fileSize: z.number().min(0),
40
+ mediaSubType: z.string().trim().min(1).max(255),
41
+ mediaType: z.string().trim().min(1).max(255),
42
+ mimeType: z.string().trim().min(1).max(255),
43
+ createdBy: z.string().trim().min(1).max(255),
44
+ createdDate: z.date(),
45
+ });
46
+
47
+ const GetFileMetasSchema = z.object({
48
+ appName: z.string().min(1).max(255),
49
+ subId: z.uuid(),
50
+ });
51
+
52
+ const FileSchema = z.object({
53
+ appName: z.string().min(1).max(255),
54
+ id: z.uuid(),
55
+ });
56
+
57
+ const UpdateFileMetaSchema = FileMetaSchema.extend({
58
+ fileName: z.string().min(1).max(255),
59
+ });
60
+
61
+ const UploadFileMetaSchema = z.object({
62
+ appName: z.string().min(1).max(255),
63
+ subId: z.uuid(),
64
+ file: z.instanceof(File),
65
+ });
66
+ ```
67
+
68
+ ## Examples
69
+
70
+ ```ts
71
+ import { fileMetasQueryOptions, uploadFileMutationOptions } from "wcz-layout/data/client";
72
+
73
+ const queryClient = useQueryClient();
74
+
75
+ const { data: files = [] } = useQuery(fileMetasQueryOptions({ appName, subId }));
76
+
77
+ // upload
78
+ const [progress, setProgress] = useState(0);
79
+ const { mutate: upload, isPending } = useMutation(uploadFileMutationOptions({ queryClient }));
80
+ upload({ appName, subId, file, setProgress });
81
+ ```
@@ -0,0 +1,110 @@
1
+ # peoplesoft
2
+
3
+ ## Client
4
+
5
+ - Employee:
6
+ `searchEmployeesQueryOptions`
7
+ `employeesQueryOptions`
8
+ `activeEmployeesQueryOptions`
9
+ `employeeByEmployeeIdQueryOptions`
10
+ `previousEmployeeIdsQueryOptions`
11
+ `employeeSupervisorQueryOptions`
12
+ `employeeSubordinatesQueryOptions`
13
+ `employeeManagerQueryOptions`
14
+ `employeeGeneralManagerQueryOptions`
15
+ `companyGeneralManagerQueryOptions`
16
+ - Department:
17
+ `departmentsQueryOptions`
18
+ `departmentByIdQueryOptions`
19
+ `departmentManagerQueryOptions`
20
+ `departmentEmployeesQueryOptions`
21
+
22
+ ## Server
23
+
24
+ - Employee:
25
+ `searchEmployees`
26
+ `getEmployees`
27
+ `getActiveEmployees`
28
+ `getEmployeeByEmployeeId`
29
+ `getPreviousEmployeeIds`
30
+ `getEmployeeSupervisor`
31
+ `getEmployeeSubordinates`
32
+ `getEmployeeManager`
33
+ `getEmployeeGeneralManager`
34
+ `getCompanyGeneralManager`
35
+ - Department:
36
+ `getDepartments`
37
+ `getDepartmentById`
38
+ `getDepartmentManager`
39
+ `getDepartmentEmployees`
40
+
41
+ ## Schemas/Models
42
+
43
+ ```ts
44
+ const EmployeeSchema = z.object({
45
+ badgeId: z.string().trim(),
46
+ category: z.string().trim(),
47
+ categoryGroup: EmployeeCategoryGroup,
48
+ companyCode: z.string().trim(),
49
+ contactPhone: z.string().trim(),
50
+ departmentId: z.string().trim(),
51
+ departmentDescription: z.string().trim(),
52
+ emailString: z.string().trim(),
53
+ employeeId: z.string().trim(),
54
+ extensionNumber: z.string().trim(),
55
+ firstName: z.string().trim(),
56
+ gender: z.string().trim(),
57
+ hiredDate: z.date(),
58
+ lastName: z.string().trim(),
59
+ managerId: z.string().trim(),
60
+ middleName: z.string().trim(),
61
+ name: z.string().trim(),
62
+ nameTitleCase: z.string().trim(),
63
+ nfcSn: z.string().trim(),
64
+ plantId: z.string().trim(),
65
+ position: z.string().trim(),
66
+ previousEmployeeIds: z.string().trim().nullable(),
67
+ reHiredDate: z.date().nullable(),
68
+ recordNumber: z.number(),
69
+ status: EmployeeStatus,
70
+ supervisorId: z.string().trim(),
71
+ terminationDate: z.date().nullable(),
72
+ terminationFutureDate: z.date().nullable(),
73
+ type: z.string().trim(),
74
+ upperDepartmentId: z.string().trim(),
75
+ jobCode: z.string().trim(),
76
+ jobDescription: z.string().trim(),
77
+ terminationReason: z.string().trim().nullable(),
78
+ supervisorRecordNumber: z.number(),
79
+ });
80
+
81
+ const DepartmentSchema = z.object({
82
+ departmentId: z.string().trim(),
83
+ description: z.string().trim(),
84
+ managerId: z.string().trim(),
85
+ managerRecordNumber: z.string().trim(),
86
+ treeLevel: z.number(),
87
+ upperDepartmentId: z.string().trim(),
88
+ companyCode: z.string().trim(),
89
+ location: z.string().trim(),
90
+ salLocation: z.string().trim(),
91
+ plantId: z.string().trim(),
92
+ manager: EmployeeSchema,
93
+ });
94
+
95
+ const EmployeeCategoryGroup = z.enum(["IDL", "FD", "FI"]);
96
+ const EmployeeStatus = z.enum(["Active", "Terminated", "Leave of Absence"]);
97
+ ```
98
+
99
+ ## Examples
100
+
101
+ ```ts
102
+ import { activeEmployeesQueryOptions } from "wcz-layout/data/client";
103
+ import { getEmployeeManager } from "wcz-layout/data/server";
104
+
105
+ // client
106
+ const { data: employees = [] } = useQuery(activeEmployeesQueryOptions());
107
+
108
+ // server
109
+ const manager = await getEmployeeManager({ data: { employeeId } });
110
+ ```
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: start
3
+ description: "Use when: bootstrapping a freshly downloaded template into a real project — git remote, project name, APM registration, database, Entra ID, Vault, favicon, and first commit."
4
+ ---
5
+
6
+ # Project Initialization Orchestrator
7
+
8
+ ## Role
9
+
10
+ You are an AI assistant helping a developer bootstrap a new project from this template.
11
+
12
+ ## Execution Rules
13
+
14
+ - Execute steps in order. Read **only** the current step file.
15
+ - Pause whenever a step requires user input or a terminal command to finish.
16
+ - Do not skip ahead or batch multiple steps.
17
+ - When a step has branches (yes/no), follow only the matching branch.
18
+ - To read a step, open the linked file in the **File** column directly.
19
+
20
+ ## Opening Message
21
+
22
+ Begin every conversation with:
23
+
24
+ > To make initialization flexible, you can choose:
25
+ >
26
+ > - ✅ **Full initialization** (recommended for new projects)
27
+ > - ✅ **Partial / custom steps** (select specific steps below)
28
+
29
+ Then list all steps by name so the user can pick.
30
+
31
+ ## Steps
32
+
33
+ | # | File | Summary |
34
+ | --- | ---------------------------------------------------------- | ------------------------------- |
35
+ | 1 | [01-git-setup.md](steps/01-git-setup.md) | Configure remote and branch |
36
+ | 2 | [02-project-name-setup.md](steps/02-project-name-setup.md) | Replace placeholder names |
37
+ | 3 | [03-apm-setup.md](steps/03-apm-setup.md) | Register the app internally |
38
+ | 4 | [04-database-setup.md](steps/04-database-setup.md) | Postgres via Docker or existing |
39
+ | 5 | [05-entra-setup.md](steps/05-entra-setup.md) | Azure AD app registration |
40
+ | 6 | [06-vault-setup.md](steps/06-vault-setup.md) | Vault secrets configuration |
41
+ | 7 | [07-generate-favicon.md](steps/07-generate-favicon.md) | Generate and replace favicon |
42
+ | 8 | [08-commit.md](steps/08-commit.md) | Commit and push to origin |
43
+
44
+ ## Completion
45
+
46
+ After step 8 succeeds, the workflow ends — no further action needed.
@@ -0,0 +1,11 @@
1
+ # Git Setup
2
+
3
+ ## Actions
4
+
5
+ 1. Run `git remote -v`.
6
+ - **No remote exists** → ask for the repository URL, then run `git remote add origin <url>`.
7
+ - **Remote exists** → continue.
8
+ 2. Run `git branch --show-current`.
9
+ - **Not `master`** → run `git branch -M master`.
10
+ - **Already `master`** → continue.
11
+ 3. Run `npx vp config` to install the Git hooks (pre-commit checks + automatic version bump). Running it again is a safe no-op.
@@ -0,0 +1,14 @@
1
+ # Project Name Setup
2
+
3
+ ## User Input
4
+
5
+ Ask: **"What is your project name?"**
6
+
7
+ ## Actions
8
+
9
+ Once provided, search-and-replace across the **entire workspace**:
10
+
11
+ | Find | Replace with |
12
+ | -------------- | -------------------------------------- |
13
+ | `project-name` | kebab-case version (e.g. `user-input`) |
14
+ | `Project Name` | Title Case version (e.g. `User Input`) |