@btst/stack 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/dist/api/index.cjs +9 -1
  2. package/dist/api/index.d.cts +4 -4
  3. package/dist/api/index.d.mts +4 -4
  4. package/dist/api/index.d.ts +4 -4
  5. package/dist/api/index.mjs +9 -1
  6. package/dist/client/index.d.cts +2 -2
  7. package/dist/client/index.d.mts +2 -2
  8. package/dist/client/index.d.ts +2 -2
  9. package/dist/index.d.cts +1 -1
  10. package/dist/index.d.mts +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/UI.cjs +2 -2
  13. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/UI.mjs +2 -2
  14. package/dist/packages/stack/src/plugins/ai-chat/api/getters.cjs +42 -0
  15. package/dist/packages/stack/src/plugins/ai-chat/api/getters.mjs +39 -0
  16. package/dist/packages/stack/src/plugins/ai-chat/api/plugin.cjs +5 -0
  17. package/dist/packages/stack/src/plugins/ai-chat/api/plugin.mjs +5 -0
  18. package/dist/packages/stack/src/plugins/blog/api/getters.cjs +131 -0
  19. package/dist/packages/stack/src/plugins/blog/api/getters.mjs +127 -0
  20. package/dist/packages/stack/src/plugins/blog/api/plugin.cjs +9 -107
  21. package/dist/packages/stack/src/plugins/blog/api/plugin.mjs +9 -107
  22. package/dist/packages/stack/src/plugins/blog/client/plugin.cjs +1 -1
  23. package/dist/packages/stack/src/plugins/blog/client/plugin.mjs +1 -1
  24. package/dist/packages/stack/src/plugins/cms/api/getters.cjs +146 -0
  25. package/dist/packages/stack/src/plugins/cms/api/getters.mjs +138 -0
  26. package/dist/packages/stack/src/plugins/cms/api/plugin.cjs +560 -622
  27. package/dist/packages/stack/src/plugins/cms/api/plugin.mjs +559 -621
  28. package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.internal.cjs +1 -1
  29. package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.internal.mjs +1 -1
  30. package/dist/packages/stack/src/plugins/cms/client/hooks/cms-hooks.cjs +6 -3
  31. package/dist/packages/stack/src/plugins/cms/client/hooks/cms-hooks.mjs +6 -3
  32. package/dist/packages/stack/src/plugins/form-builder/api/getters.cjs +111 -0
  33. package/dist/packages/stack/src/plugins/form-builder/api/getters.mjs +104 -0
  34. package/dist/packages/stack/src/plugins/form-builder/api/plugin.cjs +16 -88
  35. package/dist/packages/stack/src/plugins/form-builder/api/plugin.mjs +12 -84
  36. package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.internal.cjs +1 -1
  37. package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.internal.mjs +1 -1
  38. package/dist/packages/stack/src/plugins/kanban/api/getters.cjs +84 -0
  39. package/dist/packages/stack/src/plugins/kanban/api/getters.mjs +81 -0
  40. package/dist/packages/stack/src/plugins/kanban/api/plugin.cjs +9 -123
  41. package/dist/packages/stack/src/plugins/kanban/api/plugin.mjs +9 -123
  42. package/dist/packages/stack/src/plugins/kanban/client/plugin.cjs +1 -1
  43. package/dist/packages/stack/src/plugins/kanban/client/plugin.mjs +1 -1
  44. package/dist/packages/ui/src/components/calendar.cjs +2 -2
  45. package/dist/packages/ui/src/components/calendar.mjs +2 -2
  46. package/dist/packages/ui/src/components/sonner.cjs +34 -0
  47. package/dist/packages/ui/src/components/sonner.mjs +32 -0
  48. package/dist/packages/ui/src/components/ui-builder/components/code-panel.cjs +3 -2
  49. package/dist/packages/ui/src/components/ui-builder/components/code-panel.mjs +3 -2
  50. package/dist/packages/ui/src/components/ui-builder/index.cjs +10 -4
  51. package/dist/packages/ui/src/components/ui-builder/index.mjs +10 -4
  52. package/dist/packages/ui/src/components/ui-builder/internal/components/element-selector.cjs +22 -23
  53. package/dist/packages/ui/src/components/ui-builder/internal/components/element-selector.mjs +22 -23
  54. package/dist/packages/ui/src/components/ui-builder/internal/components/layer-context-menu-portal.cjs +261 -0
  55. package/dist/packages/ui/src/components/ui-builder/internal/components/layer-context-menu-portal.mjs +255 -0
  56. package/dist/packages/ui/src/components/ui-builder/internal/components/layer-context-menu.cjs +125 -0
  57. package/dist/packages/ui/src/components/ui-builder/internal/components/layer-context-menu.mjs +119 -0
  58. package/dist/packages/ui/src/components/ui-builder/internal/components/layer-menu.cjs +6 -17
  59. package/dist/packages/ui/src/components/ui-builder/internal/components/layer-menu.mjs +7 -18
  60. package/dist/packages/ui/src/components/ui-builder/internal/components/nav.cjs +23 -18
  61. package/dist/packages/ui/src/components/ui-builder/internal/components/nav.mjs +23 -18
  62. package/dist/packages/ui/src/components/ui-builder/internal/components/tree-row-node.cjs +8 -23
  63. package/dist/packages/ui/src/components/ui-builder/internal/components/tree-row-node.mjs +9 -24
  64. package/dist/packages/ui/src/components/ui-builder/internal/editor-panel.cjs +9 -41
  65. package/dist/packages/ui/src/components/ui-builder/internal/editor-panel.mjs +9 -41
  66. package/dist/packages/ui/src/components/ui-builder/internal/layers-panel.cjs +7 -16
  67. package/dist/packages/ui/src/components/ui-builder/internal/layers-panel.mjs +7 -16
  68. package/dist/packages/ui/src/components/ui-builder/internal/utils/render-utils.cjs +16 -11
  69. package/dist/packages/ui/src/components/ui-builder/internal/utils/render-utils.mjs +16 -11
  70. package/dist/packages/ui/src/components/ui-builder/internal/utils/templates.cjs +260 -20
  71. package/dist/packages/ui/src/components/ui-builder/internal/utils/templates.mjs +260 -20
  72. package/dist/packages/ui/src/components/ui-builder/internal/variables-panel.cjs +105 -17
  73. package/dist/packages/ui/src/components/ui-builder/internal/variables-panel.mjs +107 -19
  74. package/dist/packages/ui/src/components/ui-builder/layer-renderer.cjs +4 -2
  75. package/dist/packages/ui/src/components/ui-builder/layer-renderer.mjs +4 -2
  76. package/dist/packages/ui/src/hooks/use-keyboard-shortcuts.cjs +3 -1
  77. package/dist/packages/ui/src/hooks/use-keyboard-shortcuts.mjs +3 -1
  78. package/dist/packages/ui/src/lib/ui-builder/hooks/use-layer-actions.cjs +107 -0
  79. package/dist/packages/ui/src/lib/ui-builder/hooks/use-layer-actions.mjs +105 -0
  80. package/dist/packages/ui/src/lib/ui-builder/registry/form-field-overrides.cjs +9 -7
  81. package/dist/packages/ui/src/lib/ui-builder/registry/form-field-overrides.mjs +9 -7
  82. package/dist/packages/ui/src/lib/ui-builder/shortcuts/shortcut-registry.cjs +71 -0
  83. package/dist/packages/ui/src/lib/ui-builder/shortcuts/shortcut-registry.mjs +68 -0
  84. package/dist/packages/ui/src/lib/ui-builder/store/editor-store.cjs +48 -3
  85. package/dist/packages/ui/src/lib/ui-builder/store/editor-store.mjs +48 -3
  86. package/dist/packages/ui/src/lib/ui-builder/store/layer-store.cjs +4 -1
  87. package/dist/packages/ui/src/lib/ui-builder/store/layer-store.mjs +4 -1
  88. package/dist/packages/ui/src/lib/ui-builder/store/schema-utils.cjs +8 -0
  89. package/dist/packages/ui/src/lib/ui-builder/store/schema-utils.mjs +8 -1
  90. package/dist/packages/ui/src/lib/ui-builder/utils/paste-validation.cjs +25 -0
  91. package/dist/packages/ui/src/lib/ui-builder/utils/paste-validation.mjs +23 -0
  92. package/dist/packages/ui/src/lib/ui-builder/utils/variable-resolver.cjs +42 -3
  93. package/dist/packages/ui/src/lib/ui-builder/utils/variable-resolver.mjs +42 -3
  94. package/dist/plugins/ai-chat/api/index.cjs +3 -0
  95. package/dist/plugins/ai-chat/api/index.d.cts +27 -4
  96. package/dist/plugins/ai-chat/api/index.d.mts +27 -4
  97. package/dist/plugins/ai-chat/api/index.d.ts +27 -4
  98. package/dist/plugins/ai-chat/api/index.mjs +1 -0
  99. package/dist/plugins/ai-chat/client/hooks/index.d.cts +2 -2
  100. package/dist/plugins/ai-chat/client/hooks/index.d.mts +2 -2
  101. package/dist/plugins/ai-chat/client/hooks/index.d.ts +2 -2
  102. package/dist/plugins/ai-chat/query-keys.d.cts +9 -284
  103. package/dist/plugins/ai-chat/query-keys.d.mts +9 -284
  104. package/dist/plugins/ai-chat/query-keys.d.ts +9 -284
  105. package/dist/plugins/api/index.d.cts +4 -3
  106. package/dist/plugins/api/index.d.mts +4 -3
  107. package/dist/plugins/api/index.d.ts +4 -3
  108. package/dist/plugins/blog/api/index.cjs +4 -0
  109. package/dist/plugins/blog/api/index.d.cts +3 -2
  110. package/dist/plugins/blog/api/index.d.mts +3 -2
  111. package/dist/plugins/blog/api/index.d.ts +3 -2
  112. package/dist/plugins/blog/api/index.mjs +1 -0
  113. package/dist/plugins/blog/client/hooks/index.d.cts +6 -6
  114. package/dist/plugins/blog/client/hooks/index.d.mts +6 -6
  115. package/dist/plugins/blog/client/hooks/index.d.ts +6 -6
  116. package/dist/plugins/blog/client/index.d.cts +1 -1
  117. package/dist/plugins/blog/client/index.d.mts +1 -1
  118. package/dist/plugins/blog/client/index.d.ts +1 -1
  119. package/dist/plugins/blog/query-keys.cjs +7 -4
  120. package/dist/plugins/blog/query-keys.d.cts +81 -27
  121. package/dist/plugins/blog/query-keys.d.mts +81 -27
  122. package/dist/plugins/blog/query-keys.d.ts +81 -27
  123. package/dist/plugins/blog/query-keys.mjs +7 -4
  124. package/dist/plugins/client/index.d.cts +2 -2
  125. package/dist/plugins/client/index.d.mts +2 -2
  126. package/dist/plugins/client/index.d.ts +2 -2
  127. package/dist/plugins/cms/api/index.cjs +4 -0
  128. package/dist/plugins/cms/api/index.d.cts +61 -5
  129. package/dist/plugins/cms/api/index.d.mts +61 -5
  130. package/dist/plugins/cms/api/index.d.ts +61 -5
  131. package/dist/plugins/cms/api/index.mjs +1 -0
  132. package/dist/plugins/cms/client/hooks/index.d.cts +1 -1
  133. package/dist/plugins/cms/client/hooks/index.d.mts +1 -1
  134. package/dist/plugins/cms/client/hooks/index.d.ts +1 -1
  135. package/dist/plugins/cms/query-keys.d.cts +2 -1
  136. package/dist/plugins/cms/query-keys.d.mts +2 -1
  137. package/dist/plugins/cms/query-keys.d.ts +2 -1
  138. package/dist/plugins/form-builder/api/index.cjs +4 -0
  139. package/dist/plugins/form-builder/api/index.d.cts +77 -7
  140. package/dist/plugins/form-builder/api/index.d.mts +77 -7
  141. package/dist/plugins/form-builder/api/index.d.ts +77 -7
  142. package/dist/plugins/form-builder/api/index.mjs +1 -0
  143. package/dist/plugins/form-builder/client/components/index.d.cts +1 -1
  144. package/dist/plugins/form-builder/client/components/index.d.mts +1 -1
  145. package/dist/plugins/form-builder/client/components/index.d.ts +1 -1
  146. package/dist/plugins/form-builder/client/hooks/index.d.cts +1 -1
  147. package/dist/plugins/form-builder/client/hooks/index.d.mts +1 -1
  148. package/dist/plugins/form-builder/client/hooks/index.d.ts +1 -1
  149. package/dist/plugins/form-builder/query-keys.d.cts +2 -1
  150. package/dist/plugins/form-builder/query-keys.d.mts +2 -1
  151. package/dist/plugins/form-builder/query-keys.d.ts +2 -1
  152. package/dist/plugins/kanban/api/index.cjs +3 -0
  153. package/dist/plugins/kanban/api/index.d.cts +49 -52
  154. package/dist/plugins/kanban/api/index.d.mts +49 -52
  155. package/dist/plugins/kanban/api/index.d.ts +49 -52
  156. package/dist/plugins/kanban/api/index.mjs +1 -0
  157. package/dist/plugins/kanban/client/components/index.d.cts +1 -1
  158. package/dist/plugins/kanban/client/components/index.d.mts +1 -1
  159. package/dist/plugins/kanban/client/components/index.d.ts +1 -1
  160. package/dist/plugins/kanban/client/hooks/index.d.cts +1 -1
  161. package/dist/plugins/kanban/client/hooks/index.d.mts +1 -1
  162. package/dist/plugins/kanban/client/hooks/index.d.ts +1 -1
  163. package/dist/plugins/kanban/client/index.d.cts +1 -1
  164. package/dist/plugins/kanban/client/index.d.mts +1 -1
  165. package/dist/plugins/kanban/client/index.d.ts +1 -1
  166. package/dist/plugins/kanban/query-keys.cjs +4 -3
  167. package/dist/plugins/kanban/query-keys.d.cts +2 -1
  168. package/dist/plugins/kanban/query-keys.d.mts +2 -1
  169. package/dist/plugins/kanban/query-keys.d.ts +2 -1
  170. package/dist/plugins/kanban/query-keys.mjs +4 -3
  171. package/dist/plugins/open-api/api/index.d.cts +2 -2
  172. package/dist/plugins/open-api/api/index.d.mts +2 -2
  173. package/dist/plugins/open-api/api/index.d.ts +2 -2
  174. package/dist/plugins/route-docs/client/index.d.cts +1 -1
  175. package/dist/plugins/route-docs/client/index.d.mts +1 -1
  176. package/dist/plugins/route-docs/client/index.d.ts +1 -1
  177. package/dist/plugins/ui-builder/client/components/index.d.cts +1 -1
  178. package/dist/plugins/ui-builder/client/components/index.d.mts +1 -1
  179. package/dist/plugins/ui-builder/client/components/index.d.ts +1 -1
  180. package/dist/plugins/ui-builder/client/hooks/index.d.cts +2 -2
  181. package/dist/plugins/ui-builder/client/hooks/index.d.mts +2 -2
  182. package/dist/plugins/ui-builder/client/hooks/index.d.ts +2 -2
  183. package/dist/plugins/ui-builder/client/index.d.cts +16 -6
  184. package/dist/plugins/ui-builder/client/index.d.mts +16 -6
  185. package/dist/plugins/ui-builder/client/index.d.ts +16 -6
  186. package/dist/plugins/ui-builder/index.d.cts +3 -3
  187. package/dist/plugins/ui-builder/index.d.mts +3 -3
  188. package/dist/plugins/ui-builder/index.d.ts +3 -3
  189. package/dist/shared/{stack.DYCFcnkL.d.mts → stack.6fUOjLs9.d.mts} +1 -1
  190. package/dist/shared/{stack.BoA0xkJv.d.mts → stack.7n9Y_u7N.d.cts} +33 -7
  191. package/dist/shared/{stack.BoA0xkJv.d.cts → stack.7n9Y_u7N.d.mts} +33 -7
  192. package/dist/shared/{stack.BoA0xkJv.d.ts → stack.7n9Y_u7N.d.ts} +33 -7
  193. package/dist/shared/{stack.BdJFrdyt.d.cts → stack.B-YHz18S.d.cts} +2 -2
  194. package/dist/shared/stack.BeSm90va.d.ts +289 -0
  195. package/dist/shared/{stack.kFbDspnF.d.ts → stack.C-Ptrz8s.d.ts} +1 -1
  196. package/dist/shared/{stack.BYysGdHl.d.cts → stack.C-WUPMT6.d.cts} +1 -1
  197. package/dist/shared/{stack.DzH_wcvr.d.cts → stack.CIrIsc-A.d.cts} +2 -2
  198. package/dist/shared/{stack.DzH_wcvr.d.mts → stack.CIrIsc-A.d.mts} +2 -2
  199. package/dist/shared/{stack.DzH_wcvr.d.ts → stack.CIrIsc-A.d.ts} +2 -2
  200. package/dist/shared/stack.CMh_EdxW.d.cts +289 -0
  201. package/dist/shared/{stack.BsXokfNh.d.cts → stack.CXjzTMsb.d.cts} +1 -1
  202. package/dist/shared/{stack.BsXokfNh.d.mts → stack.CXjzTMsb.d.mts} +1 -1
  203. package/dist/shared/{stack.BsXokfNh.d.ts → stack.CXjzTMsb.d.ts} +1 -1
  204. package/dist/shared/{stack.ChVuHi5e.d.mts → stack.D1DMlJp-.d.mts} +2 -2
  205. package/dist/shared/stack.Dg09R0oB.d.mts +289 -0
  206. package/dist/shared/{stack.EhM4pmtN.d.ts → stack.GygI_T3X.d.ts} +2 -2
  207. package/dist/shared/{stack.DKDMI-QO.d.mts → stack.QD1y_7NY.d.cts} +7 -1
  208. package/dist/shared/{stack.DKDMI-QO.d.ts → stack.QD1y_7NY.d.mts} +7 -1
  209. package/dist/shared/{stack.DKDMI-QO.d.cts → stack.QD1y_7NY.d.ts} +7 -1
  210. package/package.json +1 -1
  211. package/src/__tests__/stack-api.test.ts +118 -0
  212. package/src/api/index.ts +15 -1
  213. package/src/plugins/ai-chat/__tests__/getters.test.ts +109 -0
  214. package/src/plugins/ai-chat/api/getters.ts +71 -0
  215. package/src/plugins/ai-chat/api/index.ts +1 -0
  216. package/src/plugins/ai-chat/api/plugin.ts +8 -0
  217. package/src/plugins/api/index.ts +3 -1
  218. package/src/plugins/blog/__tests__/getters.test.ts +540 -0
  219. package/src/plugins/blog/api/getters.ts +243 -0
  220. package/src/plugins/blog/api/index.ts +7 -0
  221. package/src/plugins/blog/api/plugin.ts +13 -141
  222. package/src/plugins/blog/client/plugin.tsx +2 -1
  223. package/src/plugins/blog/query-keys.ts +16 -13
  224. package/src/plugins/cms/__tests__/getters.test.ts +206 -0
  225. package/src/plugins/cms/api/getters.ts +244 -0
  226. package/src/plugins/cms/api/index.ts +5 -0
  227. package/src/plugins/cms/api/plugin.ts +50 -154
  228. package/src/plugins/cms/client/components/pages/content-editor-page.internal.tsx +1 -1
  229. package/src/plugins/cms/client/hooks/cms-hooks.tsx +3 -0
  230. package/src/plugins/cms/types.ts +1 -1
  231. package/src/plugins/form-builder/__tests__/getters.test.ts +159 -0
  232. package/src/plugins/form-builder/api/getters.ts +203 -0
  233. package/src/plugins/form-builder/api/index.ts +1 -0
  234. package/src/plugins/form-builder/api/plugin.ts +22 -115
  235. package/src/plugins/form-builder/client/components/pages/submissions-page.internal.tsx +1 -1
  236. package/src/plugins/form-builder/types.ts +2 -2
  237. package/src/plugins/kanban/__tests__/getters.test.ts +172 -0
  238. package/src/plugins/kanban/api/getters.ts +149 -0
  239. package/src/plugins/kanban/api/index.ts +1 -0
  240. package/src/plugins/kanban/api/plugin.ts +16 -146
  241. package/src/plugins/kanban/client/plugin.tsx +2 -1
  242. package/src/plugins/kanban/query-keys.ts +8 -5
  243. package/src/types.ts +44 -5
  244. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/DayPicker.cjs +0 -0
  245. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/DayPicker.mjs +0 -0
  246. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarDay.cjs +0 -0
  247. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarDay.mjs +0 -0
  248. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.cjs +0 -0
  249. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.mjs +0 -0
  250. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.cjs +0 -0
  251. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.mjs +0 -0
  252. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/DateLib.cjs +0 -0
  253. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/classes/DateLib.mjs +0 -0
  254. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Button.cjs +0 -0
  255. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Button.mjs +0 -0
  256. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/CaptionLabel.cjs +0 -0
  257. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/CaptionLabel.mjs +0 -0
  258. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Chevron.cjs +0 -0
  259. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Chevron.mjs +0 -0
  260. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Day.cjs +0 -0
  261. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Day.mjs +0 -0
  262. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DayButton.cjs +0 -0
  263. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DayButton.mjs +0 -0
  264. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Dropdown.cjs +0 -0
  265. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Dropdown.mjs +0 -0
  266. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DropdownNav.cjs +0 -0
  267. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/DropdownNav.mjs +0 -0
  268. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Footer.cjs +0 -0
  269. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Footer.mjs +0 -0
  270. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Month.cjs +0 -0
  271. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Month.mjs +0 -0
  272. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthCaption.cjs +0 -0
  273. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthCaption.mjs +0 -0
  274. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthGrid.cjs +0 -0
  275. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthGrid.mjs +0 -0
  276. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Months.cjs +0 -0
  277. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Months.mjs +0 -0
  278. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.cjs +0 -0
  279. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.mjs +0 -0
  280. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Nav.cjs +0 -0
  281. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Nav.mjs +0 -0
  282. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/NextMonthButton.cjs +0 -0
  283. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/NextMonthButton.mjs +0 -0
  284. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Option.cjs +0 -0
  285. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Option.mjs +0 -0
  286. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.cjs +0 -0
  287. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.mjs +0 -0
  288. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Root.cjs +0 -0
  289. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Root.mjs +0 -0
  290. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Select.cjs +0 -0
  291. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Select.mjs +0 -0
  292. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Week.cjs +0 -0
  293. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Week.mjs +0 -0
  294. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumber.cjs +0 -0
  295. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumber.mjs +0 -0
  296. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.cjs +0 -0
  297. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.mjs +0 -0
  298. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekday.cjs +0 -0
  299. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekday.mjs +0 -0
  300. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekdays.cjs +0 -0
  301. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weekdays.mjs +0 -0
  302. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weeks.cjs +0 -0
  303. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/Weeks.mjs +0 -0
  304. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/YearsDropdown.cjs +0 -0
  305. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/YearsDropdown.mjs +0 -0
  306. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/custom-components.cjs +0 -0
  307. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/components/custom-components.mjs +0 -0
  308. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatCaption.cjs +0 -0
  309. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatCaption.mjs +0 -0
  310. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatDay.cjs +0 -0
  311. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatDay.mjs +0 -0
  312. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.cjs +0 -0
  313. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.mjs +0 -0
  314. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.cjs +0 -0
  315. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.mjs +0 -0
  316. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.cjs +0 -0
  317. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.mjs +0 -0
  318. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.cjs +0 -0
  319. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.mjs +0 -0
  320. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.cjs +0 -0
  321. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.mjs +0 -0
  322. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/index.cjs +0 -0
  323. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/formatters/index.mjs +0 -0
  324. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.cjs +0 -0
  325. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.mjs +0 -0
  326. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.cjs +0 -0
  327. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.mjs +0 -0
  328. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.cjs +0 -0
  329. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.mjs +0 -0
  330. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.cjs +0 -0
  331. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.mjs +0 -0
  332. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.cjs +0 -0
  333. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.mjs +0 -0
  334. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getComponents.cjs +0 -0
  335. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getComponents.mjs +0 -0
  336. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.cjs +0 -0
  337. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.mjs +0 -0
  338. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDates.cjs +0 -0
  339. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDates.mjs +0 -0
  340. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDays.cjs +0 -0
  341. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDays.mjs +0 -0
  342. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.cjs +0 -0
  343. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.mjs +0 -0
  344. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.cjs +0 -0
  345. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.mjs +0 -0
  346. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.cjs +0 -0
  347. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.mjs +0 -0
  348. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFormatters.cjs +0 -0
  349. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getFormatters.mjs +0 -0
  350. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.cjs +0 -0
  351. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.mjs +0 -0
  352. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getLabels.cjs +0 -0
  353. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getLabels.mjs +0 -0
  354. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.cjs +0 -0
  355. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.mjs +0 -0
  356. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonths.cjs +0 -0
  357. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getMonths.mjs +0 -0
  358. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.cjs +0 -0
  359. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.mjs +0 -0
  360. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.cjs +0 -0
  361. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.mjs +0 -0
  362. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.cjs +0 -0
  363. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.mjs +0 -0
  364. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.cjs +0 -0
  365. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.mjs +0 -0
  366. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.cjs +0 -0
  367. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.mjs +0 -0
  368. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.cjs +0 -0
  369. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.mjs +0 -0
  370. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeeks.cjs +0 -0
  371. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getWeeks.mjs +0 -0
  372. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.cjs +0 -0
  373. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.mjs +0 -0
  374. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.cjs +0 -0
  375. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.mjs +0 -0
  376. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.cjs +0 -0
  377. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.mjs +0 -0
  378. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/index.cjs +0 -0
  379. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/index.mjs +0 -0
  380. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelDayButton.cjs +0 -0
  381. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelDayButton.mjs +0 -0
  382. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGrid.cjs +0 -0
  383. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGrid.mjs +0 -0
  384. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGridcell.cjs +0 -0
  385. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelGridcell.mjs +0 -0
  386. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.cjs +0 -0
  387. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.mjs +0 -0
  388. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNav.cjs +0 -0
  389. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNav.mjs +0 -0
  390. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNext.cjs +0 -0
  391. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelNext.mjs +0 -0
  392. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelPrevious.cjs +0 -0
  393. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelPrevious.mjs +0 -0
  394. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.cjs +0 -0
  395. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.mjs +0 -0
  396. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.cjs +0 -0
  397. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.mjs +0 -0
  398. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekday.cjs +0 -0
  399. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelWeekday.mjs +0 -0
  400. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.cjs +0 -0
  401. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.mjs +0 -0
  402. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/locale/en-US.cjs +0 -0
  403. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/locale/en-US.mjs +0 -0
  404. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/noonDateLib.cjs +0 -0
  405. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/noonDateLib.mjs +0 -0
  406. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useMulti.cjs +0 -0
  407. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useMulti.mjs +0 -0
  408. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useRange.cjs +0 -0
  409. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useRange.mjs +0 -0
  410. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useSingle.cjs +0 -0
  411. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/selection/useSingle.mjs +0 -0
  412. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useAnimation.cjs +0 -0
  413. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useAnimation.mjs +0 -0
  414. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useCalendar.cjs +0 -0
  415. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useCalendar.mjs +0 -0
  416. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useDayPicker.cjs +0 -0
  417. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useDayPicker.mjs +0 -0
  418. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useFocus.cjs +0 -0
  419. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useFocus.mjs +0 -0
  420. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useSelection.cjs +0 -0
  421. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/useSelection.mjs +0 -0
  422. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/addToRange.cjs +0 -0
  423. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/addToRange.mjs +0 -0
  424. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.cjs +0 -0
  425. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.mjs +0 -0
  426. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.cjs +0 -0
  427. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.mjs +0 -0
  428. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.cjs +0 -0
  429. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.mjs +0 -0
  430. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.cjs +0 -0
  431. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.mjs +0 -0
  432. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.cjs +0 -0
  433. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.mjs +0 -0
  434. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.cjs +0 -0
  435. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.mjs +0 -0
  436. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/toTimeZone.cjs +0 -0
  437. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/toTimeZone.mjs +0 -0
  438. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/typeguards.cjs +0 -0
  439. package/dist/node_modules/.pnpm/{react-day-picker@9.13.0_react@19.2.0 → react-day-picker@9.13.2_react@19.2.0}/node_modules/react-day-picker/dist/esm/utils/typeguards.mjs +0 -0
  440. package/dist/shared/{stack.CcI4sYJP.d.ts → stack.BkYlUT_8.d.cts} +6 -6
  441. package/dist/shared/{stack.CcI4sYJP.d.cts → stack.BkYlUT_8.d.mts} +6 -6
  442. package/dist/shared/{stack.CcI4sYJP.d.mts → stack.BkYlUT_8.d.ts} +6 -6
@@ -6,54 +6,8 @@ const schemaConverter = require('../../../../../ui/src/lib/schema-converter.cjs'
6
6
  const db = require('../db.cjs');
7
7
  const schemas = require('../schemas.cjs');
8
8
  const utils = require('../utils.cjs');
9
+ const getters = require('./getters.cjs');
9
10
 
10
- function migrateToUnifiedSchema(jsonSchemaStr, fieldConfigStr) {
11
- if (!fieldConfigStr) {
12
- return jsonSchemaStr;
13
- }
14
- try {
15
- const jsonSchema = JSON.parse(jsonSchemaStr);
16
- const fieldConfig = JSON.parse(fieldConfigStr);
17
- if (!jsonSchema.properties || typeof fieldConfig !== "object") {
18
- return jsonSchemaStr;
19
- }
20
- for (const [key, config] of Object.entries(fieldConfig)) {
21
- if (jsonSchema.properties[key] && typeof config === "object" && config !== null && "fieldType" in config) {
22
- jsonSchema.properties[key].fieldType = config.fieldType;
23
- }
24
- }
25
- return JSON.stringify(jsonSchema);
26
- } catch {
27
- return jsonSchemaStr;
28
- }
29
- }
30
- function serializeContentType(ct) {
31
- const needsMigration = !ct.autoFormVersion || ct.autoFormVersion < 2;
32
- const migratedJsonSchema = needsMigration ? migrateToUnifiedSchema(ct.jsonSchema, ct.fieldConfig) : ct.jsonSchema;
33
- return {
34
- id: ct.id,
35
- name: ct.name,
36
- slug: ct.slug,
37
- description: ct.description,
38
- jsonSchema: migratedJsonSchema,
39
- createdAt: ct.createdAt.toISOString(),
40
- updatedAt: ct.updatedAt.toISOString()
41
- };
42
- }
43
- function serializeContentItem(item) {
44
- return {
45
- ...item,
46
- createdAt: item.createdAt.toISOString(),
47
- updatedAt: item.updatedAt.toISOString()
48
- };
49
- }
50
- function serializeContentItemWithType(item) {
51
- return {
52
- ...serializeContentItem(item),
53
- parsedData: JSON.parse(item.data),
54
- contentType: item.contentType ? serializeContentType(item.contentType) : void 0
55
- };
56
- }
57
11
  async function syncContentTypes(adapter, config) {
58
12
  for (const ct of config.contentTypes) {
59
13
  const jsonSchema = JSON.stringify(schemaConverter.zodToFormSchema(ct.schema));
@@ -271,275 +225,178 @@ async function populateRelations(adapter, item) {
271
225
  join: { contentType: true }
272
226
  });
273
227
  if (relatedItem) {
274
- relatedItems.push(serializeContentItemWithType(relatedItem));
228
+ relatedItems.push(getters.serializeContentItemWithType(relatedItem));
275
229
  }
276
230
  }
277
231
  relations[fieldName] = relatedItems;
278
232
  }
279
233
  return relations;
280
234
  }
281
- const cmsBackendPlugin = (config) => api.defineBackendPlugin({
282
- name: "cms",
283
- dbPlugin: db.cmsSchema,
284
- routes: (adapter) => {
285
- let syncPromise = null;
286
- const ensureSynced = async () => {
287
- if (!syncPromise) {
288
- syncPromise = syncContentTypes(adapter, config).catch((err) => {
289
- syncPromise = null;
290
- throw err;
291
- });
292
- }
293
- await syncPromise;
294
- };
295
- const getContentType = async (slug) => {
296
- await ensureSynced();
297
- return adapter.findOne({
298
- model: "contentType",
299
- where: [{ field: "slug", value: slug, operator: "eq" }]
235
+ const cmsBackendPlugin = (config) => {
236
+ let syncPromise = null;
237
+ const ensureSynced = (adapter) => {
238
+ if (!syncPromise) {
239
+ syncPromise = syncContentTypes(adapter, config).catch((err) => {
240
+ syncPromise = null;
241
+ throw err;
300
242
  });
301
- };
302
- const createContext = (typeSlug, headers) => ({
303
- typeSlug,
304
- headers
305
- });
306
- const listContentTypes = api.createEndpoint(
307
- "/content-types",
308
- { method: "GET" },
309
- async (ctx) => {
310
- await ensureSynced();
311
- const contentTypes = await adapter.findMany({
312
- model: "contentType",
313
- sortBy: { field: "name", direction: "asc" }
314
- });
315
- const typesWithCounts = await Promise.all(
316
- contentTypes.map(async (ct) => {
317
- const items = await adapter.findMany({
318
- model: "contentItem",
319
- where: [
320
- {
321
- field: "contentTypeId",
322
- value: ct.id,
323
- operator: "eq"
324
- }
325
- ]
326
- });
327
- return {
328
- ...serializeContentType(ct),
329
- itemCount: items.length
330
- };
331
- })
332
- );
333
- return typesWithCounts;
334
- }
335
- );
336
- const getContentTypeBySlug = api.createEndpoint(
337
- "/content-types/:slug",
338
- {
339
- method: "GET",
340
- params: z.z.object({ slug: z.z.string() })
341
- },
342
- async (ctx) => {
343
- const { slug } = ctx.params;
344
- const contentType = await getContentType(slug);
345
- if (!contentType) {
346
- throw ctx.error(404, { message: "Content type not found" });
347
- }
348
- return serializeContentType(contentType);
349
- }
350
- );
351
- const listContentItems = api.createEndpoint(
352
- "/content/:typeSlug",
353
- {
354
- method: "GET",
355
- params: z.z.object({ typeSlug: z.z.string() }),
356
- query: schemas.listContentQuerySchema
243
+ }
244
+ return syncPromise;
245
+ };
246
+ return api.defineBackendPlugin({
247
+ name: "cms",
248
+ dbPlugin: db.cmsSchema,
249
+ api: (adapter) => ({
250
+ getAllContentTypes: async () => {
251
+ await ensureSynced(adapter);
252
+ return getters.getAllContentTypes(adapter);
357
253
  },
358
- async (ctx) => {
359
- const { typeSlug } = ctx.params;
360
- const { slug, limit, offset } = ctx.query;
361
- const contentType = await getContentType(typeSlug);
362
- if (!contentType) {
363
- throw ctx.error(404, { message: "Content type not found" });
364
- }
365
- const whereConditions = [
366
- {
367
- field: "contentTypeId",
368
- value: contentType.id,
369
- operator: "eq"
370
- }
371
- ];
372
- if (slug) {
373
- whereConditions.push({
374
- field: "slug",
375
- value: slug,
376
- operator: "eq"
377
- });
378
- }
379
- const allItems = await adapter.findMany({
380
- model: "contentItem",
381
- where: whereConditions
382
- });
383
- const total = allItems.length;
384
- const items = await adapter.findMany({
385
- model: "contentItem",
386
- where: whereConditions,
387
- limit,
388
- offset,
389
- sortBy: { field: "createdAt", direction: "desc" },
390
- join: { contentType: true }
391
- });
392
- return {
393
- items: items.map(serializeContentItemWithType),
394
- total,
395
- limit,
396
- offset
397
- };
398
- }
399
- );
400
- const getContentItem = api.createEndpoint(
401
- "/content/:typeSlug/:id",
402
- {
403
- method: "GET",
404
- params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() })
254
+ getAllContentItems: async (contentTypeSlug, params) => {
255
+ await ensureSynced(adapter);
256
+ return getters.getAllContentItems(adapter, contentTypeSlug, params);
405
257
  },
406
- async (ctx) => {
407
- const { typeSlug, id } = ctx.params;
408
- const contentType = await getContentType(typeSlug);
409
- if (!contentType) {
410
- throw ctx.error(404, { message: "Content type not found" });
411
- }
412
- const item = await adapter.findOne({
413
- model: "contentItem",
414
- where: [{ field: "id", value: id, operator: "eq" }],
415
- join: { contentType: true }
416
- });
417
- if (!item || item.contentTypeId !== contentType.id) {
418
- throw ctx.error(404, { message: "Content item not found" });
419
- }
420
- return serializeContentItemWithType(item);
258
+ getContentItemBySlug: async (contentTypeSlug, slug) => {
259
+ await ensureSynced(adapter);
260
+ return getters.getContentItemBySlug(adapter, contentTypeSlug, slug);
421
261
  }
422
- );
423
- const createContentItem = api.createEndpoint(
424
- "/content/:typeSlug",
425
- {
426
- method: "POST",
427
- params: z.z.object({ typeSlug: z.z.string() }),
428
- body: z.z.object({
429
- slug: z.z.string().min(1),
430
- // Use passthrough object instead of z.record(z.unknown()) due to Zod v4 bug
431
- data: z.z.object({}).passthrough()
432
- })
433
- },
434
- async (ctx) => {
435
- const { typeSlug } = ctx.params;
436
- const { slug: rawSlug, data } = ctx.body;
437
- const context = createContext(typeSlug, ctx.headers);
438
- const slug = utils.slugify(rawSlug);
439
- if (!slug) {
440
- throw ctx.error(400, {
441
- message: "Invalid slug: must contain at least one alphanumeric character"
442
- });
443
- }
444
- const contentType = await getContentType(typeSlug);
445
- if (!contentType) {
446
- throw ctx.error(404, { message: "Content type not found" });
447
- }
448
- const { processedData: dataWithResolvedRelations, relationIds } = await processRelationsInData(
449
- adapter,
450
- contentType,
451
- data,
452
- getContentType
453
- );
454
- const zodSchema = getContentTypeZodSchema(contentType);
455
- const validation = zodSchema.safeParse(dataWithResolvedRelations);
456
- if (!validation.success) {
457
- throw ctx.error(400, {
458
- message: "Validation failed",
459
- errors: validation.error.issues
460
- });
461
- }
462
- const existing = await adapter.findOne({
463
- model: "contentItem",
464
- where: [
465
- {
466
- field: "contentTypeId",
467
- value: contentType.id,
468
- operator: "eq"
469
- },
470
- { field: "slug", value: slug, operator: "eq" }
471
- ]
262
+ }),
263
+ routes: (adapter) => {
264
+ const getContentType = async (slug) => {
265
+ await ensureSynced(adapter);
266
+ return adapter.findOne({
267
+ model: "contentType",
268
+ where: [{ field: "slug", value: slug, operator: "eq" }]
472
269
  });
473
- if (existing) {
474
- throw ctx.error(409, {
475
- message: "Content item with this slug already exists"
270
+ };
271
+ const createContext = (typeSlug, headers) => ({
272
+ typeSlug,
273
+ headers
274
+ });
275
+ const listContentTypes = api.createEndpoint(
276
+ "/content-types",
277
+ { method: "GET" },
278
+ async (ctx) => {
279
+ await ensureSynced(adapter);
280
+ const contentTypes = await adapter.findMany({
281
+ model: "contentType",
282
+ sortBy: { field: "name", direction: "asc" }
476
283
  });
477
- }
478
- const processedData = validation.data;
479
- if (config.hooks?.onBeforeCreate) {
480
- const result = await config.hooks.onBeforeCreate(
481
- processedData,
482
- context
284
+ const typesWithCounts = await Promise.all(
285
+ contentTypes.map(async (ct) => {
286
+ const items = await adapter.findMany({
287
+ model: "contentItem",
288
+ where: [
289
+ {
290
+ field: "contentTypeId",
291
+ value: ct.id,
292
+ operator: "eq"
293
+ }
294
+ ]
295
+ });
296
+ return {
297
+ ...getters.serializeContentType(ct),
298
+ itemCount: items.length
299
+ };
300
+ })
483
301
  );
484
- if (result === false) {
485
- throw ctx.error(403, { message: "Create operation denied" });
302
+ return typesWithCounts;
303
+ }
304
+ );
305
+ const getContentTypeBySlug = api.createEndpoint(
306
+ "/content-types/:slug",
307
+ {
308
+ method: "GET",
309
+ params: z.z.object({ slug: z.z.string() })
310
+ },
311
+ async (ctx) => {
312
+ const { slug } = ctx.params;
313
+ const contentType = await getContentType(slug);
314
+ if (!contentType) {
315
+ throw ctx.error(404, { message: "Content type not found" });
486
316
  }
317
+ return getters.serializeContentType(contentType);
487
318
  }
488
- const item = await adapter.create({
489
- model: "contentItem",
490
- data: {
491
- contentTypeId: contentType.id,
492
- slug,
493
- data: JSON.stringify(processedData),
494
- createdAt: /* @__PURE__ */ new Date(),
495
- updatedAt: /* @__PURE__ */ new Date()
319
+ );
320
+ const listContentItems = api.createEndpoint(
321
+ "/content/:typeSlug",
322
+ {
323
+ method: "GET",
324
+ params: z.z.object({ typeSlug: z.z.string() }),
325
+ query: schemas.listContentQuerySchema
326
+ },
327
+ async (ctx) => {
328
+ const { typeSlug } = ctx.params;
329
+ const { slug, limit, offset } = ctx.query;
330
+ const contentType = await getContentType(typeSlug);
331
+ if (!contentType) {
332
+ throw ctx.error(404, { message: "Content type not found" });
496
333
  }
497
- });
498
- await syncRelations(adapter, item.id, relationIds);
499
- const serialized = serializeContentItem(item);
500
- if (config.hooks?.onAfterCreate) {
501
- await config.hooks.onAfterCreate(serialized, context);
334
+ return getters.getAllContentItems(adapter, typeSlug, { slug, limit, offset });
502
335
  }
503
- return {
504
- ...serialized,
505
- parsedData: processedData
506
- };
507
- }
508
- );
509
- const updateContentItem = api.createEndpoint(
510
- "/content/:typeSlug/:id",
511
- {
512
- method: "PUT",
513
- params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() }),
514
- body: z.z.object({
515
- slug: z.z.string().min(1).optional(),
516
- // Use passthrough object instead of z.record(z.unknown()) due to Zod v4 bug
517
- data: z.z.object({}).passthrough().optional()
518
- })
519
- },
520
- async (ctx) => {
521
- const { typeSlug, id } = ctx.params;
522
- const { slug: rawSlug, data } = ctx.body;
523
- const context = createContext(typeSlug, ctx.headers);
524
- const slug = rawSlug ? utils.slugify(rawSlug) : void 0;
525
- if (rawSlug && !slug) {
526
- throw ctx.error(400, {
527
- message: "Invalid slug: must contain at least one alphanumeric character"
336
+ );
337
+ const getContentItem = api.createEndpoint(
338
+ "/content/:typeSlug/:id",
339
+ {
340
+ method: "GET",
341
+ params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() })
342
+ },
343
+ async (ctx) => {
344
+ const { typeSlug, id } = ctx.params;
345
+ const contentType = await getContentType(typeSlug);
346
+ if (!contentType) {
347
+ throw ctx.error(404, { message: "Content type not found" });
348
+ }
349
+ const item = await adapter.findOne({
350
+ model: "contentItem",
351
+ where: [{ field: "id", value: id, operator: "eq" }],
352
+ join: { contentType: true }
528
353
  });
354
+ if (!item || item.contentTypeId !== contentType.id) {
355
+ throw ctx.error(404, { message: "Content item not found" });
356
+ }
357
+ return getters.serializeContentItemWithType(item);
529
358
  }
530
- const contentType = await getContentType(typeSlug);
531
- if (!contentType) {
532
- throw ctx.error(404, { message: "Content type not found" });
533
- }
534
- const existing = await adapter.findOne({
535
- model: "contentItem",
536
- where: [{ field: "id", value: id, operator: "eq" }]
537
- });
538
- if (!existing || existing.contentTypeId !== contentType.id) {
539
- throw ctx.error(404, { message: "Content item not found" });
540
- }
541
- if (slug && slug !== existing.slug) {
542
- const duplicate = await adapter.findOne({
359
+ );
360
+ const createContentItem = api.createEndpoint(
361
+ "/content/:typeSlug",
362
+ {
363
+ method: "POST",
364
+ params: z.z.object({ typeSlug: z.z.string() }),
365
+ body: z.z.object({
366
+ slug: z.z.string().min(1),
367
+ // Use passthrough object instead of z.record(z.unknown()) due to Zod v4 bug
368
+ data: z.z.object({}).passthrough()
369
+ })
370
+ },
371
+ async (ctx) => {
372
+ const { typeSlug } = ctx.params;
373
+ const { slug: rawSlug, data } = ctx.body;
374
+ const context = createContext(typeSlug, ctx.headers);
375
+ const slug = utils.slugify(rawSlug);
376
+ if (!slug) {
377
+ throw ctx.error(400, {
378
+ message: "Invalid slug: must contain at least one alphanumeric character"
379
+ });
380
+ }
381
+ const contentType = await getContentType(typeSlug);
382
+ if (!contentType) {
383
+ throw ctx.error(404, { message: "Content type not found" });
384
+ }
385
+ const { processedData: dataWithResolvedRelations, relationIds } = await processRelationsInData(
386
+ adapter,
387
+ contentType,
388
+ data,
389
+ getContentType
390
+ );
391
+ const zodSchema = getContentTypeZodSchema(contentType);
392
+ const validation = zodSchema.safeParse(dataWithResolvedRelations);
393
+ if (!validation.success) {
394
+ throw ctx.error(400, {
395
+ message: "Validation failed",
396
+ errors: validation.error.issues
397
+ });
398
+ }
399
+ const existing = await adapter.findOne({
543
400
  model: "contentItem",
544
401
  where: [
545
402
  {
@@ -550,367 +407,448 @@ const cmsBackendPlugin = (config) => api.defineBackendPlugin({
550
407
  { field: "slug", value: slug, operator: "eq" }
551
408
  ]
552
409
  });
553
- if (duplicate) {
410
+ if (existing) {
554
411
  throw ctx.error(409, {
555
412
  message: "Content item with this slug already exists"
556
413
  });
557
414
  }
558
- }
559
- let dataWithResolvedRelations;
560
- let relationIds;
561
- if (data) {
562
- const result = await processRelationsInData(
563
- adapter,
564
- contentType,
565
- data,
566
- getContentType
567
- );
568
- dataWithResolvedRelations = result.processedData;
569
- relationIds = result.relationIds;
570
- }
571
- let validatedData = dataWithResolvedRelations;
572
- if (dataWithResolvedRelations) {
573
- const existingData = existing.data ? JSON.parse(existing.data) : {};
574
- const mergedData = {
575
- ...existingData,
576
- ...dataWithResolvedRelations
415
+ const processedData = validation.data;
416
+ if (config.hooks?.onBeforeCreate) {
417
+ const result = await config.hooks.onBeforeCreate(
418
+ processedData,
419
+ context
420
+ );
421
+ if (result === false) {
422
+ throw ctx.error(403, { message: "Create operation denied" });
423
+ }
424
+ }
425
+ const item = await adapter.create({
426
+ model: "contentItem",
427
+ data: {
428
+ contentTypeId: contentType.id,
429
+ slug,
430
+ data: JSON.stringify(processedData),
431
+ createdAt: /* @__PURE__ */ new Date(),
432
+ updatedAt: /* @__PURE__ */ new Date()
433
+ }
434
+ });
435
+ await syncRelations(adapter, item.id, relationIds);
436
+ const serialized = getters.serializeContentItem(item);
437
+ if (config.hooks?.onAfterCreate) {
438
+ await config.hooks.onAfterCreate(serialized, context);
439
+ }
440
+ return {
441
+ ...serialized,
442
+ parsedData: processedData
577
443
  };
578
- const zodSchema = getContentTypeZodSchema(contentType);
579
- const validation = zodSchema.safeParse(mergedData);
580
- if (!validation.success) {
444
+ }
445
+ );
446
+ const updateContentItem = api.createEndpoint(
447
+ "/content/:typeSlug/:id",
448
+ {
449
+ method: "PUT",
450
+ params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() }),
451
+ body: z.z.object({
452
+ slug: z.z.string().min(1).optional(),
453
+ // Use passthrough object instead of z.record(z.unknown()) due to Zod v4 bug
454
+ data: z.z.object({}).passthrough().optional()
455
+ })
456
+ },
457
+ async (ctx) => {
458
+ const { typeSlug, id } = ctx.params;
459
+ const { slug: rawSlug, data } = ctx.body;
460
+ const context = createContext(typeSlug, ctx.headers);
461
+ const slug = rawSlug ? utils.slugify(rawSlug) : void 0;
462
+ if (rawSlug && !slug) {
581
463
  throw ctx.error(400, {
582
- message: "Validation failed",
583
- errors: validation.error.issues
464
+ message: "Invalid slug: must contain at least one alphanumeric character"
584
465
  });
585
466
  }
586
- validatedData = validation.data;
587
- }
588
- const processedData = validatedData;
589
- if (config.hooks?.onBeforeUpdate && validatedData) {
590
- const result = await config.hooks.onBeforeUpdate(
591
- id,
592
- validatedData,
593
- context
594
- );
595
- if (result === false) {
596
- throw ctx.error(403, { message: "Update operation denied" });
467
+ const contentType = await getContentType(typeSlug);
468
+ if (!contentType) {
469
+ throw ctx.error(404, { message: "Content type not found" });
597
470
  }
598
- }
599
- if (relationIds) {
600
- await syncRelations(adapter, id, relationIds);
601
- }
602
- const updateData = {
603
- updatedAt: /* @__PURE__ */ new Date()
604
- };
605
- if (slug) updateData.slug = slug;
606
- if (processedData) updateData.data = JSON.stringify(processedData);
607
- await adapter.update({
608
- model: "contentItem",
609
- where: [{ field: "id", value: id, operator: "eq" }],
610
- update: updateData
611
- });
612
- const updated = await adapter.findOne({
613
- model: "contentItem",
614
- where: [{ field: "id", value: id, operator: "eq" }],
615
- join: { contentType: true }
616
- });
617
- if (!updated) {
618
- throw ctx.error(500, { message: "Failed to fetch updated item" });
619
- }
620
- const serialized = serializeContentItem(updated);
621
- if (config.hooks?.onAfterUpdate) {
622
- await config.hooks.onAfterUpdate(serialized, context);
623
- }
624
- return serializeContentItemWithType(updated);
625
- }
626
- );
627
- const deleteContentItem = api.createEndpoint(
628
- "/content/:typeSlug/:id",
629
- {
630
- method: "DELETE",
631
- params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() })
632
- },
633
- async (ctx) => {
634
- const { typeSlug, id } = ctx.params;
635
- const context = createContext(typeSlug, ctx.headers);
636
- const contentType = await getContentType(typeSlug);
637
- if (!contentType) {
638
- throw ctx.error(404, { message: "Content type not found" });
639
- }
640
- const existing = await adapter.findOne({
641
- model: "contentItem",
642
- where: [{ field: "id", value: id, operator: "eq" }]
643
- });
644
- if (!existing || existing.contentTypeId !== contentType.id) {
645
- throw ctx.error(404, { message: "Content item not found" });
646
- }
647
- if (config.hooks?.onBeforeDelete) {
648
- const canDelete = await config.hooks.onBeforeDelete(id, context);
649
- if (!canDelete) {
650
- throw ctx.error(403, { message: "Delete operation denied" });
471
+ const existing = await adapter.findOne({
472
+ model: "contentItem",
473
+ where: [{ field: "id", value: id, operator: "eq" }]
474
+ });
475
+ if (!existing || existing.contentTypeId !== contentType.id) {
476
+ throw ctx.error(404, { message: "Content item not found" });
651
477
  }
652
- }
653
- await adapter.delete({
654
- model: "contentItem",
655
- where: [{ field: "id", value: id, operator: "eq" }]
656
- });
657
- if (config.hooks?.onAfterDelete) {
658
- await config.hooks.onAfterDelete(id, context);
659
- }
660
- return { success: true };
661
- }
662
- );
663
- const getContentItemPopulated = api.createEndpoint(
664
- "/content/:typeSlug/:id/populated",
665
- {
666
- method: "GET",
667
- params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() })
668
- },
669
- async (ctx) => {
670
- const { typeSlug, id } = ctx.params;
671
- const contentType = await getContentType(typeSlug);
672
- if (!contentType) {
673
- throw ctx.error(404, { message: "Content type not found" });
674
- }
675
- const item = await adapter.findOne({
676
- model: "contentItem",
677
- where: [{ field: "id", value: id, operator: "eq" }],
678
- join: { contentType: true }
679
- });
680
- if (!item || item.contentTypeId !== contentType.id) {
681
- throw ctx.error(404, { message: "Content item not found" });
682
- }
683
- const _relations = await populateRelations(adapter, item);
684
- return {
685
- ...serializeContentItemWithType(item),
686
- _relations
687
- };
688
- }
689
- );
690
- const listContentByRelation = api.createEndpoint(
691
- "/content/:typeSlug/by-relation",
692
- {
693
- method: "GET",
694
- params: z.z.object({ typeSlug: z.z.string() }),
695
- query: z.z.object({
696
- field: z.z.string(),
697
- targetId: z.z.string(),
698
- limit: z.z.coerce.number().min(1).max(100).optional().default(20),
699
- offset: z.z.coerce.number().min(0).optional().default(0)
700
- })
701
- },
702
- async (ctx) => {
703
- const { typeSlug } = ctx.params;
704
- const { field, targetId, limit, offset } = ctx.query;
705
- const contentType = await getContentType(typeSlug);
706
- if (!contentType) {
707
- throw ctx.error(404, { message: "Content type not found" });
708
- }
709
- const contentRelations = await adapter.findMany({
710
- model: "contentRelation",
711
- where: [
712
- { field: "targetId", value: targetId, operator: "eq" },
713
- { field: "fieldName", value: field, operator: "eq" }
714
- ]
715
- });
716
- const sourceIds = [
717
- ...new Set(contentRelations.map((r) => r.sourceId))
718
- ];
719
- if (sourceIds.length === 0) {
720
- return {
721
- items: [],
722
- total: 0,
723
- limit,
724
- offset
478
+ if (slug && slug !== existing.slug) {
479
+ const duplicate = await adapter.findOne({
480
+ model: "contentItem",
481
+ where: [
482
+ {
483
+ field: "contentTypeId",
484
+ value: contentType.id,
485
+ operator: "eq"
486
+ },
487
+ { field: "slug", value: slug, operator: "eq" }
488
+ ]
489
+ });
490
+ if (duplicate) {
491
+ throw ctx.error(409, {
492
+ message: "Content item with this slug already exists"
493
+ });
494
+ }
495
+ }
496
+ let dataWithResolvedRelations;
497
+ let relationIds;
498
+ if (data) {
499
+ const result = await processRelationsInData(
500
+ adapter,
501
+ contentType,
502
+ data,
503
+ getContentType
504
+ );
505
+ dataWithResolvedRelations = result.processedData;
506
+ relationIds = result.relationIds;
507
+ }
508
+ let validatedData = dataWithResolvedRelations;
509
+ if (dataWithResolvedRelations) {
510
+ const existingData = existing.data ? JSON.parse(existing.data) : {};
511
+ const mergedData = {
512
+ ...existingData,
513
+ ...dataWithResolvedRelations
514
+ };
515
+ const zodSchema = getContentTypeZodSchema(contentType);
516
+ const validation = zodSchema.safeParse(mergedData);
517
+ if (!validation.success) {
518
+ throw ctx.error(400, {
519
+ message: "Validation failed",
520
+ errors: validation.error.issues
521
+ });
522
+ }
523
+ validatedData = validation.data;
524
+ }
525
+ const processedData = validatedData;
526
+ if (config.hooks?.onBeforeUpdate && validatedData) {
527
+ const result = await config.hooks.onBeforeUpdate(
528
+ id,
529
+ validatedData,
530
+ context
531
+ );
532
+ if (result === false) {
533
+ throw ctx.error(403, { message: "Update operation denied" });
534
+ }
535
+ }
536
+ if (relationIds) {
537
+ await syncRelations(adapter, id, relationIds);
538
+ }
539
+ const updateData = {
540
+ updatedAt: /* @__PURE__ */ new Date()
725
541
  };
542
+ if (slug) updateData.slug = slug;
543
+ if (processedData) updateData.data = JSON.stringify(processedData);
544
+ await adapter.update({
545
+ model: "contentItem",
546
+ where: [{ field: "id", value: id, operator: "eq" }],
547
+ update: updateData
548
+ });
549
+ const updated = await adapter.findOne({
550
+ model: "contentItem",
551
+ where: [{ field: "id", value: id, operator: "eq" }],
552
+ join: { contentType: true }
553
+ });
554
+ if (!updated) {
555
+ throw ctx.error(500, { message: "Failed to fetch updated item" });
556
+ }
557
+ const serialized = getters.serializeContentItem(updated);
558
+ if (config.hooks?.onAfterUpdate) {
559
+ await config.hooks.onAfterUpdate(serialized, context);
560
+ }
561
+ return getters.serializeContentItemWithType(updated);
726
562
  }
727
- const allItems = [];
728
- for (const sourceId of sourceIds) {
563
+ );
564
+ const deleteContentItem = api.createEndpoint(
565
+ "/content/:typeSlug/:id",
566
+ {
567
+ method: "DELETE",
568
+ params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() })
569
+ },
570
+ async (ctx) => {
571
+ const { typeSlug, id } = ctx.params;
572
+ const context = createContext(typeSlug, ctx.headers);
573
+ const contentType = await getContentType(typeSlug);
574
+ if (!contentType) {
575
+ throw ctx.error(404, { message: "Content type not found" });
576
+ }
577
+ const existing = await adapter.findOne({
578
+ model: "contentItem",
579
+ where: [{ field: "id", value: id, operator: "eq" }]
580
+ });
581
+ if (!existing || existing.contentTypeId !== contentType.id) {
582
+ throw ctx.error(404, { message: "Content item not found" });
583
+ }
584
+ if (config.hooks?.onBeforeDelete) {
585
+ const canDelete = await config.hooks.onBeforeDelete(id, context);
586
+ if (!canDelete) {
587
+ throw ctx.error(403, { message: "Delete operation denied" });
588
+ }
589
+ }
590
+ await adapter.delete({
591
+ model: "contentItem",
592
+ where: [{ field: "id", value: id, operator: "eq" }]
593
+ });
594
+ if (config.hooks?.onAfterDelete) {
595
+ await config.hooks.onAfterDelete(id, context);
596
+ }
597
+ return { success: true };
598
+ }
599
+ );
600
+ const getContentItemPopulated = api.createEndpoint(
601
+ "/content/:typeSlug/:id/populated",
602
+ {
603
+ method: "GET",
604
+ params: z.z.object({ typeSlug: z.z.string(), id: z.z.string() })
605
+ },
606
+ async (ctx) => {
607
+ const { typeSlug, id } = ctx.params;
608
+ const contentType = await getContentType(typeSlug);
609
+ if (!contentType) {
610
+ throw ctx.error(404, { message: "Content type not found" });
611
+ }
729
612
  const item = await adapter.findOne({
730
613
  model: "contentItem",
731
- where: [
732
- { field: "id", value: sourceId, operator: "eq" },
733
- {
734
- field: "contentTypeId",
735
- value: contentType.id,
736
- operator: "eq"
737
- }
738
- ],
614
+ where: [{ field: "id", value: id, operator: "eq" }],
739
615
  join: { contentType: true }
740
616
  });
741
- if (item) {
742
- allItems.push(item);
617
+ if (!item || item.contentTypeId !== contentType.id) {
618
+ throw ctx.error(404, { message: "Content item not found" });
743
619
  }
620
+ const _relations = await populateRelations(adapter, item);
621
+ return {
622
+ ...getters.serializeContentItemWithType(item),
623
+ _relations
624
+ };
744
625
  }
745
- allItems.sort(
746
- (a, b) => b.createdAt.getTime() - a.createdAt.getTime()
747
- );
748
- const total = allItems.length;
749
- const paginatedItems = allItems.slice(offset, offset + limit);
750
- return {
751
- items: paginatedItems.map(serializeContentItemWithType),
752
- total,
753
- limit,
754
- offset
755
- };
756
- }
757
- );
758
- const getInverseRelations = api.createEndpoint(
759
- "/content-types/:slug/inverse-relations",
760
- {
761
- method: "GET",
762
- params: z.z.object({ slug: z.z.string() }),
763
- query: z.z.object({
764
- itemId: z.z.string().optional()
765
- })
766
- },
767
- async (ctx) => {
768
- const { slug } = ctx.params;
769
- const { itemId } = ctx.query;
770
- await ensureSynced();
771
- const targetContentType = await getContentType(slug);
772
- if (!targetContentType) {
773
- throw ctx.error(404, { message: "Content type not found" });
626
+ );
627
+ const listContentByRelation = api.createEndpoint(
628
+ "/content/:typeSlug/by-relation",
629
+ {
630
+ method: "GET",
631
+ params: z.z.object({ typeSlug: z.z.string() }),
632
+ query: z.z.object({
633
+ field: z.z.string(),
634
+ targetId: z.z.string(),
635
+ limit: z.z.coerce.number().min(1).max(100).optional().default(20),
636
+ offset: z.z.coerce.number().min(0).optional().default(0)
637
+ })
638
+ },
639
+ async (ctx) => {
640
+ const { typeSlug } = ctx.params;
641
+ const { field, targetId, limit, offset } = ctx.query;
642
+ const contentType = await getContentType(typeSlug);
643
+ if (!contentType) {
644
+ throw ctx.error(404, { message: "Content type not found" });
645
+ }
646
+ const contentRelations = await adapter.findMany({
647
+ model: "contentRelation",
648
+ where: [
649
+ { field: "targetId", value: targetId, operator: "eq" },
650
+ { field: "fieldName", value: field, operator: "eq" }
651
+ ]
652
+ });
653
+ const sourceIds = [
654
+ ...new Set(contentRelations.map((r) => r.sourceId))
655
+ ];
656
+ if (sourceIds.length === 0) {
657
+ return {
658
+ items: [],
659
+ total: 0,
660
+ limit,
661
+ offset
662
+ };
663
+ }
664
+ const allItems = [];
665
+ for (const sourceId of sourceIds) {
666
+ const item = await adapter.findOne({
667
+ model: "contentItem",
668
+ where: [
669
+ { field: "id", value: sourceId, operator: "eq" },
670
+ {
671
+ field: "contentTypeId",
672
+ value: contentType.id,
673
+ operator: "eq"
674
+ }
675
+ ],
676
+ join: { contentType: true }
677
+ });
678
+ if (item) {
679
+ allItems.push(item);
680
+ }
681
+ }
682
+ allItems.sort(
683
+ (a, b) => b.createdAt.getTime() - a.createdAt.getTime()
684
+ );
685
+ const total = allItems.length;
686
+ const paginatedItems = allItems.slice(offset, offset + limit);
687
+ return {
688
+ items: paginatedItems.map(getters.serializeContentItemWithType),
689
+ total,
690
+ limit,
691
+ offset
692
+ };
774
693
  }
775
- const allContentTypes = await adapter.findMany({
776
- model: "contentType"
777
- });
778
- const inverseRelations = [];
779
- for (const contentType of allContentTypes) {
780
- const relationFields = extractRelationFields(contentType);
781
- for (const [fieldName, relationConfig] of Object.entries(
782
- relationFields
783
- )) {
784
- if (relationConfig.type === "belongsTo" && relationConfig.targetType === slug) {
785
- let count = 0;
786
- if (itemId) {
787
- const relations = await adapter.findMany({
788
- model: "contentRelation",
789
- where: [
790
- {
791
- field: "targetId",
792
- value: itemId,
793
- operator: "eq"
794
- },
795
- {
796
- field: "fieldName",
797
- value: fieldName,
798
- operator: "eq"
799
- }
800
- ]
801
- });
802
- const itemIds = relations.map((r) => r.sourceId);
803
- for (const sourceId of itemIds) {
804
- const item = await adapter.findOne({
805
- model: "contentItem",
694
+ );
695
+ const getInverseRelations = api.createEndpoint(
696
+ "/content-types/:slug/inverse-relations",
697
+ {
698
+ method: "GET",
699
+ params: z.z.object({ slug: z.z.string() }),
700
+ query: z.z.object({
701
+ itemId: z.z.string().optional()
702
+ })
703
+ },
704
+ async (ctx) => {
705
+ const { slug } = ctx.params;
706
+ const { itemId } = ctx.query;
707
+ await ensureSynced(adapter);
708
+ const targetContentType = await getContentType(slug);
709
+ if (!targetContentType) {
710
+ throw ctx.error(404, { message: "Content type not found" });
711
+ }
712
+ const allContentTypes = await adapter.findMany({
713
+ model: "contentType"
714
+ });
715
+ const inverseRelations = [];
716
+ for (const contentType of allContentTypes) {
717
+ const relationFields = extractRelationFields(contentType);
718
+ for (const [fieldName, relationConfig] of Object.entries(
719
+ relationFields
720
+ )) {
721
+ if (relationConfig.type === "belongsTo" && relationConfig.targetType === slug) {
722
+ let count = 0;
723
+ if (itemId) {
724
+ const relations = await adapter.findMany({
725
+ model: "contentRelation",
806
726
  where: [
807
727
  {
808
- field: "id",
809
- value: sourceId,
728
+ field: "targetId",
729
+ value: itemId,
810
730
  operator: "eq"
811
731
  },
812
732
  {
813
- field: "contentTypeId",
814
- value: contentType.id,
733
+ field: "fieldName",
734
+ value: fieldName,
815
735
  operator: "eq"
816
736
  }
817
737
  ]
818
738
  });
819
- if (item) count++;
739
+ const itemIds = relations.map((r) => r.sourceId);
740
+ for (const sourceId of itemIds) {
741
+ const item = await adapter.findOne({
742
+ model: "contentItem",
743
+ where: [
744
+ {
745
+ field: "id",
746
+ value: sourceId,
747
+ operator: "eq"
748
+ },
749
+ {
750
+ field: "contentTypeId",
751
+ value: contentType.id,
752
+ operator: "eq"
753
+ }
754
+ ]
755
+ });
756
+ if (item) count++;
757
+ }
820
758
  }
759
+ inverseRelations.push({
760
+ sourceType: contentType.slug,
761
+ sourceTypeName: contentType.name,
762
+ fieldName,
763
+ count
764
+ });
821
765
  }
822
- inverseRelations.push({
823
- sourceType: contentType.slug,
824
- sourceTypeName: contentType.name,
825
- fieldName,
826
- count
827
- });
828
766
  }
829
767
  }
768
+ return { inverseRelations };
830
769
  }
831
- return { inverseRelations };
832
- }
833
- );
834
- const listInverseRelationItems = api.createEndpoint(
835
- "/content-types/:slug/inverse-relations/:sourceType",
836
- {
837
- method: "GET",
838
- params: z.z.object({
839
- slug: z.z.string(),
840
- sourceType: z.z.string()
841
- }),
842
- query: z.z.object({
843
- itemId: z.z.string(),
844
- fieldName: z.z.string(),
845
- limit: z.z.coerce.number().min(1).max(100).optional().default(20),
846
- offset: z.z.coerce.number().min(0).optional().default(0)
847
- })
848
- },
849
- async (ctx) => {
850
- const { slug, sourceType } = ctx.params;
851
- const { itemId, fieldName, limit, offset } = ctx.query;
852
- await ensureSynced();
853
- const targetContentType = await getContentType(slug);
854
- if (!targetContentType) {
855
- throw ctx.error(404, { message: "Target content type not found" });
856
- }
857
- const sourceContentType = await getContentType(sourceType);
858
- if (!sourceContentType) {
859
- throw ctx.error(404, { message: "Source content type not found" });
860
- }
861
- const relations = await adapter.findMany({
862
- model: "contentRelation",
863
- where: [
864
- { field: "targetId", value: itemId, operator: "eq" },
865
- { field: "fieldName", value: fieldName, operator: "eq" }
866
- ]
867
- });
868
- const sourceIds = [...new Set(relations.map((r) => r.sourceId))];
869
- const allItems = [];
870
- for (const sourceId of sourceIds) {
871
- const item = await adapter.findOne({
872
- model: "contentItem",
770
+ );
771
+ const listInverseRelationItems = api.createEndpoint(
772
+ "/content-types/:slug/inverse-relations/:sourceType",
773
+ {
774
+ method: "GET",
775
+ params: z.z.object({
776
+ slug: z.z.string(),
777
+ sourceType: z.z.string()
778
+ }),
779
+ query: z.z.object({
780
+ itemId: z.z.string(),
781
+ fieldName: z.z.string(),
782
+ limit: z.z.coerce.number().min(1).max(100).optional().default(20),
783
+ offset: z.z.coerce.number().min(0).optional().default(0)
784
+ })
785
+ },
786
+ async (ctx) => {
787
+ const { slug, sourceType } = ctx.params;
788
+ const { itemId, fieldName, limit, offset } = ctx.query;
789
+ await ensureSynced(adapter);
790
+ const targetContentType = await getContentType(slug);
791
+ if (!targetContentType) {
792
+ throw ctx.error(404, { message: "Target content type not found" });
793
+ }
794
+ const sourceContentType = await getContentType(sourceType);
795
+ if (!sourceContentType) {
796
+ throw ctx.error(404, { message: "Source content type not found" });
797
+ }
798
+ const relations = await adapter.findMany({
799
+ model: "contentRelation",
873
800
  where: [
874
- { field: "id", value: sourceId, operator: "eq" },
875
- {
876
- field: "contentTypeId",
877
- value: sourceContentType.id,
878
- operator: "eq"
879
- }
880
- ],
881
- join: { contentType: true }
801
+ { field: "targetId", value: itemId, operator: "eq" },
802
+ { field: "fieldName", value: fieldName, operator: "eq" }
803
+ ]
882
804
  });
883
- if (item) {
884
- allItems.push(item);
805
+ const sourceIds = [...new Set(relations.map((r) => r.sourceId))];
806
+ const allItems = [];
807
+ for (const sourceId of sourceIds) {
808
+ const item = await adapter.findOne({
809
+ model: "contentItem",
810
+ where: [
811
+ { field: "id", value: sourceId, operator: "eq" },
812
+ {
813
+ field: "contentTypeId",
814
+ value: sourceContentType.id,
815
+ operator: "eq"
816
+ }
817
+ ],
818
+ join: { contentType: true }
819
+ });
820
+ if (item) {
821
+ allItems.push(item);
822
+ }
885
823
  }
824
+ allItems.sort(
825
+ (a, b) => b.createdAt.getTime() - a.createdAt.getTime()
826
+ );
827
+ const total = allItems.length;
828
+ const paginatedItems = allItems.slice(offset, offset + limit);
829
+ return {
830
+ items: paginatedItems.map(getters.serializeContentItemWithType),
831
+ total,
832
+ limit,
833
+ offset
834
+ };
886
835
  }
887
- allItems.sort(
888
- (a, b) => b.createdAt.getTime() - a.createdAt.getTime()
889
- );
890
- const total = allItems.length;
891
- const paginatedItems = allItems.slice(offset, offset + limit);
892
- return {
893
- items: paginatedItems.map(serializeContentItemWithType),
894
- total,
895
- limit,
896
- offset
897
- };
898
- }
899
- );
900
- return {
901
- listContentTypes,
902
- getContentTypeBySlug,
903
- listContentItems,
904
- getContentItem,
905
- createContentItem,
906
- updateContentItem,
907
- deleteContentItem,
908
- getContentItemPopulated,
909
- listContentByRelation,
910
- getInverseRelations,
911
- listInverseRelationItems
912
- };
913
- }
914
- });
836
+ );
837
+ return {
838
+ listContentTypes,
839
+ getContentTypeBySlug,
840
+ listContentItems,
841
+ getContentItem,
842
+ createContentItem,
843
+ updateContentItem,
844
+ deleteContentItem,
845
+ getContentItemPopulated,
846
+ listContentByRelation,
847
+ getInverseRelations,
848
+ listInverseRelationItems
849
+ };
850
+ }
851
+ });
852
+ };
915
853
 
916
854
  exports.cmsBackendPlugin = cmsBackendPlugin;