@fayz-ai/plugin-agenda 0.2.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/bridges/create-financial-bridge.d.ts.map +1 -1
- package/dist/chunk-DRZF6CV2.js +421 -0
- package/dist/chunk-DRZF6CV2.js.map +1 -0
- package/dist/chunk-LFUELUIT.cjs +423 -0
- package/dist/chunk-LFUELUIT.cjs.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/data/supabase.d.ts.map +1 -1
- package/dist/index.cjs +765 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +765 -22
- package/dist/index.js.map +1 -1
- package/dist/migrations/index.d.ts +9 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/public/BookingWidget.d.ts +4 -2
- package/dist/public/BookingWidget.d.ts.map +1 -1
- package/dist/public/components/BrandHeader.d.ts +6 -0
- package/dist/public/components/BrandHeader.d.ts.map +1 -0
- package/dist/public/components/ServiceCard.d.ts +5 -0
- package/dist/public/components/ServiceCard.d.ts.map +1 -0
- package/dist/public/components/SidebarExtras.d.ts +4 -0
- package/dist/public/components/SidebarExtras.d.ts.map +1 -0
- package/dist/public/components/StepRailItem.d.ts +4 -0
- package/dist/public/components/StepRailItem.d.ts.map +1 -0
- package/dist/public/components/SuccessPanel.d.ts +4 -0
- package/dist/public/components/SuccessPanel.d.ts.map +1 -0
- package/dist/public/components/SummaryRail.d.ts +27 -0
- package/dist/public/components/SummaryRail.d.ts.map +1 -0
- package/dist/public/components/defaults.d.ts +3 -0
- package/dist/public/components/defaults.d.ts.map +1 -0
- package/dist/public/context.d.ts +22 -8
- package/dist/public/context.d.ts.map +1 -1
- package/dist/public/createPublicBookingPlugin.d.ts +27 -10
- package/dist/public/createPublicBookingPlugin.d.ts.map +1 -1
- package/dist/public/data.d.ts +37 -0
- package/dist/public/data.d.ts.map +1 -0
- package/dist/public/data.supabase.d.ts +7 -0
- package/dist/public/data.supabase.d.ts.map +1 -0
- package/dist/public/format.d.ts +18 -0
- package/dist/public/format.d.ts.map +1 -0
- package/dist/public/hooks.d.ts +13 -11
- package/dist/public/hooks.d.ts.map +1 -1
- package/dist/public/index.cjs +1018 -615
- package/dist/public/index.cjs.map +1 -1
- package/dist/public/index.d.ts +15 -4
- package/dist/public/index.d.ts.map +1 -1
- package/dist/public/index.js +1008 -618
- package/dist/public/index.js.map +1 -1
- package/dist/public/steps/ContactStep.d.ts +30 -0
- package/dist/public/steps/ContactStep.d.ts.map +1 -0
- package/dist/public/steps/DateTimeStep.d.ts +23 -0
- package/dist/public/steps/DateTimeStep.d.ts.map +1 -0
- package/dist/public/steps/OverviewStep.d.ts +16 -0
- package/dist/public/steps/OverviewStep.d.ts.map +1 -0
- package/dist/public/steps/PaymentStep.d.ts +20 -0
- package/dist/public/steps/PaymentStep.d.ts.map +1 -0
- package/dist/public/types.d.ts +134 -0
- package/dist/public/types.d.ts.map +1 -1
- package/dist/registries.d.ts.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -5
- package/src/bridges/create-financial-bridge.ts +6 -8
- package/src/components/AppointmentModal.tsx +4 -4
- package/src/config.ts +2 -2
- package/src/data/supabase.ts +26 -25
- package/src/index.ts +11 -0
- package/src/integrations/google-calendar/index.ts +1 -1
- package/src/integrations/google-calendar/migrations/001_google_calendar.sql +6 -6
- package/src/migrations/000b_v_bookings_rename.sql +21 -0
- package/src/migrations/000c_dedupe_customer_phones.sql +43 -0
- package/src/migrations/001_public_booking.sql +291 -0
- package/src/migrations/002_v_bookings_compat.sql +14 -0
- package/src/migrations/index.ts +387 -0
- package/src/public/BookingWidget.tsx +136 -713
- package/src/public/components/BrandHeader.tsx +27 -0
- package/src/public/components/ServiceCard.tsx +39 -0
- package/src/public/components/SidebarExtras.tsx +30 -0
- package/src/public/components/StepRailItem.tsx +27 -0
- package/src/public/components/SuccessPanel.tsx +27 -0
- package/src/public/components/SummaryRail.tsx +90 -0
- package/src/public/components/defaults.ts +14 -0
- package/src/public/context.tsx +64 -7
- package/src/public/createPublicBookingPlugin.ts +138 -25
- package/src/public/data.supabase.ts +94 -0
- package/src/public/data.ts +99 -0
- package/src/public/format.ts +61 -0
- package/src/public/hooks.ts +22 -34
- package/src/public/index.ts +57 -4
- package/src/public/steps/ContactStep.tsx +179 -0
- package/src/public/steps/DateTimeStep.tsx +138 -0
- package/src/public/steps/OverviewStep.tsx +81 -0
- package/src/public/steps/PaymentStep.tsx +180 -0
- package/src/public/types.ts +169 -3
- package/src/registries.ts +1 -2
- package/src/types.ts +4 -4
- package/dist/chunk-GAJVIEXM.cjs +0 -870
- package/dist/chunk-GAJVIEXM.cjs.map +0 -1
- package/dist/chunk-U6VTLOHN.js +0 -867
- package/dist/chunk-U6VTLOHN.js.map +0 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type CountryDef } from '@fayz-ai/core';
|
|
2
|
+
import type { PublicBookingLabels, ResolvedPayment } from '../types';
|
|
3
|
+
export interface ContactDraft {
|
|
4
|
+
name: string;
|
|
5
|
+
phone: string;
|
|
6
|
+
email: string;
|
|
7
|
+
notes: string;
|
|
8
|
+
}
|
|
9
|
+
interface ContactStepProps {
|
|
10
|
+
labels: PublicBookingLabels;
|
|
11
|
+
contact: ContactDraft;
|
|
12
|
+
onContactChange: (contact: ContactDraft) => void;
|
|
13
|
+
contactStep: 'phone' | 'code' | 'details';
|
|
14
|
+
country: CountryDef;
|
|
15
|
+
onCountryChange: (iso2: string) => void;
|
|
16
|
+
code: string;
|
|
17
|
+
onCodeChange: (code: string) => void;
|
|
18
|
+
codeError: boolean;
|
|
19
|
+
onSendCode: () => void;
|
|
20
|
+
onConfirmCode: () => void;
|
|
21
|
+
onBackToPhone: () => void;
|
|
22
|
+
onSubmitDetails: () => void;
|
|
23
|
+
payment: ResolvedPayment | null;
|
|
24
|
+
submitting: boolean;
|
|
25
|
+
error: Error | null;
|
|
26
|
+
}
|
|
27
|
+
/** Contact step — phone verification first (Quaddro-style), then details. */
|
|
28
|
+
export declare function ContactStep({ labels, contact, onContactChange, contactStep, country, onCountryChange, code, onCodeChange, codeError, onSendCode, onConfirmCode, onBackToPhone, onSubmitDetails, payment, submitting, error, }: ContactStepProps): import("react").JSX.Element;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=ContactStep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactStep.d.ts","sourceRoot":"","sources":["../../../src/public/steps/ContactStep.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,OAAO,EAAE,YAAY,CAAA;IACrB,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAA;IAChD,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IACzC,OAAO,EAAE,UAAU,CAAA;IACnB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;IAC/B,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EACvE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EACvE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,GAC5C,EAAE,gBAAgB,+BA+IlB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { TimeSlot } from '../../types';
|
|
2
|
+
import type { DayCell } from '../format';
|
|
3
|
+
import type { BookingFormatters, PublicBookingLabels, WorkingHours } from '../types';
|
|
4
|
+
interface DateTimeStepProps {
|
|
5
|
+
labels: PublicBookingLabels;
|
|
6
|
+
fmt: BookingFormatters;
|
|
7
|
+
week: DayCell[];
|
|
8
|
+
weekOffset: number;
|
|
9
|
+
maxWeekOffset: number;
|
|
10
|
+
onWeekOffset: (updater: (w: number) => number) => void;
|
|
11
|
+
businessHours: WorkingHours;
|
|
12
|
+
date: string | null;
|
|
13
|
+
onSelectDate: (iso: string) => void;
|
|
14
|
+
slots: TimeSlot[];
|
|
15
|
+
slotsLoading: boolean;
|
|
16
|
+
slotStart: string | null;
|
|
17
|
+
onSelectSlot: (startIso: string) => void;
|
|
18
|
+
onContinue: () => void;
|
|
19
|
+
}
|
|
20
|
+
/** Week strip + available-slot grid. */
|
|
21
|
+
export declare function DateTimeStep({ labels, fmt, week, weekOffset, maxWeekOffset, onWeekOffset, businessHours, date, onSelectDate, slots, slotsLoading, slotStart, onSelectSlot, onContinue, }: DateTimeStepProps): import("react").JSX.Element;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=DateTimeStep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeStep.d.ts","sourceRoot":"","sources":["../../../src/public/steps/DateTimeStep.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEpF,UAAU,iBAAiB;IACzB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,GAAG,EAAE,iBAAiB,CAAA;IACtB,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,CAAA;IACtD,aAAa,EAAE,YAAY,CAAA;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EACzE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,GAC7E,EAAE,iBAAiB,+BA+GnB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BookingComponents, BookingFormatters, PublicBookingLabels, PublicService, ResolvedBookingBrand, WorkingHours } from '../types';
|
|
2
|
+
interface OverviewStepProps {
|
|
3
|
+
services: PublicService[];
|
|
4
|
+
servicesLoading: boolean;
|
|
5
|
+
businessHours: WorkingHours;
|
|
6
|
+
professionalName: string;
|
|
7
|
+
labels: PublicBookingLabels;
|
|
8
|
+
brand: ResolvedBookingBrand;
|
|
9
|
+
fmt: BookingFormatters;
|
|
10
|
+
components: BookingComponents;
|
|
11
|
+
onStartBooking: (serviceId?: string) => void;
|
|
12
|
+
}
|
|
13
|
+
/** Default view: services + opening hours + sidebar CTA (Quaddro-style). */
|
|
14
|
+
export declare function OverviewStep({ services, servicesLoading, businessHours, professionalName, labels, brand, fmt, components: C, onStartBooking, }: OverviewStepProps): import("react").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=OverviewStep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverviewStep.d.ts","sourceRoot":"","sources":["../../../src/public/steps/OverviewStep.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5I,UAAU,iBAAiB;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,YAAY,CAAA;IAC3B,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE,oBAAoB,CAAA;IAC3B,GAAG,EAAE,iBAAiB,CAAA;IACtB,UAAU,EAAE,iBAAiB,CAAA;IAC7B,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7C;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,GAC9G,EAAE,iBAAiB,+BA6DnB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PixCharge } from '@fayz-ai/core';
|
|
2
|
+
import type { BookingFormatters, PublicService, ResolvedPayment } from '../types';
|
|
3
|
+
declare const PIX_PAYLOAD = "00020126840014br.gov.bcb.pix2562qrcode.fayz.ai/pix/v2/9d8f7a6b-agendamento5204000053039865802BR5904FAYZ6009SAO PAULO62070503***6304AB12";
|
|
4
|
+
interface PaymentStepProps {
|
|
5
|
+
service: PublicService;
|
|
6
|
+
payment: ResolvedPayment;
|
|
7
|
+
paymentStep: 'choose' | 'pix';
|
|
8
|
+
charge: PixCharge | null;
|
|
9
|
+
busy: boolean;
|
|
10
|
+
error: Error | null;
|
|
11
|
+
copied: boolean;
|
|
12
|
+
fmt: BookingFormatters;
|
|
13
|
+
onPayWithPix: (fee: number) => void;
|
|
14
|
+
onCopy: () => void;
|
|
15
|
+
onSimulatePaid: () => void;
|
|
16
|
+
}
|
|
17
|
+
/** Payment step: order summary + Pix method → QR/copia-e-cola while polling. */
|
|
18
|
+
export declare function PaymentStep({ service, payment, paymentStep, charge, busy, error, copied, fmt, onPayWithPix, onCopy, onSimulatePaid, }: PaymentStepProps): import("react").JSX.Element;
|
|
19
|
+
export { PIX_PAYLOAD };
|
|
20
|
+
//# sourceMappingURL=PaymentStep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaymentStep.d.ts","sourceRoot":"","sources":["../../../src/public/steps/PaymentStep.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAIjF,QAAA,MAAM,WAAW,4IAC0H,CAAA;AAqC3I,UAAU,gBAAgB;IACxB,OAAO,EAAE,aAAa,CAAA;IACtB,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC7B,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,iBAAiB,CAAA;IACtB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,cAAc,EAAE,MAAM,IAAI,CAAA;CAC3B;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,GACtG,EAAE,gBAAgB,+BAoHlB;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
package/dist/public/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
1
2
|
export interface PublicService {
|
|
2
3
|
id: string;
|
|
3
4
|
name: string;
|
|
@@ -39,6 +40,98 @@ export interface ResolvedPayment {
|
|
|
39
40
|
reservationFeePercent: number;
|
|
40
41
|
method: 'pix';
|
|
41
42
|
}
|
|
43
|
+
/** One icon+text bullet on the overview sidebar. */
|
|
44
|
+
export interface BookingHighlight {
|
|
45
|
+
icon?: ComponentType<{
|
|
46
|
+
className?: string;
|
|
47
|
+
}>;
|
|
48
|
+
text: string;
|
|
49
|
+
}
|
|
50
|
+
/** Brand/text-level personalization — no components needed for these. */
|
|
51
|
+
export interface BookingBrand {
|
|
52
|
+
/** e.g. "HempDent · Consulta Canábica". */
|
|
53
|
+
name?: string;
|
|
54
|
+
/** Avatar letter; defaults to name.charAt(0). Ignored when logoUrl is set. */
|
|
55
|
+
initials?: string;
|
|
56
|
+
logoUrl?: string;
|
|
57
|
+
/** Subheader line under the name. `null` hides the row. */
|
|
58
|
+
tagline?: string | null;
|
|
59
|
+
/** Icon on service rows. Default: lucide Video. */
|
|
60
|
+
serviceIcon?: ComponentType<{
|
|
61
|
+
className?: string;
|
|
62
|
+
}>;
|
|
63
|
+
/** Chip after the duration ("Online", "Presencial"…). `null` hides. */
|
|
64
|
+
serviceMeta?: string | null;
|
|
65
|
+
/** Badge on the first service. `null` disables. Default 'Mais procurado'. */
|
|
66
|
+
featuredBadge?: string | null;
|
|
67
|
+
/** Overview sidebar bullets (replaces the default generic ones). */
|
|
68
|
+
highlights?: BookingHighlight[];
|
|
69
|
+
}
|
|
70
|
+
export interface ResolvedBookingBrand {
|
|
71
|
+
name: string;
|
|
72
|
+
initials: string;
|
|
73
|
+
logoUrl?: string;
|
|
74
|
+
tagline: string | null;
|
|
75
|
+
serviceIcon: ComponentType<{
|
|
76
|
+
className?: string;
|
|
77
|
+
}>;
|
|
78
|
+
serviceMeta: string | null;
|
|
79
|
+
featuredBadge: string | null;
|
|
80
|
+
highlights: BookingHighlight[];
|
|
81
|
+
}
|
|
82
|
+
export interface BookingFormatters {
|
|
83
|
+
price: Intl.NumberFormat;
|
|
84
|
+
time: Intl.DateTimeFormat;
|
|
85
|
+
weekday: Intl.DateTimeFormat;
|
|
86
|
+
dayNum: Intl.DateTimeFormat;
|
|
87
|
+
longDay: Intl.DateTimeFormat;
|
|
88
|
+
dateShort: Intl.DateTimeFormat;
|
|
89
|
+
month: Intl.DateTimeFormat;
|
|
90
|
+
}
|
|
91
|
+
export type StepState = 'done' | 'active' | 'todo';
|
|
92
|
+
export interface BrandHeaderProps {
|
|
93
|
+
brand: ResolvedBookingBrand;
|
|
94
|
+
}
|
|
95
|
+
export interface ServiceCardProps {
|
|
96
|
+
service: PublicService;
|
|
97
|
+
featured: boolean;
|
|
98
|
+
onSelect: () => void;
|
|
99
|
+
fmt: BookingFormatters;
|
|
100
|
+
brand: ResolvedBookingBrand;
|
|
101
|
+
}
|
|
102
|
+
export interface SidebarExtrasProps {
|
|
103
|
+
professionalName: string;
|
|
104
|
+
brand: ResolvedBookingBrand;
|
|
105
|
+
/** Renders the primary CTA — replacements can call it from their own button. */
|
|
106
|
+
onStartBooking: () => void;
|
|
107
|
+
labels: PublicBookingLabels;
|
|
108
|
+
}
|
|
109
|
+
export interface SuccessPanelProps {
|
|
110
|
+
service: PublicService | null;
|
|
111
|
+
/** ISO datetime of the booked slot. */
|
|
112
|
+
slotStart: string | null;
|
|
113
|
+
professionalName: string;
|
|
114
|
+
labels: PublicBookingLabels;
|
|
115
|
+
fmt: BookingFormatters;
|
|
116
|
+
}
|
|
117
|
+
export interface StepRailItemProps {
|
|
118
|
+
n: number;
|
|
119
|
+
label: string;
|
|
120
|
+
state: StepState;
|
|
121
|
+
children?: ReactNode;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Host-overridable subcomponents. Flow-critical parts (week strip, slot grid,
|
|
125
|
+
* contact forms, payment panel) stay internal — these are the brand-visible
|
|
126
|
+
* seams. Defaults are exported so hosts can wrap instead of rewriting.
|
|
127
|
+
*/
|
|
128
|
+
export interface BookingComponents {
|
|
129
|
+
BrandHeader: ComponentType<BrandHeaderProps>;
|
|
130
|
+
ServiceCard: ComponentType<ServiceCardProps>;
|
|
131
|
+
SidebarExtras: ComponentType<SidebarExtrasProps>;
|
|
132
|
+
SuccessPanel: ComponentType<SuccessPanelProps>;
|
|
133
|
+
StepRailItem: ComponentType<StepRailItemProps>;
|
|
134
|
+
}
|
|
42
135
|
export interface PublicBookingLabels {
|
|
43
136
|
title: string;
|
|
44
137
|
serviceStep: string;
|
|
@@ -47,5 +140,46 @@ export interface PublicBookingLabels {
|
|
|
47
140
|
confirmCta: string;
|
|
48
141
|
successTitle: string;
|
|
49
142
|
successBody: string;
|
|
143
|
+
servicesHeading: string;
|
|
144
|
+
aboutHeading: string;
|
|
145
|
+
openingHoursHeading: string;
|
|
146
|
+
closedLabel: string;
|
|
147
|
+
bookNowCta: string;
|
|
148
|
+
timezoneNote: string;
|
|
149
|
+
slotsHeading: string;
|
|
150
|
+
noSlots: string;
|
|
151
|
+
continueCta: string;
|
|
152
|
+
backToServices: string;
|
|
153
|
+
back: string;
|
|
154
|
+
prevWeek: string;
|
|
155
|
+
nextWeek: string;
|
|
156
|
+
contactIntro: string;
|
|
157
|
+
phoneLabel: string;
|
|
158
|
+
phoneHint: string;
|
|
159
|
+
sendCodeCta: string;
|
|
160
|
+
codeTitle: string;
|
|
161
|
+
codeBody: string;
|
|
162
|
+
codeInvalid: string;
|
|
163
|
+
codeConfirmCta: string;
|
|
164
|
+
codeResendHint: string;
|
|
165
|
+
phoneVerified: string;
|
|
166
|
+
changePhone: string;
|
|
167
|
+
nameLabel: string;
|
|
168
|
+
namePlaceholder: string;
|
|
169
|
+
emailLabel: string;
|
|
170
|
+
emailPlaceholder: string;
|
|
171
|
+
emailHint: string;
|
|
172
|
+
notesLabel: string;
|
|
173
|
+
notesPlaceholder: string;
|
|
174
|
+
saveAndContinueCta: string;
|
|
175
|
+
submitError: string;
|
|
176
|
+
noChargeNote: string;
|
|
177
|
+
railTitle: string;
|
|
178
|
+
railWaitingPayment: string;
|
|
179
|
+
railService: string;
|
|
180
|
+
railProfessional: string;
|
|
181
|
+
railDatetime: string;
|
|
182
|
+
railContact: string;
|
|
183
|
+
railPayment: string;
|
|
50
184
|
}
|
|
51
185
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/public/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/public/types.ts"],"names":[],"mappings":"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"}
|
package/dist/registries.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registries.d.ts","sourceRoot":"","sources":["../src/registries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"registries.d.ts","sourceRoot":"","sources":["../src/registries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AA2BtD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,EAO/C,CAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export interface BookingTypeConfig {
|
|
|
23
23
|
requiresServices: boolean;
|
|
24
24
|
requiresClient: boolean;
|
|
25
25
|
}
|
|
26
|
-
/** A booking service line item (from
|
|
26
|
+
/** A booking service line item (from public.appointment_items) */
|
|
27
27
|
export interface BookingService {
|
|
28
28
|
id: string;
|
|
29
29
|
serviceId: string | null;
|
|
@@ -32,7 +32,7 @@ export interface BookingService {
|
|
|
32
32
|
price: number;
|
|
33
33
|
assigneeId: string | null;
|
|
34
34
|
}
|
|
35
|
-
/** Calendar booking — the main entity rendered on the calendar (from
|
|
35
|
+
/** Calendar booking — the main entity rendered on the calendar (from v_appointments view on orders) */
|
|
36
36
|
export interface CalendarBooking {
|
|
37
37
|
id: string;
|
|
38
38
|
tenantId: string;
|
|
@@ -76,7 +76,7 @@ export interface Professional {
|
|
|
76
76
|
locationName: string | null;
|
|
77
77
|
isActive: boolean;
|
|
78
78
|
}
|
|
79
|
-
/** Working hours schedule (from
|
|
79
|
+
/** Working hours schedule (from public.schedules) */
|
|
80
80
|
export interface Schedule {
|
|
81
81
|
id: string;
|
|
82
82
|
tenantId: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AASA,+BAA+B;AAC/B,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,WAAW,GACX,aAAa,GACb,WAAW,GACX,WAAW,GACX,SAAS,CAAA;AAEb,mCAAmC;AACnC,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;AAE9E,oEAAoE;AACpE,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,eAAe,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAE9F,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,aAAa,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE;QACN;+EACuE;QACvE,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,MAAM,EAAE,OAAO,CAAA;QACf,YAAY,EAAE,OAAO,CAAA;QACrB,QAAQ,EAAE,OAAO,CAAA;QACjB,QAAQ,EAAE,OAAO,CAAA;QACjB,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,gBAAgB,EAAE,OAAO,CAAA;IACzB,cAAc,EAAE,OAAO,CAAA;CACxB;AAMD,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fayz-ai/plugin-agenda",
|
|
3
|
-
"
|
|
3
|
+
"fayz": {
|
|
4
|
+
"status": "beta"
|
|
5
|
+
},
|
|
6
|
+
"version": "0.8.0",
|
|
4
7
|
"description": "Fayz SDK — plugin-agenda plugin",
|
|
5
8
|
"type": "module",
|
|
6
9
|
"main": "./dist/index.cjs",
|
|
@@ -39,10 +42,10 @@
|
|
|
39
42
|
"@tanstack/react-table": "^8.20.0",
|
|
40
43
|
"@fullcalendar/resource-timegrid": "^6.1.0",
|
|
41
44
|
"@fullcalendar/list": "^6.1.0",
|
|
42
|
-
"@fayz-ai/
|
|
43
|
-
"@fayz-ai/ui": "^0.
|
|
44
|
-
"@fayz-ai/core": "^0.
|
|
45
|
-
"@fayz-ai/
|
|
45
|
+
"@fayz-ai/saas": "^0.8.0",
|
|
46
|
+
"@fayz-ai/ui": "^0.8.0",
|
|
47
|
+
"@fayz-ai/core": "^0.8.0",
|
|
48
|
+
"@fayz-ai/plugin-financial": "^0.8.0"
|
|
46
49
|
},
|
|
47
50
|
"devDependencies": {
|
|
48
51
|
"@types/react": "^18.3.0",
|
|
@@ -59,6 +62,9 @@
|
|
|
59
62
|
"fayz-plugin",
|
|
60
63
|
"fayz-sdk"
|
|
61
64
|
],
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public"
|
|
67
|
+
},
|
|
62
68
|
"scripts": {
|
|
63
69
|
"build": "tsup && tsc --emitDeclarationOnly --declaration --declarationMap --noEmit false",
|
|
64
70
|
"dev": "tsup --watch",
|
|
@@ -54,12 +54,11 @@ export function createFinancialBridge(provider: FinancialDataProvider): AgendaFi
|
|
|
54
54
|
try {
|
|
55
55
|
const [{ data: orders }, { data: movements }] = await Promise.all([
|
|
56
56
|
supabase
|
|
57
|
-
.schema('saas_core')
|
|
58
57
|
.from('orders')
|
|
59
58
|
.select('id, kind, status, total, reference_number, metadata')
|
|
60
59
|
.in('id', orderIds),
|
|
61
60
|
supabase
|
|
62
|
-
.from('
|
|
61
|
+
.from('plg_financial_movements')
|
|
63
62
|
.select('invoice_id, status, paid_amount')
|
|
64
63
|
.in('invoice_id', orderIds),
|
|
65
64
|
])
|
|
@@ -97,8 +96,8 @@ export function createFinancialBridge(provider: FinancialDataProvider): AgendaFi
|
|
|
97
96
|
|
|
98
97
|
// Single query: get order + movements in parallel
|
|
99
98
|
const [orderRes, movRes] = await Promise.all([
|
|
100
|
-
supabase.
|
|
101
|
-
supabase.from('
|
|
99
|
+
supabase.from('orders').select('id, status, total, reference_number, metadata').eq('id', orderId).single(),
|
|
100
|
+
supabase.from('plg_financial_movements').select('*').eq('invoice_id', orderId).order('due_date'),
|
|
102
101
|
])
|
|
103
102
|
|
|
104
103
|
const order = orderRes.data
|
|
@@ -109,7 +108,7 @@ export function createFinancialBridge(provider: FinancialDataProvider): AgendaFi
|
|
|
109
108
|
const typeIds = [...new Set((movRes.data ?? []).map((m: any) => m.payment_method_type_id).filter(Boolean))]
|
|
110
109
|
let typeNames: Record<string, string> = {}
|
|
111
110
|
if (typeIds.length > 0) {
|
|
112
|
-
const { data: types } = await supabase.from('
|
|
111
|
+
const { data: types } = await supabase.from('plg_financial_payment_method_types').select('id, name').in('id', typeIds)
|
|
113
112
|
typeNames = Object.fromEntries((types ?? []).map((t: any) => [t.id, t.name]))
|
|
114
113
|
}
|
|
115
114
|
|
|
@@ -176,7 +175,6 @@ export function createFinancialBridge(provider: FinancialDataProvider): AgendaFi
|
|
|
176
175
|
|
|
177
176
|
// Order carries the assigned professional (assignee_id) and realized total.
|
|
178
177
|
const { data: order } = await supabase
|
|
179
|
-
.schema('saas_core')
|
|
180
178
|
.from('orders')
|
|
181
179
|
.select('id, tenant_id, assignee_id, total')
|
|
182
180
|
.eq('id', orderId)
|
|
@@ -197,7 +195,7 @@ export function createFinancialBridge(provider: FinancialDataProvider): AgendaFi
|
|
|
197
195
|
|
|
198
196
|
// Idempotent: one commission accrual per order. Reuse if already present.
|
|
199
197
|
const { data: existing } = await supabase
|
|
200
|
-
.from('
|
|
198
|
+
.from('plg_financial_movements')
|
|
201
199
|
.select('id')
|
|
202
200
|
.eq('invoice_id', orderId)
|
|
203
201
|
.eq('movement_kind', 'commission')
|
|
@@ -207,7 +205,7 @@ export function createFinancialBridge(provider: FinancialDataProvider): AgendaFi
|
|
|
207
205
|
const dueDate = options?.dueDate ?? new Date().toISOString().slice(0, 10)
|
|
208
206
|
|
|
209
207
|
const { data: inserted } = await supabase
|
|
210
|
-
.from('
|
|
208
|
+
.from('plg_financial_movements')
|
|
211
209
|
.insert({
|
|
212
210
|
tenant_id: order.tenant_id,
|
|
213
211
|
invoice_id: orderId,
|
|
@@ -724,7 +724,7 @@ export function AppointmentModal({ open, mode, bookingId, prefill, initialTab, e
|
|
|
724
724
|
for (const [k, v] of Object.entries(data)) {
|
|
725
725
|
dbData[k.replace(/[A-Z]/g, (m) => '_' + m.toLowerCase())] = v
|
|
726
726
|
}
|
|
727
|
-
await supabase.
|
|
727
|
+
await supabase.from('people').update(dbData).eq('id', clientId)
|
|
728
728
|
setClientData({ ...clientData, ...data })
|
|
729
729
|
setClientEditing(false)
|
|
730
730
|
} catch { /* toast */ }
|
|
@@ -851,8 +851,8 @@ export function AppointmentModal({ open, mode, bookingId, prefill, initialTab, e
|
|
|
851
851
|
const tenantId = getAgendaTenantId()
|
|
852
852
|
if (!supabase || !tenantId) throw new Error('Not initialized')
|
|
853
853
|
|
|
854
|
-
// 1. Insert into
|
|
855
|
-
const { data: personRow, error: personError } = await supabase.
|
|
854
|
+
// 1. Insert into public.people (archetype base table)
|
|
855
|
+
const { data: personRow, error: personError } = await supabase.from('people').insert({
|
|
856
856
|
tenant_id: tenantId, kind: config.clientKind, name: newClientName.trim(),
|
|
857
857
|
phone: newClientPhone.trim() || null, email: newClientEmail.trim() || null,
|
|
858
858
|
}).select('id, name').single()
|
|
@@ -864,7 +864,7 @@ export function AppointmentModal({ open, mode, bookingId, prefill, initialTab, e
|
|
|
864
864
|
})
|
|
865
865
|
if (clientError) {
|
|
866
866
|
// Rollback person if extension insert fails
|
|
867
|
-
await supabase.
|
|
867
|
+
await supabase.from('people').delete().eq('id', personRow.id)
|
|
868
868
|
throw clientError
|
|
869
869
|
}
|
|
870
870
|
|
package/src/config.ts
CHANGED
|
@@ -70,13 +70,13 @@ export interface AgendaPluginOptions {
|
|
|
70
70
|
labels?: Partial<AgendaPluginLabels>
|
|
71
71
|
currency?: { code?: string; locale?: string; symbol?: string }
|
|
72
72
|
|
|
73
|
-
/** Booking kind used in
|
|
73
|
+
/** Booking kind used in public.appointments.kind (default: 'appointment') */
|
|
74
74
|
bookingKind?: string
|
|
75
75
|
|
|
76
76
|
/** Order kind for financial records (default: 'service_order') */
|
|
77
77
|
orderKind?: string
|
|
78
78
|
|
|
79
|
-
/** Schedule kind in
|
|
79
|
+
/** Schedule kind in public.schedules.kind (default: 'working_hours') */
|
|
80
80
|
scheduleKind?: string
|
|
81
81
|
|
|
82
82
|
/** Booking type tabs shown in the appointment modal */
|