@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.
- package/dist/Acquisition-D_Qx7XRY.mjs +400 -0
- package/dist/Acquisition-_-cq972V.js +1 -0
- package/dist/AppointmentDetailsCard-CtK0Cj_O.js +1 -0
- package/dist/AppointmentDetailsCard-i4Ky8WnK.mjs +161 -0
- package/dist/AppointmentEditor-BeOtYV6u.mjs +196 -0
- package/dist/AppointmentEditor-CaTfbkIf.js +1 -0
- package/dist/AppointmentListTable-CQ3uXfa8.js +1 -0
- package/dist/AppointmentListTable-G5dIeCYj.mjs +159 -0
- package/dist/Audience-BdlrWkY-.mjs +489 -0
- package/dist/Audience-QnFQs93n.js +1 -0
- package/dist/Content-C-4Cdniz.js +1 -0
- package/dist/Content-DW6xvbUo.mjs +358 -0
- package/dist/ContentEditor-3JFlC9N1.js +313 -0
- package/dist/{ContentEditor-B7IYLH91.mjs → ContentEditor-7SDjf5Hk.mjs} +16535 -25527
- package/dist/CountryBreakdownCard-BUfJ-umQ.js +1 -0
- package/dist/CountryBreakdownCard-Dc_vZ9dJ.mjs +196 -0
- package/dist/{Create-D8NBEkJU.js → Create-CRn2sMHp.js} +1 -1
- package/dist/{Create-BDiyCtrp.mjs → Create-DtFzwxn_.mjs} +1 -1
- package/dist/DateFormatter-C9qfmQnP.js +1 -0
- package/dist/{DateFormatter-DAZP9a6L.mjs → DateFormatter-DfIwyrnF.mjs} +399 -258
- package/dist/{Detail-Cxd2VMOl.js → Detail-BcboL7NF.js} +1 -1
- package/dist/{Detail-CxUU6BpO.mjs → Detail-BwDnY42G.mjs} +1 -1
- package/dist/{Detail-DTHaYmyl.js → Detail-Bxi7lG9x.js} +1 -1
- package/dist/{Detail-BGD75ul4.mjs → Detail-CVgWHbMC.mjs} +22 -18
- package/dist/DeviceBreakdownCard-BJcQNo8a.mjs +159 -0
- package/dist/DeviceBreakdownCard-CsoK6JUO.js +1 -0
- package/dist/{Find-B4sAEx0B.mjs → Find-XPcJxeRH.mjs} +1 -1
- 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
- package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-CJ7hh7ug.mjs → NewReservationDialog.vue_vue_type_script_setup_true_lang-Ds7z0qeH.mjs} +1 -1
- package/dist/{Overview-HvlDEgqi.mjs → Overview--XpvBbqz.mjs} +1 -1
- package/dist/Overview-B8OF-JJr.mjs +567 -0
- package/dist/Overview-DSU1Nh7B.js +1 -0
- package/dist/PeakHoursCard-BNl_U1r_.js +1 -0
- package/dist/PeakHoursCard-hV8PdGsf.mjs +182 -0
- package/dist/ProductDetailsCard-BwktdlIf.js +1 -0
- package/dist/ProductDetailsCard-CJBkZSER.mjs +121 -0
- package/dist/RealtimeCard-CRJHS64l.mjs +126 -0
- package/dist/RealtimeCard-CxtqQHee.js +1 -0
- package/dist/SearchTermsCard-DGRbo5ZP.js +1 -0
- package/dist/SearchTermsCard-Dwa-P7My.mjs +201 -0
- package/dist/SeoHealth-BqlYiSCj.js +1 -0
- package/dist/SeoHealth-DG004AsJ.mjs +523 -0
- package/dist/{TableView-C4NNrJpP.js → TableView-CU0a9ih2.js} +162 -199
- package/dist/{TableView-B5OyApnP.mjs → TableView-fYC7kB6j.mjs} +23309 -24320
- package/dist/TopPagesCard-Dv52to_J.mjs +159 -0
- package/dist/TopPagesCard-pZ-nAsaI.js +1 -0
- package/dist/TrafficSourcesCard-CBOPV1J1.js +1 -0
- package/dist/TrafficSourcesCard-CMhcj2k2.mjs +197 -0
- package/dist/VisitorStatsCard-BHn4oSnt.mjs +174 -0
- package/dist/VisitorStatsCard-tApB_7v8.js +1 -0
- package/dist/{agenda-CTG6N_Lt.mjs → agenda-XqvbrU72.mjs} +2 -2
- package/dist/{agenda-OSkAh0Oa.js → agenda-wNFDKn0G.js} +1 -1
- package/dist/array-CbATeQbk.js +1 -0
- package/dist/array-CvmZXzxF.mjs +108 -0
- package/dist/cms-core-modules.css +1 -1
- package/dist/{exceptions-CEXIFw47.mjs → exceptions-CLgeeUSy.mjs} +1 -1
- package/dist/{exceptions-BvMTqtof.js → exceptions-wEQEVzIs.js} +1 -1
- package/dist/floating-ui.dom-BO2Hr6mz.mjs +1292 -0
- package/dist/floating-ui.dom-CAr9LGoC.js +1 -0
- package/dist/{index-AmUV8LZQ.mjs → index-B-lVEpFX.mjs} +1 -1
- package/dist/index-BuzLn4Km.js +54 -0
- package/dist/index-C4YUVWzJ.js +75 -0
- package/dist/index-CMk3uhUt.mjs +3837 -0
- package/dist/{index-Uf7TwBuW.mjs → index-CrGjxSwa.mjs} +4 -4
- package/dist/index-D2DYuz8R.mjs +1090 -0
- package/dist/index-D3L8WAJI.js +58 -0
- package/dist/index-D7JBu6iT.mjs +34 -0
- package/dist/index-DQYBP8Js.js +158 -0
- package/dist/index-DjDCYQ_6.mjs +441 -0
- package/dist/index-DwHYfZl_.js +1 -0
- package/dist/{index-Biuv2zTx-DBCin9DT.mjs → index-N6w5-hDF-6k_ELHYC.mjs} +1234 -1234
- package/dist/index-N6w5-hDF-DCuxwPBX.js +88 -0
- package/dist/index-O_QNuTdG.js +35 -0
- package/dist/index-_2lRVt_k.mjs +2942 -0
- package/dist/index-p5Uqu8c2.mjs +1438 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +383 -86
- package/dist/{resources-DgPnEv76.mjs → resources-CFR_s89Z.mjs} +1 -1
- package/dist/src/appointments/chat-components/AppointmentDetailsCard.vue.d.ts +14 -0
- package/dist/src/appointments/chat-components/AppointmentEditor.vue.d.ts +14 -0
- package/dist/src/appointments/chat-components/AppointmentListTable.vue.d.ts +14 -0
- package/dist/src/appointments/index.d.ts +70 -0
- package/dist/src/appointments/server.d.ts +19 -0
- package/dist/src/appointments/tools.d.ts +56 -16
- package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Button.vue.d.ts +3 -1
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/CustomClass.d.ts +14 -0
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/NodeDragPointerEventsFix.d.ts +2 -0
- package/dist/src/contentManager/components/content-editor/tiptap-menus/BubbleMenuClassBuilder.vue.d.ts +19 -0
- package/dist/src/contentManager/components/content-editor/tiptap-menus/BubbleMenuLinkBuilder.vue.d.ts +19 -0
- package/dist/src/googleAnalytics/chat-components/CountryBreakdownCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/chat-components/DeviceBreakdownCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/chat-components/PeakHoursCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/chat-components/RealtimeCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/chat-components/SearchTermsCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/chat-components/TopPagesCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/chat-components/TrafficSourcesCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/chat-components/VisitorStatsCard.vue.d.ts +14 -0
- package/dist/src/googleAnalytics/config.d.ts +39 -0
- package/dist/src/googleAnalytics/index.d.ts +116 -0
- package/dist/src/googleAnalytics/metadata.d.ts +2 -0
- package/dist/src/googleAnalytics/pages/Acquisition.vue.d.ts +2 -0
- package/dist/src/googleAnalytics/pages/Audience.vue.d.ts +2 -0
- package/dist/src/googleAnalytics/pages/Content.vue.d.ts +2 -0
- package/dist/src/googleAnalytics/pages/Overview.vue.d.ts +2 -0
- package/dist/src/googleAnalytics/pages/SeoHealth.vue.d.ts +2 -0
- package/dist/src/googleAnalytics/permissions.d.ts +1 -0
- package/dist/src/googleAnalytics/server.d.ts +35 -0
- package/dist/src/googleAnalytics/tools.d.ts +59 -0
- package/dist/src/index.d.ts +6 -5
- package/dist/src/mailTemplates/components/TemplateList.vue.d.ts +2 -0
- package/dist/src/mailTemplates/routes.d.ts +5 -0
- package/dist/src/mailTemplates/tools.d.ts +1 -0
- package/dist/src/productCollections/tools.d.ts +1 -0
- package/dist/src/products/chat-components/ProductDetailsCard.vue.d.ts +14 -0
- package/dist/src/products/index.d.ts +24 -2
- package/dist/src/products/server.d.ts +19 -0
- package/dist/src/products/tools.d.ts +21 -2
- package/dist/src/promoCodes/tools.d.ts +1 -0
- package/dist/src/server-handlers.d.ts +9 -0
- package/dist/src/table/tools.d.ts +1 -25
- package/package.json +23 -21
- package/src/appointments/server.ts +195 -0
- package/src/appointments/tools.ts +61 -21
- package/src/googleAnalytics/server.ts +1188 -0
- package/src/googleAnalytics/tools.ts +158 -0
- package/src/mailTemplates/tools.ts +1 -0
- package/src/productCollections/tools.ts +1 -0
- package/src/products/server.ts +146 -0
- package/src/products/tools.ts +19 -0
- package/src/promoCodes/tools.ts +1 -0
- package/src/table/tools.ts +1 -25
- package/dist/ContentEditor-LOn09n7N.js +0 -307
- package/dist/DateFormatter-Bw-SCfUS.js +0 -1
- package/dist/floating-ui.dom-CBBY0Ism.js +0 -1
- package/dist/floating-ui.dom-xfqXu4GA.mjs +0 -1138
- package/dist/index-Biuv2zTx-DHiVlXFj.js +0 -88
- package/dist/index-HLGxDG-0.mjs +0 -7746
- package/dist/index-n2p9TTRq.js +0 -245
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/DragHandle.d.ts +0 -76
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/NodeDragPointerEventsFix.d.ts +0 -7
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/drag-handle-plugin.d.ts +0 -25
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/drag-handle.d.ts +0 -50
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/cloneElement.d.ts +0 -1
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/dragHandler.d.ts +0 -2
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/findNextElementFromCursor.d.ts +0 -17
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/getComputedStyle.d.ts +0 -1
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/getInnerCoords.d.ts +0 -5
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/getOuterNode.d.ts +0 -3
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/minMax.d.ts +0 -1
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/helpers/removeNode.d.ts +0 -1
- package/dist/src/content-manager/components/content-editor/tiptap-extensions/extension-drag-handle/index.d.ts +0 -4
- package/dist/src/mail-templates/tools.d.ts +0 -25
- package/dist/src/product-collections/tools.d.ts +0 -25
- package/dist/src/promo-codes/tools.d.ts +0 -25
- package/src/mail-templates/tools.ts +0 -25
- package/src/product-collections/tools.ts +0 -25
- package/src/promo-codes/tools.ts +0 -25
- /package/dist/src/{content-manager → contentManager}/components/components/ComponentDialog.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/components/ComponentGridItem.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/ApiDocs.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/ContentLayout.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/ContentSettings.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/ContentStructuredContentSections.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/Header.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/LivePreviewWrapper.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/Locales.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/NewSectionDialog.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/PageSettings.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/SEO.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/SidebarSectionWrapper.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/Status.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/Versions.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/code-examples.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Button.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Card.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Card.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Column.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Column.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/ComponentEditorNode.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Container.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Container.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Divider.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Divider.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/EmptySpace.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/EmptySpace.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Heading.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Heading.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Image.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Image.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/LockBlocks.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Map.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Map.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/OnlyContainerDocument.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Paragraph.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Paragraph.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Row.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Row.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/ScopedSelectAll.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Stack.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Stack.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/TrailingNodeInContainers.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Video.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/Video.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/DetailsNodeView.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/content/details-content.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/content/index.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/details.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/helpers/findClosestVisibleNode.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/helpers/isNodeVisible.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/helpers/setGapCursor.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/index.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/summary/details-summary.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/extension-details/summary/index.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/NodeLabel.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/ResizeHandlers.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/TopMarginDragger.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/useContainerFocus.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-extensions/helpers/useFocus.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/BubbleMenuToggleButton.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/DefaultBubbleMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/ElementEditorMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/EmojiMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/NewNodeView.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/SlashMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/SlashMenuButton.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/ButtonMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/CardMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/ColumnMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/DividerMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/EmptySpaceMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/HeadingMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/ImageMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/MapMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/RowMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/StackMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/TextMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/VideoMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/content-editor/tiptap-menus/element-editor-views/index.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/overview/CollectionDialog.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/overview/CollectionsGridView.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/overview/ContentEntryContextMenu.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/overview/FilterPopover.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/overview/ListView.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/styling/ButtonStyleDialog.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/styling/CardStyleDialog.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/components/styling/SectionStyleDialog.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/config.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/index.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/index.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/metadata.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/pages/Components.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/pages/ContentEditor.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/pages/Entries.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/pages/GlobalStyling.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/pages/Overview.vue.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/permissions.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/routes.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/stores/useTableStore.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/tools.d.ts +0 -0
- /package/dist/src/{content-manager → contentManager}/types.d.ts +0 -0
- /package/dist/src/{mail-templates/components/TemplateList.vue.d.ts → googleAnalytics/index.vue.d.ts} +0 -0
- /package/dist/src/{mail-templates → googleAnalytics}/routes.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/config.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/index.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/index.vue.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/metadata.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/pages/Detail.vue.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/pages/Overview.vue.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/permissions.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/stores/useTableStore.d.ts +0 -0
- /package/dist/src/{mail-templates → mailTemplates}/types.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/components/detail/Main.vue.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/components/detail/SEO.vue.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/components/detail/Status.vue.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/components/overview/ListView.vue.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/composables/useTable.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/config.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/index.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/index.vue.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/metadata.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/pages/Detail.vue.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/pages/Overview.vue.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/permissions.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/routes.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/stores/useTableStore.d.ts +0 -0
- /package/dist/src/{product-collections → productCollections}/types.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/components/create/DateRange.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/components/create/MultiCodes.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/components/create/Note.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/components/create/SingleCode.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/components/create/TypeAndValue/TypeDetailDialog.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/components/create/TypeAndValue/TypeManageDialog.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/components/create/TypeAndValue/index.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/config.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/index.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/index.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/metadata.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/pages/Create.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/pages/Detail.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/pages/Find.vue.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/permissions.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/routes.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/stores/useTableStore.d.ts +0 -0
- /package/dist/src/{promo-codes → promoCodes}/types.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/components/detail/Condition.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/components/detail/Countries.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/components/detail/Example.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/components/detail/Main.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/components/overview/ListView.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/composables/useTable.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/config.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/index.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/index.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/metadata.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/pages/Detail.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/pages/Overview.vue.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/permissions.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/routes.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/stores/useTableStore.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/tools.d.ts +0 -0
- /package/dist/src/{shipping-options → shippingOptions}/types.d.ts +0 -0
- /package/src/{content-manager → contentManager}/tools.ts +0 -0
- /package/src/{shipping-options → shippingOptions}/tools.ts +0 -0
|
@@ -4,7 +4,7 @@ import { Info as Wt, GripVertical as Qe, CircleX as Gt, Trash2 as Zt, PlusCircle
|
|
|
4
4
|
import { animations as yt } from "@formkit/drag-and-drop";
|
|
5
5
|
import { useConfirmation as Dt, useModuleRoute as St, useFirebaseIntegration as Ct, useModulePermissions as an, useModuleBreadcrumbs as sn } from "@oneclick.dev/cms-kit";
|
|
6
6
|
import { g as dn } from "./google-CvtuJwgk.mjs";
|
|
7
|
-
import { t as
|
|
7
|
+
import { t as ae } from "./index-RLz1QPrf.mjs";
|
|
8
8
|
const un = { class: "flex flex-col gap-4" }, cn = { class: "flex flex-col" }, fn = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "text-red-500 text-sm mt-1"
|
|
@@ -2226,11 +2226,11 @@ const Bo = {
|
|
|
2226
2226
|
const A = (k) => k.split("|").map((y) => {
|
|
2227
2227
|
const [$, R] = y.split(":");
|
|
2228
2228
|
return { optionId: $, valueId: R };
|
|
2229
|
-
}).map((y) => o.options?.[y.optionId]?.values?.find((
|
|
2229
|
+
}).map((y) => o.options?.[y.optionId]?.values?.find((se) => se.id === y.valueId)?.value || "").join(" "), z = (k) => k.split("|").map((y) => {
|
|
2230
2230
|
const [$, R] = y.split(":");
|
|
2231
2231
|
return { optionId: $, valueId: R };
|
|
2232
2232
|
}).map((y) => {
|
|
2233
|
-
const $ = o.options?.[y.optionId], R = $?.values?.find((
|
|
2233
|
+
const $ = o.options?.[y.optionId], R = $?.values?.find((se) => se.id === y.valueId);
|
|
2234
2234
|
return {
|
|
2235
2235
|
optionId: $?.id,
|
|
2236
2236
|
option: $?.name,
|
|
@@ -2264,7 +2264,7 @@ const Bo = {
|
|
|
2264
2264
|
});
|
|
2265
2265
|
}, K = (k) => _.value.filter((y) => y.options?.find(($) => $.optionId === r.value)?.valueId === k).every((y) => !y.image), j = (k) => {
|
|
2266
2266
|
const p = _.value.filter(($) => $.options?.find((R) => R.optionId === r.value)?.valueId === k);
|
|
2267
|
-
return p.filter(($, R) => $.image && p.findIndex((
|
|
2267
|
+
return p.filter(($, R) => $.image && p.findIndex((se) => se.image === $.image) === R).length === 1;
|
|
2268
2268
|
}, Q = (k) => _.value.filter((y) => y.options?.find(($) => $.optionId === r.value)?.valueId === k).filter((y) => y.image)[0]?.image, oe = (k) => _.value.filter((y) => y.options?.find(($) => $.optionId === r.value)?.valueId === k).filter((y) => y.image)[1]?.image, je = (k) => {
|
|
2269
2269
|
const p = _.value.filter(($) => $.options?.find((R) => R.valueId === k));
|
|
2270
2270
|
if (p.length === 0) return "0";
|
|
@@ -2282,7 +2282,7 @@ const Bo = {
|
|
|
2282
2282
|
}), k;
|
|
2283
2283
|
}, ye = X(null), ce = X(""), Ve = async (k, p) => {
|
|
2284
2284
|
k.preventDefault();
|
|
2285
|
-
const y = S?.value?.filter((R) => R.options?.find((
|
|
2285
|
+
const y = S?.value?.filter((R) => R.options?.find((se) => se.optionId === r.value)?.valueId === p.id).map((R) => R.price), $ = y.length === 0 ? !0 : y.every((R) => R === y[0]);
|
|
2286
2286
|
ye.value = p.id, ce.value = $ ? y[0].toString() : "", await Te(), document.getElementById(`variant-price-${p.id}`)?.focus(), document.getElementById(`variant-price-${p.id}`)?.select();
|
|
2287
2287
|
}, C = (k) => {
|
|
2288
2288
|
E(k), ye.value = null, ce.value = "";
|
|
@@ -2306,7 +2306,7 @@ const Bo = {
|
|
|
2306
2306
|
setVariantMap: le,
|
|
2307
2307
|
refreshVariants: T
|
|
2308
2308
|
}), (k, p) => {
|
|
2309
|
-
const y = v("SelectValue"), $ = v("SelectTrigger"), R = v("SelectItem"),
|
|
2309
|
+
const y = v("SelectValue"), $ = v("SelectTrigger"), R = v("SelectItem"), se = v("SelectContent"), Mt = v("Select"), De = v("Button"), st = v("Input"), Ft = v("PopoverTrigger"), Lt = v("RadioGroupItem"), Bt = v("Label"), Rt = v("RadioGroup"), Ut = v("PopoverContent"), jt = v("Popover"), Ye = v("Checkbox"), Ke = v("TooltipTrigger"), Je = v("TooltipContent"), qe = v("Tooltip"), it = v("MediaPickerDialog"), We = v("NumberFieldInput"), Ge = v("NumberFieldContent"), Ze = v("NumberField"), Ht = v("NumberFieldDecrement"), Xt = v("NumberFieldIncrement");
|
|
2310
2310
|
return e.hide ? M("", !0) : (h(), w("div", ol, [
|
|
2311
2311
|
u("div", ll, [
|
|
2312
2312
|
Object.keys(e.options).length > 1 ? (h(), w("div", rl, [
|
|
@@ -2322,7 +2322,7 @@ const Bo = {
|
|
|
2322
2322
|
]),
|
|
2323
2323
|
_: 1
|
|
2324
2324
|
}),
|
|
2325
|
-
s(
|
|
2325
|
+
s(se, null, {
|
|
2326
2326
|
default: f(() => [
|
|
2327
2327
|
(h(!0), w(q, null, ie(e.options, (P) => (h(), L(R, {
|
|
2328
2328
|
key: P.id,
|
|
@@ -3268,22 +3268,26 @@ const Bo = {
|
|
|
3268
3268
|
let E = B(C);
|
|
3269
3269
|
if (D.value) {
|
|
3270
3270
|
if (await Ve(E.slug)) {
|
|
3271
|
-
|
|
3271
|
+
ae.error("Product slug already exists");
|
|
3272
3272
|
return;
|
|
3273
3273
|
}
|
|
3274
3274
|
E.createdAt = /* @__PURE__ */ new Date(), E.updatedAt = /* @__PURE__ */ new Date();
|
|
3275
3275
|
const le = await x.add(o.config.productCollection, E);
|
|
3276
|
-
r(le.id),
|
|
3276
|
+
r(le.id), ae.success("Product created");
|
|
3277
3277
|
} else {
|
|
3278
3278
|
if (T.value !== E.slug && await Ve(E.slug)) {
|
|
3279
|
-
|
|
3279
|
+
ae.error("Product slug already exists");
|
|
3280
3280
|
return;
|
|
3281
3281
|
}
|
|
3282
|
-
E.updatedAt = /* @__PURE__ */ new Date(), await x.update(o.config.productCollection, d.value.productId, E), r(`${d.value.productId}`),
|
|
3282
|
+
E.updatedAt = /* @__PURE__ */ new Date(), await x.update(o.config.productCollection, d.value.productId, E), r(`${d.value.productId}`), ae.success("Product updated");
|
|
3283
3283
|
}
|
|
3284
3284
|
c.value = !1;
|
|
3285
3285
|
}), He = async () => {
|
|
3286
3286
|
const C = await x.get(o.config.productCollection, d.value.productId);
|
|
3287
|
+
if (!C) {
|
|
3288
|
+
ae.error("Product not found"), r("");
|
|
3289
|
+
return;
|
|
3290
|
+
}
|
|
3287
3291
|
C.createdAt = new Date(C.createdAt), C.updatedAt = new Date(C.updatedAt), C.options?.forEach((E) => {
|
|
3288
3292
|
E.values.forEach((le) => {
|
|
3289
3293
|
le.touched = !0;
|
|
@@ -3296,22 +3300,22 @@ const Bo = {
|
|
|
3296
3300
|
E = C.slug + "-copy-" + le, le++;
|
|
3297
3301
|
C.id = void 0, C.createdAt = /* @__PURE__ */ new Date(), C.updatedAt = /* @__PURE__ */ new Date(), C.slug = E, C.status = "draft", C.title = C.title + " (copy)";
|
|
3298
3302
|
const k = await x.add(o.config.productCollection, C);
|
|
3299
|
-
r(k.id),
|
|
3303
|
+
r(k.id), ae.success("Product duplicated");
|
|
3300
3304
|
} catch {
|
|
3301
|
-
|
|
3305
|
+
ae.error("Failed to duplicate product");
|
|
3302
3306
|
}
|
|
3303
3307
|
}, ze = async () => {
|
|
3304
3308
|
try {
|
|
3305
|
-
await x.update(o.config.productCollection, d.value.productId, { status: "archived" }), S({ status: "archived" }, { force: !1 }),
|
|
3309
|
+
await x.update(o.config.productCollection, d.value.productId, { status: "archived" }), S({ status: "archived" }, { force: !1 }), ae.success("Product archived");
|
|
3306
3310
|
} catch {
|
|
3307
|
-
|
|
3311
|
+
ae.error("Failed to archive product");
|
|
3308
3312
|
}
|
|
3309
3313
|
}, ye = async () => {
|
|
3310
3314
|
if (await b("Are you sure you want to delete this product?"))
|
|
3311
3315
|
try {
|
|
3312
|
-
await x.remove(o.config.productCollection, d.value.productId), r(""),
|
|
3316
|
+
await x.remove(o.config.productCollection, d.value.productId), r(""), ae.success("Product deleted");
|
|
3313
3317
|
} catch {
|
|
3314
|
-
|
|
3318
|
+
ae.error("Failed to delete product");
|
|
3315
3319
|
}
|
|
3316
3320
|
};
|
|
3317
3321
|
async function ce() {
|
|
@@ -3339,7 +3343,7 @@ const Bo = {
|
|
|
3339
3343
|
u("div", xr, [
|
|
3340
3344
|
s(le, {
|
|
3341
3345
|
variant: "ghost",
|
|
3342
|
-
onClick: E[0] || (E[0] = (
|
|
3346
|
+
onClick: E[0] || (E[0] = (se) => m(r)(""))
|
|
3343
3347
|
}, {
|
|
3344
3348
|
default: f(() => [
|
|
3345
3349
|
s(m(nn), { class: "size-4" })
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { defineComponent as P, computed as _, ref as h, onMounted as R, resolveComponent as O, openBlock as i, createElementBlock as l, unref as s, createVNode as m, createElementVNode as o, toDisplayString as c, Fragment as k, renderList as L, normalizeStyle as q, normalizeClass as S, createBlock as G, resolveDynamicComponent as H, createTextVNode as p, createCommentVNode as J, withCtx as K } from "vue";
|
|
2
|
+
import { Loader2 as Q, Monitor as w, MousePointerClick as W, Users as X, ExternalLink as Y, Smartphone as Z, Tablet as ee } from "lucide-vue-next";
|
|
3
|
+
const te = { class: "w-full" }, se = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "flex items-center gap-2 py-3"
|
|
6
|
+
}, oe = {
|
|
7
|
+
key: 1,
|
|
8
|
+
class: "text-xs text-destructive py-2"
|
|
9
|
+
}, ne = {
|
|
10
|
+
key: 2,
|
|
11
|
+
class: "rounded-xl border bg-background p-4 text-center space-y-2"
|
|
12
|
+
}, re = {
|
|
13
|
+
key: 3,
|
|
14
|
+
class: "rounded-xl border bg-background overflow-hidden"
|
|
15
|
+
}, ae = { class: "px-3 py-2 border-b bg-muted/40 flex items-center justify-between" }, ie = { class: "flex items-center gap-2" }, le = { class: "text-[10px] text-muted-foreground" }, de = { class: "px-3 pt-3 pb-1" }, ce = { class: "flex h-3 rounded-full overflow-hidden" }, ue = { class: "divide-y" }, me = { class: "flex items-center gap-2" }, fe = { class: "text-xs font-medium capitalize flex-1" }, ve = { class: "text-sm font-semibold tabular-nums" }, pe = { class: "ml-6 mt-1 flex items-center gap-3 text-[10px] text-muted-foreground" }, xe = { class: "flex items-center gap-1" }, ge = { class: "flex items-center gap-1" }, he = { class: "px-3 py-2 border-t bg-muted/20 flex items-center justify-between" }, ye = { class: "text-[10px] text-muted-foreground" }, ke = /* @__PURE__ */ P({
|
|
16
|
+
__name: "DeviceBreakdownCard",
|
|
17
|
+
props: {
|
|
18
|
+
toolName: {},
|
|
19
|
+
instanceId: {},
|
|
20
|
+
instanceName: {},
|
|
21
|
+
moduleType: {},
|
|
22
|
+
resolvedArgs: {},
|
|
23
|
+
status: {}
|
|
24
|
+
},
|
|
25
|
+
emits: ["submit"],
|
|
26
|
+
setup(C, { emit: $ }) {
|
|
27
|
+
const u = C, N = $, z = useRoute(), A = _(() => z.params.slug), F = useModuleApi(u.instanceId), x = h(!0), v = h(null), r = h([]), g = h(null), M = (t) => {
|
|
28
|
+
const e = (t || "").toLowerCase();
|
|
29
|
+
return e === "mobile" || e === "smartphone" ? Z : e === "tablet" ? ee : w;
|
|
30
|
+
}, j = (t) => {
|
|
31
|
+
const e = (t || "").toLowerCase();
|
|
32
|
+
return e === "desktop" ? "bg-blue-500" : e === "mobile" || e === "smartphone" ? "bg-emerald-500" : e === "tablet" ? "bg-amber-500" : "bg-violet-500";
|
|
33
|
+
}, B = (t) => {
|
|
34
|
+
const e = (t || "").toLowerCase();
|
|
35
|
+
return e === "desktop" ? "text-blue-500" : e === "mobile" || e === "smartphone" ? "text-emerald-500" : e === "tablet" ? "text-amber-500" : "text-violet-500";
|
|
36
|
+
};
|
|
37
|
+
function I() {
|
|
38
|
+
const t = u.resolvedArgs?._cachedData;
|
|
39
|
+
return t ? (r.value = (t.devices || []).map((e) => ({
|
|
40
|
+
deviceCategory: e.device,
|
|
41
|
+
sessions: e.sessions,
|
|
42
|
+
totalUsers: e.users
|
|
43
|
+
})), g.value = u.resolvedArgs._fetchedAt || null, x.value = !1, !0) : !1;
|
|
44
|
+
}
|
|
45
|
+
async function T() {
|
|
46
|
+
const { startDate: t, endDate: e } = u.resolvedArgs || {};
|
|
47
|
+
x.value = !0, v.value = null;
|
|
48
|
+
try {
|
|
49
|
+
const a = new URLSearchParams();
|
|
50
|
+
t && a.set("startDate", t), e && a.set("endDate", e);
|
|
51
|
+
const n = await F.get(`/devices?${a.toString()}`);
|
|
52
|
+
r.value = n.rows || [], g.value = (/* @__PURE__ */ new Date()).toISOString();
|
|
53
|
+
const f = r.value.reduce((d, E) => d + (E.sessions || 0), 0);
|
|
54
|
+
D({
|
|
55
|
+
count: r.value.length,
|
|
56
|
+
devices: r.value.map((d) => ({
|
|
57
|
+
device: d.deviceCategory,
|
|
58
|
+
sessions: d.sessions,
|
|
59
|
+
users: d.totalUsers,
|
|
60
|
+
share: `${(d.sessions / f * 100).toFixed(1)}%`
|
|
61
|
+
})),
|
|
62
|
+
suggestion: r.value.length === 0 ? "No device data found for this period." : `Device breakdown: ${r.value.map((d) => `${d.deviceCategory} ${(d.sessions / f * 100).toFixed(0)}%`).join(", ")}.`
|
|
63
|
+
});
|
|
64
|
+
} catch (a) {
|
|
65
|
+
v.value = a?.data?.statusMessage || a?.message || "Failed to load device data", D(`Error loading device data: ${v.value}`);
|
|
66
|
+
} finally {
|
|
67
|
+
x.value = !1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
R(() => {
|
|
71
|
+
u.status === "completed" && I() || T();
|
|
72
|
+
});
|
|
73
|
+
function D(t) {
|
|
74
|
+
u.status !== "completed" && N("submit", t);
|
|
75
|
+
}
|
|
76
|
+
const y = (t) => t == null ? "0" : Math.round(t).toLocaleString(), U = (t) => t ? new Date(t).toLocaleString(void 0, { month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" }) : "", b = _(
|
|
77
|
+
() => r.value.reduce((t, e) => t + (e.sessions || 0), 0) || 1
|
|
78
|
+
), V = _(() => {
|
|
79
|
+
const { startDate: t, endDate: e } = u.resolvedArgs || {};
|
|
80
|
+
if (!t && !e) return "Last 30 days";
|
|
81
|
+
const a = t || "30daysAgo", n = a.match(/^(\d+)daysAgo$/);
|
|
82
|
+
return n ? `Last ${n[1]} days` : `${a} → ${e || "today"}`;
|
|
83
|
+
});
|
|
84
|
+
return (t, e) => {
|
|
85
|
+
const a = O("NuxtLink");
|
|
86
|
+
return i(), l("div", te, [
|
|
87
|
+
s(x) ? (i(), l("div", se, [
|
|
88
|
+
m(s(Q), { class: "size-4 animate-spin text-muted-foreground" }),
|
|
89
|
+
e[0] || (e[0] = o("span", { class: "text-xs text-muted-foreground" }, "Loading device data…", -1))
|
|
90
|
+
])) : s(v) ? (i(), l("div", oe, c(s(v)), 1)) : s(r).length === 0 ? (i(), l("div", ne, [
|
|
91
|
+
m(s(w), { class: "size-8 text-muted-foreground mx-auto" }),
|
|
92
|
+
e[1] || (e[1] = o("p", { class: "text-sm text-muted-foreground" }, "No device data found for this period.", -1))
|
|
93
|
+
])) : (i(), l("div", re, [
|
|
94
|
+
o("div", ae, [
|
|
95
|
+
o("div", ie, [
|
|
96
|
+
m(s(w), { class: "size-3.5 text-primary" }),
|
|
97
|
+
e[2] || (e[2] = o("span", { class: "text-xs font-medium" }, "Device Breakdown", -1))
|
|
98
|
+
]),
|
|
99
|
+
o("span", le, c(s(V)), 1)
|
|
100
|
+
]),
|
|
101
|
+
o("div", de, [
|
|
102
|
+
o("div", ce, [
|
|
103
|
+
(i(!0), l(k, null, L(s(r), (n, f) => (i(), l("div", {
|
|
104
|
+
key: f,
|
|
105
|
+
class: S([j(n.deviceCategory), "transition-all first:rounded-l-full last:rounded-r-full"]),
|
|
106
|
+
style: q({ width: `${n.sessions / s(b) * 100}%` })
|
|
107
|
+
}, null, 6))), 128))
|
|
108
|
+
])
|
|
109
|
+
]),
|
|
110
|
+
o("div", ue, [
|
|
111
|
+
(i(!0), l(k, null, L(s(r), (n, f) => (i(), l("div", {
|
|
112
|
+
key: f,
|
|
113
|
+
class: "px-3 py-2.5 hover:bg-muted/30 transition-colors"
|
|
114
|
+
}, [
|
|
115
|
+
o("div", me, [
|
|
116
|
+
(i(), G(H(M(n.deviceCategory)), {
|
|
117
|
+
class: S(["size-4 shrink-0", B(n.deviceCategory)])
|
|
118
|
+
}, null, 8, ["class"])),
|
|
119
|
+
o("span", fe, c(n.deviceCategory), 1),
|
|
120
|
+
o("span", ve, c((n.sessions / s(b) * 100).toFixed(1)) + "% ", 1)
|
|
121
|
+
]),
|
|
122
|
+
o("div", pe, [
|
|
123
|
+
o("span", xe, [
|
|
124
|
+
m(s(W), { class: "size-2.5" }),
|
|
125
|
+
p(" " + c(y(n.sessions)) + " sessions ", 1)
|
|
126
|
+
]),
|
|
127
|
+
o("span", ge, [
|
|
128
|
+
m(s(X), { class: "size-2.5" }),
|
|
129
|
+
p(" " + c(y(n.totalUsers)) + " users ", 1)
|
|
130
|
+
])
|
|
131
|
+
])
|
|
132
|
+
]))), 128))
|
|
133
|
+
]),
|
|
134
|
+
o("div", he, [
|
|
135
|
+
o("span", ye, [
|
|
136
|
+
p(c(y(s(b))) + " total sessions ", 1),
|
|
137
|
+
s(g) ? (i(), l(k, { key: 0 }, [
|
|
138
|
+
p(" · fetched " + c(U(s(g))), 1)
|
|
139
|
+
], 64)) : J("", !0)
|
|
140
|
+
]),
|
|
141
|
+
m(a, {
|
|
142
|
+
to: `/projects/${s(A)}/modules/${C.instanceId}`,
|
|
143
|
+
class: "inline-flex items-center gap-1.5 text-xs text-primary hover:underline"
|
|
144
|
+
}, {
|
|
145
|
+
default: K(() => [
|
|
146
|
+
m(s(Y), { class: "size-3" }),
|
|
147
|
+
e[3] || (e[3] = p(" View full report ", -1))
|
|
148
|
+
]),
|
|
149
|
+
_: 1
|
|
150
|
+
}, 8, ["to"])
|
|
151
|
+
])
|
|
152
|
+
]))
|
|
153
|
+
]);
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
export {
|
|
158
|
+
ke as default
|
|
159
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),l=require("lucide-vue-next"),S={class:"w-full"},L={key:0,class:"flex items-center gap-2 py-3"},$={key:1,class:"text-xs text-destructive py-2"},z={key:2,class:"rounded-xl border bg-background p-4 text-center space-y-2"},A={key:3,class:"rounded-xl border bg-background overflow-hidden"},T={class:"px-3 py-2 border-b bg-muted/40 flex items-center justify-between"},M={class:"flex items-center gap-2"},F={class:"text-[10px] text-muted-foreground"},j={class:"px-3 pt-3 pb-1"},I={class:"flex h-3 rounded-full overflow-hidden"},U={class:"divide-y"},P={class:"flex items-center gap-2"},q={class:"text-xs font-medium capitalize flex-1"},O={class:"text-sm font-semibold tabular-nums"},R={class:"ml-6 mt-1 flex items-center gap-3 text-[10px] text-muted-foreground"},G={class:"flex items-center gap-1"},H={class:"flex items-center gap-1"},J={class:"px-3 py-2 border-t bg-muted/20 flex items-center justify-between"},K={class:"text-[10px] text-muted-foreground"},Q=e.defineComponent({__name:"DeviceBreakdownCard",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(v,{emit:x}){const i=v,y=x,h=useRoute(),b=e.computed(()=>h.params.slug),k=useModuleApi(i.instanceId),u=e.ref(!0),d=e.ref(null),r=e.ref([]),m=e.ref(null),_=s=>{const t=(s||"").toLowerCase();return t==="mobile"||t==="smartphone"?l.Smartphone:t==="tablet"?l.Tablet:l.Monitor},N=s=>{const t=(s||"").toLowerCase();return t==="desktop"?"bg-blue-500":t==="mobile"||t==="smartphone"?"bg-emerald-500":t==="tablet"?"bg-amber-500":"bg-violet-500"},V=s=>{const t=(s||"").toLowerCase();return t==="desktop"?"text-blue-500":t==="mobile"||t==="smartphone"?"text-emerald-500":t==="tablet"?"text-amber-500":"text-violet-500"};function E(){const s=i.resolvedArgs?._cachedData;return s?(r.value=(s.devices||[]).map(t=>({deviceCategory:t.device,sessions:t.sessions,totalUsers:t.users})),m.value=i.resolvedArgs._fetchedAt||null,u.value=!1,!0):!1}async function B(){const{startDate:s,endDate:t}=i.resolvedArgs||{};u.value=!0,d.value=null;try{const n=new URLSearchParams;s&&n.set("startDate",s),t&&n.set("endDate",t);const o=await k.get(`/devices?${n.toString()}`);r.value=o.rows||[],m.value=new Date().toISOString();const c=r.value.reduce((a,D)=>a+(D.sessions||0),0);g({count:r.value.length,devices:r.value.map(a=>({device:a.deviceCategory,sessions:a.sessions,users:a.totalUsers,share:`${(a.sessions/c*100).toFixed(1)}%`})),suggestion:r.value.length===0?"No device data found for this period.":`Device breakdown: ${r.value.map(a=>`${a.deviceCategory} ${(a.sessions/c*100).toFixed(0)}%`).join(", ")}.`})}catch(n){d.value=n?.data?.statusMessage||n?.message||"Failed to load device data",g(`Error loading device data: ${d.value}`)}finally{u.value=!1}}e.onMounted(()=>{i.status==="completed"&&E()||B()});function g(s){i.status!=="completed"&&y("submit",s)}const f=s=>s==null?"0":Math.round(s).toLocaleString(),w=s=>s?new Date(s).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"",p=e.computed(()=>r.value.reduce((s,t)=>s+(t.sessions||0),0)||1),C=e.computed(()=>{const{startDate:s,endDate:t}=i.resolvedArgs||{};if(!s&&!t)return"Last 30 days";const n=s||"30daysAgo",o=n.match(/^(\d+)daysAgo$/);return o?`Last ${o[1]} days`:`${n} → ${t||"today"}`});return(s,t)=>{const n=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",S,[e.unref(u)?(e.openBlock(),e.createElementBlock("div",L,[e.createVNode(e.unref(l.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),t[0]||(t[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading device data…",-1))])):e.unref(d)?(e.openBlock(),e.createElementBlock("div",$,e.toDisplayString(e.unref(d)),1)):e.unref(r).length===0?(e.openBlock(),e.createElementBlock("div",z,[e.createVNode(e.unref(l.Monitor),{class:"size-8 text-muted-foreground mx-auto"}),t[1]||(t[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"No device data found for this period.",-1))])):(e.openBlock(),e.createElementBlock("div",A,[e.createElementVNode("div",T,[e.createElementVNode("div",M,[e.createVNode(e.unref(l.Monitor),{class:"size-3.5 text-primary"}),t[2]||(t[2]=e.createElementVNode("span",{class:"text-xs font-medium"},"Device Breakdown",-1))]),e.createElementVNode("span",F,e.toDisplayString(e.unref(C)),1)]),e.createElementVNode("div",j,[e.createElementVNode("div",I,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(o,c)=>(e.openBlock(),e.createElementBlock("div",{key:c,class:e.normalizeClass([N(o.deviceCategory),"transition-all first:rounded-l-full last:rounded-r-full"]),style:e.normalizeStyle({width:`${o.sessions/e.unref(p)*100}%`})},null,6))),128))])]),e.createElementVNode("div",U,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(o,c)=>(e.openBlock(),e.createElementBlock("div",{key:c,class:"px-3 py-2.5 hover:bg-muted/30 transition-colors"},[e.createElementVNode("div",P,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(_(o.deviceCategory)),{class:e.normalizeClass(["size-4 shrink-0",V(o.deviceCategory)])},null,8,["class"])),e.createElementVNode("span",q,e.toDisplayString(o.deviceCategory),1),e.createElementVNode("span",O,e.toDisplayString((o.sessions/e.unref(p)*100).toFixed(1))+"% ",1)]),e.createElementVNode("div",R,[e.createElementVNode("span",G,[e.createVNode(e.unref(l.MousePointerClick),{class:"size-2.5"}),e.createTextVNode(" "+e.toDisplayString(f(o.sessions))+" sessions ",1)]),e.createElementVNode("span",H,[e.createVNode(e.unref(l.Users),{class:"size-2.5"}),e.createTextVNode(" "+e.toDisplayString(f(o.totalUsers))+" users ",1)])])]))),128))]),e.createElementVNode("div",J,[e.createElementVNode("span",K,[e.createTextVNode(e.toDisplayString(f(e.unref(p)))+" total sessions ",1),e.unref(m)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" · fetched "+e.toDisplayString(w(e.unref(m))),1)],64)):e.createCommentVNode("",!0)]),e.createVNode(n,{to:`/projects/${e.unref(b)}/modules/${v.instanceId}`,class:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline"},{default:e.withCtx(()=>[e.createVNode(e.unref(l.ExternalLink),{class:"size-3"}),t[3]||(t[3]=e.createTextVNode(" View full report ",-1))]),_:1},8,["to"])])]))])}}});exports.default=Q;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as Y, ref as y, withAsyncContext as M, watch as $, onMounted as O, resolveComponent as s, openBlock as d, createElementBlock as j, createElementVNode as c, createVNode as t, unref as v, withCtx as l, createTextVNode as o, createBlock as g, createCommentVNode as T, toDisplayString as r, Fragment as Q, renderList as h } from "vue";
|
|
2
2
|
import { useModulePermissions as G, useModuleRoute as J, useModuleStorage as K, useModuleBreadcrumbs as W, useFirebaseIntegration as X, useRoute as Z, useRouter as ee } from "@oneclick.dev/cms-kit";
|
|
3
3
|
import { Plus as te, Search as le, Loader2 as ne, Pencil as oe } from "lucide-vue-next";
|
|
4
|
-
import { u as se } from "./index-
|
|
4
|
+
import { u as se } from "./index-CrGjxSwa.mjs";
|
|
5
5
|
const ae = { class: "relative" }, ue = {
|
|
6
6
|
ref: "container",
|
|
7
7
|
class: "w-full max-w-5xl mx-auto"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("vue"),O=require("lucide-vue-next"),S=require("@oneclick.dev/cms-kit"),X=require("./utils-D6CaKJbp.js"),f=require("./DateFormatter-Bw-SCfUS.js"),Y={class:"@container/new-res-form space-y-5 py-4"},Z={class:"grid gap-4"},ee={class:"grid gap-4 @md/new-res-form:grid-cols-2"},te={class:"grid gap-2"},oe={class:"flex gap-2 items-center"},ae={class:"grid gap-2"},le={class:"flex gap-2 items-center"},ne={class:"grid gap-2"},re={class:"grid gap-2"},se={class:"grid gap-4"},de={class:"grid gap-4 @md/new-res-form:grid-cols-2"},ie={class:"grid gap-2"},ue={class:"grid gap-4 @md/new-res-form:grid-cols-2"},ce={class:"grid gap-2"},pe={class:"grid gap-2"},me={class:"flex items-center h-9 px-3 text-sm text-muted-foreground"},ve={class:"grid gap-4"},fe={class:"grid gap-4 @md/new-res-form:grid-cols-2"},Ve={class:"grid gap-2"},ge={class:"grid gap-2"},Ne={class:"grid gap-4 @md/new-res-form:grid-cols-2"},_e={class:"grid gap-2"},xe={class:"grid gap-2"},Ce={class:"mt-4 text-red-400"},we={class:"list-disc pl-4"},he={key:0},De={key:1},Ee=e.defineComponent({__name:"NewReservationDialog",setup(Se){const{params:I}=S.useModuleRoute(),{config:T}=S.useModule(),U=S.useFirebaseIntegration(T.project),N=e.ref(!1);e.watch(N,a=>{a&&(x.value=[],c.value=1,i.value=0,n.value=l.value?.resources?.[0]?.id??"",s.value=l.value?.pricingOptions?.find(t=>t.isDefault===!0)?.id??"",r.value="",V.value="",g.value="",p.value="",C.value="")});const _=e.ref(!1),l=e.inject("agendaData",e.ref({})),x=e.ref([]),c=e.ref(1),i=e.ref(0),n=e.ref(""),s=e.ref(""),r=e.ref(""),V=e.ref(""),g=e.ref(""),p=e.ref(""),C=e.ref(""),L=f.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(f.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()),u=e.ref(),M=new f.$fb18d541ea1ad717$export$ad991b66133851cf("en-US",{dateStyle:"long"}),b=e.computed(()=>{if(!r.value||!s.value)return"";const a=l.value?.pricingOptions?.find(E=>E.id===s.value);if(!a?.duration)return r.value;const[t,m]=r.value.split(":").map(Number);if(isNaN(t)||isNaN(m))return"";const w=t*60+m+a.duration,h=Math.floor(w/60)%24,D=w%60;return`${h.toString().padStart(2,"0")}:${D.toString().padStart(2,"0")}`}),R=()=>{const a=[];return x.value=[],c.value<1&&c.value>9999&&a.push("Please fill in a correct number of spots."),i.value<0&&(i.value=0),n.value||a.push("Please select a resource."),s.value||a.push("Please select a type."),u.value||a.push("Please select the booking date."),(!r.value||r.value.length!==5||r.value?.indexOf(":")===-1||!parseInt(r.value?.replace(":","")))&&a.push("Please select a correct booking time."),V.value||a.push("Please fill in the first name of the customer."),g.value||a.push("Please fill in the last name of the customer."),(!p.value||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(p.value)===!1)&&a.push("Please fill in the correct email of the customer."),x.value=a,a.length===0},q=async()=>{if(R())try{_.value=!0;const a={agendaId:I.value.id,customerInfo:{firstName:V.value,lastName:g.value,email:p.value,phone:C.value},amountPaid:parseFloat(i.value)??0,amountDue:0,subtotal:parseFloat(i.value)??0,total:parseFloat(i.value)??0,createdAt:new Date,updatedAt:new Date,discount:0,flattenedReservationDates:[`${n.value}_${u.value}`],flattenedReservations:[`${n.value}_${u.value}_${r.value?.replace(":","")}`],paymentStatus:"paid",paymentType:"full",reservations:[{status:"approved",totalPrice:parseFloat(i.value?.toFixed(2))??0,basePrice:parseFloat((i.value/c.value).toFixed(2))??0,addOnsPrice:0,addOns:[],date:`${u.value}`,id:`res_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,pricingOption:{duration:l.value?.pricingOptions?.find(t=>t.id===s.value)?.duration||"",id:l.value?.pricingOptions?.find(t=>t.id===s.value)?.id||"",name:l.value?.pricingOptions?.find(t=>t.id===s.value)?.name||"",price:l.value?.pricingOptions?.find(t=>t.id===s.value)?.price||""},pricingOptionId:s.value,resource:{avatarLabel:l.value?.resources?.find(t=>t.id===n.value)?.avatarLabel||"",color:l.value?.resources?.find(t=>t.id===n.value)?.color||"",description:l.value?.resources?.find(t=>t.id===n.value)?.description||"",id:l.value?.resources?.find(t=>t.id===n.value)?.id||"",name:l.value?.resources?.find(t=>t.id===n.value)?.name||""},resourceId:n.value,spots:c.value,timeslot:{startTime:r.value,endTime:b.value}}],status:"confirmed"};await U.add(T.reservationsCollection,a)}catch{}finally{_.value=!1,N.value=!1}};return(a,t)=>{const m=e.resolveComponent("Button"),w=e.resolveComponent("DialogTrigger"),h=e.resolveComponent("DialogTitle"),D=e.resolveComponent("DialogDescription"),E=e.resolveComponent("DialogHeader"),d=e.resolveComponent("Label"),v=e.resolveComponent("Input"),y=e.resolveComponent("SelectValue"),$=e.resolveComponent("SelectTrigger"),k=e.resolveComponent("SelectItem"),P=e.resolveComponent("SelectGroup"),B=e.resolveComponent("SelectContent"),F=e.resolveComponent("Select"),j=e.resolveComponent("PopoverTrigger"),A=e.resolveComponent("Calendar"),H=e.resolveComponent("PopoverContent"),z=e.resolveComponent("Popover"),G=e.resolveComponent("TimeInput"),K=e.resolveComponent("DialogFooter"),J=e.resolveComponent("DialogScrollContent"),Q=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(Q,{open:N.value,"onUpdate:open":t[10]||(t[10]=o=>N.value=o)},{default:e.withCtx(()=>[e.createVNode(w,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(O.Plus),{class:"size-4"}),t[11]||(t[11]=e.createTextVNode(" Add Reservation ",-1))]),_:1})]),_:1}),e.createVNode(J,{class:"sm:max-w-xl"},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(h,null,{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Create new reservation",-1)])]),_:1}),e.createVNode(D)]),_:1}),e.createElementVNode("div",Y,[e.createElementVNode("div",Z,[e.createElementVNode("div",ee,[e.createElementVNode("div",te,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("Spots/tickets",-1)])]),_:1}),e.createElementVNode("div",oe,[e.createVNode(v,{modelValue:c.value,"onUpdate:modelValue":t[0]||(t[0]=o=>c.value=o),modelModifiers:{number:!0},type:"number",min:"1",class:"no-spinner"},null,8,["modelValue"])])]),e.createElementVNode("div",ae,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("Total price paid",-1)])]),_:1}),e.createElementVNode("div",le,[e.createVNode(v,{modelValue:i.value,"onUpdate:modelValue":t[1]||(t[1]=o=>i.value=o),modelModifiers:{number:!0},type:"number",min:"0",class:"no-spinner"},null,8,["modelValue"]),e.createTextVNode(" "+e.toDisplayString(e.unref(l).currency),1)])]),e.createElementVNode("div",ne,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("Resource",-1)])]),_:1}),e.createVNode(F,{modelValue:n.value,"onUpdate:modelValue":t[2]||(t[2]=o=>n.value=o)},{default:e.withCtx(()=>[e.createVNode($,{class:"w-full"},{default:e.withCtx(()=>[e.createVNode(y,{placeholder:"Select resource"})]),_:1}),e.createVNode(B,null,{default:e.withCtx(()=>[e.createVNode(P,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).resources,o=>(e.openBlock(),e.createBlock(k,{value:o.id},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.name),1)]),_:2},1032,["value"]))),256))]),_:1})]),_:1})]),_:1},8,["modelValue"])]),e.createElementVNode("div",re,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("Type",-1)])]),_:1}),e.createVNode(F,{modelValue:s.value,"onUpdate:modelValue":t[3]||(t[3]=o=>s.value=o)},{default:e.withCtx(()=>[e.createVNode($,{class:"w-full"},{default:e.withCtx(()=>[e.createVNode(y,{placeholder:"Select type"})]),_:1}),e.createVNode(B,null,{default:e.withCtx(()=>[e.createVNode(P,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).pricingOptions,o=>(e.openBlock(),e.createBlock(k,{value:o.id},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.name)+" ("+e.toDisplayString(o.duration)+"min) ",1)]),_:2},1032,["value"]))),256))]),_:1})]),_:1})]),_:1},8,["modelValue"])])])]),e.createElementVNode("div",se,[e.createElementVNode("div",de,[e.createElementVNode("div",ie,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("Date",-1)])]),_:1}),e.createVNode(z,null,{default:e.withCtx(({close:o})=>[e.createVNode(j,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(m,{variant:"outline",class:e.normalizeClass(e.unref(X.classNames)("w-[240px] justify-start text-left font-normal",!u.value&&"text-muted-foreground"))},{default:e.withCtx(()=>[e.createVNode(e.unref(O.CalendarIcon)),e.createTextVNode(" "+e.toDisplayString(u.value?e.unref(M).format(u.value.toDate(e.unref(f.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())):"Pick a date"),1)]),_:1},8,["class"])]),_:1}),e.createVNode(H,{class:"w-auto p-0",align:"start"},{default:e.withCtx(()=>[e.createVNode(A,{modelValue:u.value,"onUpdate:modelValue":[t[4]||(t[4]=W=>u.value=W),o],"default-placeholder":e.unref(L),layout:"month-and-year","initial-focus":"",minValue:e.unref(f.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3)(e.unref(f.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())},null,8,["modelValue","default-placeholder","onUpdate:modelValue","minValue"])]),_:2},1024)]),_:1})])]),e.createElementVNode("div",ue,[e.createElementVNode("div",ce,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("Start time",-1)])]),_:1}),e.createVNode(G,{modelValue:r.value,"onUpdate:modelValue":t[5]||(t[5]=o=>r.value=o)},null,8,["modelValue"])]),e.createElementVNode("div",pe,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("End time",-1)])]),_:1}),e.createElementVNode("div",me,e.toDisplayString(e.unref(b)||"--:--"),1)])])]),e.createElementVNode("div",ve,[e.createElementVNode("div",fe,[e.createElementVNode("div",Ve,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("Firstname",-1)])]),_:1}),e.createVNode(v,{modelValue:V.value,"onUpdate:modelValue":t[6]||(t[6]=o=>V.value=o)},null,8,["modelValue"])]),e.createElementVNode("div",ge,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Lastname",-1)])]),_:1}),e.createVNode(v,{modelValue:g.value,"onUpdate:modelValue":t[7]||(t[7]=o=>g.value=o)},null,8,["modelValue"])])]),e.createElementVNode("div",Ne,[e.createElementVNode("div",_e,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("E-mail",-1)])]),_:1}),e.createVNode(v,{modelValue:p.value,"onUpdate:modelValue":t[8]||(t[8]=o=>p.value=o)},null,8,["modelValue"])]),e.createElementVNode("div",xe,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createTextVNode("Phone Nr ",-1),e.createElementVNode("span",{class:"italic text-xs opacity-50"},"optional",-1)])]),_:1}),e.createVNode(v,{modelValue:C.value,"onUpdate:modelValue":t[9]||(t[9]=o=>C.value=o)},null,8,["modelValue"])])])]),e.createElementVNode("div",Ce,[e.createElementVNode("ul",we,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,o=>(e.openBlock(),e.createElementBlock("li",{key:o},e.toDisplayString(o),1))),128))])])]),e.createVNode(K,{class:"gap-2"},{default:e.withCtx(()=>[e.createVNode(m,{onClick:q,disabled:_.value},{default:e.withCtx(()=>[_.value?(e.openBlock(),e.createElementBlock("span",he,"Creating...")):(e.openBlock(),e.createElementBlock("span",De,"Create reservation"))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])}}});exports._sfc_main=Ee;
|
|
1
|
+
"use strict";const e=require("vue"),O=require("lucide-vue-next"),S=require("@oneclick.dev/cms-kit"),X=require("./utils-D6CaKJbp.js"),f=require("./DateFormatter-C9qfmQnP.js"),Y={class:"@container/new-res-form space-y-5 py-4"},Z={class:"grid gap-4"},ee={class:"grid gap-4 @md/new-res-form:grid-cols-2"},te={class:"grid gap-2"},oe={class:"flex gap-2 items-center"},ae={class:"grid gap-2"},le={class:"flex gap-2 items-center"},ne={class:"grid gap-2"},re={class:"grid gap-2"},se={class:"grid gap-4"},de={class:"grid gap-4 @md/new-res-form:grid-cols-2"},ie={class:"grid gap-2"},ue={class:"grid gap-4 @md/new-res-form:grid-cols-2"},ce={class:"grid gap-2"},pe={class:"grid gap-2"},me={class:"flex items-center h-9 px-3 text-sm text-muted-foreground"},ve={class:"grid gap-4"},fe={class:"grid gap-4 @md/new-res-form:grid-cols-2"},Ve={class:"grid gap-2"},ge={class:"grid gap-2"},Ne={class:"grid gap-4 @md/new-res-form:grid-cols-2"},_e={class:"grid gap-2"},xe={class:"grid gap-2"},Ce={class:"mt-4 text-red-400"},we={class:"list-disc pl-4"},he={key:0},De={key:1},Ee=e.defineComponent({__name:"NewReservationDialog",setup(Se){const{params:I}=S.useModuleRoute(),{config:T}=S.useModule(),U=S.useFirebaseIntegration(T.project),N=e.ref(!1);e.watch(N,a=>{a&&(x.value=[],c.value=1,i.value=0,n.value=l.value?.resources?.[0]?.id??"",s.value=l.value?.pricingOptions?.find(t=>t.isDefault===!0)?.id??"",r.value="",V.value="",g.value="",p.value="",C.value="")});const _=e.ref(!1),l=e.inject("agendaData",e.ref({})),x=e.ref([]),c=e.ref(1),i=e.ref(0),n=e.ref(""),s=e.ref(""),r=e.ref(""),V=e.ref(""),g=e.ref(""),p=e.ref(""),C=e.ref(""),L=f.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(f.$14e0f24ef4ac5c92$export$aa8b41735afcabd2()),u=e.ref(),M=new f.$fb18d541ea1ad717$export$ad991b66133851cf("en-US",{dateStyle:"long"}),b=e.computed(()=>{if(!r.value||!s.value)return"";const a=l.value?.pricingOptions?.find(E=>E.id===s.value);if(!a?.duration)return r.value;const[t,m]=r.value.split(":").map(Number);if(isNaN(t)||isNaN(m))return"";const w=t*60+m+a.duration,h=Math.floor(w/60)%24,D=w%60;return`${h.toString().padStart(2,"0")}:${D.toString().padStart(2,"0")}`}),R=()=>{const a=[];return x.value=[],c.value<1&&c.value>9999&&a.push("Please fill in a correct number of spots."),i.value<0&&(i.value=0),n.value||a.push("Please select a resource."),s.value||a.push("Please select a type."),u.value||a.push("Please select the booking date."),(!r.value||r.value.length!==5||r.value?.indexOf(":")===-1||!parseInt(r.value?.replace(":","")))&&a.push("Please select a correct booking time."),V.value||a.push("Please fill in the first name of the customer."),g.value||a.push("Please fill in the last name of the customer."),(!p.value||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(p.value)===!1)&&a.push("Please fill in the correct email of the customer."),x.value=a,a.length===0},q=async()=>{if(R())try{_.value=!0;const a={agendaId:I.value.id,customerInfo:{firstName:V.value,lastName:g.value,email:p.value,phone:C.value},amountPaid:parseFloat(i.value)??0,amountDue:0,subtotal:parseFloat(i.value)??0,total:parseFloat(i.value)??0,createdAt:new Date,updatedAt:new Date,discount:0,flattenedReservationDates:[`${n.value}_${u.value}`],flattenedReservations:[`${n.value}_${u.value}_${r.value?.replace(":","")}`],paymentStatus:"paid",paymentType:"full",reservations:[{status:"approved",totalPrice:parseFloat(i.value?.toFixed(2))??0,basePrice:parseFloat((i.value/c.value).toFixed(2))??0,addOnsPrice:0,addOns:[],date:`${u.value}`,id:`res_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,pricingOption:{duration:l.value?.pricingOptions?.find(t=>t.id===s.value)?.duration||"",id:l.value?.pricingOptions?.find(t=>t.id===s.value)?.id||"",name:l.value?.pricingOptions?.find(t=>t.id===s.value)?.name||"",price:l.value?.pricingOptions?.find(t=>t.id===s.value)?.price||""},pricingOptionId:s.value,resource:{avatarLabel:l.value?.resources?.find(t=>t.id===n.value)?.avatarLabel||"",color:l.value?.resources?.find(t=>t.id===n.value)?.color||"",description:l.value?.resources?.find(t=>t.id===n.value)?.description||"",id:l.value?.resources?.find(t=>t.id===n.value)?.id||"",name:l.value?.resources?.find(t=>t.id===n.value)?.name||""},resourceId:n.value,spots:c.value,timeslot:{startTime:r.value,endTime:b.value}}],status:"confirmed"};await U.add(T.reservationsCollection,a)}catch{}finally{_.value=!1,N.value=!1}};return(a,t)=>{const m=e.resolveComponent("Button"),w=e.resolveComponent("DialogTrigger"),h=e.resolveComponent("DialogTitle"),D=e.resolveComponent("DialogDescription"),E=e.resolveComponent("DialogHeader"),d=e.resolveComponent("Label"),v=e.resolveComponent("Input"),y=e.resolveComponent("SelectValue"),$=e.resolveComponent("SelectTrigger"),k=e.resolveComponent("SelectItem"),P=e.resolveComponent("SelectGroup"),B=e.resolveComponent("SelectContent"),F=e.resolveComponent("Select"),j=e.resolveComponent("PopoverTrigger"),A=e.resolveComponent("Calendar"),H=e.resolveComponent("PopoverContent"),z=e.resolveComponent("Popover"),G=e.resolveComponent("TimeInput"),K=e.resolveComponent("DialogFooter"),J=e.resolveComponent("DialogScrollContent"),Q=e.resolveComponent("Dialog");return e.openBlock(),e.createBlock(Q,{open:N.value,"onUpdate:open":t[10]||(t[10]=o=>N.value=o)},{default:e.withCtx(()=>[e.createVNode(w,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(O.Plus),{class:"size-4"}),t[11]||(t[11]=e.createTextVNode(" Add Reservation ",-1))]),_:1})]),_:1}),e.createVNode(J,{class:"sm:max-w-xl"},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(h,null,{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Create new reservation",-1)])]),_:1}),e.createVNode(D)]),_:1}),e.createElementVNode("div",Y,[e.createElementVNode("div",Z,[e.createElementVNode("div",ee,[e.createElementVNode("div",te,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("Spots/tickets",-1)])]),_:1}),e.createElementVNode("div",oe,[e.createVNode(v,{modelValue:c.value,"onUpdate:modelValue":t[0]||(t[0]=o=>c.value=o),modelModifiers:{number:!0},type:"number",min:"1",class:"no-spinner"},null,8,["modelValue"])])]),e.createElementVNode("div",ae,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("Total price paid",-1)])]),_:1}),e.createElementVNode("div",le,[e.createVNode(v,{modelValue:i.value,"onUpdate:modelValue":t[1]||(t[1]=o=>i.value=o),modelModifiers:{number:!0},type:"number",min:"0",class:"no-spinner"},null,8,["modelValue"]),e.createTextVNode(" "+e.toDisplayString(e.unref(l).currency),1)])]),e.createElementVNode("div",ne,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("Resource",-1)])]),_:1}),e.createVNode(F,{modelValue:n.value,"onUpdate:modelValue":t[2]||(t[2]=o=>n.value=o)},{default:e.withCtx(()=>[e.createVNode($,{class:"w-full"},{default:e.withCtx(()=>[e.createVNode(y,{placeholder:"Select resource"})]),_:1}),e.createVNode(B,null,{default:e.withCtx(()=>[e.createVNode(P,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).resources,o=>(e.openBlock(),e.createBlock(k,{value:o.id},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.name),1)]),_:2},1032,["value"]))),256))]),_:1})]),_:1})]),_:1},8,["modelValue"])]),e.createElementVNode("div",re,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("Type",-1)])]),_:1}),e.createVNode(F,{modelValue:s.value,"onUpdate:modelValue":t[3]||(t[3]=o=>s.value=o)},{default:e.withCtx(()=>[e.createVNode($,{class:"w-full"},{default:e.withCtx(()=>[e.createVNode(y,{placeholder:"Select type"})]),_:1}),e.createVNode(B,null,{default:e.withCtx(()=>[e.createVNode(P,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).pricingOptions,o=>(e.openBlock(),e.createBlock(k,{value:o.id},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.name)+" ("+e.toDisplayString(o.duration)+"min) ",1)]),_:2},1032,["value"]))),256))]),_:1})]),_:1})]),_:1},8,["modelValue"])])])]),e.createElementVNode("div",se,[e.createElementVNode("div",de,[e.createElementVNode("div",ie,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("Date",-1)])]),_:1}),e.createVNode(z,null,{default:e.withCtx(({close:o})=>[e.createVNode(j,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(m,{variant:"outline",class:e.normalizeClass(e.unref(X.classNames)("w-[240px] justify-start text-left font-normal",!u.value&&"text-muted-foreground"))},{default:e.withCtx(()=>[e.createVNode(e.unref(O.CalendarIcon)),e.createTextVNode(" "+e.toDisplayString(u.value?e.unref(M).format(u.value.toDate(e.unref(f.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())):"Pick a date"),1)]),_:1},8,["class"])]),_:1}),e.createVNode(H,{class:"w-auto p-0",align:"start"},{default:e.withCtx(()=>[e.createVNode(A,{modelValue:u.value,"onUpdate:modelValue":[t[4]||(t[4]=W=>u.value=W),o],"default-placeholder":e.unref(L),layout:"month-and-year","initial-focus":"",minValue:e.unref(f.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3)(e.unref(f.$14e0f24ef4ac5c92$export$aa8b41735afcabd2)())},null,8,["modelValue","default-placeholder","onUpdate:modelValue","minValue"])]),_:2},1024)]),_:1})])]),e.createElementVNode("div",ue,[e.createElementVNode("div",ce,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("Start time",-1)])]),_:1}),e.createVNode(G,{modelValue:r.value,"onUpdate:modelValue":t[5]||(t[5]=o=>r.value=o)},null,8,["modelValue"])]),e.createElementVNode("div",pe,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("End time",-1)])]),_:1}),e.createElementVNode("div",me,e.toDisplayString(e.unref(b)||"--:--"),1)])])]),e.createElementVNode("div",ve,[e.createElementVNode("div",fe,[e.createElementVNode("div",Ve,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("Firstname",-1)])]),_:1}),e.createVNode(v,{modelValue:V.value,"onUpdate:modelValue":t[6]||(t[6]=o=>V.value=o)},null,8,["modelValue"])]),e.createElementVNode("div",ge,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Lastname",-1)])]),_:1}),e.createVNode(v,{modelValue:g.value,"onUpdate:modelValue":t[7]||(t[7]=o=>g.value=o)},null,8,["modelValue"])])]),e.createElementVNode("div",Ne,[e.createElementVNode("div",_e,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("E-mail",-1)])]),_:1}),e.createVNode(v,{modelValue:p.value,"onUpdate:modelValue":t[8]||(t[8]=o=>p.value=o)},null,8,["modelValue"])]),e.createElementVNode("div",xe,[e.createVNode(d,null,{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createTextVNode("Phone Nr ",-1),e.createElementVNode("span",{class:"italic text-xs opacity-50"},"optional",-1)])]),_:1}),e.createVNode(v,{modelValue:C.value,"onUpdate:modelValue":t[9]||(t[9]=o=>C.value=o)},null,8,["modelValue"])])])]),e.createElementVNode("div",Ce,[e.createElementVNode("ul",we,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,o=>(e.openBlock(),e.createElementBlock("li",{key:o},e.toDisplayString(o),1))),128))])])]),e.createVNode(K,{class:"gap-2"},{default:e.withCtx(()=>[e.createVNode(m,{onClick:q,disabled:_.value},{default:e.withCtx(()=>[_.value?(e.openBlock(),e.createElementBlock("span",he,"Creating...")):(e.openBlock(),e.createElementBlock("span",De,"Create reservation"))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])}}});exports._sfc_main=Ee;
|
|
@@ -2,7 +2,7 @@ import { defineComponent as ue, ref as d, watch as de, inject as re, computed as
|
|
|
2
2
|
import { Plus as ve, CalendarIcon as me } from "lucide-vue-next";
|
|
3
3
|
import { useModuleRoute as fe, useModule as ge, useFirebaseIntegration as _e } from "@oneclick.dev/cms-kit";
|
|
4
4
|
import { c as Ve } from "./utils-BVKy9S2J.mjs";
|
|
5
|
-
import { o as q, g as R, h as De } from "./DateFormatter-
|
|
5
|
+
import { o as q, g as R, h as De } from "./DateFormatter-DfIwyrnF.mjs";
|
|
6
6
|
const Se = { class: "@container/new-res-form space-y-5 py-4" }, be = { class: "grid gap-4" }, xe = { class: "grid gap-4 @md/new-res-form:grid-cols-2" }, ye = { class: "grid gap-2" }, Pe = { class: "flex gap-2 items-center" }, we = { class: "grid gap-2" }, $e = { class: "flex gap-2 items-center" }, Ce = { class: "grid gap-2" }, Te = { class: "grid gap-2" }, he = { class: "grid gap-4" }, Ne = { class: "grid gap-4 @md/new-res-form:grid-cols-2" }, Oe = { class: "grid gap-2" }, Fe = { class: "grid gap-4 @md/new-res-form:grid-cols-2" }, Ie = { class: "grid gap-2" }, Ue = { class: "grid gap-2" }, ke = { class: "flex items-center h-9 px-3 text-sm text-muted-foreground" }, Me = { class: "grid gap-4" }, Re = { class: "grid gap-4 @md/new-res-form:grid-cols-2" }, Le = { class: "grid gap-2" }, Be = { class: "grid gap-2" }, Ee = { class: "grid gap-4 @md/new-res-form:grid-cols-2" }, je = { class: "grid gap-2" }, Ae = { class: "grid gap-2" }, He = { class: "mt-4 text-red-400" }, ze = { class: "list-disc pl-4" }, Ge = { key: 0 }, qe = { key: 1 }, Ze = /* @__PURE__ */ ue({
|
|
7
7
|
__name: "NewReservationDialog",
|
|
8
8
|
setup(Je) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as Q, inject as K, openBlock as r, createElementBlock as g, createElementVNode as i, Fragment as I, renderList as q, withModifiers as ue, normalizeClass as ee, unref as o, createCommentVNode as T, toDisplayString as P, createTextVNode as m, resolveComponent as s, createBlock as $, withCtx as l, createVNode as t, computed as X, renderSlot as _e, ref as j, useTemplateRef as be, withAsyncContext as xe, watch as Ce, onMounted as ye, onUnmounted as we, provide as O, withKeys as ke } from "vue";
|
|
2
2
|
import { Filter as he, ChevronsUpDown as Pe, Check as se, RotateCcw as $e, ExternalLink as Se, Search as Me, Plus as Ve, LayoutGrid as Te, List as Ae } from "lucide-vue-next";
|
|
3
3
|
import { useModuleRoute as J, useModulePermissions as Y, useFirebaseIntegration as te, useConfirmation as ze, useModuleBreadcrumbs as Ie } from "@oneclick.dev/cms-kit";
|
|
4
|
-
import { u as Le } from "./index-
|
|
4
|
+
import { u as Le } from "./index-B-lVEpFX.mjs";
|
|
5
5
|
import { c as ae } from "./utils-BVKy9S2J.mjs";
|
|
6
6
|
import { t as D } from "./index-RLz1QPrf.mjs";
|
|
7
7
|
const Ee = { class: "grid @md:grid-cols-2 @2xl:grid-cols-3 @3xl:grid-cols-4 @4xl:grid-cols-5 @5xl:grid-cols-6 gap-6" }, De = ["onClick", "onContextmenu"], Fe = ["src"], Be = { class: "font-semibold" }, Ue = { class: "text-sm text-muted-foreground flex items-center gap-2" }, Re = { class: "flex items-center gap-2" }, je = { key: 0 }, Ke = /* @__PURE__ */ Q({
|