@oneclick.dev/cms-core-modules 0.0.90 → 0.0.92
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/{ContentEditor-BrhHT4t0.js → ContentEditor-ClYwiqvs.js} +40 -40
- package/dist/{ContentEditor-B-lB0fES.mjs → ContentEditor-fwvAAH_A.mjs} +4017 -3985
- package/dist/{EditLayout.vue_vue_type_script_setup_true_lang-CcysXzmW.mjs → EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs} +30 -31
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js +1 -0
- package/dist/{agenda-C5grvzSa.mjs → agenda-D9bpW3jv.mjs} +1 -1
- package/dist/{agenda-DXMwVWpN.js → agenda-H1NyBNr2.js} +1 -1
- package/dist/{availability-C1NqOFsQ.mjs → availability-B1D4Fyzi.mjs} +1 -1
- package/dist/{availability-D_wnfLsH.js → availability-DxrUcYbW.js} +1 -1
- package/dist/{exceptions-Cn7zooEu.js → exceptions-Bp5BSvxO.js} +1 -1
- package/dist/{exceptions-BIwMhYa4.mjs → exceptions-C97cNZYl.mjs} +1 -1
- package/dist/index-DOeXSG47.js +35 -0
- package/dist/{index-MwjeLHPP.mjs → index-DnH93MgM.mjs} +232 -231
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +9 -9
- package/dist/{orders-V1pch_ih.js → orders-BAT2ciXx.js} +1 -1
- package/dist/{orders-DhQ2EFXS.mjs → orders-DDrZJHj2.mjs} +1 -1
- package/dist/{payment-BbWByERf.mjs → payment-Bosr0m3u.mjs} +1 -1
- package/dist/{payment-BQaAqQ5q.js → payment-DDnC03jb.js} +1 -1
- package/dist/{regular-slots-C2NYxLPn.mjs → regular-slots-Cc1jmKuC.mjs} +1 -1
- package/dist/{regular-slots-Bs3WJB3U.js → regular-slots-DBs1XVeN.js} +1 -1
- package/dist/{resources-CFR_s89Z.mjs → resources-B7qDBC91.mjs} +1 -1
- package/dist/{resources-eb0pivDL.js → resources-BtF5RUUq.js} +1 -1
- package/package.json +2 -2
- package/dist/EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js +0 -1
- package/dist/index-C9pSS15N.js +0 -35
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@oneclick.dev/cms-kit"),t={name:"Table",description:"Manage tables and structured data.",icon:"mdi-table",version:"1.0.0"},o=e.defineModuleConfig({getItems:{label:"Fetch items",type:"flow"},viewable:{label:"Viewable",type:"checkbox",default:!1},editable:{label:"Editable",type:"checkbox",default:!1},deletable:{label:"Deletable",type:"checkbox",default:!1},addable:{label:"Addable",type:"checkbox",default:!1},searchable:{label:"Searchable",type:"checkbox",default:!1},downloadable:{label:"Downloadable",type:"checkbox",default:!1},allowBulkActions:{label:"Allow Bulk Actions",type:"checkbox",default:!1}}),r=[{path:"",component:()=>Promise.resolve().then(()=>require("./TableView-DtcF-oQc.js"))}],n=[],i={component:()=>Promise.resolve().then(()=>require("./index-DFQGVHTs.js")),metadata:t,config:o,routes:r,permissions:n},a={name:"Products",description:"Manage products",icon:"mdi-table",version:"1.0.0"},s=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},productCollection:{label:"Product Collection",type:"input",default:"products"},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},previewUrl:{label:"Preview URL",type:"input",default:"https://preview.com/shop/{{slug}}"}}),c=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-DeQQ0FY3.js"))},{path:"/:productId",component:()=>Promise.resolve().then(()=>require("./Detail-CjuhjPby.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-CjuhjPby.js"))}],p=[{key:"create-product",name:"Create product",description:"Team member can create a new product"},{key:"edit-product",name:"Edit product",description:"Team member can edit a product"},{key:"delete-product",name:"Delete product",description:"Team member can delete a product"}],l=[{name:"getEmptyStock",description:"Get a list of products with empty stock.",executionMode:"api",parameters:{type:"object",properties:{category:{type:"string",description:"Category of the product"}},required:["category"]}},{name:"viewProductDetails",description:"Show a card in chat with details of a product based on product ID.",executionMode:"component",chatComponent:"ProductDetailsCard",parameters:{type:"object",properties:{productId:{type:"string",description:"ID of the product"}},required:["productId"]}}],d={component:()=>Promise.resolve().then(()=>require("./index-R2oUDsjx.js")),metadata:a,config:s,routes:c,permissions:p,tools:l,chatComponents:{ProductDetailsCard:()=>Promise.resolve().then(()=>require("./ProductDetailsCard-Bn7qrgmc.js"))}},m={name:"Custom",description:"Custom module",icon:"mdi-table",version:"1.0.0"},u=e.defineModuleConfig({formLayout:{label:"Design View",type:"form"}}),h=[{path:"",component:()=>Promise.resolve().then(()=>require("./View-C8oQG6gI.js"))}],f=[],g={component:()=>Promise.resolve().then(()=>require("./index-CSxYBeVA.js")),metadata:m,config:u,routes:h,permissions:f},y={name:"Promo Codes",description:"Create and manage promo codes",icon:"mdi-table",version:"1.0.0"},b=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},promoCodeCollection:{label:"Promo Code Collection",type:"input",default:"promo-codes"}}),v=[{path:"",component:()=>Promise.resolve().then(()=>require("./Create-DuZ5nZrX.js"))},{path:"/promo-codes",component:()=>Promise.resolve().then(()=>require("./Find-D4Qa45qC.js"))},{path:"/promo-codes/:promoCodeId",component:()=>Promise.resolve().then(()=>require("./Detail-BZ-iE9vf.js"))}],C=[{key:"create-promo-codes",name:"Create promo codes",description:"Team member can create promo codes"},{key:"view-promo-codes",name:"View promo codes",description:"Team member can view promo codes"},{key:"delete-promo-codes",name:"Delete promo codes",description:"Team member can delete promo codes"}],w={component:()=>Promise.resolve().then(()=>require("./index-CkiNvRzs.js")),metadata:y,config:b,routes:v,permissions:C},P={name:"Product Collections",description:"Manage product collections",icon:"mdi-table",version:"1.0.0"},q=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1}}),D=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-T-lsy3UZ.js"))},{path:"/:collectionId",component:()=>Promise.resolve().then(()=>require("./Detail-CPqug27l.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-CPqug27l.js"))}],S=[{key:"create-collection",name:"Create product collection",description:"Team member can create a new product collection"},{key:"edit-collection",name:"Edit product collection",description:"Team member can edit a product collection"},{key:"delete-collection",name:"Delete product collection",description:"Team member can delete a product collection"}],k={component:()=>Promise.resolve().then(()=>require("./index-CwqrAU-H.js")),metadata:P,config:q,routes:D,permissions:S},M={name:"Shipping Options",description:"Manage shipping options",icon:"mdi-table",version:"1.0.0"},A=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},shippingOptionsCollection:{label:"Shipping Options Collection",type:"input",default:"public/e-commerce:shipping-options"}}),$=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BbvfH1u-.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-C8wQiDcv.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-C8wQiDcv.js"))}],T=[{key:"create-option",name:"Create shipping option",description:"Team member can create a new shipping option"},{key:"edit-option",name:"Edit shipping option",description:"Team member can edit a shipping option"},{key:"delete-option",name:"Delete shipping option",description:"Team member can delete a shipping option"}],x={component:()=>Promise.resolve().then(()=>require("./index-Co4ON2Di.js")),metadata:M,config:A,routes:$,permissions:T},E={name:"Google Analytics",description:"Configure Google Analytics settings.",icon:"mdi-google-analytics",version:"1.0.0"},I=e.defineModuleConfig({serviceAccount:{label:"Google Service Account",type:"resource",accept:["GOOGLE_SERVICE_ACCOUNT"]},propertyId:{label:"GA4 Property ID",type:"input",default:""},siteUrl:{label:"Search Console Site URL",type:"input",default:"",placeholder:"https://example.com or sc-domain:example.com",description:"Optional. When set, the module will fetch real keyword data from Google Search Console. Use the same site URL format as shown in Search Console."}}),j=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-Da0XexiT.js"))},{path:"/acquisition",component:()=>Promise.resolve().then(()=>require("./Acquisition-_-cq972V.js"))},{path:"/content",component:()=>Promise.resolve().then(()=>require("./Content-C-4Cdniz.js"))},{path:"/audience",component:()=>Promise.resolve().then(()=>require("./Audience-QnFQs93n.js"))},{path:"/seo",component:()=>Promise.resolve().then(()=>require("./SeoHealth-BkpJ1F2Y.js"))}],U=[],Y=[{name:"getTopPages",description:"Show a card in chat with the most popular/visited pages on the website for a given period.",executionMode:"component",chatComponent:"TopPagesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use relative formats like 'yesterday', '7daysAgo', '30daysAgo', '90daysAgo', '365daysAgo' or exact dates 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact dates 'YYYY-MM-DD'. Default: 'today'"},limit:{type:"number",description:"Number of pages to show. Default: 10, max: 50",default:10}},required:[]}},{name:"getVisitorStats",description:"Show a card in chat with visitor/traffic statistics (sessions, users, page views, bounce rate, etc.) for a given period. Use this when the user asks about traffic, visitors, how many people visited, etc.",executionMode:"component",chatComponent:"VisitorStatsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use 'yesterday' for yesterday, '7daysAgo' for last week, '30daysAgo' for last month, '90daysAgo' for last quarter, '365daysAgo' for last year, or exact 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact 'YYYY-MM-DD'. Default: 'today'"}},required:[]}},{name:"getSearchTerms",description:"Show a card in chat with search terms/keywords that bring visitors to the website. Use this when the user asks about keywords, SEO terms, what people search for, or search queries.",executionMode:"component",chatComponent:"SearchTermsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getTrafficSources",description:"Show a card in chat with where website visitors are coming from (traffic sources, channels, referrals). Use this when the user asks about traffic sources, where visitors come from, referrals, channels, etc.",executionMode:"component",chatComponent:"TrafficSourcesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getRealtimeVisitors",description:"Show a card in chat with the current real-time active visitors on the website right now.",executionMode:"component",chatComponent:"RealtimeCard",parameters:{type:"object",properties:{},required:[]}},{name:"getCountryBreakdown",description:"Show a card in chat with a geographic breakdown of where website visitors are located. Use this when the user asks about visitor countries, geographic distribution, or where their audience is from.",executionMode:"component",chatComponent:"CountryBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getDeviceBreakdown",description:"Show a card in chat with a device breakdown (desktop, mobile, tablet) of website visitors. Use this when the user asks about what devices people use, mobile vs desktop traffic, or if their site is mobile-friendly.",executionMode:"component",chatComponent:"DeviceBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getPeakHours",description:"Show a card in chat with peak traffic hours and a weekly heatmap showing when visitors are most active. Use this when the user asks about best times to post, peak hours, busiest times, or when their audience is online.",executionMode:"component",chatComponent:"PeakHoursCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}}],R={component:()=>Promise.resolve().then(()=>require("./index-DwHYfZl_.js")),metadata:E,config:I,routes:j,permissions:U,tools:Y,chatComponents:{TopPagesCard:()=>Promise.resolve().then(()=>require("./TopPagesCard-BDeA997A.js")),VisitorStatsCard:()=>Promise.resolve().then(()=>require("./VisitorStatsCard-BmByE_Hi.js")),SearchTermsCard:()=>Promise.resolve().then(()=>require("./SearchTermsCard-BsB-63aH.js")),TrafficSourcesCard:()=>Promise.resolve().then(()=>require("./TrafficSourcesCard-C3ziDTUL.js")),RealtimeCard:()=>Promise.resolve().then(()=>require("./RealtimeCard--APfRNc8.js")),CountryBreakdownCard:()=>Promise.resolve().then(()=>require("./CountryBreakdownCard-D7BK3nRD.js")),DeviceBreakdownCard:()=>Promise.resolve().then(()=>require("./DeviceBreakdownCard-DRhQ9ufG.js")),PeakHoursCard:()=>Promise.resolve().then(()=>require("./PeakHoursCard-BR5zmta4.js"))}},B={name:"Content Manager",description:"Create and manage content",icon:"mdi-table",version:"1.0.0"},O=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},domain:{label:"Domain",type:"input",default:"https://domain.com"},collectionsCollection:{label:"Collections Collection",type:"input",default:"content_collections"},contentCollection:{label:"Content Collection",type:"input",default:"content"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},supportedLanguages:{label:"Supported Languages",type:"select",predefinedOptions:"languages",multiple:!0},defaultLanguage:{label:"Default Language",type:"select",predefinedOptions:"languages"},githubIntegration:{label:"GitHub Integration",type:"resource",accept:["GITHUB"]},githubRepo:{label:"GitHub Repository",type:"input"},githubOwner:{label:"GitHub Owner",type:"input",required:!1}}),G=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-37nilXzE.js"))},{path:"/collections",component:()=>Promise.resolve().then(()=>require("./Overview-37nilXzE.js"))},{path:"/collections/:collectionId",component:()=>Promise.resolve().then(()=>require("./Entries-DkRhOt95.js"))},{path:"/collections/:collectionId/:entryId",component:()=>Promise.resolve().then(()=>require("./ContentEditor-BrhHT4t0.js"))},{path:"/components",component:()=>Promise.resolve().then(()=>require("./Components-DXbx0RLV.js"))},{path:"/global-styling",component:()=>Promise.resolve().then(()=>require("./GlobalStyling-CnSlXkZc.js"))}],L=[{key:"create-content",name:"Create content",description:"Team member can create content"},{key:"edit-content",name:"Edit content",description:"Team member can edit content"},{key:"delete-content",name:"Delete content",description:"Team member can delete content"}],F={component:()=>Promise.resolve().then(()=>require("./index-UtjLbLw-.js")),metadata:B,config:O,routes:G,permissions:L},V={name:"Mail Templates",description:"Build templates for your transactional emails.",icon:"mdi-table",version:"1.0.0"},H=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},templateCollection:{label:"Mail Templates Collection",type:"input",default:"mail-templates"}}),N=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BDlBCUI_.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))}],_=[{key:"create-template",name:"Create mail template",description:"Team member can create a new mail template"},{key:"edit-template",name:"Edit mail template",description:"Team member can edit a mail template"},{key:"delete-template",name:"Delete mail template",description:"Team member can delete a mail template"}],K={component:()=>Promise.resolve().then(()=>require("./index-Cz-baGax.js")),metadata:V,config:H,routes:N,permissions:_},W={name:"Appointments",description:"Create and manage agendas for booking appointments.",icon:"mdi-table",version:"1.0.0"},z=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},mailAccount:{label:"Mail account",type:"resource",accept:["GMAIL"]},agendaCollection:{label:"Agenda Collection",type:"input",default:"agendas"},reservationsCollection:{label:"Reservations Collection",type:"input",default:"bookings_orders"},reservedSpotsCollection:{label:"Reserved Spots Collection",type:"input",default:"reserved_spots"}}),J=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-t0pG5xjA.js"))},{path:"/create",component:()=>Promise.resolve().then(()=>require("./index-D2a6wEPh.js"))},{path:"/create/regular",component:()=>Promise.resolve().then(()=>require("./regular-1LXNPviB.js"))},{path:"/edit/:id",component:()=>Promise.resolve().then(()=>require("./index-C9pSS15N.js"))},{path:"/edit/:id/agenda",component:()=>Promise.resolve().then(()=>require("./agenda-DXMwVWpN.js"))},{path:"/edit/:id/regular-slots",component:()=>Promise.resolve().then(()=>require("./regular-slots-Bs3WJB3U.js"))},{path:"/edit/:id/exceptions",component:()=>Promise.resolve().then(()=>require("./exceptions-Cn7zooEu.js"))},{path:"/edit/:id/availability",component:()=>Promise.resolve().then(()=>require("./availability-D_wnfLsH.js"))},{path:"/edit/:id/payment",component:()=>Promise.resolve().then(()=>require("./payment-BQaAqQ5q.js"))},{path:"/edit/:id/resources",component:()=>Promise.resolve().then(()=>require("./resources-eb0pivDL.js"))},{path:"/edit/:id/orders",component:()=>Promise.resolve().then(()=>require("./orders-V1pch_ih.js"))}],Q=[{key:"create-agendas",name:"Create agendas",description:"Team member can create agendas"},{key:"edit-agendas",name:"Edit agendas",description:"Team member can edit agendas"},{key:"delete-agendas",name:"Delete agendas",description:"Team member can delete agendas"},{key:"manage-reservations",name:"Manage reservations",description:"Team member can create, edit, and delete reservations"}],X=[{name:"findAppointment",description:"Show a card in chat with details of an appointment/booking/reservation/...",executionMode:"component",chatComponent:"AppointmentDetailsCard",parameters:{type:"object",properties:{name:{type:"string",description:"Name of the booker"},email:{type:"string",description:"Email of the booker"},date:{type:"string",description:"Date of the appointment (YYYY-MM-DD)"}},required:["date"]}},{name:"getRecentAppointments",description:"Show a table in chat with recent appointments, default loading the latest 20 appointments.",executionMode:"component",chatComponent:"AppointmentListTable",parameters:{type:"object",properties:{quantity:{type:"number",description:"Number of appointments to load. default: 20 max: 100",default:20}},required:["quantity"]}},{name:"changeAppointmentDetails",description:"Show a card in chat where user can edit name, email and date of an existing appointment.",executionMode:"component",chatComponent:"AppointmentEditor",parameters:{type:"object",properties:{orderId:{type:"string",description:"ID of the order / appointment. This is NOT the reservation ID."}},required:["orderId"]}}],Z={component:()=>Promise.resolve().then(()=>require("./index-9HVlmvK3.js")),metadata:W,config:z,routes:J,permissions:Q,tools:X,chatComponents:{AppointmentDetailsCard:()=>Promise.resolve().then(()=>require("./AppointmentDetailsCard-DpLM5IrB.js")),AppointmentListTable:()=>Promise.resolve().then(()=>require("./AppointmentListTable-CQ0WIXtj.js")),AppointmentEditor:()=>Promise.resolve().then(()=>require("./AppointmentEditor-CaTfbkIf.js"))}};exports.appointments=Z;exports.contentManager=F;exports.custom=g;exports.googleAnalytics=R;exports.mailTemplates=K;exports.productCollections=k;exports.products=d;exports.promoCodes=w;exports.shippingOptions=x;exports.table=i;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@oneclick.dev/cms-kit"),t={name:"Table",description:"Manage tables and structured data.",icon:"mdi-table",version:"1.0.0"},o=e.defineModuleConfig({getItems:{label:"Fetch items",type:"flow"},viewable:{label:"Viewable",type:"checkbox",default:!1},editable:{label:"Editable",type:"checkbox",default:!1},deletable:{label:"Deletable",type:"checkbox",default:!1},addable:{label:"Addable",type:"checkbox",default:!1},searchable:{label:"Searchable",type:"checkbox",default:!1},downloadable:{label:"Downloadable",type:"checkbox",default:!1},allowBulkActions:{label:"Allow Bulk Actions",type:"checkbox",default:!1}}),r=[{path:"",component:()=>Promise.resolve().then(()=>require("./TableView-DtcF-oQc.js"))}],n=[],i={component:()=>Promise.resolve().then(()=>require("./index-DFQGVHTs.js")),metadata:t,config:o,routes:r,permissions:n},a={name:"Products",description:"Manage products",icon:"mdi-table",version:"1.0.0"},s=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},productCollection:{label:"Product Collection",type:"input",default:"products"},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},previewUrl:{label:"Preview URL",type:"input",default:"https://preview.com/shop/{{slug}}"}}),c=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-DeQQ0FY3.js"))},{path:"/:productId",component:()=>Promise.resolve().then(()=>require("./Detail-CjuhjPby.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-CjuhjPby.js"))}],p=[{key:"create-product",name:"Create product",description:"Team member can create a new product"},{key:"edit-product",name:"Edit product",description:"Team member can edit a product"},{key:"delete-product",name:"Delete product",description:"Team member can delete a product"}],l=[{name:"getEmptyStock",description:"Get a list of products with empty stock.",executionMode:"api",parameters:{type:"object",properties:{category:{type:"string",description:"Category of the product"}},required:["category"]}},{name:"viewProductDetails",description:"Show a card in chat with details of a product based on product ID.",executionMode:"component",chatComponent:"ProductDetailsCard",parameters:{type:"object",properties:{productId:{type:"string",description:"ID of the product"}},required:["productId"]}}],d={component:()=>Promise.resolve().then(()=>require("./index-R2oUDsjx.js")),metadata:a,config:s,routes:c,permissions:p,tools:l,chatComponents:{ProductDetailsCard:()=>Promise.resolve().then(()=>require("./ProductDetailsCard-Bn7qrgmc.js"))}},m={name:"Custom",description:"Custom module",icon:"mdi-table",version:"1.0.0"},u=e.defineModuleConfig({formLayout:{label:"Design View",type:"form"}}),h=[{path:"",component:()=>Promise.resolve().then(()=>require("./View-C8oQG6gI.js"))}],f=[],g={component:()=>Promise.resolve().then(()=>require("./index-CSxYBeVA.js")),metadata:m,config:u,routes:h,permissions:f},y={name:"Promo Codes",description:"Create and manage promo codes",icon:"mdi-table",version:"1.0.0"},b=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},promoCodeCollection:{label:"Promo Code Collection",type:"input",default:"promo-codes"}}),v=[{path:"",component:()=>Promise.resolve().then(()=>require("./Create-DuZ5nZrX.js"))},{path:"/promo-codes",component:()=>Promise.resolve().then(()=>require("./Find-D4Qa45qC.js"))},{path:"/promo-codes/:promoCodeId",component:()=>Promise.resolve().then(()=>require("./Detail-BZ-iE9vf.js"))}],C=[{key:"create-promo-codes",name:"Create promo codes",description:"Team member can create promo codes"},{key:"view-promo-codes",name:"View promo codes",description:"Team member can view promo codes"},{key:"delete-promo-codes",name:"Delete promo codes",description:"Team member can delete promo codes"}],w={component:()=>Promise.resolve().then(()=>require("./index-CkiNvRzs.js")),metadata:y,config:b,routes:v,permissions:C},P={name:"Product Collections",description:"Manage product collections",icon:"mdi-table",version:"1.0.0"},q=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1}}),D=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-T-lsy3UZ.js"))},{path:"/:collectionId",component:()=>Promise.resolve().then(()=>require("./Detail-CPqug27l.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-CPqug27l.js"))}],S=[{key:"create-collection",name:"Create product collection",description:"Team member can create a new product collection"},{key:"edit-collection",name:"Edit product collection",description:"Team member can edit a product collection"},{key:"delete-collection",name:"Delete product collection",description:"Team member can delete a product collection"}],k={component:()=>Promise.resolve().then(()=>require("./index-CwqrAU-H.js")),metadata:P,config:q,routes:D,permissions:S},M={name:"Shipping Options",description:"Manage shipping options",icon:"mdi-table",version:"1.0.0"},A=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},shippingOptionsCollection:{label:"Shipping Options Collection",type:"input",default:"public/e-commerce:shipping-options"}}),$=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BbvfH1u-.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-C8wQiDcv.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-C8wQiDcv.js"))}],T=[{key:"create-option",name:"Create shipping option",description:"Team member can create a new shipping option"},{key:"edit-option",name:"Edit shipping option",description:"Team member can edit a shipping option"},{key:"delete-option",name:"Delete shipping option",description:"Team member can delete a shipping option"}],x={component:()=>Promise.resolve().then(()=>require("./index-Co4ON2Di.js")),metadata:M,config:A,routes:$,permissions:T},E={name:"Google Analytics",description:"Configure Google Analytics settings.",icon:"mdi-google-analytics",version:"1.0.0"},I=e.defineModuleConfig({serviceAccount:{label:"Google Service Account",type:"resource",accept:["GOOGLE_SERVICE_ACCOUNT"]},propertyId:{label:"GA4 Property ID",type:"input",default:""},siteUrl:{label:"Search Console Site URL",type:"input",default:"",placeholder:"https://example.com or sc-domain:example.com",description:"Optional. When set, the module will fetch real keyword data from Google Search Console. Use the same site URL format as shown in Search Console."}}),j=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-Da0XexiT.js"))},{path:"/acquisition",component:()=>Promise.resolve().then(()=>require("./Acquisition-_-cq972V.js"))},{path:"/content",component:()=>Promise.resolve().then(()=>require("./Content-C-4Cdniz.js"))},{path:"/audience",component:()=>Promise.resolve().then(()=>require("./Audience-QnFQs93n.js"))},{path:"/seo",component:()=>Promise.resolve().then(()=>require("./SeoHealth-BkpJ1F2Y.js"))}],U=[],Y=[{name:"getTopPages",description:"Show a card in chat with the most popular/visited pages on the website for a given period.",executionMode:"component",chatComponent:"TopPagesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use relative formats like 'yesterday', '7daysAgo', '30daysAgo', '90daysAgo', '365daysAgo' or exact dates 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact dates 'YYYY-MM-DD'. Default: 'today'"},limit:{type:"number",description:"Number of pages to show. Default: 10, max: 50",default:10}},required:[]}},{name:"getVisitorStats",description:"Show a card in chat with visitor/traffic statistics (sessions, users, page views, bounce rate, etc.) for a given period. Use this when the user asks about traffic, visitors, how many people visited, etc.",executionMode:"component",chatComponent:"VisitorStatsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use 'yesterday' for yesterday, '7daysAgo' for last week, '30daysAgo' for last month, '90daysAgo' for last quarter, '365daysAgo' for last year, or exact 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact 'YYYY-MM-DD'. Default: 'today'"}},required:[]}},{name:"getSearchTerms",description:"Show a card in chat with search terms/keywords that bring visitors to the website. Use this when the user asks about keywords, SEO terms, what people search for, or search queries.",executionMode:"component",chatComponent:"SearchTermsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getTrafficSources",description:"Show a card in chat with where website visitors are coming from (traffic sources, channels, referrals). Use this when the user asks about traffic sources, where visitors come from, referrals, channels, etc.",executionMode:"component",chatComponent:"TrafficSourcesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getRealtimeVisitors",description:"Show a card in chat with the current real-time active visitors on the website right now.",executionMode:"component",chatComponent:"RealtimeCard",parameters:{type:"object",properties:{},required:[]}},{name:"getCountryBreakdown",description:"Show a card in chat with a geographic breakdown of where website visitors are located. Use this when the user asks about visitor countries, geographic distribution, or where their audience is from.",executionMode:"component",chatComponent:"CountryBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getDeviceBreakdown",description:"Show a card in chat with a device breakdown (desktop, mobile, tablet) of website visitors. Use this when the user asks about what devices people use, mobile vs desktop traffic, or if their site is mobile-friendly.",executionMode:"component",chatComponent:"DeviceBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getPeakHours",description:"Show a card in chat with peak traffic hours and a weekly heatmap showing when visitors are most active. Use this when the user asks about best times to post, peak hours, busiest times, or when their audience is online.",executionMode:"component",chatComponent:"PeakHoursCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}}],R={component:()=>Promise.resolve().then(()=>require("./index-DwHYfZl_.js")),metadata:E,config:I,routes:j,permissions:U,tools:Y,chatComponents:{TopPagesCard:()=>Promise.resolve().then(()=>require("./TopPagesCard-BDeA997A.js")),VisitorStatsCard:()=>Promise.resolve().then(()=>require("./VisitorStatsCard-BmByE_Hi.js")),SearchTermsCard:()=>Promise.resolve().then(()=>require("./SearchTermsCard-BsB-63aH.js")),TrafficSourcesCard:()=>Promise.resolve().then(()=>require("./TrafficSourcesCard-C3ziDTUL.js")),RealtimeCard:()=>Promise.resolve().then(()=>require("./RealtimeCard--APfRNc8.js")),CountryBreakdownCard:()=>Promise.resolve().then(()=>require("./CountryBreakdownCard-D7BK3nRD.js")),DeviceBreakdownCard:()=>Promise.resolve().then(()=>require("./DeviceBreakdownCard-DRhQ9ufG.js")),PeakHoursCard:()=>Promise.resolve().then(()=>require("./PeakHoursCard-BR5zmta4.js"))}},B={name:"Content Manager",description:"Create and manage content",icon:"mdi-table",version:"1.0.0"},O=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},domain:{label:"Domain",type:"input",default:"https://domain.com"},collectionsCollection:{label:"Collections Collection",type:"input",default:"content_collections"},contentCollection:{label:"Content Collection",type:"input",default:"content"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},supportedLanguages:{label:"Supported Languages",type:"select",predefinedOptions:"languages",multiple:!0},defaultLanguage:{label:"Default Language",type:"select",predefinedOptions:"languages"},githubIntegration:{label:"GitHub Integration",type:"resource",accept:["GITHUB"]},githubRepo:{label:"GitHub Repository",type:"input"},githubOwner:{label:"GitHub Owner",type:"input",required:!1}}),G=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-37nilXzE.js"))},{path:"/collections",component:()=>Promise.resolve().then(()=>require("./Overview-37nilXzE.js"))},{path:"/collections/:collectionId",component:()=>Promise.resolve().then(()=>require("./Entries-DkRhOt95.js"))},{path:"/collections/:collectionId/:entryId",component:()=>Promise.resolve().then(()=>require("./ContentEditor-ClYwiqvs.js"))},{path:"/components",component:()=>Promise.resolve().then(()=>require("./Components-DXbx0RLV.js"))},{path:"/global-styling",component:()=>Promise.resolve().then(()=>require("./GlobalStyling-CnSlXkZc.js"))}],L=[{key:"create-content",name:"Create content",description:"Team member can create content"},{key:"edit-content",name:"Edit content",description:"Team member can edit content"},{key:"delete-content",name:"Delete content",description:"Team member can delete content"}],F={component:()=>Promise.resolve().then(()=>require("./index-UtjLbLw-.js")),metadata:B,config:O,routes:G,permissions:L},V={name:"Mail Templates",description:"Build templates for your transactional emails.",icon:"mdi-table",version:"1.0.0"},H=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},templateCollection:{label:"Mail Templates Collection",type:"input",default:"mail-templates"}}),N=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BDlBCUI_.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))}],_=[{key:"create-template",name:"Create mail template",description:"Team member can create a new mail template"},{key:"edit-template",name:"Edit mail template",description:"Team member can edit a mail template"},{key:"delete-template",name:"Delete mail template",description:"Team member can delete a mail template"}],K={component:()=>Promise.resolve().then(()=>require("./index-Cz-baGax.js")),metadata:V,config:H,routes:N,permissions:_},W={name:"Appointments",description:"Create and manage agendas for booking appointments.",icon:"mdi-table",version:"1.0.0"},z=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},mailAccount:{label:"Mail account",type:"resource",accept:["GMAIL"]},agendaCollection:{label:"Agenda Collection",type:"input",default:"agendas"},reservationsCollection:{label:"Reservations Collection",type:"input",default:"bookings_orders"},reservedSpotsCollection:{label:"Reserved Spots Collection",type:"input",default:"reserved_spots"}}),J=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-t0pG5xjA.js"))},{path:"/create",component:()=>Promise.resolve().then(()=>require("./index-D2a6wEPh.js"))},{path:"/create/regular",component:()=>Promise.resolve().then(()=>require("./regular-1LXNPviB.js"))},{path:"/edit/:id",component:()=>Promise.resolve().then(()=>require("./index-DOeXSG47.js"))},{path:"/edit/:id/agenda",component:()=>Promise.resolve().then(()=>require("./agenda-H1NyBNr2.js"))},{path:"/edit/:id/regular-slots",component:()=>Promise.resolve().then(()=>require("./regular-slots-DBs1XVeN.js"))},{path:"/edit/:id/exceptions",component:()=>Promise.resolve().then(()=>require("./exceptions-Bp5BSvxO.js"))},{path:"/edit/:id/availability",component:()=>Promise.resolve().then(()=>require("./availability-DxrUcYbW.js"))},{path:"/edit/:id/payment",component:()=>Promise.resolve().then(()=>require("./payment-DDnC03jb.js"))},{path:"/edit/:id/resources",component:()=>Promise.resolve().then(()=>require("./resources-BtF5RUUq.js"))},{path:"/edit/:id/orders",component:()=>Promise.resolve().then(()=>require("./orders-BAT2ciXx.js"))}],Q=[{key:"create-agendas",name:"Create agendas",description:"Team member can create agendas"},{key:"edit-agendas",name:"Edit agendas",description:"Team member can edit agendas"},{key:"delete-agendas",name:"Delete agendas",description:"Team member can delete agendas"},{key:"manage-reservations",name:"Manage reservations",description:"Team member can create, edit, and delete reservations"}],X=[{name:"findAppointment",description:"Show a card in chat with details of an appointment/booking/reservation/...",executionMode:"component",chatComponent:"AppointmentDetailsCard",parameters:{type:"object",properties:{name:{type:"string",description:"Name of the booker"},email:{type:"string",description:"Email of the booker"},date:{type:"string",description:"Date of the appointment (YYYY-MM-DD)"}},required:["date"]}},{name:"getRecentAppointments",description:"Show a table in chat with recent appointments, default loading the latest 20 appointments.",executionMode:"component",chatComponent:"AppointmentListTable",parameters:{type:"object",properties:{quantity:{type:"number",description:"Number of appointments to load. default: 20 max: 100",default:20}},required:["quantity"]}},{name:"changeAppointmentDetails",description:"Show a card in chat where user can edit name, email and date of an existing appointment.",executionMode:"component",chatComponent:"AppointmentEditor",parameters:{type:"object",properties:{orderId:{type:"string",description:"ID of the order / appointment. This is NOT the reservation ID."}},required:["orderId"]}}],Z={component:()=>Promise.resolve().then(()=>require("./index-9HVlmvK3.js")),metadata:W,config:z,routes:J,permissions:Q,tools:X,chatComponents:{AppointmentDetailsCard:()=>Promise.resolve().then(()=>require("./AppointmentDetailsCard-DpLM5IrB.js")),AppointmentListTable:()=>Promise.resolve().then(()=>require("./AppointmentListTable-CQ0WIXtj.js")),AppointmentEditor:()=>Promise.resolve().then(()=>require("./AppointmentEditor-CaTfbkIf.js"))}};exports.appointments=Z;exports.contentManager=F;exports.custom=g;exports.googleAnalytics=R;exports.mailTemplates=K;exports.productCollections=k;exports.products=d;exports.promoCodes=w;exports.shippingOptions=x;exports.table=i;
|
package/dist/index.mjs
CHANGED
|
@@ -528,7 +528,7 @@ const t = {
|
|
|
528
528
|
{ path: "", component: () => import("./Overview-C--dq51X.mjs") },
|
|
529
529
|
{ path: "/collections", component: () => import("./Overview-C--dq51X.mjs") },
|
|
530
530
|
{ path: "/collections/:collectionId", component: () => import("./Entries-dLlCrXXe.mjs") },
|
|
531
|
-
{ path: "/collections/:collectionId/:entryId", component: () => import("./ContentEditor-
|
|
531
|
+
{ path: "/collections/:collectionId/:entryId", component: () => import("./ContentEditor-fwvAAH_A.mjs") },
|
|
532
532
|
{ path: "/components", component: () => import("./Components-C83O-xlF.mjs") },
|
|
533
533
|
{ path: "/global-styling", component: () => import("./GlobalStyling-C9VthHWK.mjs") }
|
|
534
534
|
], P = [
|
|
@@ -608,14 +608,14 @@ const t = {
|
|
|
608
608
|
{ path: "/create/regular", component: () => import("./regular-_05oq5Tx.mjs") },
|
|
609
609
|
// { path: '/create/full-day', component: () => import('./pages/create/full-day.vue') },
|
|
610
610
|
// { path: '/create/multi-day', component: () => import('./pages/create/multi-day.vue') },
|
|
611
|
-
{ path: "/edit/:id", component: () => import("./index-
|
|
612
|
-
{ path: "/edit/:id/agenda", component: () => import("./agenda-
|
|
613
|
-
{ path: "/edit/:id/regular-slots", component: () => import("./regular-slots-
|
|
614
|
-
{ path: "/edit/:id/exceptions", component: () => import("./exceptions-
|
|
615
|
-
{ path: "/edit/:id/availability", component: () => import("./availability-
|
|
616
|
-
{ path: "/edit/:id/payment", component: () => import("./payment-
|
|
617
|
-
{ path: "/edit/:id/resources", component: () => import("./resources-
|
|
618
|
-
{ path: "/edit/:id/orders", component: () => import("./orders-
|
|
611
|
+
{ path: "/edit/:id", component: () => import("./index-DnH93MgM.mjs") },
|
|
612
|
+
{ path: "/edit/:id/agenda", component: () => import("./agenda-D9bpW3jv.mjs") },
|
|
613
|
+
{ path: "/edit/:id/regular-slots", component: () => import("./regular-slots-Cc1jmKuC.mjs") },
|
|
614
|
+
{ path: "/edit/:id/exceptions", component: () => import("./exceptions-C97cNZYl.mjs") },
|
|
615
|
+
{ path: "/edit/:id/availability", component: () => import("./availability-B1D4Fyzi.mjs") },
|
|
616
|
+
{ path: "/edit/:id/payment", component: () => import("./payment-Bosr0m3u.mjs") },
|
|
617
|
+
{ path: "/edit/:id/resources", component: () => import("./resources-B7qDBC91.mjs") },
|
|
618
|
+
{ path: "/edit/:id/orders", component: () => import("./orders-DDrZJHj2.mjs") }
|
|
619
619
|
], F = [
|
|
620
620
|
{ key: "create-agendas", name: "Create agendas", description: "Team member can create agendas" },
|
|
621
621
|
{ key: "edit-agendas", name: "Edit agendas", description: "Team member can edit agendas" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),v=require("@oneclick.dev/cms-kit"),i=require("lucide-vue-next"),E=require("./ReservationDetailDialog.vue_vue_type_script_setup_true_lang-VWVIxIr6.js"),M=require("./EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js"),H={class:"space-y-6"},$={class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"},Y={class:"text-2xl font-semibold tracking-tight flex items-center gap-2"},K={class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"},Q={class:"flex items-center gap-1"},X={class:"flex items-center gap-1"},G={class:"flex items-center gap-2"},J={class:"flex items-center gap-1"},W={class:"text-sm text-muted-foreground mt-2"},Z={class:"relative mb-4"},ee={key:0,class:"mb-3 text-sm text-muted-foreground"},te={key:1,class:"flex items-center justify-center py-8"},oe={key:2,class:"text-center py-8 text-muted-foreground"},ne={key:3,class:"text-center py-8 text-muted-foreground"},se={key:4,class:"space-y-2"},re=["onClick"],ae={class:"flex items-start justify-between"},le={class:"flex-1"},ce={class:"font-medium"},ie={class:"text-sm text-muted-foreground"},de={class:"text-sm text-muted-foreground"},ue={class:"flex items-center gap-4 flex-wrap mt-1"},me={class:"flex items-center gap-2 text-xs text-muted-foreground"},pe={class:"flex items-center gap-2 text-xs text-muted-foreground"},fe={key:0,class:"flex items-center gap-1 text-xs text-muted-foreground"},ge={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},ve={class:"text-right"},_e={key:0,class:"inline-block px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},xe={key:1,class:"inline-block px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400"},ye={key:2,class:"inline-block px-2 py-1 text-xs rounded-full bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},he={key:3,class:"inline-block px-2 py-1 text-xs rounded-full bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},ke={key:4,class:"inline-block px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400"},Ne={key:5,class:"text-sm font-medium mt-1"},De=e.defineComponent({__name:"orders",setup(we){const C=v.useRoute();v.useRouter();const S=v.useOverlayParams(),{params:b}=v.useModuleRoute(),{config:x}=v.useModule(),N=v.useFirebaseIntegration(x.project),d=e.ref([]),y=e.ref([]),_=e.ref(!0),m=e.ref(""),D=e.ref(null),p=new Date,c=e.ref(new Date),B=e.computed(()=>({date:A(c.value),resource:null}));e.provide("event",B);const I=e.computed(()=>{const t=new Date(p);t.setDate(p.getDate()-1);const o=new Date(p);return o.setDate(p.getDate()+1),c.value.toDateString()===p.toDateString()?"Today":c.value.toDateString()===t.toDateString()?"Yesterday":c.value.toDateString()===o.toDateString()?"Tomorrow":c.value.toLocaleDateString("en-US",{weekday:"long",month:"long",day:"numeric",year:"numeric"})}),P=()=>{const t=new Date(c.value);t.setDate(t.getDate()-1),c.value=t},T=()=>{const t=new Date(c.value);t.setDate(t.getDate()+1),t<=p&&(c.value=t)},O=e.computed(()=>{const t=new Date(c.value);return t.setDate(t.getDate()+1),t<=p}),z=()=>{c.value=new Date},A=t=>{const o=t.getFullYear(),s=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${o}-${s}-${r}`},R=t=>t?new Date(t).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}):"",U=t=>t?new Date(t).toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric"}):"",w=e.computed(()=>m.value.trim()?new E.Fuse(d.value,{keys:["customerInfo.firstName","customerInfo.lastName","customerInfo.email","customerInfo.phone","resourceName"],threshold:.3,ignoreLocation:!0}).search(m.value).map(o=>o.item):d.value),h=e.computed(()=>({spots:d.value.reduce((t,o)=>t+(o.spots||0),0),bookings:d.value.length,revenue:d.value.reduce((t,o)=>t+(o.reservationPrice||0),0)})),j=()=>{m.value=""},F=async()=>{try{const t=b.value.id,o=await N.get(x.agendaCollection,t);y.value=o?.resources?.filter(s=>s.isActive)||[]}catch(t){console.error("Error loading resources:",t),y.value=[]}},f=async()=>{_.value=!0,d.value=[];try{const t=b.value.id,o=new Date(c.value);o.setHours(0,0,0,0);const s=new Date(c.value);s.setHours(23,59,59,999);const r=await N.find(x.reservationsCollection,{filters:[{field:"agendaId",operator:"==",value:t},{field:"createdAt",operator:">=",value:o.toISOString()},{field:"createdAt",operator:"<=",value:s.toISOString()}]});let u=[];r.forEach(a=>{(a.reservations||[]).forEach(l=>{const k=y.value.find(V=>V.id===l.resourceId);u.push({customerInfo:a.customerInfo,amountDue:a.amountDue,amountPaid:a.amountPaid,status:a.status,reservationStatus:l.status,subtotal:a.subtotal,total:a.total,discount:a.discount,id:a.id,res_id:l.id,resourceId:l.resourceId,spots:l.spots,date:l.date,createdAt:a.createdAt,startTime:l.timeslot?.startTime,endTime:l.timeslot?.endTime,reservationPrice:l.totalPrice,reservationBasePrice:l.basePrice,reservationAddOnsPrice:l.addOnsPrice,pricingOptionId:l.pricingOptionId,pricingOption:l.pricingOption,resourceName:k?.name||"Unknown",resourceColor:k?.color})})}),d.value=u.sort((a,g)=>(g.createdAt||"").localeCompare(a.createdAt||""))}catch(t){console.error("Error loading orders:",t),d.value=[]}finally{_.value=!1}},L=async()=>{await F(),await f()},q=async(t,o)=>{const s=await N.get(x.reservationsCollection,t),r=s?.reservations?.find(u=>u.id===o);if(r){const u=y.value.find(g=>g.id===r.resourceId),a={customerInfo:s.customerInfo,amountDue:s.amountDue,amountPaid:s.amountPaid,status:s.status,reservationStatus:r.status,subtotal:s.subtotal,total:s.total,discount:s.discount,id:s.id,res_id:r.id,resourceId:r.resourceId,spots:r.spots,date:r.date,createdAt:s.createdAt,startTime:r.timeslot?.startTime,endTime:r.timeslot?.endTime,reservationPrice:r.totalPrice,reservationBasePrice:r.basePrice,reservationAddOnsPrice:r.addOnsPrice,pricingOptionId:r.pricingOptionId,pricingOption:r.pricingOption,resourceName:u?.name||"Unknown",resourceColor:u?.color};await e.nextTick(),D.value?.openDialog(a)}};return L(),e.onMounted(async()=>{const t=S.value.orderId||C.query.orderId,o=S.value.reservationId||C.query.reservationId;if(t){const s=new URL(window.location.href);s.searchParams.delete("orderId"),s.searchParams.delete("reservationId"),window.history.replaceState(window.history.state,"",s.toString()),await q(t,o)}}),e.watch(c,()=>{f()}),(t,o)=>{const s=e.resolveComponent("Badge"),r=e.resolveComponent("CardTitle"),u=e.resolveComponent("CardDescription"),a=e.resolveComponent("Button"),g=e.resolveComponent("CardHeader"),l=e.resolveComponent("Input"),k=e.resolveComponent("CardContent"),V=e.resolveComponent("Card");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(M._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",H,[e.createElementVNode("div",$,[e.createElementVNode("div",null,[e.createElementVNode("h1",Y,[e.createVNode(e.unref(i.ShoppingBag),{class:"size-6"}),o[1]||(o[1]=e.createTextVNode(" Orders ",-1))]),o[2]||(o[2]=e.createElementVNode("p",{class:"text-muted-foreground text-sm mt-1"}," View orders by when they were placed ",-1))])]),e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[e.createElementVNode("div",K,[e.createElementVNode("div",null,[e.createVNode(r,{class:"flex items-center gap-2"},{default:e.withCtx(()=>[o[3]||(o[3]=e.createTextVNode(" Orders received ",-1)),e.unref(h).bookings>0?(e.openBlock(),e.createBlock(s,{key:0,variant:"secondary"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h).bookings),1)]),_:1})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(u,{class:"flex items-center gap-4 mt-1"},{default:e.withCtx(()=>[e.createElementVNode("span",Q,[e.createVNode(e.unref(i.Users),{size:14}),e.createTextVNode(" "+e.toDisplayString(e.unref(h).spots)+" spots ",1)]),e.createElementVNode("span",X," €"+e.toDisplayString(e.unref(h).revenue.toFixed(2))+" revenue ",1)]),_:1})]),e.createElementVNode("div",G,[e.createElementVNode("div",J,[e.createVNode(a,{variant:"ghost",size:"icon",class:"size-8",onClick:P},{default:e.withCtx(()=>[e.createVNode(e.unref(i.ChevronLeft),{size:16})]),_:1}),e.createVNode(a,{variant:"ghost",size:"sm",class:"h-8 px-3 text-xs",onClick:z},{default:e.withCtx(()=>[...o[4]||(o[4]=[e.createTextVNode(" Today ",-1)])]),_:1}),e.createVNode(a,{variant:"ghost",size:"icon",class:"size-8",onClick:T,disabled:!e.unref(O)},{default:e.withCtx(()=>[e.createVNode(e.unref(i.ChevronRight),{size:16})]),_:1},8,["disabled"])]),e.createVNode(a,{variant:"ghost",size:"icon",onClick:f,disabled:e.unref(_)},{default:e.withCtx(()=>[e.createVNode(e.unref(i.RefreshCw),{size:16,class:e.normalizeClass({"animate-spin":e.unref(_)})},null,8,["class"])]),_:1},8,["disabled"])])]),e.createElementVNode("div",W,e.toDisplayString(e.unref(I)),1)]),_:1}),e.createVNode(k,null,{default:e.withCtx(()=>[e.createElementVNode("div",Z,[e.createVNode(e.unref(i.Search),{size:16,class:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),e.createVNode(l,{modelValue:e.unref(m),"onUpdate:modelValue":o[0]||(o[0]=n=>e.isRef(m)?m.value=n:null),placeholder:"Search by name, email, or phone...",class:"pl-9 pr-9"},null,8,["modelValue"]),e.unref(m)?(e.openBlock(),e.createBlock(a,{key:0,variant:"ghost",size:"icon",class:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7",onClick:j},{default:e.withCtx(()=>[e.createVNode(e.unref(i.X),{size:14})]),_:1})):e.createCommentVNode("",!0)]),e.unref(m)?(e.openBlock(),e.createElementBlock("div",ee," Showing "+e.toDisplayString(e.unref(w).length)+" of "+e.toDisplayString(e.unref(d).length)+" orders ",1)):e.createCommentVNode("",!0),e.unref(_)?(e.openBlock(),e.createElementBlock("div",te,[...o[5]||(o[5]=[e.createElementVNode("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"},null,-1)])])):e.unref(d).length===0?(e.openBlock(),e.createElementBlock("div",oe,[e.createVNode(e.unref(i.ShoppingBag),{class:"size-12 mx-auto mb-3 opacity-50"}),o[6]||(o[6]=e.createElementVNode("p",null,"No orders received on this day",-1))])):e.unref(w).length===0?(e.openBlock(),e.createElementBlock("div",ne," No orders match your search ")):(e.openBlock(),e.createElementBlock("div",se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),n=>(e.openBlock(),e.createElementBlock("div",{key:n.res_id||n.id,class:"p-3 border rounded-lg hover:bg-muted/50 transition-colors cursor-pointer",onClick:Ve=>e.unref(D)?.openDialog(n)},[e.createElementVNode("div",ae,[e.createElementVNode("div",le,[e.createElementVNode("div",ce,e.toDisplayString(n.customerInfo?.firstName)+" "+e.toDisplayString(n.customerInfo?.lastName||"Unknown Customer"),1),e.createElementVNode("div",ie,e.toDisplayString(n.customerInfo?.email),1),e.createElementVNode("div",de,e.toDisplayString(n.customerInfo?.phone),1),e.createElementVNode("div",ue,[e.createElementVNode("div",me,[e.createVNode(e.unref(i.Calendar),{size:12}),e.createElementVNode("span",null,e.toDisplayString(U(n.date))+" · "+e.toDisplayString(n.startTime)+" - "+e.toDisplayString(n.endTime),1)]),e.createElementVNode("div",pe,[e.createVNode(e.unref(i.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(n.spots)+" spots",1)]),n.resourceName?(e.openBlock(),e.createElementBlock("div",fe,[e.createElementVNode("div",{class:"w-3 h-3 rounded-full",style:e.normalizeStyle({backgroundColor:n.resourceColor||"#6b7280"})},null,4),e.createElementVNode("span",null,e.toDisplayString(n.resourceName),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ge,[e.createVNode(e.unref(i.Clock),{size:12}),e.createElementVNode("span",null,"Ordered at "+e.toDisplayString(R(n.createdAt)),1)])]),e.createElementVNode("div",ve,[n.reservationStatus==="needs_approval"?(e.openBlock(),e.createElementBlock("span",_e,"Needs Approval")):n.reservationStatus==="approved"?(e.openBlock(),e.createElementBlock("span",xe,"Approved")):n.reservationStatus==="rejected"?(e.openBlock(),e.createElementBlock("span",ye,"Rejected")):n.reservationStatus==="cancelled"?(e.openBlock(),e.createElementBlock("span",he,"Cancelled")):(e.openBlock(),e.createElementBlock("span",ke,"Pending")),n.reservationPrice||n.reservationPrice===0?(e.openBlock(),e.createElementBlock("div",Ne," €"+e.toDisplayString(n.reservationPrice.toFixed(2)),1)):e.createCommentVNode("",!0)])])],8,re))),128))]))]),_:1})]),_:1})])]),_:1}),e.createVNode(E._sfc_main,{ref_key:"reservationDetailDialog",ref:D,onCancelled:f,onConfirmed:f,onRejected:f},null,512)],64)}}});exports.default=De;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),v=require("@oneclick.dev/cms-kit"),i=require("lucide-vue-next"),E=require("./ReservationDetailDialog.vue_vue_type_script_setup_true_lang-VWVIxIr6.js"),M=require("./EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js"),H={class:"space-y-6"},$={class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"},Y={class:"text-2xl font-semibold tracking-tight flex items-center gap-2"},K={class:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"},Q={class:"flex items-center gap-1"},X={class:"flex items-center gap-1"},G={class:"flex items-center gap-2"},J={class:"flex items-center gap-1"},W={class:"text-sm text-muted-foreground mt-2"},Z={class:"relative mb-4"},ee={key:0,class:"mb-3 text-sm text-muted-foreground"},te={key:1,class:"flex items-center justify-center py-8"},oe={key:2,class:"text-center py-8 text-muted-foreground"},ne={key:3,class:"text-center py-8 text-muted-foreground"},se={key:4,class:"space-y-2"},re=["onClick"],ae={class:"flex items-start justify-between"},le={class:"flex-1"},ce={class:"font-medium"},ie={class:"text-sm text-muted-foreground"},de={class:"text-sm text-muted-foreground"},ue={class:"flex items-center gap-4 flex-wrap mt-1"},me={class:"flex items-center gap-2 text-xs text-muted-foreground"},pe={class:"flex items-center gap-2 text-xs text-muted-foreground"},fe={key:0,class:"flex items-center gap-1 text-xs text-muted-foreground"},ge={class:"flex items-center gap-2 mt-1 text-xs text-muted-foreground"},ve={class:"text-right"},_e={key:0,class:"inline-block px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},xe={key:1,class:"inline-block px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400"},ye={key:2,class:"inline-block px-2 py-1 text-xs rounded-full bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},he={key:3,class:"inline-block px-2 py-1 text-xs rounded-full bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},ke={key:4,class:"inline-block px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400"},Ne={key:5,class:"text-sm font-medium mt-1"},De=e.defineComponent({__name:"orders",setup(we){const C=v.useRoute();v.useRouter();const S=v.useOverlayParams(),{params:b}=v.useModuleRoute(),{config:x}=v.useModule(),N=v.useFirebaseIntegration(x.project),d=e.ref([]),y=e.ref([]),_=e.ref(!0),m=e.ref(""),D=e.ref(null),p=new Date,c=e.ref(new Date),B=e.computed(()=>({date:A(c.value),resource:null}));e.provide("event",B);const I=e.computed(()=>{const t=new Date(p);t.setDate(p.getDate()-1);const o=new Date(p);return o.setDate(p.getDate()+1),c.value.toDateString()===p.toDateString()?"Today":c.value.toDateString()===t.toDateString()?"Yesterday":c.value.toDateString()===o.toDateString()?"Tomorrow":c.value.toLocaleDateString("en-US",{weekday:"long",month:"long",day:"numeric",year:"numeric"})}),P=()=>{const t=new Date(c.value);t.setDate(t.getDate()-1),c.value=t},T=()=>{const t=new Date(c.value);t.setDate(t.getDate()+1),t<=p&&(c.value=t)},O=e.computed(()=>{const t=new Date(c.value);return t.setDate(t.getDate()+1),t<=p}),z=()=>{c.value=new Date},A=t=>{const o=t.getFullYear(),s=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${o}-${s}-${r}`},R=t=>t?new Date(t).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}):"",U=t=>t?new Date(t).toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric"}):"",w=e.computed(()=>m.value.trim()?new E.Fuse(d.value,{keys:["customerInfo.firstName","customerInfo.lastName","customerInfo.email","customerInfo.phone","resourceName"],threshold:.3,ignoreLocation:!0}).search(m.value).map(o=>o.item):d.value),h=e.computed(()=>({spots:d.value.reduce((t,o)=>t+(o.spots||0),0),bookings:d.value.length,revenue:d.value.reduce((t,o)=>t+(o.reservationPrice||0),0)})),j=()=>{m.value=""},F=async()=>{try{const t=b.value.id,o=await N.get(x.agendaCollection,t);y.value=o?.resources?.filter(s=>s.isActive)||[]}catch(t){console.error("Error loading resources:",t),y.value=[]}},f=async()=>{_.value=!0,d.value=[];try{const t=b.value.id,o=new Date(c.value);o.setHours(0,0,0,0);const s=new Date(c.value);s.setHours(23,59,59,999);const r=await N.find(x.reservationsCollection,{filters:[{field:"agendaId",operator:"==",value:t},{field:"createdAt",operator:">=",value:o.toISOString()},{field:"createdAt",operator:"<=",value:s.toISOString()}]});let u=[];r.forEach(a=>{(a.reservations||[]).forEach(l=>{const k=y.value.find(V=>V.id===l.resourceId);u.push({customerInfo:a.customerInfo,amountDue:a.amountDue,amountPaid:a.amountPaid,status:a.status,reservationStatus:l.status,subtotal:a.subtotal,total:a.total,discount:a.discount,id:a.id,res_id:l.id,resourceId:l.resourceId,spots:l.spots,date:l.date,createdAt:a.createdAt,startTime:l.timeslot?.startTime,endTime:l.timeslot?.endTime,reservationPrice:l.totalPrice,reservationBasePrice:l.basePrice,reservationAddOnsPrice:l.addOnsPrice,pricingOptionId:l.pricingOptionId,pricingOption:l.pricingOption,resourceName:k?.name||"Unknown",resourceColor:k?.color})})}),d.value=u.sort((a,g)=>(g.createdAt||"").localeCompare(a.createdAt||""))}catch(t){console.error("Error loading orders:",t),d.value=[]}finally{_.value=!1}},L=async()=>{await F(),await f()},q=async(t,o)=>{const s=await N.get(x.reservationsCollection,t),r=s?.reservations?.find(u=>u.id===o);if(r){const u=y.value.find(g=>g.id===r.resourceId),a={customerInfo:s.customerInfo,amountDue:s.amountDue,amountPaid:s.amountPaid,status:s.status,reservationStatus:r.status,subtotal:s.subtotal,total:s.total,discount:s.discount,id:s.id,res_id:r.id,resourceId:r.resourceId,spots:r.spots,date:r.date,createdAt:s.createdAt,startTime:r.timeslot?.startTime,endTime:r.timeslot?.endTime,reservationPrice:r.totalPrice,reservationBasePrice:r.basePrice,reservationAddOnsPrice:r.addOnsPrice,pricingOptionId:r.pricingOptionId,pricingOption:r.pricingOption,resourceName:u?.name||"Unknown",resourceColor:u?.color};await e.nextTick(),D.value?.openDialog(a)}};return L(),e.onMounted(async()=>{const t=S.value.orderId||C.query.orderId,o=S.value.reservationId||C.query.reservationId;if(t){const s=new URL(window.location.href);s.searchParams.delete("orderId"),s.searchParams.delete("reservationId"),window.history.replaceState(window.history.state,"",s.toString()),await q(t,o)}}),e.watch(c,()=>{f()}),(t,o)=>{const s=e.resolveComponent("Badge"),r=e.resolveComponent("CardTitle"),u=e.resolveComponent("CardDescription"),a=e.resolveComponent("Button"),g=e.resolveComponent("CardHeader"),l=e.resolveComponent("Input"),k=e.resolveComponent("CardContent"),V=e.resolveComponent("Card");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(M._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",H,[e.createElementVNode("div",$,[e.createElementVNode("div",null,[e.createElementVNode("h1",Y,[e.createVNode(e.unref(i.ShoppingBag),{class:"size-6"}),o[1]||(o[1]=e.createTextVNode(" Orders ",-1))]),o[2]||(o[2]=e.createElementVNode("p",{class:"text-muted-foreground text-sm mt-1"}," View orders by when they were placed ",-1))])]),e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[e.createElementVNode("div",K,[e.createElementVNode("div",null,[e.createVNode(r,{class:"flex items-center gap-2"},{default:e.withCtx(()=>[o[3]||(o[3]=e.createTextVNode(" Orders received ",-1)),e.unref(h).bookings>0?(e.openBlock(),e.createBlock(s,{key:0,variant:"secondary"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(h).bookings),1)]),_:1})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(u,{class:"flex items-center gap-4 mt-1"},{default:e.withCtx(()=>[e.createElementVNode("span",Q,[e.createVNode(e.unref(i.Users),{size:14}),e.createTextVNode(" "+e.toDisplayString(e.unref(h).spots)+" spots ",1)]),e.createElementVNode("span",X," €"+e.toDisplayString(e.unref(h).revenue.toFixed(2))+" revenue ",1)]),_:1})]),e.createElementVNode("div",G,[e.createElementVNode("div",J,[e.createVNode(a,{variant:"ghost",size:"icon",class:"size-8",onClick:P},{default:e.withCtx(()=>[e.createVNode(e.unref(i.ChevronLeft),{size:16})]),_:1}),e.createVNode(a,{variant:"ghost",size:"sm",class:"h-8 px-3 text-xs",onClick:z},{default:e.withCtx(()=>[...o[4]||(o[4]=[e.createTextVNode(" Today ",-1)])]),_:1}),e.createVNode(a,{variant:"ghost",size:"icon",class:"size-8",onClick:T,disabled:!e.unref(O)},{default:e.withCtx(()=>[e.createVNode(e.unref(i.ChevronRight),{size:16})]),_:1},8,["disabled"])]),e.createVNode(a,{variant:"ghost",size:"icon",onClick:f,disabled:e.unref(_)},{default:e.withCtx(()=>[e.createVNode(e.unref(i.RefreshCw),{size:16,class:e.normalizeClass({"animate-spin":e.unref(_)})},null,8,["class"])]),_:1},8,["disabled"])])]),e.createElementVNode("div",W,e.toDisplayString(e.unref(I)),1)]),_:1}),e.createVNode(k,null,{default:e.withCtx(()=>[e.createElementVNode("div",Z,[e.createVNode(e.unref(i.Search),{size:16,class:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),e.createVNode(l,{modelValue:e.unref(m),"onUpdate:modelValue":o[0]||(o[0]=n=>e.isRef(m)?m.value=n:null),placeholder:"Search by name, email, or phone...",class:"pl-9 pr-9"},null,8,["modelValue"]),e.unref(m)?(e.openBlock(),e.createBlock(a,{key:0,variant:"ghost",size:"icon",class:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7",onClick:j},{default:e.withCtx(()=>[e.createVNode(e.unref(i.X),{size:14})]),_:1})):e.createCommentVNode("",!0)]),e.unref(m)?(e.openBlock(),e.createElementBlock("div",ee," Showing "+e.toDisplayString(e.unref(w).length)+" of "+e.toDisplayString(e.unref(d).length)+" orders ",1)):e.createCommentVNode("",!0),e.unref(_)?(e.openBlock(),e.createElementBlock("div",te,[...o[5]||(o[5]=[e.createElementVNode("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"},null,-1)])])):e.unref(d).length===0?(e.openBlock(),e.createElementBlock("div",oe,[e.createVNode(e.unref(i.ShoppingBag),{class:"size-12 mx-auto mb-3 opacity-50"}),o[6]||(o[6]=e.createElementVNode("p",null,"No orders received on this day",-1))])):e.unref(w).length===0?(e.openBlock(),e.createElementBlock("div",ne," No orders match your search ")):(e.openBlock(),e.createElementBlock("div",se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),n=>(e.openBlock(),e.createElementBlock("div",{key:n.res_id||n.id,class:"p-3 border rounded-lg hover:bg-muted/50 transition-colors cursor-pointer",onClick:Ve=>e.unref(D)?.openDialog(n)},[e.createElementVNode("div",ae,[e.createElementVNode("div",le,[e.createElementVNode("div",ce,e.toDisplayString(n.customerInfo?.firstName)+" "+e.toDisplayString(n.customerInfo?.lastName||"Unknown Customer"),1),e.createElementVNode("div",ie,e.toDisplayString(n.customerInfo?.email),1),e.createElementVNode("div",de,e.toDisplayString(n.customerInfo?.phone),1),e.createElementVNode("div",ue,[e.createElementVNode("div",me,[e.createVNode(e.unref(i.Calendar),{size:12}),e.createElementVNode("span",null,e.toDisplayString(U(n.date))+" · "+e.toDisplayString(n.startTime)+" - "+e.toDisplayString(n.endTime),1)]),e.createElementVNode("div",pe,[e.createVNode(e.unref(i.Users),{size:12}),e.createElementVNode("span",null,e.toDisplayString(n.spots)+" spots",1)]),n.resourceName?(e.openBlock(),e.createElementBlock("div",fe,[e.createElementVNode("div",{class:"w-3 h-3 rounded-full",style:e.normalizeStyle({backgroundColor:n.resourceColor||"#6b7280"})},null,4),e.createElementVNode("span",null,e.toDisplayString(n.resourceName),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ge,[e.createVNode(e.unref(i.Clock),{size:12}),e.createElementVNode("span",null,"Ordered at "+e.toDisplayString(R(n.createdAt)),1)])]),e.createElementVNode("div",ve,[n.reservationStatus==="needs_approval"?(e.openBlock(),e.createElementBlock("span",_e,"Needs Approval")):n.reservationStatus==="approved"?(e.openBlock(),e.createElementBlock("span",xe,"Approved")):n.reservationStatus==="rejected"?(e.openBlock(),e.createElementBlock("span",ye,"Rejected")):n.reservationStatus==="cancelled"?(e.openBlock(),e.createElementBlock("span",he,"Cancelled")):(e.openBlock(),e.createElementBlock("span",ke,"Pending")),n.reservationPrice||n.reservationPrice===0?(e.openBlock(),e.createElementBlock("div",Ne," €"+e.toDisplayString(n.reservationPrice.toFixed(2)),1)):e.createCommentVNode("",!0)])])],8,re))),128))]))]),_:1})]),_:1})])]),_:1}),e.createVNode(E._sfc_main,{ref_key:"reservationDetailDialog",ref:D,onCancelled:f,onConfirmed:f,onRejected:f},null,512)],64)}}});exports.default=De;
|
|
@@ -2,7 +2,7 @@ import { defineComponent as te, ref as w, computed as b, provide as se, onMounte
|
|
|
2
2
|
import { useRoute as de, useRouter as ue, useOverlayParams as me, useModuleRoute as pe, useModule as fe, useFirebaseIntegration as ge } from "@oneclick.dev/cms-kit";
|
|
3
3
|
import { ShoppingBag as V, Users as E, ChevronLeft as ve, ChevronRight as _e, RefreshCw as xe, Search as he, X as ye, Calendar as De, Clock as we } from "lucide-vue-next";
|
|
4
4
|
import { F as ke, _ as be } from "./ReservationDetailDialog.vue_vue_type_script_setup_true_lang-Cohhnd5x.mjs";
|
|
5
|
-
import { _ as Ce } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
5
|
+
import { _ as Ce } from "./EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs";
|
|
6
6
|
const Ie = { class: "space-y-6" }, Se = { class: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4" }, Pe = { class: "text-2xl font-semibold tracking-tight flex items-center gap-2" }, Oe = { class: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4" }, Te = { class: "flex items-center gap-1" }, ze = { class: "flex items-center gap-1" }, Ne = { class: "flex items-center gap-2" }, Ae = { class: "flex items-center gap-1" }, Re = { class: "text-sm text-muted-foreground mt-2" }, Be = { class: "relative mb-4" }, Fe = {
|
|
7
7
|
key: 0,
|
|
8
8
|
class: "mb-3 text-sm text-muted-foreground"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as z, inject as H, resolveComponent as m, openBlock as i, createElementBlock as u, createElementVNode as l, createVNode as t, withCtx as o, createTextVNode as s, createCommentVNode as w, ref as M, Fragment as U, renderList as L, unref as b, toDisplayString as k, withModifiers as Z, normalizeClass as B, useTemplateRef as ee, nextTick as te, reactive as ne, provide as le, createBlock as Y, normalizeStyle as oe } from "vue";
|
|
2
|
-
import { _ as se } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { _ as se } from "./EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs";
|
|
3
3
|
import { DollarSign as de, Pencil as ae, Trash2 as F, PlusCircle as G, Users as K, ChevronDown as ie } from "lucide-vue-next";
|
|
4
4
|
import { useConfirmation as re, useModuleRoute as ue, useModule as me, useFirebaseIntegration as pe } from "@oneclick.dev/cms-kit";
|
|
5
5
|
import { t as ce } from "./index-RLz1QPrf.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),D=require("./EditLayout.vue_vue_type_script_setup_true_lang-Czu6Dcde.js"),V=require("lucide-vue-next"),_=require("@oneclick.dev/cms-kit"),R=require("./index-ijdf0d9-.js"),$={class:"flex gap-3 items-start p-4 border rounded-lg"},M={class:"flex-1 space-y-3"},L={class:"grid grid-cols-2 gap-3"},z={class:"flex items-center space-x-2 my-4"},j={class:"grid grid-cols-2 gap-2"},q={key:0},F={key:1},G={key:2},H={key:3},K={key:4},W={key:0},Y=e.defineComponent({__name:"Addon",props:{addOn:{type:Object,required:!0}},setup(a){const f=e.inject("form"),x=p=>{f.addOns=f.addOns.filter(o=>o.id!==p)};return(p,o)=>{const i=e.resolveComponent("Label"),m=e.resolveComponent("Input"),N=e.resolveComponent("Checkbox"),v=e.resolveComponent("SelectTrigger"),c=e.resolveComponent("SelectItem"),y=e.resolveComponent("SelectGroup"),T=e.resolveComponent("SelectContent"),B=e.resolveComponent("Select"),S=e.resolveComponent("Trash2"),O=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",$,[e.createElementVNode("div",M,[e.createElementVNode("div",L,[e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[7]||(o[7]=[e.createTextVNode("Add-on Name",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.name,"onUpdate:modelValue":o[0]||(o[0]=u=>a.addOn.name=u),placeholder:"e.g., Swimsuit Rental, Towel Service"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[8]||(o[8]=[e.createTextVNode("Price",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.price,"onUpdate:modelValue":o[1]||(o[1]=u=>a.addOn.price=u),modelModifiers:{number:!0},type:"number",min:"0",step:"0.01",placeholder:"0.00",class:"no-spinner"},null,8,["modelValue"])])]),e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[9]||(o[9]=[e.createTextVNode("Description (Optional)",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.description,"onUpdate:modelValue":o[2]||(o[2]=u=>a.addOn.description=u),placeholder:"Brief description of this add-on"},null,8,["modelValue"])]),e.createElementVNode("div",z,[e.createVNode(N,{id:`required-${a.addOn.id}`,modelValue:a.addOn.required,"onUpdate:modelValue":o[3]||(o[3]=u=>a.addOn.required=u)},null,8,["id","modelValue"]),e.createVNode(i,{for:`required-${a.addOn.id}`,class:"text-xs font-normal cursor-pointer"},{default:e.withCtx(()=>[...o[10]||(o[10]=[e.createTextVNode(" Required (customer must select this add-on) ",-1)])]),_:1},8,["for"])]),e.createElementVNode("div",j,[e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[11]||(o[11]=[e.createTextVNode("Quantity limit",-1)])]),_:1}),e.createVNode(B,{modelValue:a.addOn.scope,"onUpdate:modelValue":o[4]||(o[4]=u=>a.addOn.scope=u)},{default:e.withCtx(()=>[e.createVNode(v,{class:"w-full"},{default:e.withCtx(()=>[a.addOn.scope==="RESERVATION"?(e.openBlock(),e.createElementBlock("span",q,"Once per reservation")):a.addOn.scope==="TICKET"?(e.openBlock(),e.createElementBlock("span",F,"Once per ticket / person")):a.addOn.scope==="UNLIMITED"?(e.openBlock(),e.createElementBlock("span",G,"Unlimited")):a.addOn.scope==="CUSTOM_LIMIT"?(e.openBlock(),e.createElementBlock("span",H,"Custom limit...")):(e.openBlock(),e.createElementBlock("span",K,"Select a limit…"))]),_:1}),e.createVNode(T,null,{default:e.withCtx(()=>[e.createVNode(y,{class:"max-w-96"},{default:e.withCtx(()=>[e.createVNode(c,{value:"RESERVATION"},{default:e.withCtx(()=>[...o[12]||(o[12]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Once per reservation"),e.createElementVNode("p",{class:"text-xs"},"Max 1 per reservation line (charged per reservation).")],-1)])]),_:1}),e.createVNode(c,{value:"TICKET"},{default:e.withCtx(()=>[...o[13]||(o[13]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Once per ticket / person"),e.createElementVNode("p",{class:"text-xs"},"Max 1 per ticket/person (charged per quantity).")],-1)])]),_:1}),e.createVNode(c,{value:"UNLIMITED"},{default:e.withCtx(()=>[...o[14]||(o[14]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Unlimited"),e.createElementVNode("p",{class:"text-xs"},"No limit (can be added multiple times).")],-1)])]),_:1}),e.createVNode(c,{value:"CUSTOM_LIMIT"},{default:e.withCtx(()=>[...o[15]||(o[15]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Custom limit..."),e.createElementVNode("p",{class:"text-xs"},"Set a fixed max amount (e.g. 2, 5, 10).")],-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),a.addOn.scope==="CUSTOM_LIMIT"?(e.openBlock(),e.createElementBlock("div",W,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[16]||(o[16]=[e.createTextVNode("Fixed limit",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.limit,"onUpdate:modelValue":o[5]||(o[5]=u=>a.addOn.limit=u),modelModifiers:{number:!0},type:"number",min:"1",step:"1",placeholder:"1",class:"no-spinner"},null,8,["modelValue"])])):e.createCommentVNode("",!0)])]),e.createVNode(O,{onClick:o[6]||(o[6]=u=>x(a.addOn.id)),variant:"ghost",size:"icon",class:"mt-6"},{default:e.withCtx(()=>[e.createVNode(S,{class:"w-4 h-4 text-destructive"})]),_:1})])}}}),Q={class:"grid gap-2"},J=["id"],X=["onClick"],Z={class:"flex items-center gap-2"},ee={class:"flex items-center gap-1"},te={class:"overflow-hidden"},oe=e.defineComponent({__name:"AddonList",setup(a,{expose:f}){const{confirm:x}=_.useConfirmation(),p=e.inject("form"),o=e.ref([]),i=async m=>{if(!await x("Are you sure you want to remove this add-on?"))return;p.addOns=p.addOns.filter(c=>c.id!==m);const v=o.value.indexOf(m);v!==-1&&o.value.splice(v,1),R.toast("Success!",{description:"Add-on removed successfully."})};return f({openAddons:o}),(m,N)=>{const v=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",Q,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(p).addOns,c=>(e.openBlock(),e.createElementBlock("div",{key:c.id,class:"border p-2 rounded",id:`addon-${c.id}`},[e.createElementVNode("div",{onClick:y=>o.value.includes(c.id)?o.value.splice(o.value.indexOf(c.id),1):o.value.push(c.id),class:"cursor-pointer font-bold text-muted-foreground flex items-center justify-between gap-2 select-none"},[e.createElementVNode("span",Z,[e.createVNode(e.unref(V.DollarSign),{class:"size-4"}),e.createTextVNode(" "+e.toDisplayString(c.name||"Untitled Add-on"),1)]),e.createElementVNode("div",ee,[e.createVNode(v,{variant:"ghost",size:"icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Pencil),{class:"size-4"})]),_:1}),e.createVNode(v,{variant:"ghost",size:"icon",onClick:e.withModifiers(y=>i(c.id),["stop"])},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Trash2),{class:"size-4 text-red-500"})]),_:1},8,["onClick"])])],8,X),e.createElementVNode("div",{class:e.normalizeClass(["grid",`${o.value.includes(c.id)?"grid-rows-[1fr]":"grid-rows-[0fr]"} transition-all duration-300 ease-in-out overflow-hidden`])},[e.createElementVNode("div",te,[e.createVNode(Y,{addOn:c},null,8,["addOn"])])],2)],8,J))),128))])}}}),ne={class:"flex items-center justify-between mb-4"},le={class:"space-y-3"},de={key:0,class:"text-center py-8 text-muted-foreground text-sm border rounded-lg"},ae=e.defineComponent({__name:"index",setup(a){const f=e.inject("form"),x=e.useTemplateRef("addonList"),p=async()=>{const o=Math.random().toString(36).substr(2,9);f.addOns.push({id:o,name:"",description:"",price:0,required:!1}),x.value?.openAddons.push(o),await e.nextTick(),document.getElementById(`addon-${o}`)?.scrollIntoView({behavior:"smooth",block:"start"})};return(o,i)=>{const m=e.resolveComponent("Label"),N=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",ne,[e.createElementVNode("div",null,[e.createVNode(m,{class:"text-base font-medium"},{default:e.withCtx(()=>[...i[0]||(i[0]=[e.createTextVNode(" Optional Add-ons & Upcharges ",-1)])]),_:1}),i[1]||(i[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Offer optional extras that customers can add to their booking (e.g., swimsuit rental). ",-1))]),e.createVNode(N,{onClick:p,variant:"outline",size:"sm"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.PlusCircle),{class:"w-4 h-4 mr-2"}),i[2]||(i[2]=e.createTextVNode(" Add Add-on ",-1))]),_:1})]),e.createElementVNode("div",le,[e.createVNode(oe,{ref_key:"addonList",ref:x},null,512),e.unref(f).addOns.length===0?(e.openBlock(),e.createElementBlock("div",de,' No add-ons configured. Click "Add Add-on" to create optional extras. ')):e.createCommentVNode("",!0)])])}}}),re={key:0,class:"max-w-2xl space-y-12"},se={class:"flex gap-4 items-end"},ie={class:"w-32"},ce={class:"flex items-center justify-between mb-4 gap-4"},ue={class:"space-y-3"},me={class:"flex-1 space-y-3"},pe={class:"flex gap-3"},Ve={class:"flex-1"},fe={class:"flex-1"},xe={class:"flex items-end"},Ne={class:"flex items-center justify-between mb-4"},ve={class:"space-y-3"},ge={class:"flex-1 space-y-3"},Ce={class:"grid grid-cols-2 gap-3"},ye={class:"grid grid-cols-2 gap-3"},ke={key:0},we={class:"flex items-center gap-2"},Ee={key:0},be={key:1},he={key:2},_e={class:"space-y-1"},Te=["onClick"],Be={class:"size-5 rounded-full bg-muted flex items-center justify-center"},Se={key:0,class:"w-full h-full rounded-full bg-white scale-50"},Oe=["onClick"],Pe={class:"text-sm flex-1 truncate"},Ie={key:0,class:"w-3 h-3 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},Ue={key:0,class:"text-center py-8 text-muted-foreground text-sm border rounded-lg"},Ae={key:0,class:"mt-6 p-4 border rounded-lg bg-muted/30"},De={class:"space-y-4"},Re={class:"flex items-center gap-3"},$e={class:"flex-1"},Me={class:"text-sm text-muted-foreground"},Le={class:"text-xs text-muted-foreground"},ze={class:"flex justify-start pt-4 border-t"},je=e.defineComponent({__name:"payment",setup(a){const{params:f}=_.useModuleRoute(),{config:x}=_.useModule(),p=_.useFirebaseIntegration(x.project),o=e.reactive({paymentType:"full",currency:"USD",partialPayment:{type:"percentage",amount:50},pricingOptions:[{id:"1",name:"Standard Service",price:0,duration:30,isDefault:!0}],pricingRules:[],addOns:[]}),i=e.ref(!1),m=e.ref(!0),N=e.ref([]),v=(l,t)=>{if(!l.resourceIds)l.resourceIds=[t];else{const r=l.resourceIds.indexOf(t);r===-1?l.resourceIds.push(t):l.resourceIds.splice(r,1)}},c=(l,t)=>{l.resourceIds=t?null:[]},y=async()=>{i.value=!0;try{const l=f.value.id;if(!l)throw new Error("Missing agenda ID");await p.update(x.agendaCollection,l,{paymentType:o.paymentType||"full",currency:o.currency||"USD",partialPayment:{type:o.partialPayment.type||"percentage",amount:Math.max(Number(o.partialPayment.amount)||0,0)},pricingOptions:o.pricingOptions??[],pricingRules:o.pricingRules??[],addOns:o.addOns??[]})}catch(l){console.error("Error saving changes:",l)}finally{i.value=!1}},T=()=>{const l=Math.random().toString(36).substr(2,9);o.pricingOptions.push({id:l,name:"",price:0,duration:30,isDefault:!1})},B=l=>{o.pricingOptions=o.pricingOptions.filter(t=>t.id!==l)},S=l=>{o.pricingOptions.forEach(t=>{t.isDefault=t.id===l})},O=()=>{const l=Math.random().toString(36).substr(2,9);o.pricingRules.push({id:l,name:"",condition:"time_after",conditionValue:"17:00",modifier:"fixed",amount:10,resourceIds:null})},u=l=>{o.pricingRules=o.pricingRules.filter(t=>t.id!==l)};return(async()=>{try{const l=await p.get(x.agendaCollection,f.value.id);l&&(o.paymentType=l.paymentType||"full",o.currency=l.currency||"USD",o.partialPayment={type:l.partialPayment?.type||"percentage",amount:Number(l.partialPayment?.amount)&&l.partialPayment.amount>0?parseFloat(l.partialPayment.amount):50},o.pricingOptions=l.pricingOptions||[{id:"1",name:"Standard Service",price:0,duration:30,isDefault:!0}],o.pricingRules=l.pricingRules||[],o.addOns=l.addOns||[],N.value=(l.resources||[]).filter(t=>t.isActive))}catch(l){console.error("Error loading agenda data:",l)}finally{m.value=!1}})(),e.provide("form",o),(l,t)=>{const r=e.resolveComponent("Label"),w=e.resolveComponent("SelectValue"),E=e.resolveComponent("SelectTrigger"),s=e.resolveComponent("SelectItem"),b=e.resolveComponent("SelectContent"),h=e.resolveComponent("Select"),g=e.resolveComponent("Button"),C=e.resolveComponent("Input"),I=e.resolveComponent("PopoverTrigger"),U=e.resolveComponent("PopoverContent"),A=e.resolveComponent("Popover"),k=e.resolveComponent("RadioGroupItem"),P=e.resolveComponent("RadioGroup");return e.openBlock(),e.createBlock(D._sfc_main,null,{default:e.withCtx(()=>[t[53]||(t[53]=e.createElementVNode("h1",{class:"text-lg font-medium mb-8"},"Payment Settings",-1)),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",re,[e.createElementVNode("div",null,[e.createElementVNode("div",se,[e.createElementVNode("div",ie,[e.createVNode(r,{class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode(" Currency ",-1)])]),_:1}),e.createVNode(h,{modelValue:o.currency,"onUpdate:modelValue":t[0]||(t[0]=n=>o.currency=n)},{default:e.withCtx(()=>[e.createVNode(E,{id:"currency"},{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Currency"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:"USD"},{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createTextVNode("USD ($)",-1)])]),_:1}),e.createVNode(s,{value:"EUR"},{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode("EUR (€)",-1)])]),_:1}),e.createVNode(s,{value:"GBP"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("GBP (£)",-1)])]),_:1}),e.createVNode(s,{value:"CAD"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("CAD ($)",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue"])])])]),e.createElementVNode("div",null,[e.createElementVNode("div",ce,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode(" Service Pricing Options ",-1)])]),_:1}),t[10]||(t[10]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Offer multiple service variations with different prices (e.g., haircut styles, massage types). ",-1))]),e.createVNode(g,{onClick:T,variant:"outline",size:"sm"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.PlusCircle),{class:"w-4 h-4 mr-2"}),t[11]||(t[11]=e.createTextVNode(" Add Option ",-1))]),_:1})]),e.createElementVNode("div",ue,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.pricingOptions,n=>(e.openBlock(),e.createElementBlock("div",{key:n.id,class:"flex gap-3 items-start p-4 border rounded-lg"},[e.createElementVNode("div",me,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Service Name",-1)])]),_:1}),e.createVNode(C,{modelValue:n.name,"onUpdate:modelValue":d=>n.name=d,placeholder:"e.g., Men's Haircut, Women's Haircut"},null,8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",pe,[e.createElementVNode("div",Ve,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("Price",-1)])]),_:1}),e.createVNode(C,{modelValue:n.price,"onUpdate:modelValue":d=>n.price=d,modelModifiers:{number:!0},type:"number",min:"0",step:"0.01",placeholder:"0.00",class:"no-spinner"},null,8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",fe,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("Duration",-1)])]),_:1}),e.createVNode(h,{modelValue:n.duration,"onUpdate:modelValue":d=>n.duration=d,modelModifiers:{number:!0}},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Duration"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:15},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("15 min",-1)])]),_:1}),e.createVNode(s,{value:30},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("30 min",-1)])]),_:1}),e.createVNode(s,{value:45},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("45 min",-1)])]),_:1}),e.createVNode(s,{value:60},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("1 hour",-1)])]),_:1}),e.createVNode(s,{value:90},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("1.5 hours",-1)])]),_:1}),e.createVNode(s,{value:120},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("2 hours",-1)])]),_:1}),e.createVNode(s,{value:180},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("3 hours",-1)])]),_:1}),e.createVNode(s,{value:240},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("4 hours",-1)])]),_:1}),e.createVNode(s,{value:300},{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createTextVNode("5 hours",-1)])]),_:1}),e.createVNode(s,{value:360},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createTextVNode("6 hours",-1)])]),_:1}),e.createVNode(s,{value:480},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode("8 hours",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",xe,[e.createVNode(g,{onClick:d=>S(n.id),variant:n.isDefault?"default":"outline",size:"sm"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.isDefault?"Default":"Set Default"),1)]),_:2},1032,["onClick","variant"])])])]),o.pricingOptions.length>1?(e.openBlock(),e.createBlock(g,{key:0,onClick:d=>B(n.id),variant:"ghost",size:"icon",class:"mt-6"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Trash2),{class:"w-4 h-4 text-destructive"})]),_:1},8,["onClick"])):e.createCommentVNode("",!0)]))),128))])]),e.createElementVNode("div",null,[e.createElementVNode("div",Ne,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[26]||(t[26]=[e.createTextVNode(" Conditional Pricing Rules ",-1)])]),_:1}),t[27]||(t[27]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Add extra fees based on time, day, or other conditions (e.g., +€10 after 5pm). ",-1))]),e.createVNode(g,{onClick:O,variant:"outline",size:"sm"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.PlusCircle),{class:"w-4 h-4 mr-2"}),t[28]||(t[28]=e.createTextVNode(" Add Rule ",-1))]),_:1})]),e.createElementVNode("div",ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.pricingRules,n=>(e.openBlock(),e.createElementBlock("div",{key:n.id,class:"flex gap-3 items-start p-4 border rounded-lg"},[e.createElementVNode("div",ge,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[29]||(t[29]=[e.createTextVNode("Rule Name",-1)])]),_:1}),e.createVNode(C,{modelValue:n.name,"onUpdate:modelValue":d=>n.name=d,placeholder:"e.g., After Hours Fee, Weekend Surcharge"},null,8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",Ce,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[30]||(t[30]=[e.createTextVNode("Condition",-1)])]),_:1}),e.createVNode(h,{modelValue:n.condition,"onUpdate:modelValue":d=>n.condition=d},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Select condition"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:"time_after"},{default:e.withCtx(()=>[...t[31]||(t[31]=[e.createTextVNode("Time After",-1)])]),_:1}),e.createVNode(s,{value:"time_before"},{default:e.withCtx(()=>[...t[32]||(t[32]=[e.createTextVNode("Time Before",-1)])]),_:1}),e.createVNode(s,{value:"time_between"},{default:e.withCtx(()=>[...t[33]||(t[33]=[e.createTextVNode("Time Between",-1)])]),_:1}),e.createVNode(s,{value:"day_of_week"},{default:e.withCtx(()=>[...t[34]||(t[34]=[e.createTextVNode("Day of Week",-1)])]),_:1}),e.createVNode(s,{value:"date_range"},{default:e.withCtx(()=>[...t[35]||(t[35]=[e.createTextVNode("Date Range",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[36]||(t[36]=[e.createTextVNode("Value",-1)])]),_:1}),e.createVNode(C,{modelValue:n.conditionValue,"onUpdate:modelValue":d=>n.conditionValue=d,type:n.condition.includes("time")?"time":"text",placeholder:"e.g., 17:00"},null,8,["modelValue","onUpdate:modelValue","type"])])]),e.createElementVNode("div",ye,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[37]||(t[37]=[e.createTextVNode("Fee Type",-1)])]),_:1}),e.createVNode(h,{modelValue:n.modifier,"onUpdate:modelValue":d=>n.modifier=d},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Select type"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:"fixed"},{default:e.withCtx(()=>[...t[38]||(t[38]=[e.createTextVNode("Fixed Amount",-1)])]),_:1}),e.createVNode(s,{value:"percentage"},{default:e.withCtx(()=>[...t[39]||(t[39]=[e.createTextVNode("Percentage",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[40]||(t[40]=[e.createTextVNode("Amount",-1)])]),_:1}),e.createVNode(C,{modelValue:n.amount,"onUpdate:modelValue":d=>n.amount=d,modelModifiers:{number:!0},type:"number",min:"0",step:"0.01",class:"no-spinner",placeholder:n.modifier==="percentage"?"10 (%)":"10.00"},null,8,["modelValue","onUpdate:modelValue","placeholder"])])]),N.value.length>0?(e.openBlock(),e.createElementBlock("div",ke,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[41]||(t[41]=[e.createTextVNode("Apply To Resources",-1)])]),_:1}),e.createVNode(A,null,{default:e.withCtx(()=>[e.createVNode(I,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(g,{variant:"outline",class:"w-full justify-between font-normal"},{default:e.withCtx(()=>[e.createElementVNode("div",we,[e.createVNode(e.unref(V.Users),{class:"w-4 h-4 text-muted-foreground"}),!n.resourceIds||n.resourceIds.length===0?(e.openBlock(),e.createElementBlock("span",Ee,"All Resources")):n.resourceIds.length===1?(e.openBlock(),e.createElementBlock("span",be,e.toDisplayString(N.value.find(d=>d.id===n.resourceIds[0])?.name||"1 resource"),1)):(e.openBlock(),e.createElementBlock("span",he,e.toDisplayString(n.resourceIds.length)+" resources",1))]),e.createVNode(e.unref(V.ChevronDown),{class:"w-4 h-4 opacity-50"})]),_:2},1024)]),_:2},1024),e.createVNode(U,{class:"w-64 p-2",align:"start"},{default:e.withCtx(()=>[e.createElementVNode("div",_e,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-2 p-2 rounded-md hover:bg-muted cursor-pointer transition-colors",{"bg-muted":!n.resourceIds||n.resourceIds.length===0}]),onClick:d=>c(n,!0)},[e.createElementVNode("div",Be,[e.createVNode(e.unref(V.Users),{class:"w-3 h-3 text-muted-foreground"})]),t[42]||(t[42]=e.createElementVNode("span",{class:"text-sm flex-1"},"All Resources",-1)),e.createElementVNode("div",{class:e.normalizeClass(["size-4 rounded-full border-2",!n.resourceIds||n.resourceIds.length===0?"border-primary bg-primary":"border-muted-foreground"])},[!n.resourceIds||n.resourceIds.length===0?(e.openBlock(),e.createElementBlock("div",Se)):e.createCommentVNode("",!0)],2)],10,Te),t[44]||(t[44]=e.createElementVNode("div",{class:"border-t my-2"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.id,class:"flex items-center gap-2 p-2 rounded-md hover:bg-muted cursor-pointer transition-colors",onClick:Fe=>{c(n,!1),v(n,d.id)}},[e.createElementVNode("div",{class:"size-5 rounded-full flex items-center justify-center text-white text-[10px] font-medium",style:e.normalizeStyle({backgroundColor:d.color||"#6b7280"})},e.toDisplayString(d.avatarLabel||d.name.charAt(0).toUpperCase()),5),e.createElementVNode("span",Pe,e.toDisplayString(d.name),1),e.createElementVNode("div",{class:e.normalizeClass(["size-4 rounded border-2 flex items-center justify-center",n.resourceIds?.includes(d.id)?"border-primary bg-primary":"border-muted-foreground"])},[n.resourceIds?.includes(d.id)?(e.openBlock(),e.createElementBlock("svg",Ie,[...t[43]||(t[43]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"3",d:"M5 13l4 4L19 7"},null,-1)])])):e.createCommentVNode("",!0)],2)],8,Oe))),128))])]),_:2},1024)]),_:2},1024)])):e.createCommentVNode("",!0)]),e.createVNode(g,{onClick:d=>u(n.id),variant:"ghost",size:"icon",class:"mt-6"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Trash2),{class:"w-4 h-4 text-destructive"})]),_:1},8,["onClick"])]))),128)),o.pricingRules.length===0?(e.openBlock(),e.createElementBlock("div",Ue,' No pricing rules configured. Click "Add Rule" to create conditional fees. ')):e.createCommentVNode("",!0)])]),e.createVNode(ae),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[45]||(t[45]=[e.createTextVNode(" Payment Preferences ",-1)])]),_:1}),t[52]||(t[52]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-6"}," Let customers pay full or in part when booking a slot, or pay later. ",-1)),e.createVNode(P,{modelValue:o.paymentType,"onUpdate:modelValue":t[1]||(t[1]=n=>o.paymentType=n),class:"flex flex-col gap-4"},{default:e.withCtx(()=>[e.createVNode(r,{for:"r1",class:"flex items-start space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{id:"r1",value:"full"}),t[46]||(t[46]=e.createElementVNode("div",null,[e.createElementVNode("p",null,"Pay Full Amount when Booking"),e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Your customers are required to complete the payment to confirm their booking. ")],-1))]),_:1}),e.createVNode(r,{for:"r2",class:"flex items-start space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{id:"r2",value:"partial"}),t[47]||(t[47]=e.createElementVNode("div",null,[e.createElementVNode("p",null,"Pay Part Amount when Booking"),e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Your customers are required to pay a deposit to confirm their booking. ")],-1))]),_:1}),e.createVNode(r,{for:"r3",class:"flex items-start space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{id:"r3",value:"later"}),t[48]||(t[48]=e.createElementVNode("div",null,[e.createElementVNode("p",null,"Pay Later at Appointment"),e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Your customers can book now and pay in person at the time of their appointment. ")],-1))]),_:1})]),_:1},8,["modelValue"]),o.paymentType==="partial"?(e.openBlock(),e.createElementBlock("div",Ae,[e.createVNode(r,{class:"text-sm font-medium mb-4 block"},{default:e.withCtx(()=>[...t[49]||(t[49]=[e.createTextVNode(" Deposit Amount Configuration ",-1)])]),_:1}),e.createElementVNode("div",De,[e.createVNode(P,{modelValue:o.partialPayment.type,"onUpdate:modelValue":t[2]||(t[2]=n=>o.partialPayment.type=n),class:"flex gap-4"},{default:e.withCtx(()=>[e.createVNode(r,{class:"flex items-center space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{value:"percentage"}),t[50]||(t[50]=e.createElementVNode("span",null,"Percentage",-1))]),_:1}),e.createVNode(r,{class:"flex items-center space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{value:"fixed"}),t[51]||(t[51]=e.createElementVNode("span",null,"Fixed Amount",-1))]),_:1})]),_:1},8,["modelValue"]),e.createElementVNode("div",Re,[e.createElementVNode("div",$e,[e.createVNode(C,{modelValue:o.partialPayment.amount,"onUpdate:modelValue":t[3]||(t[3]=n=>o.partialPayment.amount=n),modelModifiers:{number:!0},type:"number",min:"0",max:o.partialPayment.type==="percentage"?100:void 0,step:"0.01",placeholder:o.partialPayment.type==="percentage"?"50":"10.00",class:"no-spinner"},null,8,["modelValue","max","placeholder"])]),e.createElementVNode("span",Me,e.toDisplayString(o.partialPayment.type==="percentage"?"%":o.currency),1)]),e.createElementVNode("p",Le,[o.partialPayment.type==="percentage"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Customers will pay "+e.toDisplayString(o.partialPayment.amount)+"% of the total price upfront. ",1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Customers will pay "+e.toDisplayString(o.currency)+" "+e.toDisplayString(o.partialPayment.amount)+" upfront. ",1)],64))])])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ze,[e.createVNode(g,{onClick:y,disabled:i.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value?"Saving...":"Save Changes"),1)]),_:1},8,["disabled"])])]))]),_:1})}}});exports.default=je;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),D=require("./EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js"),V=require("lucide-vue-next"),_=require("@oneclick.dev/cms-kit"),R=require("./index-ijdf0d9-.js"),$={class:"flex gap-3 items-start p-4 border rounded-lg"},M={class:"flex-1 space-y-3"},L={class:"grid grid-cols-2 gap-3"},z={class:"flex items-center space-x-2 my-4"},j={class:"grid grid-cols-2 gap-2"},q={key:0},F={key:1},G={key:2},H={key:3},K={key:4},W={key:0},Y=e.defineComponent({__name:"Addon",props:{addOn:{type:Object,required:!0}},setup(a){const f=e.inject("form"),x=p=>{f.addOns=f.addOns.filter(o=>o.id!==p)};return(p,o)=>{const i=e.resolveComponent("Label"),m=e.resolveComponent("Input"),N=e.resolveComponent("Checkbox"),v=e.resolveComponent("SelectTrigger"),c=e.resolveComponent("SelectItem"),y=e.resolveComponent("SelectGroup"),T=e.resolveComponent("SelectContent"),B=e.resolveComponent("Select"),S=e.resolveComponent("Trash2"),O=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",$,[e.createElementVNode("div",M,[e.createElementVNode("div",L,[e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[7]||(o[7]=[e.createTextVNode("Add-on Name",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.name,"onUpdate:modelValue":o[0]||(o[0]=u=>a.addOn.name=u),placeholder:"e.g., Swimsuit Rental, Towel Service"},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[8]||(o[8]=[e.createTextVNode("Price",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.price,"onUpdate:modelValue":o[1]||(o[1]=u=>a.addOn.price=u),modelModifiers:{number:!0},type:"number",min:"0",step:"0.01",placeholder:"0.00",class:"no-spinner"},null,8,["modelValue"])])]),e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[9]||(o[9]=[e.createTextVNode("Description (Optional)",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.description,"onUpdate:modelValue":o[2]||(o[2]=u=>a.addOn.description=u),placeholder:"Brief description of this add-on"},null,8,["modelValue"])]),e.createElementVNode("div",z,[e.createVNode(N,{id:`required-${a.addOn.id}`,modelValue:a.addOn.required,"onUpdate:modelValue":o[3]||(o[3]=u=>a.addOn.required=u)},null,8,["id","modelValue"]),e.createVNode(i,{for:`required-${a.addOn.id}`,class:"text-xs font-normal cursor-pointer"},{default:e.withCtx(()=>[...o[10]||(o[10]=[e.createTextVNode(" Required (customer must select this add-on) ",-1)])]),_:1},8,["for"])]),e.createElementVNode("div",j,[e.createElementVNode("div",null,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[11]||(o[11]=[e.createTextVNode("Quantity limit",-1)])]),_:1}),e.createVNode(B,{modelValue:a.addOn.scope,"onUpdate:modelValue":o[4]||(o[4]=u=>a.addOn.scope=u)},{default:e.withCtx(()=>[e.createVNode(v,{class:"w-full"},{default:e.withCtx(()=>[a.addOn.scope==="RESERVATION"?(e.openBlock(),e.createElementBlock("span",q,"Once per reservation")):a.addOn.scope==="TICKET"?(e.openBlock(),e.createElementBlock("span",F,"Once per ticket / person")):a.addOn.scope==="UNLIMITED"?(e.openBlock(),e.createElementBlock("span",G,"Unlimited")):a.addOn.scope==="CUSTOM_LIMIT"?(e.openBlock(),e.createElementBlock("span",H,"Custom limit...")):(e.openBlock(),e.createElementBlock("span",K,"Select a limit…"))]),_:1}),e.createVNode(T,null,{default:e.withCtx(()=>[e.createVNode(y,{class:"max-w-96"},{default:e.withCtx(()=>[e.createVNode(c,{value:"RESERVATION"},{default:e.withCtx(()=>[...o[12]||(o[12]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Once per reservation"),e.createElementVNode("p",{class:"text-xs"},"Max 1 per reservation line (charged per reservation).")],-1)])]),_:1}),e.createVNode(c,{value:"TICKET"},{default:e.withCtx(()=>[...o[13]||(o[13]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Once per ticket / person"),e.createElementVNode("p",{class:"text-xs"},"Max 1 per ticket/person (charged per quantity).")],-1)])]),_:1}),e.createVNode(c,{value:"UNLIMITED"},{default:e.withCtx(()=>[...o[14]||(o[14]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Unlimited"),e.createElementVNode("p",{class:"text-xs"},"No limit (can be added multiple times).")],-1)])]),_:1}),e.createVNode(c,{value:"CUSTOM_LIMIT"},{default:e.withCtx(()=>[...o[15]||(o[15]=[e.createElementVNode("div",{class:"flex flex-col"},[e.createElementVNode("p",{class:"text-sm font-bold mb-1"},"Custom limit..."),e.createElementVNode("p",{class:"text-xs"},"Set a fixed max amount (e.g. 2, 5, 10).")],-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),a.addOn.scope==="CUSTOM_LIMIT"?(e.openBlock(),e.createElementBlock("div",W,[e.createVNode(i,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...o[16]||(o[16]=[e.createTextVNode("Fixed limit",-1)])]),_:1}),e.createVNode(m,{modelValue:a.addOn.limit,"onUpdate:modelValue":o[5]||(o[5]=u=>a.addOn.limit=u),modelModifiers:{number:!0},type:"number",min:"1",step:"1",placeholder:"1",class:"no-spinner"},null,8,["modelValue"])])):e.createCommentVNode("",!0)])]),e.createVNode(O,{onClick:o[6]||(o[6]=u=>x(a.addOn.id)),variant:"ghost",size:"icon",class:"mt-6"},{default:e.withCtx(()=>[e.createVNode(S,{class:"w-4 h-4 text-destructive"})]),_:1})])}}}),Q={class:"grid gap-2"},J=["id"],X=["onClick"],Z={class:"flex items-center gap-2"},ee={class:"flex items-center gap-1"},te={class:"overflow-hidden"},oe=e.defineComponent({__name:"AddonList",setup(a,{expose:f}){const{confirm:x}=_.useConfirmation(),p=e.inject("form"),o=e.ref([]),i=async m=>{if(!await x("Are you sure you want to remove this add-on?"))return;p.addOns=p.addOns.filter(c=>c.id!==m);const v=o.value.indexOf(m);v!==-1&&o.value.splice(v,1),R.toast("Success!",{description:"Add-on removed successfully."})};return f({openAddons:o}),(m,N)=>{const v=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",Q,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(p).addOns,c=>(e.openBlock(),e.createElementBlock("div",{key:c.id,class:"border p-2 rounded",id:`addon-${c.id}`},[e.createElementVNode("div",{onClick:y=>o.value.includes(c.id)?o.value.splice(o.value.indexOf(c.id),1):o.value.push(c.id),class:"cursor-pointer font-bold text-muted-foreground flex items-center justify-between gap-2 select-none"},[e.createElementVNode("span",Z,[e.createVNode(e.unref(V.DollarSign),{class:"size-4"}),e.createTextVNode(" "+e.toDisplayString(c.name||"Untitled Add-on"),1)]),e.createElementVNode("div",ee,[e.createVNode(v,{variant:"ghost",size:"icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Pencil),{class:"size-4"})]),_:1}),e.createVNode(v,{variant:"ghost",size:"icon",onClick:e.withModifiers(y=>i(c.id),["stop"])},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Trash2),{class:"size-4 text-red-500"})]),_:1},8,["onClick"])])],8,X),e.createElementVNode("div",{class:e.normalizeClass(["grid",`${o.value.includes(c.id)?"grid-rows-[1fr]":"grid-rows-[0fr]"} transition-all duration-300 ease-in-out overflow-hidden`])},[e.createElementVNode("div",te,[e.createVNode(Y,{addOn:c},null,8,["addOn"])])],2)],8,J))),128))])}}}),ne={class:"flex items-center justify-between mb-4"},le={class:"space-y-3"},de={key:0,class:"text-center py-8 text-muted-foreground text-sm border rounded-lg"},ae=e.defineComponent({__name:"index",setup(a){const f=e.inject("form"),x=e.useTemplateRef("addonList"),p=async()=>{const o=Math.random().toString(36).substr(2,9);f.addOns.push({id:o,name:"",description:"",price:0,required:!1}),x.value?.openAddons.push(o),await e.nextTick(),document.getElementById(`addon-${o}`)?.scrollIntoView({behavior:"smooth",block:"start"})};return(o,i)=>{const m=e.resolveComponent("Label"),N=e.resolveComponent("Button");return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",ne,[e.createElementVNode("div",null,[e.createVNode(m,{class:"text-base font-medium"},{default:e.withCtx(()=>[...i[0]||(i[0]=[e.createTextVNode(" Optional Add-ons & Upcharges ",-1)])]),_:1}),i[1]||(i[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Offer optional extras that customers can add to their booking (e.g., swimsuit rental). ",-1))]),e.createVNode(N,{onClick:p,variant:"outline",size:"sm"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.PlusCircle),{class:"w-4 h-4 mr-2"}),i[2]||(i[2]=e.createTextVNode(" Add Add-on ",-1))]),_:1})]),e.createElementVNode("div",le,[e.createVNode(oe,{ref_key:"addonList",ref:x},null,512),e.unref(f).addOns.length===0?(e.openBlock(),e.createElementBlock("div",de,' No add-ons configured. Click "Add Add-on" to create optional extras. ')):e.createCommentVNode("",!0)])])}}}),re={key:0,class:"max-w-2xl space-y-12"},se={class:"flex gap-4 items-end"},ie={class:"w-32"},ce={class:"flex items-center justify-between mb-4 gap-4"},ue={class:"space-y-3"},me={class:"flex-1 space-y-3"},pe={class:"flex gap-3"},Ve={class:"flex-1"},fe={class:"flex-1"},xe={class:"flex items-end"},Ne={class:"flex items-center justify-between mb-4"},ve={class:"space-y-3"},ge={class:"flex-1 space-y-3"},Ce={class:"grid grid-cols-2 gap-3"},ye={class:"grid grid-cols-2 gap-3"},ke={key:0},we={class:"flex items-center gap-2"},Ee={key:0},be={key:1},he={key:2},_e={class:"space-y-1"},Te=["onClick"],Be={class:"size-5 rounded-full bg-muted flex items-center justify-center"},Se={key:0,class:"w-full h-full rounded-full bg-white scale-50"},Oe=["onClick"],Pe={class:"text-sm flex-1 truncate"},Ie={key:0,class:"w-3 h-3 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},Ue={key:0,class:"text-center py-8 text-muted-foreground text-sm border rounded-lg"},Ae={key:0,class:"mt-6 p-4 border rounded-lg bg-muted/30"},De={class:"space-y-4"},Re={class:"flex items-center gap-3"},$e={class:"flex-1"},Me={class:"text-sm text-muted-foreground"},Le={class:"text-xs text-muted-foreground"},ze={class:"flex justify-start pt-4 border-t"},je=e.defineComponent({__name:"payment",setup(a){const{params:f}=_.useModuleRoute(),{config:x}=_.useModule(),p=_.useFirebaseIntegration(x.project),o=e.reactive({paymentType:"full",currency:"USD",partialPayment:{type:"percentage",amount:50},pricingOptions:[{id:"1",name:"Standard Service",price:0,duration:30,isDefault:!0}],pricingRules:[],addOns:[]}),i=e.ref(!1),m=e.ref(!0),N=e.ref([]),v=(l,t)=>{if(!l.resourceIds)l.resourceIds=[t];else{const r=l.resourceIds.indexOf(t);r===-1?l.resourceIds.push(t):l.resourceIds.splice(r,1)}},c=(l,t)=>{l.resourceIds=t?null:[]},y=async()=>{i.value=!0;try{const l=f.value.id;if(!l)throw new Error("Missing agenda ID");await p.update(x.agendaCollection,l,{paymentType:o.paymentType||"full",currency:o.currency||"USD",partialPayment:{type:o.partialPayment.type||"percentage",amount:Math.max(Number(o.partialPayment.amount)||0,0)},pricingOptions:o.pricingOptions??[],pricingRules:o.pricingRules??[],addOns:o.addOns??[]})}catch(l){console.error("Error saving changes:",l)}finally{i.value=!1}},T=()=>{const l=Math.random().toString(36).substr(2,9);o.pricingOptions.push({id:l,name:"",price:0,duration:30,isDefault:!1})},B=l=>{o.pricingOptions=o.pricingOptions.filter(t=>t.id!==l)},S=l=>{o.pricingOptions.forEach(t=>{t.isDefault=t.id===l})},O=()=>{const l=Math.random().toString(36).substr(2,9);o.pricingRules.push({id:l,name:"",condition:"time_after",conditionValue:"17:00",modifier:"fixed",amount:10,resourceIds:null})},u=l=>{o.pricingRules=o.pricingRules.filter(t=>t.id!==l)};return(async()=>{try{const l=await p.get(x.agendaCollection,f.value.id);l&&(o.paymentType=l.paymentType||"full",o.currency=l.currency||"USD",o.partialPayment={type:l.partialPayment?.type||"percentage",amount:Number(l.partialPayment?.amount)&&l.partialPayment.amount>0?parseFloat(l.partialPayment.amount):50},o.pricingOptions=l.pricingOptions||[{id:"1",name:"Standard Service",price:0,duration:30,isDefault:!0}],o.pricingRules=l.pricingRules||[],o.addOns=l.addOns||[],N.value=(l.resources||[]).filter(t=>t.isActive))}catch(l){console.error("Error loading agenda data:",l)}finally{m.value=!1}})(),e.provide("form",o),(l,t)=>{const r=e.resolveComponent("Label"),w=e.resolveComponent("SelectValue"),E=e.resolveComponent("SelectTrigger"),s=e.resolveComponent("SelectItem"),b=e.resolveComponent("SelectContent"),h=e.resolveComponent("Select"),g=e.resolveComponent("Button"),C=e.resolveComponent("Input"),I=e.resolveComponent("PopoverTrigger"),U=e.resolveComponent("PopoverContent"),A=e.resolveComponent("Popover"),k=e.resolveComponent("RadioGroupItem"),P=e.resolveComponent("RadioGroup");return e.openBlock(),e.createBlock(D._sfc_main,null,{default:e.withCtx(()=>[t[53]||(t[53]=e.createElementVNode("h1",{class:"text-lg font-medium mb-8"},"Payment Settings",-1)),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",re,[e.createElementVNode("div",null,[e.createElementVNode("div",se,[e.createElementVNode("div",ie,[e.createVNode(r,{class:"text-base font-medium mb-2"},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode(" Currency ",-1)])]),_:1}),e.createVNode(h,{modelValue:o.currency,"onUpdate:modelValue":t[0]||(t[0]=n=>o.currency=n)},{default:e.withCtx(()=>[e.createVNode(E,{id:"currency"},{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Currency"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:"USD"},{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createTextVNode("USD ($)",-1)])]),_:1}),e.createVNode(s,{value:"EUR"},{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode("EUR (€)",-1)])]),_:1}),e.createVNode(s,{value:"GBP"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("GBP (£)",-1)])]),_:1}),e.createVNode(s,{value:"CAD"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("CAD ($)",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue"])])])]),e.createElementVNode("div",null,[e.createElementVNode("div",ce,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode(" Service Pricing Options ",-1)])]),_:1}),t[10]||(t[10]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Offer multiple service variations with different prices (e.g., haircut styles, massage types). ",-1))]),e.createVNode(g,{onClick:T,variant:"outline",size:"sm"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.PlusCircle),{class:"w-4 h-4 mr-2"}),t[11]||(t[11]=e.createTextVNode(" Add Option ",-1))]),_:1})]),e.createElementVNode("div",ue,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.pricingOptions,n=>(e.openBlock(),e.createElementBlock("div",{key:n.id,class:"flex gap-3 items-start p-4 border rounded-lg"},[e.createElementVNode("div",me,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Service Name",-1)])]),_:1}),e.createVNode(C,{modelValue:n.name,"onUpdate:modelValue":d=>n.name=d,placeholder:"e.g., Men's Haircut, Women's Haircut"},null,8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",pe,[e.createElementVNode("div",Ve,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("Price",-1)])]),_:1}),e.createVNode(C,{modelValue:n.price,"onUpdate:modelValue":d=>n.price=d,modelModifiers:{number:!0},type:"number",min:"0",step:"0.01",placeholder:"0.00",class:"no-spinner"},null,8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",fe,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("Duration",-1)])]),_:1}),e.createVNode(h,{modelValue:n.duration,"onUpdate:modelValue":d=>n.duration=d,modelModifiers:{number:!0}},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Duration"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:15},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("15 min",-1)])]),_:1}),e.createVNode(s,{value:30},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("30 min",-1)])]),_:1}),e.createVNode(s,{value:45},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode("45 min",-1)])]),_:1}),e.createVNode(s,{value:60},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode("1 hour",-1)])]),_:1}),e.createVNode(s,{value:90},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode("1.5 hours",-1)])]),_:1}),e.createVNode(s,{value:120},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("2 hours",-1)])]),_:1}),e.createVNode(s,{value:180},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("3 hours",-1)])]),_:1}),e.createVNode(s,{value:240},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode("4 hours",-1)])]),_:1}),e.createVNode(s,{value:300},{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createTextVNode("5 hours",-1)])]),_:1}),e.createVNode(s,{value:360},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createTextVNode("6 hours",-1)])]),_:1}),e.createVNode(s,{value:480},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode("8 hours",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",xe,[e.createVNode(g,{onClick:d=>S(n.id),variant:n.isDefault?"default":"outline",size:"sm"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.isDefault?"Default":"Set Default"),1)]),_:2},1032,["onClick","variant"])])])]),o.pricingOptions.length>1?(e.openBlock(),e.createBlock(g,{key:0,onClick:d=>B(n.id),variant:"ghost",size:"icon",class:"mt-6"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Trash2),{class:"w-4 h-4 text-destructive"})]),_:1},8,["onClick"])):e.createCommentVNode("",!0)]))),128))])]),e.createElementVNode("div",null,[e.createElementVNode("div",Ne,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[26]||(t[26]=[e.createTextVNode(" Conditional Pricing Rules ",-1)])]),_:1}),t[27]||(t[27]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Add extra fees based on time, day, or other conditions (e.g., +€10 after 5pm). ",-1))]),e.createVNode(g,{onClick:O,variant:"outline",size:"sm"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.PlusCircle),{class:"w-4 h-4 mr-2"}),t[28]||(t[28]=e.createTextVNode(" Add Rule ",-1))]),_:1})]),e.createElementVNode("div",ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.pricingRules,n=>(e.openBlock(),e.createElementBlock("div",{key:n.id,class:"flex gap-3 items-start p-4 border rounded-lg"},[e.createElementVNode("div",ge,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[29]||(t[29]=[e.createTextVNode("Rule Name",-1)])]),_:1}),e.createVNode(C,{modelValue:n.name,"onUpdate:modelValue":d=>n.name=d,placeholder:"e.g., After Hours Fee, Weekend Surcharge"},null,8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",Ce,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[30]||(t[30]=[e.createTextVNode("Condition",-1)])]),_:1}),e.createVNode(h,{modelValue:n.condition,"onUpdate:modelValue":d=>n.condition=d},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Select condition"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:"time_after"},{default:e.withCtx(()=>[...t[31]||(t[31]=[e.createTextVNode("Time After",-1)])]),_:1}),e.createVNode(s,{value:"time_before"},{default:e.withCtx(()=>[...t[32]||(t[32]=[e.createTextVNode("Time Before",-1)])]),_:1}),e.createVNode(s,{value:"time_between"},{default:e.withCtx(()=>[...t[33]||(t[33]=[e.createTextVNode("Time Between",-1)])]),_:1}),e.createVNode(s,{value:"day_of_week"},{default:e.withCtx(()=>[...t[34]||(t[34]=[e.createTextVNode("Day of Week",-1)])]),_:1}),e.createVNode(s,{value:"date_range"},{default:e.withCtx(()=>[...t[35]||(t[35]=[e.createTextVNode("Date Range",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[36]||(t[36]=[e.createTextVNode("Value",-1)])]),_:1}),e.createVNode(C,{modelValue:n.conditionValue,"onUpdate:modelValue":d=>n.conditionValue=d,type:n.condition.includes("time")?"time":"text",placeholder:"e.g., 17:00"},null,8,["modelValue","onUpdate:modelValue","type"])])]),e.createElementVNode("div",ye,[e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[37]||(t[37]=[e.createTextVNode("Fee Type",-1)])]),_:1}),e.createVNode(h,{modelValue:n.modifier,"onUpdate:modelValue":d=>n.modifier=d},{default:e.withCtx(()=>[e.createVNode(E,null,{default:e.withCtx(()=>[e.createVNode(w,{placeholder:"Select type"})]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(s,{value:"fixed"},{default:e.withCtx(()=>[...t[38]||(t[38]=[e.createTextVNode("Fixed Amount",-1)])]),_:1}),e.createVNode(s,{value:"percentage"},{default:e.withCtx(()=>[...t[39]||(t[39]=[e.createTextVNode("Percentage",-1)])]),_:1})]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[40]||(t[40]=[e.createTextVNode("Amount",-1)])]),_:1}),e.createVNode(C,{modelValue:n.amount,"onUpdate:modelValue":d=>n.amount=d,modelModifiers:{number:!0},type:"number",min:"0",step:"0.01",class:"no-spinner",placeholder:n.modifier==="percentage"?"10 (%)":"10.00"},null,8,["modelValue","onUpdate:modelValue","placeholder"])])]),N.value.length>0?(e.openBlock(),e.createElementBlock("div",ke,[e.createVNode(r,{class:"text-xs mb-1 block"},{default:e.withCtx(()=>[...t[41]||(t[41]=[e.createTextVNode("Apply To Resources",-1)])]),_:1}),e.createVNode(A,null,{default:e.withCtx(()=>[e.createVNode(I,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(g,{variant:"outline",class:"w-full justify-between font-normal"},{default:e.withCtx(()=>[e.createElementVNode("div",we,[e.createVNode(e.unref(V.Users),{class:"w-4 h-4 text-muted-foreground"}),!n.resourceIds||n.resourceIds.length===0?(e.openBlock(),e.createElementBlock("span",Ee,"All Resources")):n.resourceIds.length===1?(e.openBlock(),e.createElementBlock("span",be,e.toDisplayString(N.value.find(d=>d.id===n.resourceIds[0])?.name||"1 resource"),1)):(e.openBlock(),e.createElementBlock("span",he,e.toDisplayString(n.resourceIds.length)+" resources",1))]),e.createVNode(e.unref(V.ChevronDown),{class:"w-4 h-4 opacity-50"})]),_:2},1024)]),_:2},1024),e.createVNode(U,{class:"w-64 p-2",align:"start"},{default:e.withCtx(()=>[e.createElementVNode("div",_e,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-2 p-2 rounded-md hover:bg-muted cursor-pointer transition-colors",{"bg-muted":!n.resourceIds||n.resourceIds.length===0}]),onClick:d=>c(n,!0)},[e.createElementVNode("div",Be,[e.createVNode(e.unref(V.Users),{class:"w-3 h-3 text-muted-foreground"})]),t[42]||(t[42]=e.createElementVNode("span",{class:"text-sm flex-1"},"All Resources",-1)),e.createElementVNode("div",{class:e.normalizeClass(["size-4 rounded-full border-2",!n.resourceIds||n.resourceIds.length===0?"border-primary bg-primary":"border-muted-foreground"])},[!n.resourceIds||n.resourceIds.length===0?(e.openBlock(),e.createElementBlock("div",Se)):e.createCommentVNode("",!0)],2)],10,Te),t[44]||(t[44]=e.createElementVNode("div",{class:"border-t my-2"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.id,class:"flex items-center gap-2 p-2 rounded-md hover:bg-muted cursor-pointer transition-colors",onClick:Fe=>{c(n,!1),v(n,d.id)}},[e.createElementVNode("div",{class:"size-5 rounded-full flex items-center justify-center text-white text-[10px] font-medium",style:e.normalizeStyle({backgroundColor:d.color||"#6b7280"})},e.toDisplayString(d.avatarLabel||d.name.charAt(0).toUpperCase()),5),e.createElementVNode("span",Pe,e.toDisplayString(d.name),1),e.createElementVNode("div",{class:e.normalizeClass(["size-4 rounded border-2 flex items-center justify-center",n.resourceIds?.includes(d.id)?"border-primary bg-primary":"border-muted-foreground"])},[n.resourceIds?.includes(d.id)?(e.openBlock(),e.createElementBlock("svg",Ie,[...t[43]||(t[43]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"3",d:"M5 13l4 4L19 7"},null,-1)])])):e.createCommentVNode("",!0)],2)],8,Oe))),128))])]),_:2},1024)]),_:2},1024)])):e.createCommentVNode("",!0)]),e.createVNode(g,{onClick:d=>u(n.id),variant:"ghost",size:"icon",class:"mt-6"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Trash2),{class:"w-4 h-4 text-destructive"})]),_:1},8,["onClick"])]))),128)),o.pricingRules.length===0?(e.openBlock(),e.createElementBlock("div",Ue,' No pricing rules configured. Click "Add Rule" to create conditional fees. ')):e.createCommentVNode("",!0)])]),e.createVNode(ae),e.createElementVNode("div",null,[e.createVNode(r,{class:"text-base font-medium"},{default:e.withCtx(()=>[...t[45]||(t[45]=[e.createTextVNode(" Payment Preferences ",-1)])]),_:1}),t[52]||(t[52]=e.createElementVNode("p",{class:"text-sm text-muted-foreground mb-6"}," Let customers pay full or in part when booking a slot, or pay later. ",-1)),e.createVNode(P,{modelValue:o.paymentType,"onUpdate:modelValue":t[1]||(t[1]=n=>o.paymentType=n),class:"flex flex-col gap-4"},{default:e.withCtx(()=>[e.createVNode(r,{for:"r1",class:"flex items-start space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{id:"r1",value:"full"}),t[46]||(t[46]=e.createElementVNode("div",null,[e.createElementVNode("p",null,"Pay Full Amount when Booking"),e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Your customers are required to complete the payment to confirm their booking. ")],-1))]),_:1}),e.createVNode(r,{for:"r2",class:"flex items-start space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{id:"r2",value:"partial"}),t[47]||(t[47]=e.createElementVNode("div",null,[e.createElementVNode("p",null,"Pay Part Amount when Booking"),e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Your customers are required to pay a deposit to confirm their booking. ")],-1))]),_:1}),e.createVNode(r,{for:"r3",class:"flex items-start space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{id:"r3",value:"later"}),t[48]||(t[48]=e.createElementVNode("div",null,[e.createElementVNode("p",null,"Pay Later at Appointment"),e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-1"}," Your customers can book now and pay in person at the time of their appointment. ")],-1))]),_:1})]),_:1},8,["modelValue"]),o.paymentType==="partial"?(e.openBlock(),e.createElementBlock("div",Ae,[e.createVNode(r,{class:"text-sm font-medium mb-4 block"},{default:e.withCtx(()=>[...t[49]||(t[49]=[e.createTextVNode(" Deposit Amount Configuration ",-1)])]),_:1}),e.createElementVNode("div",De,[e.createVNode(P,{modelValue:o.partialPayment.type,"onUpdate:modelValue":t[2]||(t[2]=n=>o.partialPayment.type=n),class:"flex gap-4"},{default:e.withCtx(()=>[e.createVNode(r,{class:"flex items-center space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{value:"percentage"}),t[50]||(t[50]=e.createElementVNode("span",null,"Percentage",-1))]),_:1}),e.createVNode(r,{class:"flex items-center space-x-2 cursor-pointer"},{default:e.withCtx(()=>[e.createVNode(k,{value:"fixed"}),t[51]||(t[51]=e.createElementVNode("span",null,"Fixed Amount",-1))]),_:1})]),_:1},8,["modelValue"]),e.createElementVNode("div",Re,[e.createElementVNode("div",$e,[e.createVNode(C,{modelValue:o.partialPayment.amount,"onUpdate:modelValue":t[3]||(t[3]=n=>o.partialPayment.amount=n),modelModifiers:{number:!0},type:"number",min:"0",max:o.partialPayment.type==="percentage"?100:void 0,step:"0.01",placeholder:o.partialPayment.type==="percentage"?"50":"10.00",class:"no-spinner"},null,8,["modelValue","max","placeholder"])]),e.createElementVNode("span",Me,e.toDisplayString(o.partialPayment.type==="percentage"?"%":o.currency),1)]),e.createElementVNode("p",Le,[o.partialPayment.type==="percentage"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Customers will pay "+e.toDisplayString(o.partialPayment.amount)+"% of the total price upfront. ",1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Customers will pay "+e.toDisplayString(o.currency)+" "+e.toDisplayString(o.partialPayment.amount)+" upfront. ",1)],64))])])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ze,[e.createVNode(g,{onClick:y,disabled:i.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value?"Saving...":"Save Changes"),1)]),_:1},8,["disabled"])])]))]),_:1})}}});exports.default=je;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as B, ref as _, computed as $, resolveComponent as a, openBlock as m, createBlock as w, withCtx as i, createElementVNode as t, createVNode as n, unref as s, createTextVNode as o, createElementBlock as c, Fragment as D, renderList as E, normalizeStyle as L, toDisplayString as p } from "vue";
|
|
2
|
-
import { _ as M } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { _ as M } from "./EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs";
|
|
3
3
|
import { useModuleRoute as F, useModule as I, useFirebaseIntegration as O } from "@oneclick.dev/cms-kit";
|
|
4
4
|
import { Info as V, Users as b, ArrowRight as H, Clock as P } from "lucide-vue-next";
|
|
5
5
|
const q = { class: "max-w-3xl" }, U = { key: 0 }, W = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),k=require("./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),k=require("./EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js"),c=require("@oneclick.dev/cms-kit"),l=require("lucide-vue-next"),C={class:"max-w-3xl"},b={key:0},h={key:0,class:"space-y-4"},T={class:"flex items-center justify-between"},S={class:"grid gap-3"},_={class:"flex items-start gap-4"},B={class:"flex-1 min-w-0"},$={class:"font-medium"},R={class:"mt-2 grid grid-cols-3 gap-3 text-sm"},A={class:"ml-1 font-medium"},D={class:"ml-1 font-medium"},j={class:"ml-1 font-medium"},q={class:"flex flex-col items-center gap-4"},L={class:"size-16 rounded-full bg-muted flex items-center justify-center"},M={key:1,class:"flex justify-center py-8"},z={class:"mt-8 p-4 rounded-lg bg-muted/50"},O={class:"text-sm font-medium mb-2 flex items-center gap-2"},F={class:"text-sm text-muted-foreground space-y-2 ml-6 list-decimal"},I=e.defineComponent({__name:"regular-slots",setup(P){const{params:s,resolvePath:r}=c.useModuleRoute(),{config:f}=c.useModule(),g=c.useFirebaseIntegration(f.project),a=e.ref([]),p=e.ref(!0),x=async()=>{try{const o=await g.get(f.agendaCollection,s.value.id);a.value=o.resources||[]}catch(o){console.error("Error loading resources:",o)}finally{p.value=!1}},v=e.computed(()=>a.value.filter(o=>o.isActive)),E=e.computed(()=>a.value.length>0),y=o=>{const i=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].filter((N,u)=>o.openingHours?.[u]?.length>0);return i.length===0?"No hours set":i.length===7?"Open all week":i.join(", ")};return x(),(o,t)=>{const i=e.resolveComponent("AlertTitle"),N=e.resolveComponent("AlertDescription"),u=e.resolveComponent("Alert"),m=e.resolveComponent("Button"),V=e.resolveComponent("Card"),w=e.resolveComponent("Spinner"),d=e.resolveComponent("NuxtLink");return e.openBlock(),e.createBlock(k._sfc_main,null,{default:e.withCtx(()=>[e.createElementVNode("div",C,[t[27]||(t[27]=e.createElementVNode("h1",{class:"text-lg font-medium mb-2"},"Slot Configuration",-1)),t[28]||(t[28]=e.createElementVNode("p",{class:"mb-6 text-muted-foreground text-sm"}," Time slots are now automatically generated based on your resources' operating hours, booking intervals, and service durations. ",-1)),e.createVNode(u,{class:"mb-6"},{default:e.withCtx(()=>[e.createVNode(e.unref(l.Info),{class:"h-4 w-4"}),e.createVNode(i,null,{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode("How Dynamic Slots Work",-1)])]),_:1}),e.createVNode(N,{class:"mt-2 space-y-2 text-sm"},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createElementVNode("p",null,[e.createElementVNode("strong",null,"1. Resources define operating hours:"),e.createTextVNode(" Each resource (staff, room, equipment) has its own schedule and booking interval (e.g., every 15 or 30 minutes). ")],-1),e.createElementVNode("p",null,[e.createElementVNode("strong",null,"2. Services define duration:"),e.createTextVNode(" In Payment Settings, each service specifies how long it takes (e.g., 30 min haircut, 60 min massage). ")],-1),e.createElementVNode("p",null,[e.createElementVNode("strong",null,"3. Slots are generated dynamically:"),e.createTextVNode(" The system creates available booking slots by combining resource availability with service duration, allowing multiple services to overlap within the resource's capacity. ")],-1)])]),_:1})]),_:1}),p.value?(e.openBlock(),e.createElementBlock("div",M,[e.createVNode(w,{class:"w-6 h-6"})])):(e.openBlock(),e.createElementBlock("div",b,[E.value?(e.openBlock(),e.createElementBlock("div",h,[e.createElementVNode("div",T,[t[6]||(t[6]=e.createElementVNode("h2",{class:"text-base font-medium"},"Your Resources",-1)),e.createVNode(m,{size:"sm",variant:"outline",onClick:t[0]||(t[0]=n=>o.$router.push(e.unref(r)(`/edit/${e.unref(s).id}/resources`)))},{default:e.withCtx(()=>[e.createVNode(e.unref(l.Users),{class:"w-4 h-4 mr-2"}),t[5]||(t[5]=e.createTextVNode(" Manage Resources ",-1))]),_:1})]),e.createElementVNode("div",S,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,n=>(e.openBlock(),e.createBlock(V,{key:n.id,class:"p-4 hover:shadow-sm transition-shadow"},{default:e.withCtx(()=>[e.createElementVNode("div",_,[e.createElementVNode("div",{class:"size-10 rounded-full flex items-center justify-center text-white text-sm font-medium flex-shrink-0",style:e.normalizeStyle({backgroundColor:n.color||"#6b7280"})},e.toDisplayString(n.avatarLabel||n.name.charAt(0).toUpperCase()),5),e.createElementVNode("div",B,[e.createElementVNode("h3",$,e.toDisplayString(n.name),1),e.createElementVNode("div",R,[e.createElementVNode("div",null,[t[7]||(t[7]=e.createElementVNode("span",{class:"text-muted-foreground"},"Capacity:",-1)),e.createElementVNode("span",A,e.toDisplayString(n.capacity),1)]),e.createElementVNode("div",null,[t[8]||(t[8]=e.createElementVNode("span",{class:"text-muted-foreground"},"Interval:",-1)),e.createElementVNode("span",D,e.toDisplayString(n.interval)+" min",1)]),e.createElementVNode("div",null,[t[9]||(t[9]=e.createElementVNode("span",{class:"text-muted-foreground"},"Schedule:",-1)),e.createElementVNode("span",j,e.toDisplayString(y(n)),1)])])]),e.createVNode(m,{size:"sm",variant:"ghost",onClick:t[1]||(t[1]=U=>o.$router.push(e.unref(r)(`/edit/${e.unref(s).id}/resources`)))},{default:e.withCtx(()=>[t[10]||(t[10]=e.createTextVNode(" Edit ",-1)),e.createVNode(e.unref(l.ArrowRight),{class:"w-4 h-4 ml-1"})]),_:1})])]),_:2},1024))),128))])])):(e.openBlock(),e.createBlock(V,{key:1,class:"p-8 text-center"},{default:e.withCtx(()=>[e.createElementVNode("div",q,[e.createElementVNode("div",L,[e.createVNode(e.unref(l.Users),{class:"w-8 h-8 text-muted-foreground"})]),t[12]||(t[12]=e.createElementVNode("div",null,[e.createElementVNode("h3",{class:"text-lg font-medium mb-2"},"No Resources Yet"),e.createElementVNode("p",{class:"text-sm text-muted-foreground max-w-md"}," Create resources (staff members, rooms, or equipment) to define when and how appointments can be booked. ")],-1)),e.createVNode(m,{onClick:t[2]||(t[2]=n=>o.$router.push(e.unref(r)(`/edit/${e.unref(s).id}/resources`)))},{default:e.withCtx(()=>[e.createVNode(e.unref(l.Users),{class:"w-4 h-4 mr-2"}),t[11]||(t[11]=e.createTextVNode(" Create First Resource ",-1))]),_:1})])]),_:1}))])),e.createElementVNode("div",z,[e.createElementVNode("h3",O,[e.createVNode(e.unref(l.Clock),{class:"w-4 h-4"}),t[13]||(t[13]=e.createTextVNode(" Quick Setup Guide ",-1))]),e.createElementVNode("ol",F,[e.createElementVNode("li",null,[t[15]||(t[15]=e.createElementVNode("strong",null,"Create resources",-1)),t[16]||(t[16]=e.createTextVNode(" in the ",-1)),e.createVNode(d,{to:e.unref(r)(`/edit/${e.unref(s).id}/resources`),class:"underline font-medium"},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Resource Management ",-1)])]),_:1},8,["to"]),t[17]||(t[17]=e.createTextVNode(" section with their operating hours and booking intervals ",-1))]),e.createElementVNode("li",null,[t[19]||(t[19]=e.createElementVNode("strong",null,"Configure service durations",-1)),t[20]||(t[20]=e.createTextVNode(" in ",-1)),e.createVNode(d,{to:e.unref(r)(`/edit/${e.unref(s).id}/payment`),class:"underline font-medium"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode(" Payment Settings ",-1)])]),_:1},8,["to"])]),e.createElementVNode("li",null,[t[22]||(t[22]=e.createElementVNode("strong",null,"View the generated slots",-1)),t[23]||(t[23]=e.createTextVNode(" in the ",-1)),e.createVNode(d,{to:e.unref(r)(`/edit/${e.unref(s).id}/agenda`),class:"underline font-medium"},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode(" Agenda ",-1)])]),_:1},8,["to"])]),e.createElementVNode("li",null,[t[25]||(t[25]=e.createElementVNode("strong",null,"Override specific dates",-1)),t[26]||(t[26]=e.createTextVNode(" if needed in ",-1)),e.createVNode(d,{to:e.unref(r)(`/edit/${e.unref(s).id}/exceptions`),class:"underline font-medium"},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createTextVNode(" Override Slots ",-1)])]),_:1},8,["to"])])])])])]),_:1})}}});exports.default=I;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as ce, ref as S, reactive as xe, computed as O, resolveComponent as a, openBlock as m, createBlock as C, withCtx as n, createVNode as t, createTextVNode as r, toDisplayString as v, createElementVNode as o, createElementBlock as f, Fragment as E, renderList as Y, normalizeStyle as ie, normalizeClass as me, unref as g, createCommentVNode as w } from "vue";
|
|
2
|
-
import { _ as be } from "./EditLayout.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { _ as be } from "./EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs";
|
|
3
3
|
import { Clock as _e, MoreHorizontal as we, Trash2 as pe, Plus as de, Pencil as ye, Copy as ke, Users as ue, CircleAlert as Ce } from "lucide-vue-next";
|
|
4
4
|
import { useModuleRoute as De, useConfirmation as Ve, useModule as he, useFirebaseIntegration as Se } from "@oneclick.dev/cms-kit";
|
|
5
5
|
import { a as Re } from "./index-B-lVEpFX.mjs";
|