@oneclick.dev/cms-core-modules 0.0.70 → 0.0.72

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 (323) hide show
  1. package/dist/Acquisition-D_Qx7XRY.mjs +400 -0
  2. package/dist/Acquisition-_-cq972V.js +1 -0
  3. package/dist/AppointmentDetailsCard-CtK0Cj_O.js +1 -0
  4. package/dist/AppointmentDetailsCard-i4Ky8WnK.mjs +161 -0
  5. package/dist/AppointmentEditor-BeOtYV6u.mjs +196 -0
  6. package/dist/AppointmentEditor-CaTfbkIf.js +1 -0
  7. package/dist/AppointmentListTable-CQ3uXfa8.js +1 -0
  8. package/dist/AppointmentListTable-G5dIeCYj.mjs +159 -0
  9. package/dist/Audience-BdlrWkY-.mjs +489 -0
  10. package/dist/Audience-QnFQs93n.js +1 -0
  11. package/dist/Content-C-4Cdniz.js +1 -0
  12. package/dist/Content-DW6xvbUo.mjs +358 -0
  13. package/dist/ContentEditor-3JFlC9N1.js +313 -0
  14. package/dist/{ContentEditor-B7IYLH91.mjs → ContentEditor-7SDjf5Hk.mjs} +16535 -25527
  15. package/dist/CountryBreakdownCard-BUfJ-umQ.js +1 -0
  16. package/dist/CountryBreakdownCard-Dc_vZ9dJ.mjs +196 -0
  17. package/dist/{Create-D8NBEkJU.js → Create-CRn2sMHp.js} +1 -1
  18. package/dist/{Create-BDiyCtrp.mjs → Create-DtFzwxn_.mjs} +1 -1
  19. package/dist/DateFormatter-C9qfmQnP.js +1 -0
  20. package/dist/{DateFormatter-DAZP9a6L.mjs → DateFormatter-DfIwyrnF.mjs} +399 -258
  21. package/dist/{Detail-Cxd2VMOl.js → Detail-BcboL7NF.js} +1 -1
  22. package/dist/{Detail-CxUU6BpO.mjs → Detail-BwDnY42G.mjs} +1 -1
  23. package/dist/{Detail-DTHaYmyl.js → Detail-Bxi7lG9x.js} +1 -1
  24. package/dist/{Detail-BGD75ul4.mjs → Detail-CVgWHbMC.mjs} +22 -18
  25. package/dist/DeviceBreakdownCard-BJcQNo8a.mjs +159 -0
  26. package/dist/DeviceBreakdownCard-CsoK6JUO.js +1 -0
  27. package/dist/{Find-B4sAEx0B.mjs → Find-XPcJxeRH.mjs} +1 -1
  28. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-B-ZhMrMu.js → NewReservationDialog.vue_vue_type_script_setup_true_lang-C5YczjNb.js} +1 -1
  29. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-CJ7hh7ug.mjs → NewReservationDialog.vue_vue_type_script_setup_true_lang-Ds7z0qeH.mjs} +1 -1
  30. package/dist/{Overview-HvlDEgqi.mjs → Overview--XpvBbqz.mjs} +1 -1
  31. package/dist/Overview-B8OF-JJr.mjs +567 -0
  32. package/dist/Overview-DSU1Nh7B.js +1 -0
  33. package/dist/PeakHoursCard-BNl_U1r_.js +1 -0
  34. package/dist/PeakHoursCard-hV8PdGsf.mjs +182 -0
  35. package/dist/ProductDetailsCard-BwktdlIf.js +1 -0
  36. package/dist/ProductDetailsCard-CJBkZSER.mjs +121 -0
  37. package/dist/RealtimeCard-CRJHS64l.mjs +126 -0
  38. package/dist/RealtimeCard-CxtqQHee.js +1 -0
  39. package/dist/SearchTermsCard-DGRbo5ZP.js +1 -0
  40. package/dist/SearchTermsCard-Dwa-P7My.mjs +201 -0
  41. package/dist/SeoHealth-BqlYiSCj.js +1 -0
  42. package/dist/SeoHealth-DG004AsJ.mjs +523 -0
  43. package/dist/{TableView-C4NNrJpP.js → TableView-CU0a9ih2.js} +162 -199
  44. package/dist/{TableView-B5OyApnP.mjs → TableView-fYC7kB6j.mjs} +23309 -24320
  45. package/dist/TopPagesCard-Dv52to_J.mjs +159 -0
  46. package/dist/TopPagesCard-pZ-nAsaI.js +1 -0
  47. package/dist/TrafficSourcesCard-CBOPV1J1.js +1 -0
  48. package/dist/TrafficSourcesCard-CMhcj2k2.mjs +197 -0
  49. package/dist/VisitorStatsCard-BHn4oSnt.mjs +174 -0
  50. package/dist/VisitorStatsCard-tApB_7v8.js +1 -0
  51. package/dist/{agenda-CTG6N_Lt.mjs → agenda-XqvbrU72.mjs} +2 -2
  52. package/dist/{agenda-OSkAh0Oa.js → agenda-wNFDKn0G.js} +1 -1
  53. package/dist/array-CbATeQbk.js +1 -0
  54. package/dist/array-CvmZXzxF.mjs +108 -0
  55. package/dist/cms-core-modules.css +1 -1
  56. package/dist/{exceptions-CEXIFw47.mjs → exceptions-CLgeeUSy.mjs} +1 -1
  57. package/dist/{exceptions-BvMTqtof.js → exceptions-wEQEVzIs.js} +1 -1
  58. package/dist/floating-ui.dom-BO2Hr6mz.mjs +1292 -0
  59. package/dist/floating-ui.dom-CAr9LGoC.js +1 -0
  60. package/dist/{index-AmUV8LZQ.mjs → index-B-lVEpFX.mjs} +1 -1
  61. package/dist/index-BuzLn4Km.js +54 -0
  62. package/dist/index-C4YUVWzJ.js +75 -0
  63. package/dist/index-CMk3uhUt.mjs +3837 -0
  64. package/dist/{index-Uf7TwBuW.mjs → index-CrGjxSwa.mjs} +4 -4
  65. package/dist/index-D2DYuz8R.mjs +1090 -0
  66. package/dist/index-D3L8WAJI.js +58 -0
  67. package/dist/index-D7JBu6iT.mjs +34 -0
  68. package/dist/index-DQYBP8Js.js +158 -0
  69. package/dist/index-DjDCYQ_6.mjs +441 -0
  70. package/dist/index-DwHYfZl_.js +1 -0
  71. package/dist/{index-Biuv2zTx-DBCin9DT.mjs → index-N6w5-hDF-6k_ELHYC.mjs} +1234 -1234
  72. package/dist/index-N6w5-hDF-DCuxwPBX.js +88 -0
  73. package/dist/index-O_QNuTdG.js +35 -0
  74. package/dist/index-_2lRVt_k.mjs +2942 -0
  75. package/dist/index-p5Uqu8c2.mjs +1438 -0
  76. package/dist/index.cjs.js +1 -1
  77. package/dist/index.mjs +383 -86
  78. package/dist/{resources-DgPnEv76.mjs → resources-CFR_s89Z.mjs} +1 -1
  79. package/dist/src/appointments/chat-components/AppointmentDetailsCard.vue.d.ts +14 -0
  80. package/dist/src/appointments/chat-components/AppointmentEditor.vue.d.ts +14 -0
  81. package/dist/src/appointments/chat-components/AppointmentListTable.vue.d.ts +14 -0
  82. package/dist/src/appointments/index.d.ts +70 -0
  83. package/dist/src/appointments/server.d.ts +19 -0
  84. package/dist/src/appointments/tools.d.ts +56 -16
  85. package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Button.vue.d.ts +3 -1
  86. package/dist/src/contentManager/components/content-editor/tiptap-extensions/CustomClass.d.ts +14 -0
  87. package/dist/src/contentManager/components/content-editor/tiptap-extensions/NodeDragPointerEventsFix.d.ts +2 -0
  88. package/dist/src/contentManager/components/content-editor/tiptap-menus/BubbleMenuClassBuilder.vue.d.ts +19 -0
  89. package/dist/src/contentManager/components/content-editor/tiptap-menus/BubbleMenuLinkBuilder.vue.d.ts +19 -0
  90. package/dist/src/googleAnalytics/chat-components/CountryBreakdownCard.vue.d.ts +14 -0
  91. package/dist/src/googleAnalytics/chat-components/DeviceBreakdownCard.vue.d.ts +14 -0
  92. package/dist/src/googleAnalytics/chat-components/PeakHoursCard.vue.d.ts +14 -0
  93. package/dist/src/googleAnalytics/chat-components/RealtimeCard.vue.d.ts +14 -0
  94. package/dist/src/googleAnalytics/chat-components/SearchTermsCard.vue.d.ts +14 -0
  95. package/dist/src/googleAnalytics/chat-components/TopPagesCard.vue.d.ts +14 -0
  96. package/dist/src/googleAnalytics/chat-components/TrafficSourcesCard.vue.d.ts +14 -0
  97. package/dist/src/googleAnalytics/chat-components/VisitorStatsCard.vue.d.ts +14 -0
  98. package/dist/src/googleAnalytics/config.d.ts +39 -0
  99. package/dist/src/googleAnalytics/index.d.ts +116 -0
  100. package/dist/src/googleAnalytics/metadata.d.ts +2 -0
  101. package/dist/src/googleAnalytics/pages/Acquisition.vue.d.ts +2 -0
  102. package/dist/src/googleAnalytics/pages/Audience.vue.d.ts +2 -0
  103. package/dist/src/googleAnalytics/pages/Content.vue.d.ts +2 -0
  104. package/dist/src/googleAnalytics/pages/Overview.vue.d.ts +2 -0
  105. package/dist/src/googleAnalytics/pages/SeoHealth.vue.d.ts +2 -0
  106. package/dist/src/googleAnalytics/permissions.d.ts +1 -0
  107. package/dist/src/googleAnalytics/server.d.ts +35 -0
  108. package/dist/src/googleAnalytics/tools.d.ts +59 -0
  109. package/dist/src/index.d.ts +6 -5
  110. package/dist/src/mailTemplates/components/TemplateList.vue.d.ts +2 -0
  111. package/dist/src/mailTemplates/routes.d.ts +5 -0
  112. package/dist/src/mailTemplates/tools.d.ts +1 -0
  113. package/dist/src/productCollections/tools.d.ts +1 -0
  114. package/dist/src/products/chat-components/ProductDetailsCard.vue.d.ts +14 -0
  115. package/dist/src/products/index.d.ts +24 -2
  116. package/dist/src/products/server.d.ts +19 -0
  117. package/dist/src/products/tools.d.ts +21 -2
  118. package/dist/src/promoCodes/tools.d.ts +1 -0
  119. package/dist/src/server-handlers.d.ts +9 -0
  120. package/dist/src/table/tools.d.ts +1 -25
  121. package/package.json +23 -21
  122. package/src/appointments/server.ts +195 -0
  123. package/src/appointments/tools.ts +61 -21
  124. package/src/googleAnalytics/server.ts +1188 -0
  125. package/src/googleAnalytics/tools.ts +158 -0
  126. package/src/mailTemplates/tools.ts +1 -0
  127. package/src/productCollections/tools.ts +1 -0
  128. package/src/products/server.ts +146 -0
  129. package/src/products/tools.ts +19 -0
  130. package/src/promoCodes/tools.ts +1 -0
  131. package/src/table/tools.ts +1 -25
  132. package/dist/ContentEditor-LOn09n7N.js +0 -307
  133. package/dist/DateFormatter-Bw-SCfUS.js +0 -1
  134. package/dist/floating-ui.dom-CBBY0Ism.js +0 -1
  135. package/dist/floating-ui.dom-xfqXu4GA.mjs +0 -1138
  136. package/dist/index-Biuv2zTx-DHiVlXFj.js +0 -88
  137. package/dist/index-HLGxDG-0.mjs +0 -7746
  138. package/dist/index-n2p9TTRq.js +0 -245
  139. package/dist/src/content-manager/components/content-editor/tiptap-extensions/DragHandle.d.ts +0 -76
  140. package/dist/src/content-manager/components/content-editor/tiptap-extensions/NodeDragPointerEventsFix.d.ts +0 -7
  141. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/drag-handle-plugin.d.ts +0 -25
  142. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/drag-handle.d.ts +0 -50
  143. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/cloneElement.d.ts +0 -1
  144. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/dragHandler.d.ts +0 -2
  145. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/findNextElementFromCursor.d.ts +0 -17
  146. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/getComputedStyle.d.ts +0 -1
  147. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/getInnerCoords.d.ts +0 -5
  148. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/getOuterNode.d.ts +0 -3
  149. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/minMax.d.ts +0 -1
  150. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/removeNode.d.ts +0 -1
  151. package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/index.d.ts +0 -4
  152. package/dist/src/mail-templates/tools.d.ts +0 -25
  153. package/dist/src/product-collections/tools.d.ts +0 -25
  154. package/dist/src/promo-codes/tools.d.ts +0 -25
  155. package/src/mail-templates/tools.ts +0 -25
  156. package/src/product-collections/tools.ts +0 -25
  157. package/src/promo-codes/tools.ts +0 -25
  158. /package/dist/src/{content-manager → contentManager}/components/components/ComponentDialog.vue.d.ts +0 -0
  159. /package/dist/src/{content-manager → contentManager}/components/components/ComponentGridItem.vue.d.ts +0 -0
  160. /package/dist/src/{content-manager → contentManager}/components/content-editor/ApiDocs.vue.d.ts +0 -0
  161. /package/dist/src/{content-manager → contentManager}/components/content-editor/ContentLayout.vue.d.ts +0 -0
  162. /package/dist/src/{content-manager → contentManager}/components/content-editor/ContentSettings.vue.d.ts +0 -0
  163. /package/dist/src/{content-manager → contentManager}/components/content-editor/ContentStructuredContentSections.vue.d.ts +0 -0
  164. /package/dist/src/{content-manager → contentManager}/components/content-editor/Header.vue.d.ts +0 -0
  165. /package/dist/src/{content-manager → contentManager}/components/content-editor/LivePreviewWrapper.vue.d.ts +0 -0
  166. /package/dist/src/{content-manager → contentManager}/components/content-editor/Locales.vue.d.ts +0 -0
  167. /package/dist/src/{content-manager → contentManager}/components/content-editor/NewSectionDialog.vue.d.ts +0 -0
  168. /package/dist/src/{content-manager → contentManager}/components/content-editor/PageSettings.vue.d.ts +0 -0
  169. /package/dist/src/{content-manager → contentManager}/components/content-editor/SEO.vue.d.ts +0 -0
  170. /package/dist/src/{content-manager → contentManager}/components/content-editor/SidebarSectionWrapper.vue.d.ts +0 -0
  171. /package/dist/src/{content-manager → contentManager}/components/content-editor/Status.vue.d.ts +0 -0
  172. /package/dist/src/{content-manager → contentManager}/components/content-editor/Versions.vue.d.ts +0 -0
  173. /package/dist/src/{content-manager → contentManager}/components/content-editor/code-examples.d.ts +0 -0
  174. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Button.d.ts +0 -0
  175. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Card.d.ts +0 -0
  176. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Card.vue.d.ts +0 -0
  177. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Column.d.ts +0 -0
  178. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Column.vue.d.ts +0 -0
  179. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/ComponentEditorNode.d.ts +0 -0
  180. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Container.d.ts +0 -0
  181. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Container.vue.d.ts +0 -0
  182. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Divider.d.ts +0 -0
  183. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Divider.vue.d.ts +0 -0
  184. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/EmptySpace.d.ts +0 -0
  185. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/EmptySpace.vue.d.ts +0 -0
  186. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Heading.d.ts +0 -0
  187. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Heading.vue.d.ts +0 -0
  188. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Image.d.ts +0 -0
  189. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Image.vue.d.ts +0 -0
  190. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/LockBlocks.d.ts +0 -0
  191. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Map.d.ts +0 -0
  192. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Map.vue.d.ts +0 -0
  193. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/OnlyContainerDocument.d.ts +0 -0
  194. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Paragraph.d.ts +0 -0
  195. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Paragraph.vue.d.ts +0 -0
  196. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Row.d.ts +0 -0
  197. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Row.vue.d.ts +0 -0
  198. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/ScopedSelectAll.d.ts +0 -0
  199. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Stack.d.ts +0 -0
  200. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Stack.vue.d.ts +0 -0
  201. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/TrailingNodeInContainers.d.ts +0 -0
  202. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Video.d.ts +0 -0
  203. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Video.vue.d.ts +0 -0
  204. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/DetailsNodeView.vue.d.ts +0 -0
  205. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/content/details-content.d.ts +0 -0
  206. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/content/index.d.ts +0 -0
  207. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/details.d.ts +0 -0
  208. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/helpers/findClosestVisibleNode.d.ts +0 -0
  209. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/helpers/isNodeVisible.d.ts +0 -0
  210. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/helpers/setGapCursor.d.ts +0 -0
  211. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/index.d.ts +0 -0
  212. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/summary/details-summary.d.ts +0 -0
  213. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/summary/index.d.ts +0 -0
  214. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/NodeLabel.vue.d.ts +0 -0
  215. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/ResizeHandlers.vue.d.ts +0 -0
  216. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/TopMarginDragger.vue.d.ts +0 -0
  217. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/useContainerFocus.d.ts +0 -0
  218. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/useFocus.d.ts +0 -0
  219. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/BubbleMenuToggleButton.vue.d.ts +0 -0
  220. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/DefaultBubbleMenu.vue.d.ts +0 -0
  221. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/ElementEditorMenu.vue.d.ts +0 -0
  222. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/EmojiMenu.vue.d.ts +0 -0
  223. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/NewNodeView.vue.d.ts +0 -0
  224. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/SlashMenu.vue.d.ts +0 -0
  225. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/SlashMenuButton.vue.d.ts +0 -0
  226. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/ButtonMenu.vue.d.ts +0 -0
  227. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/CardMenu.vue.d.ts +0 -0
  228. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/ColumnMenu.vue.d.ts +0 -0
  229. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/DividerMenu.vue.d.ts +0 -0
  230. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/EmptySpaceMenu.vue.d.ts +0 -0
  231. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/HeadingMenu.vue.d.ts +0 -0
  232. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/ImageMenu.vue.d.ts +0 -0
  233. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/MapMenu.vue.d.ts +0 -0
  234. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/RowMenu.vue.d.ts +0 -0
  235. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/StackMenu.vue.d.ts +0 -0
  236. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/TextMenu.vue.d.ts +0 -0
  237. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/VideoMenu.vue.d.ts +0 -0
  238. /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/index.d.ts +0 -0
  239. /package/dist/src/{content-manager → contentManager}/components/overview/CollectionDialog.vue.d.ts +0 -0
  240. /package/dist/src/{content-manager → contentManager}/components/overview/CollectionsGridView.vue.d.ts +0 -0
  241. /package/dist/src/{content-manager → contentManager}/components/overview/ContentEntryContextMenu.vue.d.ts +0 -0
  242. /package/dist/src/{content-manager → contentManager}/components/overview/FilterPopover.vue.d.ts +0 -0
  243. /package/dist/src/{content-manager → contentManager}/components/overview/ListView.vue.d.ts +0 -0
  244. /package/dist/src/{content-manager → contentManager}/components/styling/ButtonStyleDialog.vue.d.ts +0 -0
  245. /package/dist/src/{content-manager → contentManager}/components/styling/CardStyleDialog.vue.d.ts +0 -0
  246. /package/dist/src/{content-manager → contentManager}/components/styling/SectionStyleDialog.vue.d.ts +0 -0
  247. /package/dist/src/{content-manager → contentManager}/config.d.ts +0 -0
  248. /package/dist/src/{content-manager → contentManager}/index.d.ts +0 -0
  249. /package/dist/src/{content-manager → contentManager}/index.vue.d.ts +0 -0
  250. /package/dist/src/{content-manager → contentManager}/metadata.d.ts +0 -0
  251. /package/dist/src/{content-manager → contentManager}/pages/Components.vue.d.ts +0 -0
  252. /package/dist/src/{content-manager → contentManager}/pages/ContentEditor.vue.d.ts +0 -0
  253. /package/dist/src/{content-manager → contentManager}/pages/Entries.vue.d.ts +0 -0
  254. /package/dist/src/{content-manager → contentManager}/pages/GlobalStyling.vue.d.ts +0 -0
  255. /package/dist/src/{content-manager → contentManager}/pages/Overview.vue.d.ts +0 -0
  256. /package/dist/src/{content-manager → contentManager}/permissions.d.ts +0 -0
  257. /package/dist/src/{content-manager → contentManager}/routes.d.ts +0 -0
  258. /package/dist/src/{content-manager → contentManager}/stores/useTableStore.d.ts +0 -0
  259. /package/dist/src/{content-manager → contentManager}/tools.d.ts +0 -0
  260. /package/dist/src/{content-manager → contentManager}/types.d.ts +0 -0
  261. /package/dist/src/{mail-templates/components/TemplateList.vue.d.ts → googleAnalytics/index.vue.d.ts} +0 -0
  262. /package/dist/src/{mail-templates → googleAnalytics}/routes.d.ts +0 -0
  263. /package/dist/src/{mail-templates → mailTemplates}/config.d.ts +0 -0
  264. /package/dist/src/{mail-templates → mailTemplates}/index.d.ts +0 -0
  265. /package/dist/src/{mail-templates → mailTemplates}/index.vue.d.ts +0 -0
  266. /package/dist/src/{mail-templates → mailTemplates}/metadata.d.ts +0 -0
  267. /package/dist/src/{mail-templates → mailTemplates}/pages/Detail.vue.d.ts +0 -0
  268. /package/dist/src/{mail-templates → mailTemplates}/pages/Overview.vue.d.ts +0 -0
  269. /package/dist/src/{mail-templates → mailTemplates}/permissions.d.ts +0 -0
  270. /package/dist/src/{mail-templates → mailTemplates}/stores/useTableStore.d.ts +0 -0
  271. /package/dist/src/{mail-templates → mailTemplates}/types.d.ts +0 -0
  272. /package/dist/src/{product-collections → productCollections}/components/detail/Main.vue.d.ts +0 -0
  273. /package/dist/src/{product-collections → productCollections}/components/detail/SEO.vue.d.ts +0 -0
  274. /package/dist/src/{product-collections → productCollections}/components/detail/Status.vue.d.ts +0 -0
  275. /package/dist/src/{product-collections → productCollections}/components/overview/ListView.vue.d.ts +0 -0
  276. /package/dist/src/{product-collections → productCollections}/composables/useTable.d.ts +0 -0
  277. /package/dist/src/{product-collections → productCollections}/config.d.ts +0 -0
  278. /package/dist/src/{product-collections → productCollections}/index.d.ts +0 -0
  279. /package/dist/src/{product-collections → productCollections}/index.vue.d.ts +0 -0
  280. /package/dist/src/{product-collections → productCollections}/metadata.d.ts +0 -0
  281. /package/dist/src/{product-collections → productCollections}/pages/Detail.vue.d.ts +0 -0
  282. /package/dist/src/{product-collections → productCollections}/pages/Overview.vue.d.ts +0 -0
  283. /package/dist/src/{product-collections → productCollections}/permissions.d.ts +0 -0
  284. /package/dist/src/{product-collections → productCollections}/routes.d.ts +0 -0
  285. /package/dist/src/{product-collections → productCollections}/stores/useTableStore.d.ts +0 -0
  286. /package/dist/src/{product-collections → productCollections}/types.d.ts +0 -0
  287. /package/dist/src/{promo-codes → promoCodes}/components/create/DateRange.vue.d.ts +0 -0
  288. /package/dist/src/{promo-codes → promoCodes}/components/create/MultiCodes.vue.d.ts +0 -0
  289. /package/dist/src/{promo-codes → promoCodes}/components/create/Note.vue.d.ts +0 -0
  290. /package/dist/src/{promo-codes → promoCodes}/components/create/SingleCode.vue.d.ts +0 -0
  291. /package/dist/src/{promo-codes → promoCodes}/components/create/TypeAndValue/TypeDetailDialog.vue.d.ts +0 -0
  292. /package/dist/src/{promo-codes → promoCodes}/components/create/TypeAndValue/TypeManageDialog.vue.d.ts +0 -0
  293. /package/dist/src/{promo-codes → promoCodes}/components/create/TypeAndValue/index.vue.d.ts +0 -0
  294. /package/dist/src/{promo-codes → promoCodes}/config.d.ts +0 -0
  295. /package/dist/src/{promo-codes → promoCodes}/index.d.ts +0 -0
  296. /package/dist/src/{promo-codes → promoCodes}/index.vue.d.ts +0 -0
  297. /package/dist/src/{promo-codes → promoCodes}/metadata.d.ts +0 -0
  298. /package/dist/src/{promo-codes → promoCodes}/pages/Create.vue.d.ts +0 -0
  299. /package/dist/src/{promo-codes → promoCodes}/pages/Detail.vue.d.ts +0 -0
  300. /package/dist/src/{promo-codes → promoCodes}/pages/Find.vue.d.ts +0 -0
  301. /package/dist/src/{promo-codes → promoCodes}/permissions.d.ts +0 -0
  302. /package/dist/src/{promo-codes → promoCodes}/routes.d.ts +0 -0
  303. /package/dist/src/{promo-codes → promoCodes}/stores/useTableStore.d.ts +0 -0
  304. /package/dist/src/{promo-codes → promoCodes}/types.d.ts +0 -0
  305. /package/dist/src/{shipping-options → shippingOptions}/components/detail/Condition.vue.d.ts +0 -0
  306. /package/dist/src/{shipping-options → shippingOptions}/components/detail/Countries.vue.d.ts +0 -0
  307. /package/dist/src/{shipping-options → shippingOptions}/components/detail/Example.vue.d.ts +0 -0
  308. /package/dist/src/{shipping-options → shippingOptions}/components/detail/Main.vue.d.ts +0 -0
  309. /package/dist/src/{shipping-options → shippingOptions}/components/overview/ListView.vue.d.ts +0 -0
  310. /package/dist/src/{shipping-options → shippingOptions}/composables/useTable.d.ts +0 -0
  311. /package/dist/src/{shipping-options → shippingOptions}/config.d.ts +0 -0
  312. /package/dist/src/{shipping-options → shippingOptions}/index.d.ts +0 -0
  313. /package/dist/src/{shipping-options → shippingOptions}/index.vue.d.ts +0 -0
  314. /package/dist/src/{shipping-options → shippingOptions}/metadata.d.ts +0 -0
  315. /package/dist/src/{shipping-options → shippingOptions}/pages/Detail.vue.d.ts +0 -0
  316. /package/dist/src/{shipping-options → shippingOptions}/pages/Overview.vue.d.ts +0 -0
  317. /package/dist/src/{shipping-options → shippingOptions}/permissions.d.ts +0 -0
  318. /package/dist/src/{shipping-options → shippingOptions}/routes.d.ts +0 -0
  319. /package/dist/src/{shipping-options → shippingOptions}/stores/useTableStore.d.ts +0 -0
  320. /package/dist/src/{shipping-options → shippingOptions}/tools.d.ts +0 -0
  321. /package/dist/src/{shipping-options → shippingOptions}/types.d.ts +0 -0
  322. /package/src/{content-manager → contentManager}/tools.ts +0 -0
  323. /package/src/{shipping-options → shippingOptions}/tools.ts +0 -0
@@ -0,0 +1,59 @@
1
+ export declare const tools: ({
2
+ name: string;
3
+ description: string;
4
+ executionMode: string;
5
+ chatComponent: string;
6
+ parameters: {
7
+ type: string;
8
+ properties: {
9
+ startDate: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ endDate: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ limit: {
18
+ type: string;
19
+ description: string;
20
+ default: number;
21
+ };
22
+ };
23
+ required: never[];
24
+ };
25
+ } | {
26
+ name: string;
27
+ description: string;
28
+ executionMode: string;
29
+ chatComponent: string;
30
+ parameters: {
31
+ type: string;
32
+ properties: {
33
+ startDate: {
34
+ type: string;
35
+ description: string;
36
+ };
37
+ endDate: {
38
+ type: string;
39
+ description: string;
40
+ };
41
+ limit?: undefined;
42
+ };
43
+ required: never[];
44
+ };
45
+ } | {
46
+ name: string;
47
+ description: string;
48
+ executionMode: string;
49
+ chatComponent: string;
50
+ parameters: {
51
+ type: string;
52
+ properties: {
53
+ startDate?: undefined;
54
+ endDate?: undefined;
55
+ limit?: undefined;
56
+ };
57
+ required: never[];
58
+ };
59
+ })[];
@@ -1,9 +1,10 @@
1
1
  export { default as table } from './table';
2
2
  export { default as products } from './products';
3
3
  export { default as custom } from './custom';
4
- export { default as promoCodes } from './promo-codes';
5
- export { default as productCollections } from './product-collections';
6
- export { default as shippingOptions } from './shipping-options';
7
- export { default as contentManager } from './content-manager';
8
- export { default as mailTemplates } from './mail-templates';
4
+ export { default as promoCodes } from './promoCodes';
5
+ export { default as productCollections } from './productCollections';
6
+ export { default as shippingOptions } from './shippingOptions';
7
+ export { default as googleAnalytics } from './googleAnalytics';
8
+ export { default as contentManager } from './contentManager';
9
+ export { default as mailTemplates } from './mailTemplates';
9
10
  export { default as appointments } from './appointments';
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ path: string;
3
+ component: () => Promise<typeof import("./pages/Overview.vue")>;
4
+ }[];
5
+ export default _default;
@@ -0,0 +1 @@
1
+ export declare const tools: never[];
@@ -0,0 +1 @@
1
+ export declare const tools: never[];
@@ -0,0 +1,14 @@
1
+ type __VLS_Props = {
2
+ toolName: string;
3
+ instanceId: string;
4
+ instanceName: string;
5
+ moduleType: string;
6
+ resolvedArgs: Record<string, any>;
7
+ status: 'pending' | 'running' | 'completed' | 'error';
8
+ };
9
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
10
+ submit: (result: any) => any;
11
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
12
+ onSubmit?: ((result: any) => any) | undefined;
13
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
14
+ export default _default;
@@ -73,9 +73,10 @@ declare const _default: {
73
73
  name: string;
74
74
  description: string;
75
75
  }[];
76
- tools: {
76
+ tools: ({
77
77
  name: string;
78
78
  description: string;
79
+ executionMode: string;
79
80
  parameters: {
80
81
  type: string;
81
82
  properties: {
@@ -83,9 +84,30 @@ declare const _default: {
83
84
  type: string;
84
85
  description: string;
85
86
  };
87
+ productId?: undefined;
86
88
  };
87
89
  required: string[];
88
90
  };
89
- }[];
91
+ chatComponent?: undefined;
92
+ } | {
93
+ name: string;
94
+ description: string;
95
+ executionMode: string;
96
+ chatComponent: string;
97
+ parameters: {
98
+ type: string;
99
+ properties: {
100
+ productId: {
101
+ type: string;
102
+ description: string;
103
+ };
104
+ category?: undefined;
105
+ };
106
+ required: string[];
107
+ };
108
+ })[];
109
+ chatComponents: {
110
+ ProductDetailsCard: () => Promise<typeof import("./chat-components/ProductDetailsCard.vue")>;
111
+ };
90
112
  };
91
113
  export default _default;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Dependencies injected by the CMS when creating this handler.
3
+ * Modules never import CMS internals directly — they receive them here.
4
+ */
5
+ export interface ModuleHandlerDeps {
6
+ /** Initialize a Firebase Admin app for a project-level integration */
7
+ initFirebase: (event: any, integrationId: string) => Promise<any>;
8
+ /** Normalize Firestore Timestamp fields to plain dates */
9
+ normalizeTimestamps: (data: any) => any;
10
+ }
11
+ /**
12
+ * Products module server handler factory.
13
+ *
14
+ * Routes (relative to `/api/v1/modules/:instanceId/`):
15
+ * GET /products → list all products
16
+ * GET /products/:productId → get single product
17
+ * GET /empty-stock → get products with 0 stock (API-mode tool)
18
+ */
19
+ export declare function createServerHandler(deps: ModuleHandlerDeps): any;
@@ -1,6 +1,7 @@
1
- export declare const tools: {
1
+ export declare const tools: ({
2
2
  name: string;
3
3
  description: string;
4
+ executionMode: string;
4
5
  parameters: {
5
6
  type: string;
6
7
  properties: {
@@ -8,7 +9,25 @@ export declare const tools: {
8
9
  type: string;
9
10
  description: string;
10
11
  };
12
+ productId?: undefined;
11
13
  };
12
14
  required: string[];
13
15
  };
14
- }[];
16
+ chatComponent?: undefined;
17
+ } | {
18
+ name: string;
19
+ description: string;
20
+ executionMode: string;
21
+ chatComponent: string;
22
+ parameters: {
23
+ type: string;
24
+ properties: {
25
+ productId: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ category?: undefined;
30
+ };
31
+ required: string[];
32
+ };
33
+ })[];
@@ -0,0 +1 @@
1
+ export declare const tools: never[];
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Server handler barrel — re-exports every module's server factory.
3
+ *
4
+ * When you add a `server.ts` to a module, just add one export line here.
5
+ * The CMS will auto-discover and register it.
6
+ */
7
+ export { createServerHandler as products } from './products/server';
8
+ export { createServerHandler as appointments } from './appointments/server';
9
+ export { createServerHandler as googleAnalytics } from './googleAnalytics/server';
@@ -1,25 +1 @@
1
- export declare const tools: {
2
- getData: {
3
- description: string;
4
- params: {
5
- size: {
6
- type: string;
7
- default: number;
8
- };
9
- };
10
- returns: {
11
- type: string;
12
- };
13
- };
14
- filterTable: {
15
- description: string;
16
- params: {
17
- filter: {
18
- type: string;
19
- };
20
- };
21
- returns: {
22
- type: string;
23
- };
24
- };
25
- };
1
+ export declare const tools: never[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneclick.dev/cms-core-modules",
3
- "version": "0.0.70",
3
+ "version": "0.0.72",
4
4
  "main": "dist/index.cjs.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -10,11 +10,13 @@
10
10
  "require": "./dist/index.cjs.js",
11
11
  "types": "./dist/index.d.ts"
12
12
  },
13
- "./dist/cms-core-modules.css": "./dist/cms-core-modules.css"
13
+ "./dist/cms-core-modules.css": "./dist/cms-core-modules.css",
14
+ "./server-handlers": "./src/server-handlers.ts"
14
15
  },
15
16
  "files": [
16
17
  "dist",
17
- "src/*/tools.ts"
18
+ "src/*/tools.ts",
19
+ "src/*/server.ts"
18
20
  ],
19
21
  "sideEffects": false,
20
22
  "scripts": {
@@ -23,7 +25,7 @@
23
25
  "peerDependencies": {
24
26
  "@formkit/drag-and-drop": "^0.5.3",
25
27
  "@internationalized/date": "^3.8.0",
26
- "@oneclick.dev/cms-kit": "0.0.82",
28
+ "@oneclick.dev/cms-kit": "0.0.84",
27
29
  "@tanstack/vue-table": "^8.21.3",
28
30
  "@vee-validate/zod": "^4.15.0",
29
31
  "@vue-flow/core": "^1.48.1",
@@ -42,9 +44,9 @@
42
44
  },
43
45
  "devDependencies": {
44
46
  "@floating-ui/dom": "^1.7.4",
45
- "@tiptap/extension-collaboration": "3.6.6",
46
- "@tiptap/extension-node-range": "3.6.6",
47
- "@tiptap/y-tiptap": "3.0.0",
47
+ "@tiptap/extension-collaboration": "3.20.0",
48
+ "@tiptap/extension-node-range": "3.20.0",
49
+ "@tiptap/y-tiptap": "3.0.2",
48
50
  "@vitejs/plugin-vue": "^6.0.3",
49
51
  "@vue-flow/core": "^1.48.1",
50
52
  "typescript": "^5.9.3",
@@ -52,19 +54,20 @@
52
54
  "vite-plugin-dts": "^4.5.4"
53
55
  },
54
56
  "dependencies": {
55
- "@tiptap/core": "3.6.1",
56
- "@tiptap/extension-bubble-menu": "2.24.0",
57
- "@tiptap/extension-collaboration": "3.6.6",
58
- "@tiptap/extension-collaboration-caret": "3.6.6",
59
- "@tiptap/extension-document": "3.10.4",
60
- "@tiptap/extension-node-range": "3.6.6",
61
- "@tiptap/extension-underline": "3.4.5",
62
- "@tiptap/extension-unique-id": "3.6.1",
63
- "@tiptap/extensions": "3.6.5",
64
- "@tiptap/pm": "2.24.0",
65
- "@tiptap/starter-kit": "2.24.0",
66
- "@tiptap/vue-3": "2.24.0",
67
- "@tiptap/y-tiptap": "3.0.0",
57
+ "@tiptap/core": "3.20.0",
58
+ "@tiptap/extension-bubble-menu": "3.20.0",
59
+ "@tiptap/extension-collaboration": "3.20.0",
60
+ "@tiptap/extension-collaboration-caret": "3.20.0",
61
+ "@tiptap/extension-document": "3.20.0",
62
+ "@tiptap/extension-link": "^3.20.0",
63
+ "@tiptap/extension-node-range": "3.20.0",
64
+ "@tiptap/extension-underline": "3.20.0",
65
+ "@tiptap/extension-unique-id": "3.20.0",
66
+ "@tiptap/extensions": "3.20.0",
67
+ "@tiptap/pm": "3.20.0",
68
+ "@tiptap/starter-kit": "3.20.0",
69
+ "@tiptap/vue-3": "3.20.0",
70
+ "@tiptap/y-tiptap": "3.0.2",
68
71
  "@unovis/ts": "^1.5.2",
69
72
  "@unovis/vue": "^1.5.2",
70
73
  "iso-639-1": "^3.1.5",
@@ -72,7 +75,6 @@
72
75
  "prosemirror-model": "^1.25.4",
73
76
  "prosemirror-state": "^1.4.4",
74
77
  "tiptap-extension-auto-joiner": "0.1.3",
75
- "tiptap-extension-global-drag-handle": "0.1.18",
76
78
  "unplugin-auto-import": "^20.3.0",
77
79
  "vue-grid-layout-v3": "^3.1.2",
78
80
  "world-countries": "^5.1.0",
@@ -0,0 +1,195 @@
1
+ import { createRouter, defineEventHandler, createError, getRouterParam, getQuery } from 'h3'
2
+
3
+ /**
4
+ * Dependencies injected by the CMS when creating this handler.
5
+ * Modules never import CMS internals directly — they receive them here.
6
+ */
7
+ export interface ModuleHandlerDeps {
8
+ /** Initialize a Firebase Admin app for a project-level integration */
9
+ initFirebase: (event: any, integrationId: string) => Promise<any>
10
+ /** Normalize Firestore Timestamp fields to plain dates */
11
+ normalizeTimestamps: (data: any) => any
12
+ }
13
+
14
+ /**
15
+ * Appointments module server handler factory.
16
+ *
17
+ * Routes (relative to `/api/v1/modules/:instanceId/`):
18
+ * GET /appointments → list recent appointments/reservations
19
+ * GET /appointments/find → find appointment by name, email, date
20
+ * GET /appointments/:appointmentId → get single appointment/reservation
21
+ */
22
+ export function createServerHandler(deps: ModuleHandlerDeps) {
23
+ const { initFirebase, normalizeTimestamps } = deps
24
+ const router = createRouter()
25
+
26
+ /**
27
+ * Resolve the Firebase app + collection names from the module instance config.
28
+ */
29
+ async function getFirebaseContext(event: any) {
30
+ const { supabase, instanceId } = event.context.module
31
+
32
+ const { data: moduleRow, error } = await supabase
33
+ .from('project_modules')
34
+ .select('config')
35
+ .eq('id', instanceId)
36
+ .single()
37
+
38
+ if (error || !moduleRow?.config) {
39
+ throw createError({ statusCode: 500, statusMessage: 'Failed to load module config.' })
40
+ }
41
+
42
+ const config = moduleRow.config as Record<string, any>
43
+ const integrationId = config.project as string
44
+ const reservationsCollection = (config.reservationsCollection as string) || 'bookings_orders'
45
+ const agendaCollection = (config.agendaCollection as string) || 'agendas'
46
+
47
+ if (!integrationId) {
48
+ throw createError({ statusCode: 400, statusMessage: 'Appointments module has no Firebase integration configured.' })
49
+ }
50
+
51
+ const firebase = await initFirebase(event, integrationId)
52
+ return { firebase, reservationsCollection, agendaCollection }
53
+ }
54
+
55
+ /**
56
+ * Flatten a booking order into individual reservation rows for the response.
57
+ */
58
+ function flattenOrder(order: any) {
59
+ const reservations = order.reservations || []
60
+ return reservations.map((res: any) => ({
61
+ orderId: order.id,
62
+ reservationId: res.id,
63
+ customerInfo: order.customerInfo,
64
+ date: res.date,
65
+ startTime: res.timeslot?.startTime,
66
+ endTime: res.timeslot?.endTime,
67
+ spots: res.spots,
68
+ status: order.status,
69
+ reservationStatus: res.status,
70
+ resourceId: res.resourceId,
71
+ reservationPrice: res.totalPrice,
72
+ reservationBasePrice: res.basePrice,
73
+ reservationAddOnsPrice: res.addOnsPrice,
74
+ pricingOption: res.pricingOption,
75
+ amountDue: order.amountDue,
76
+ amountPaid: order.amountPaid,
77
+ createdAt: order.createdAt,
78
+ }))
79
+ }
80
+
81
+ // ── GET /appointments (recent) ─────────────────────
82
+ router.get('/appointments', defineEventHandler(async (event) => {
83
+ const query = getQuery(event)
84
+ const limit = Math.min(Number(query.quantity) || 20, 100)
85
+
86
+ try {
87
+ const { firebase, reservationsCollection } = await getFirebaseContext(event)
88
+
89
+ const snapshot = await firebase
90
+ .firestore()
91
+ .collection(reservationsCollection)
92
+ .orderBy('createdAt', 'desc')
93
+ .limit(limit)
94
+ .get()
95
+
96
+ const appointments = snapshot.docs.flatMap((doc: any) =>
97
+ flattenOrder(normalizeTimestamps({ id: doc.id, ...doc.data() }))
98
+ )
99
+
100
+ return {
101
+ count: appointments.length,
102
+ appointments,
103
+ }
104
+ } catch (err: any) {
105
+ console.error('Appointments handler — list error:', err)
106
+ throw createError({
107
+ statusCode: err.statusCode || 500,
108
+ statusMessage: err.statusMessage || 'Failed to list appointments',
109
+ })
110
+ }
111
+ }))
112
+
113
+ // ── GET /appointments/find?name=&email=&date= ──────
114
+ router.get('/appointments/find', defineEventHandler(async (event) => {
115
+ const query = getQuery(event)
116
+ const name = (query.name as string || '').toLowerCase().trim()
117
+ const email = (query.email as string || '').toLowerCase().trim()
118
+ const date = query.date as string | undefined // YYYY-MM-DD
119
+
120
+ try {
121
+ const { firebase, reservationsCollection } = await getFirebaseContext(event)
122
+
123
+ // Build Firestore query — we always have at least a date
124
+ let fbQuery: FirebaseFirestore.Query = firebase.firestore().collection(reservationsCollection)
125
+
126
+ // If an email is provided, use it as a server-side filter (exact match on Firestore)
127
+ if (email) {
128
+ fbQuery = fbQuery.where('customerInfo.email', '==', email)
129
+ }
130
+
131
+ const snapshot = await fbQuery.orderBy('createdAt', 'desc').limit(200).get()
132
+
133
+ let results = snapshot.docs.flatMap((doc: any) =>
134
+ flattenOrder(normalizeTimestamps({ id: doc.id, ...doc.data() }))
135
+ )
136
+
137
+ // Client-side filter: date (reservation date, not order date)
138
+ if (date) {
139
+ results = results.filter((r: any) => r.date === date)
140
+ }
141
+
142
+ // Client-side filter: name (fuzzy — first or last name contains)
143
+ if (name) {
144
+ results = results.filter((r: any) => {
145
+ const first = (r.customerInfo?.firstName || '').toLowerCase()
146
+ const last = (r.customerInfo?.lastName || '').toLowerCase()
147
+ return first.includes(name) || last.includes(name) || `${first} ${last}`.includes(name)
148
+ })
149
+ }
150
+
151
+ return {
152
+ count: results.length,
153
+ appointments: results,
154
+ }
155
+ } catch (err: any) {
156
+ console.error('Appointments handler — find error:', err)
157
+ throw createError({
158
+ statusCode: err.statusCode || 500,
159
+ statusMessage: err.statusMessage || 'Failed to find appointments',
160
+ })
161
+ }
162
+ }))
163
+
164
+ // ── GET /appointments/:appointmentId ───────────────
165
+ router.get('/appointments/:appointmentId', defineEventHandler(async (event) => {
166
+ const appointmentId = getRouterParam(event, 'appointmentId')
167
+ if (!appointmentId) {
168
+ throw createError({ statusCode: 400, statusMessage: 'Appointment ID is required.' })
169
+ }
170
+
171
+ try {
172
+ const { firebase, reservationsCollection } = await getFirebaseContext(event)
173
+ console.log('Fetching appointment with ID:', appointmentId, reservationsCollection)
174
+ const snapshot = await firebase.firestore().collection(reservationsCollection).doc(appointmentId).get()
175
+
176
+ if (!snapshot.exists) {
177
+ throw createError({ statusCode: 404, statusMessage: 'Appointment not found.' })
178
+ }
179
+
180
+ const order = normalizeTimestamps({ id: snapshot.id, ...snapshot.data() })
181
+ return {
182
+ ...order,
183
+ reservations: flattenOrder(order),
184
+ }
185
+ } catch (err: any) {
186
+ console.error('Appointments handler — get error:', err)
187
+ throw createError({
188
+ statusCode: err.statusCode || 500,
189
+ statusMessage: err.statusMessage || 'Failed to get appointment',
190
+ })
191
+ }
192
+ }))
193
+
194
+ return router.handler
195
+ }
@@ -1,25 +1,65 @@
1
- export const tools = {
2
- getData: {
3
- description: 'Gets the current table data',
4
- params: {
5
- size: {
6
- type: 'number',
7
- default: 10
8
- }
9
- },
10
- returns: {
11
- type: 'array'
1
+ export const tools = [
2
+ {
3
+ name: "findAppointment",
4
+ description: 'Show a card in chat with details of an appointment/booking/reservation/...',
5
+ executionMode: 'component',
6
+ chatComponent: 'AppointmentDetailsCard',
7
+ parameters: {
8
+ type: "object",
9
+ properties: {
10
+ name: {
11
+ type: "string",
12
+ description: "Name of the booker"
13
+ },
14
+ email: {
15
+ type: "string",
16
+ description: "Email of the booker"
17
+ },
18
+ date: {
19
+ type: "string",
20
+ description: "Date of the appointment (YYYY-MM-DD)"
21
+ }
22
+ },
23
+ required: [
24
+ "date"
25
+ ]
12
26
  }
13
27
  },
14
- filterTable: {
15
- description: 'Filters the current table data',
16
- params: {
17
- filter: {
18
- type: 'string'
19
- }
20
- },
21
- returns: {
22
- type: 'array'
28
+ {
29
+ name: "getRecentAppointments",
30
+ description: 'Show a table in chat with recent appointments, default loading the latest 20 appointments.',
31
+ executionMode: 'component',
32
+ chatComponent: 'AppointmentListTable',
33
+ parameters: {
34
+ type: "object",
35
+ properties: {
36
+ quantity: {
37
+ type: "number",
38
+ description: "Number of appointments to load. default: 20 max: 100",
39
+ default: 20 // TODO implement default (and min/max?)
40
+ }
41
+ },
42
+ required: [
43
+ "quantity"
44
+ ]
45
+ }
46
+ },
47
+ {
48
+ name: "changeAppointmentDetails",
49
+ description: 'Show a card in chat where user can edit name, email and date of an existing appointment.',
50
+ executionMode: 'component',
51
+ chatComponent: 'AppointmentEditor',
52
+ parameters: {
53
+ type: "object",
54
+ properties: {
55
+ orderId: {
56
+ type: "string",
57
+ description: "ID of the order / appointment. This is NOT the reservation ID."
58
+ },
59
+ },
60
+ required: [
61
+ "orderId"
62
+ ]
23
63
  }
24
64
  }
25
- }
65
+ ]