wcz-layout 6.7.2 → 8.3.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 (269) hide show
  1. package/dist/Approval-BTJTexDo.js +143 -0
  2. package/dist/Approval-BTJTexDo.js.map +1 -0
  3. package/dist/DialogsContext-DLqA8RJ_.js +7 -0
  4. package/dist/DialogsContext-DLqA8RJ_.js.map +1 -0
  5. package/dist/Email-C9qwj7GD.js +20 -0
  6. package/dist/Email-C9qwj7GD.js.map +1 -0
  7. package/dist/FileMeta-DDqUju1Y.js +19 -0
  8. package/dist/FileMeta-DDqUju1Y.js.map +1 -0
  9. package/dist/FileMeta-ILLTOjaM.d.ts +20 -0
  10. package/dist/NotificationContext-CgwUOeW0.js +7 -0
  11. package/dist/NotificationContext-CgwUOeW0.js.map +1 -0
  12. package/dist/RouterListItemButton-owZVvuC_.js +78 -0
  13. package/dist/RouterListItemButton-owZVvuC_.js.map +1 -0
  14. package/dist/User-CT_IDGuG.d.ts +15 -0
  15. package/dist/apiMiddleware-CtY4rOFU.js +23 -0
  16. package/dist/apiMiddleware-CtY4rOFU.js.map +1 -0
  17. package/dist/components.d.ts +118 -0
  18. package/dist/components.js +1554 -0
  19. package/dist/components.js.map +1 -0
  20. package/dist/data/client.d.ts +3111 -0
  21. package/dist/data/client.js +188 -0
  22. package/dist/data/client.js.map +1 -0
  23. package/dist/data/server.d.ts +19 -0
  24. package/dist/data/server.js +16 -0
  25. package/dist/data/server.js.map +1 -0
  26. package/dist/data.d.ts +7 -0
  27. package/dist/data.js +2 -0
  28. package/dist/env-ON-cyE3N.js +31 -0
  29. package/dist/env-ON-cyE3N.js.map +1 -0
  30. package/dist/file-BUdLb7H1.js +148 -0
  31. package/dist/file-BUdLb7H1.js.map +1 -0
  32. package/dist/file-Dsht7yOP.js +100 -0
  33. package/dist/file-Dsht7yOP.js.map +1 -0
  34. package/dist/hooks.d.ts +226 -0
  35. package/dist/hooks.js +1180 -0
  36. package/dist/hooks.js.map +1 -0
  37. package/dist/index.d.ts +50 -0
  38. package/dist/index.js +2106 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/middleware.d.ts +47 -0
  41. package/dist/middleware.js +80 -0
  42. package/dist/middleware.js.map +1 -0
  43. package/dist/models.d.ts +474 -0
  44. package/dist/models.js +74 -0
  45. package/dist/models.js.map +1 -0
  46. package/dist/msalClient-CYiQAFnY.d.ts +15 -0
  47. package/dist/msalServer-B9sVqpQ2.js +47 -0
  48. package/dist/msalServer-B9sVqpQ2.js.map +1 -0
  49. package/dist/peoplesoft-BCjRje6b.js +240 -0
  50. package/dist/peoplesoft-BCjRje6b.js.map +1 -0
  51. package/dist/peoplesoft-Cze2ngGd.d.ts +1150 -0
  52. package/dist/queryClient-D64McLhZ.js +7 -0
  53. package/dist/queryClient-D64McLhZ.js.map +1 -0
  54. package/dist/useDialogs-BJVhBr8S.js +248 -0
  55. package/dist/useDialogs-BJVhBr8S.js.map +1 -0
  56. package/dist/utils-BMUmv2ws.js +191 -0
  57. package/dist/utils-BMUmv2ws.js.map +1 -0
  58. package/dist/utils-CvvyM8Xw.d.ts +56 -0
  59. package/dist/utils.d.ts +21 -0
  60. package/dist/utils.js +6 -0
  61. package/dist/vite.d.ts +7 -0
  62. package/dist/vite.js +147 -0
  63. package/dist/vite.js.map +1 -0
  64. package/package.json +158 -62
  65. package/skills/client-db/SKILL.md +107 -0
  66. package/skills/data-grid/SKILL.md +147 -0
  67. package/skills/db-schema/SKILL.md +68 -0
  68. package/skills/dialogs/SKILL.md +79 -0
  69. package/skills/forms/SKILL.md +82 -0
  70. package/skills/general/SKILL.md +17 -0
  71. package/skills/notifications/SKILL.md +43 -0
  72. package/skills/routing/SKILL.md +123 -0
  73. package/skills/server-functions/SKILL.md +109 -0
  74. package/skills/services/SKILL.md +28 -0
  75. package/skills/services/docs/approval.md +204 -0
  76. package/skills/services/docs/email.md +32 -0
  77. package/skills/services/docs/file.md +85 -0
  78. package/skills/services/docs/peoplesoft.md +110 -0
  79. package/skills/start/SKILL.md +46 -0
  80. package/skills/start/steps/01-git-setup.md +10 -0
  81. package/skills/start/steps/02-project-name-setup.md +14 -0
  82. package/skills/start/steps/03-apm-setup.md +208 -0
  83. package/skills/start/steps/04-database-setup.md +37 -0
  84. package/skills/start/steps/05-entra-setup.md +59 -0
  85. package/skills/start/steps/06-vault-setup.md +53 -0
  86. package/skills/start/steps/07-generate-favicon.md +10 -0
  87. package/skills/start/steps/08-commit.md +15 -0
  88. package/dist/src/components/Layout.d.ts +0 -16
  89. package/dist/src/components/Layout.js +0 -122
  90. package/dist/src/components/Layout.js.map +0 -1
  91. package/dist/src/components/dataGrid/ChipInputCell.d.ts +0 -9
  92. package/dist/src/components/dataGrid/ChipInputCell.js +0 -17
  93. package/dist/src/components/dataGrid/ChipInputCell.js.map +0 -1
  94. package/dist/src/components/dataGrid/EditableColumnHeader.d.ts +0 -2
  95. package/dist/src/components/dataGrid/EditableColumnHeader.js +0 -7
  96. package/dist/src/components/dataGrid/EditableColumnHeader.js.map +0 -1
  97. package/dist/src/components/dataGrid/GridToolbar.d.ts +0 -8
  98. package/dist/src/components/dataGrid/GridToolbar.js +0 -40
  99. package/dist/src/components/dataGrid/GridToolbar.js.map +0 -1
  100. package/dist/src/components/dataGrid/TableContainer.d.ts +0 -3
  101. package/dist/src/components/dataGrid/TableContainer.js +0 -32
  102. package/dist/src/components/dataGrid/TableContainer.js.map +0 -1
  103. package/dist/src/components/form/FormAutocomplete.d.ts +0 -7
  104. package/dist/src/components/form/FormAutocomplete.js +0 -10
  105. package/dist/src/components/form/FormAutocomplete.js.map +0 -1
  106. package/dist/src/components/form/FormCheckbox.d.ts +0 -7
  107. package/dist/src/components/form/FormCheckbox.js +0 -11
  108. package/dist/src/components/form/FormCheckbox.js.map +0 -1
  109. package/dist/src/components/form/FormDatePicker.d.ts +0 -9
  110. package/dist/src/components/form/FormDatePicker.js +0 -19
  111. package/dist/src/components/form/FormDatePicker.js.map +0 -1
  112. package/dist/src/components/form/FormDateTimePicker.d.ts +0 -9
  113. package/dist/src/components/form/FormDateTimePicker.js +0 -19
  114. package/dist/src/components/form/FormDateTimePicker.js.map +0 -1
  115. package/dist/src/components/form/FormNumberField.d.ts +0 -12
  116. package/dist/src/components/form/FormNumberField.js +0 -12
  117. package/dist/src/components/form/FormNumberField.js.map +0 -1
  118. package/dist/src/components/form/FormRadioGroup.d.ts +0 -13
  119. package/dist/src/components/form/FormRadioGroup.js +0 -11
  120. package/dist/src/components/form/FormRadioGroup.js.map +0 -1
  121. package/dist/src/components/form/FormSlider.d.ts +0 -7
  122. package/dist/src/components/form/FormSlider.js +0 -11
  123. package/dist/src/components/form/FormSlider.js.map +0 -1
  124. package/dist/src/components/form/FormSubmitButton.d.ts +0 -5
  125. package/dist/src/components/form/FormSubmitButton.js +0 -13
  126. package/dist/src/components/form/FormSubmitButton.js.map +0 -1
  127. package/dist/src/components/form/FormSwitch.d.ts +0 -7
  128. package/dist/src/components/form/FormSwitch.js +0 -11
  129. package/dist/src/components/form/FormSwitch.js.map +0 -1
  130. package/dist/src/components/form/FormTextField.d.ts +0 -7
  131. package/dist/src/components/form/FormTextField.js +0 -11
  132. package/dist/src/components/form/FormTextField.js.map +0 -1
  133. package/dist/src/components/layout/AccountMenu.d.ts +0 -9
  134. package/dist/src/components/layout/AccountMenu.js +0 -44
  135. package/dist/src/components/layout/AccountMenu.js.map +0 -1
  136. package/dist/src/components/layout/DevelopmentBanner.d.ts +0 -7
  137. package/dist/src/components/layout/DevelopmentBanner.js +0 -29
  138. package/dist/src/components/layout/DevelopmentBanner.js.map +0 -1
  139. package/dist/src/components/layout/ErrorPage.d.ts +0 -2
  140. package/dist/src/components/layout/ErrorPage.js +0 -25
  141. package/dist/src/components/layout/ErrorPage.js.map +0 -1
  142. package/dist/src/components/layout/LayoutDialog.d.ts +0 -12
  143. package/dist/src/components/layout/LayoutDialog.js +0 -12
  144. package/dist/src/components/layout/LayoutDialog.js.map +0 -1
  145. package/dist/src/components/layout/LayoutSnackbar.d.ts +0 -8
  146. package/dist/src/components/layout/LayoutSnackbar.js +0 -25
  147. package/dist/src/components/layout/LayoutSnackbar.js.map +0 -1
  148. package/dist/src/components/layout/NavigationDrawer.d.ts +0 -11
  149. package/dist/src/components/layout/NavigationDrawer.js +0 -70
  150. package/dist/src/components/layout/NavigationDrawer.js.map +0 -1
  151. package/dist/src/components/layout/NotificationMenu.d.ts +0 -8
  152. package/dist/src/components/layout/NotificationMenu.js +0 -26
  153. package/dist/src/components/layout/NotificationMenu.js.map +0 -1
  154. package/dist/src/components/layout/TypographyWithIcon.d.ts +0 -7
  155. package/dist/src/components/layout/TypographyWithIcon.js +0 -22
  156. package/dist/src/components/layout/TypographyWithIcon.js.map +0 -1
  157. package/dist/src/components/layout/Unauthorized.d.ts +0 -2
  158. package/dist/src/components/layout/Unauthorized.js +0 -26
  159. package/dist/src/components/layout/Unauthorized.js.map +0 -1
  160. package/dist/src/contexts/LayoutContext.d.ts +0 -40
  161. package/dist/src/contexts/LayoutContext.js +0 -60
  162. package/dist/src/contexts/LayoutContext.js.map +0 -1
  163. package/dist/src/contexts/UserContext.d.ts +0 -24
  164. package/dist/src/contexts/UserContext.js +0 -55
  165. package/dist/src/contexts/UserContext.js.map +0 -1
  166. package/dist/src/hooks/FormHooks.d.ts +0 -46
  167. package/dist/src/hooks/FormHooks.js +0 -31
  168. package/dist/src/hooks/FormHooks.js.map +0 -1
  169. package/dist/src/hooks/UseSnackbar.d.ts +0 -10
  170. package/dist/src/hooks/UseSnackbar.js +0 -23
  171. package/dist/src/hooks/UseSnackbar.js.map +0 -1
  172. package/dist/src/hooks/UseUser.d.ts +0 -10
  173. package/dist/src/hooks/UseUser.js +0 -25
  174. package/dist/src/hooks/UseUser.js.map +0 -1
  175. package/dist/src/index.d.ts +0 -20
  176. package/dist/src/index.js +0 -15
  177. package/dist/src/index.js.map +0 -1
  178. package/dist/src/models/Error.d.ts +0 -6
  179. package/dist/src/models/Error.js +0 -2
  180. package/dist/src/models/Error.js.map +0 -1
  181. package/dist/src/models/KeycloakSettings.d.ts +0 -8
  182. package/dist/src/models/KeycloakSettings.js +0 -2
  183. package/dist/src/models/KeycloakSettings.js.map +0 -1
  184. package/dist/src/models/LayoutPaletteColorOptions.d.ts +0 -6
  185. package/dist/src/models/LayoutPaletteColorOptions.js +0 -2
  186. package/dist/src/models/LayoutPaletteColorOptions.js.map +0 -1
  187. package/dist/src/models/LayoutRoute.d.ts +0 -14
  188. package/dist/src/models/LayoutRoute.js +0 -2
  189. package/dist/src/models/LayoutRoute.js.map +0 -1
  190. package/dist/src/models/Notification.d.ts +0 -9
  191. package/dist/src/models/Notification.js +0 -2
  192. package/dist/src/models/Notification.js.map +0 -1
  193. package/dist/src/models/PeoplesoftDepartment.d.ts +0 -14
  194. package/dist/src/models/PeoplesoftDepartment.js +0 -2
  195. package/dist/src/models/PeoplesoftDepartment.js.map +0 -1
  196. package/dist/src/models/PeoplesoftEmployee.d.ts +0 -34
  197. package/dist/src/models/PeoplesoftEmployee.js +0 -2
  198. package/dist/src/models/PeoplesoftEmployee.js.map +0 -1
  199. package/dist/src/models/Snackbar.d.ts +0 -15
  200. package/dist/src/models/Snackbar.js +0 -2
  201. package/dist/src/models/Snackbar.js.map +0 -1
  202. package/dist/src/models/User.d.ts +0 -27
  203. package/dist/src/models/User.js +0 -11
  204. package/dist/src/models/User.js.map +0 -1
  205. package/dist/src/models/types/EmployeeCategoryGroup.d.ts +0 -1
  206. package/dist/src/models/types/EmployeeCategoryGroup.js +0 -2
  207. package/dist/src/models/types/EmployeeCategoryGroup.js.map +0 -1
  208. package/dist/src/models/types/EmployeeStatus.d.ts +0 -1
  209. package/dist/src/models/types/EmployeeStatus.js +0 -2
  210. package/dist/src/models/types/EmployeeStatus.js.map +0 -1
  211. package/dist/src/utils/Auth.d.ts +0 -12
  212. package/dist/src/utils/Auth.js +0 -49
  213. package/dist/src/utils/Auth.js.map +0 -1
  214. package/dist/src/utils/Fetches.d.ts +0 -5
  215. package/dist/src/utils/Fetches.js +0 -66
  216. package/dist/src/utils/Fetches.js.map +0 -1
  217. package/dist/src/utils/FormUtils.d.ts +0 -7
  218. package/dist/src/utils/FormUtils.js +0 -9
  219. package/dist/src/utils/FormUtils.js.map +0 -1
  220. package/dist/src/utils/Helpers.d.ts +0 -11
  221. package/dist/src/utils/Helpers.js +0 -26
  222. package/dist/src/utils/Helpers.js.map +0 -1
  223. package/dist/tsconfig.tsbuildinfo +0 -1
  224. package/src/components/Layout.tsx +0 -183
  225. package/src/components/dataGrid/ChipInputCell.tsx +0 -31
  226. package/src/components/dataGrid/EditableColumnHeader.tsx +0 -7
  227. package/src/components/dataGrid/GridToolbar.tsx +0 -63
  228. package/src/components/dataGrid/TableContainer.tsx +0 -39
  229. package/src/components/form/FormAutocomplete.tsx +0 -34
  230. package/src/components/form/FormCheckbox.tsx +0 -32
  231. package/src/components/form/FormDatePicker.tsx +0 -34
  232. package/src/components/form/FormDateTimePicker.tsx +0 -34
  233. package/src/components/form/FormNumberField.tsx +0 -33
  234. package/src/components/form/FormRadioGroup.tsx +0 -43
  235. package/src/components/form/FormSlider.tsx +0 -28
  236. package/src/components/form/FormSubmitButton.tsx +0 -29
  237. package/src/components/form/FormSwitch.tsx +0 -32
  238. package/src/components/form/FormTextField.tsx +0 -26
  239. package/src/components/layout/AccountMenu.tsx +0 -160
  240. package/src/components/layout/DevelopmentBanner.tsx +0 -54
  241. package/src/components/layout/ErrorPage.tsx +0 -34
  242. package/src/components/layout/LayoutDialog.tsx +0 -50
  243. package/src/components/layout/LayoutSnackbar.tsx +0 -44
  244. package/src/components/layout/NavigationDrawer.tsx +0 -131
  245. package/src/components/layout/NotificationMenu.tsx +0 -76
  246. package/src/components/layout/TypographyWithIcon.tsx +0 -35
  247. package/src/components/layout/Unauthorized.tsx +0 -37
  248. package/src/contexts/LayoutContext.tsx +0 -127
  249. package/src/contexts/UserContext.tsx +0 -88
  250. package/src/hooks/FormHooks.ts +0 -33
  251. package/src/hooks/UseSnackbar.tsx +0 -28
  252. package/src/hooks/UseUser.tsx +0 -29
  253. package/src/index.ts +0 -27
  254. package/src/models/Error.tsx +0 -6
  255. package/src/models/KeycloakSettings.ts +0 -8
  256. package/src/models/LayoutPaletteColorOptions.tsx +0 -7
  257. package/src/models/LayoutRoute.ts +0 -15
  258. package/src/models/Notification.ts +0 -10
  259. package/src/models/PeoplesoftDepartment.ts +0 -15
  260. package/src/models/PeoplesoftEmployee.ts +0 -35
  261. package/src/models/Snackbar.ts +0 -16
  262. package/src/models/User.ts +0 -13
  263. package/src/models/types/EmployeeCategoryGroup.ts +0 -1
  264. package/src/models/types/EmployeeStatus.ts +0 -1
  265. package/src/utils/Auth.ts +0 -58
  266. package/src/utils/Fetches.ts +0 -83
  267. package/src/utils/FormUtils.ts +0 -22
  268. package/src/utils/Helpers.ts +0 -27
  269. package/tsconfig.json +0 -29
@@ -0,0 +1,204 @@
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 ApprovalCoRequestorSchema = z.object({
61
+ employeeId: z.string().trim().min(1).max(20),
62
+ name: z.string().trim().min(1).max(50),
63
+ email: z.email().min(1).max(100),
64
+ });
65
+
66
+ const ApprovalFlowStepSchema = z.object({
67
+ id: z.uuid(),
68
+ order: z.number(),
69
+ approverRole: z.string().trim().min(1).max(100).default("Approver").optional(),
70
+ approver: ApprovalEmployeeSchema,
71
+ actualApprover: ApprovalEmployeeSchema.optional(),
72
+ result: ApprovalStepResult.default("NotAvailable").optional(),
73
+ resultDate: z.date().optional(),
74
+ resultComment: z.string().trim().max(2000).optional(),
75
+ });
76
+
77
+ const ApprovalFlowSchema = z.object({
78
+ id: z.uuid(),
79
+ approvalStage: z.number(),
80
+ batchSequence: z.number().optional(),
81
+ approvalSequence: z.number(),
82
+ stepApprovalOrder: StepApprovalOrder,
83
+ steps: z.array(ApprovalFlowStepSchema),
84
+ isActive: z.boolean().default(false).optional(),
85
+ });
86
+
87
+ const ApprovalCoRequestorGroupSchema = z.object({
88
+ role: z.string().trim().min(1),
89
+ email: z.email().optional(),
90
+ });
91
+
92
+ const ApprovalCoRequestorEmployeeSchema = z.object({
93
+ employeeId: z.string().trim().min(1),
94
+ name: z.string().trim().min(1),
95
+ email: z.email().optional(),
96
+ });
97
+
98
+ const ApprovalCoRequestorPrincipalSchema = z.union([
99
+ ApprovalCoRequestorGroupSchema,
100
+ ApprovalCoRequestorEmployeeSchema,
101
+ ]);
102
+
103
+ const ApprovalSchema = z.object({
104
+ id: z.uuid(),
105
+ number: z.string().trim().max(30).optional(),
106
+ applicationName: z.string().trim().min(1).max(50),
107
+ type: ApprovalRequestType.default("Single").optional(),
108
+ status: ApprovalStatus,
109
+ created: z.date(),
110
+ createdBy: z.custom<ApprovalEmployee>(),
111
+ updated: z.date().optional(),
112
+ updatedBy: z.custom<ApprovalEmployee>().optional(),
113
+ approvalFlows: z.array(ApprovalFlow).min(1),
114
+ currentApprovers: z.array(ApprovalEmployee),
115
+ coRequestors: z
116
+ .array(z.object({ id: z.uuid(), principal: ApprovalCoRequestorPrincipalSchema }))
117
+ .optional(),
118
+ });
119
+
120
+ const GetApprovalsSchema = z.object({
121
+ appName: z.string().min(1).max(255),
122
+ status: ApprovalStatus.optional(),
123
+ approverEmployeeId: z.string().min(1).max(20).optional(),
124
+ stepResult: ApprovalStepResult.optional(),
125
+ });
126
+
127
+ const GetApprovalSchema = z.object({
128
+ id: z.uuid(),
129
+ });
130
+
131
+ const CreateApprovalSchema = ApprovalSchema.pick({
132
+ id: true,
133
+ number: true,
134
+ applicationName: true,
135
+ type: true,
136
+ status: true,
137
+ approvalFlows: true,
138
+ }).extend({
139
+ emailBody: z.string().trim().min(1),
140
+ approvalFlows: z
141
+ .array(
142
+ ApprovalFlowSchema.pick({
143
+ approvalStage: true,
144
+ batchSequence: true,
145
+ stepApprovalOrder: true,
146
+ steps: true,
147
+ }).extend({
148
+ steps: z.array(ApprovalFlowStepSchema.pick({ approverRole: true, approver: true })),
149
+ }),
150
+ )
151
+ .min(1),
152
+ coRequestors: z.array(ApprovalCoRequestorPrincipalSchema).optional(),
153
+ });
154
+
155
+ const ApproveApprovalSchema = z.object({
156
+ id: z.uuid(),
157
+ result: ApprovalStepResult,
158
+ resultComment: z.string().trim().max(2000).optional(),
159
+ emailBody: z.string().trim().min(1),
160
+ });
161
+
162
+ const ResubmitApprovalSchema = ApprovalSchema.pick({
163
+ id: true,
164
+ approvalFlows: true,
165
+ }).extend({
166
+ approvalFlows: z
167
+ .array(
168
+ ApprovalFlowSchema.pick({
169
+ approvalStage: true,
170
+ batchSequence: true,
171
+ stepApprovalOrder: true,
172
+ steps: true,
173
+ }).extend({
174
+ steps: z.array(ApprovalFlowStepSchema.pick({ approverRole: true, approver: true })),
175
+ }),
176
+ )
177
+ .min(1),
178
+ });
179
+
180
+ const CancelApprovalSchema = z.object({
181
+ id: z.uuid(),
182
+ comment: z.string().trim().min(1).max(2000),
183
+ emailBody: z.string().trim().min(1),
184
+ });
185
+
186
+ const WithdrawApprovalSchema = z.object({
187
+ id: z.uuid(),
188
+ comment: z.string().trim().min(1).max(2000),
189
+ emailBody: z.string().trim().min(1),
190
+ });
191
+ ```
192
+
193
+ ## Examples
194
+
195
+ ```ts
196
+ import { approvalQueryOptions } from "wcz-layout/data/client";
197
+ import { approveApproval } from "wcz-layout/data/server";
198
+
199
+ // client
200
+ const { data: approval } = useQuery(approvalQueryOptions({ id }));
201
+
202
+ // server
203
+ await approveApproval({ data: { id, result: "Approved", emailBody } });
204
+ ```
@@ -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,85 @@
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
+ - Hooks:
16
+ `useUploadFile`
17
+
18
+ ## Server
19
+
20
+ - Fetch:
21
+ `getFileMetas`
22
+ `getFileThumbnail`
23
+ `getFile`
24
+ `downloadFile`.
25
+ - Mutate:
26
+ `updateFileMeta`
27
+ `deleteFile`
28
+ `batchDeleteFiles`
29
+ `uploadFile`
30
+
31
+ ## Schemas/Models
32
+
33
+ ```ts
34
+ const FileMetaSchema = z.object({
35
+ id: z.uuid(),
36
+ subId: z.uuid(),
37
+ appName: z.string().trim().min(1).max(255),
38
+ fileName: z.string().trim().min(1).max(255),
39
+ fileExtension: z.string().trim().min(1).max(255),
40
+ fileSize: z.number().min(0),
41
+ mediaSubType: z.string().trim().min(1).max(255),
42
+ mediaType: z.string().trim().min(1).max(255),
43
+ mimeType: z.string().trim().min(1).max(255),
44
+ createdBy: z.string().trim().min(1).max(255),
45
+ createdDate: z.date(),
46
+ });
47
+
48
+ const FileActionsSchema = z.object({
49
+ download: z.boolean().optional(),
50
+ delete: z.boolean().optional(),
51
+ });
52
+
53
+ const GetFileMetasSchema = z.object({
54
+ appName: z.string().min(1).max(255),
55
+ subId: z.uuid(),
56
+ });
57
+
58
+ const FileSchema = z.object({
59
+ appName: z.string().min(1).max(255),
60
+ id: z.uuid(),
61
+ });
62
+
63
+ const UpdateFileMetaSchema = FileMetaSchema.extend({
64
+ fileName: z.string().min(1).max(255),
65
+ });
66
+
67
+ const UploadFileMetaSchema = z.object({
68
+ appName: z.string().min(1).max(255),
69
+ subId: z.uuid(),
70
+ file: z.instanceof(File),
71
+ });
72
+ ```
73
+
74
+ ## Examples
75
+
76
+ ```ts
77
+ import { fileMetasQueryOptions } from "wcz-layout/data/client";
78
+ import { uploadFile } from "wcz-layout/data/server";
79
+
80
+ // client
81
+ const { data: files = [] } = useQuery(fileMetasQueryOptions({ appName, subId }));
82
+
83
+ // server
84
+ await uploadFile({ data: { appName, subId, file } });
85
+ ```
@@ -0,0 +1,110 @@
1
+ # peoplesoft
2
+
3
+ ## Client
4
+
5
+ - Employee:
6
+ `employeesSearchQueryOptions`
7
+ `employeesQueryOptions`
8
+ `activeEmployeesQueryOptions`
9
+ `employeeByIdQueryOptions`
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: Initialize a new project from the standard template
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,10 @@
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.
@@ -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`) |