@withpotter/lib 0.13.0-next.101
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/__fixtures__/demo-content-server.json +484 -0
- package/dist/accessibility-context.d.ts +27 -0
- package/dist/accessibility-context.js +107 -0
- package/dist/accessibility-context.js.map +1 -0
- package/dist/active-workspace.d.ts +45 -0
- package/dist/active-workspace.js +34 -0
- package/dist/active-workspace.js.map +1 -0
- package/dist/admin-account-officer-api.d.ts +13 -0
- package/dist/admin-account-officer-api.js +12 -0
- package/dist/admin-account-officer-api.js.map +1 -0
- package/dist/admin-account-types.d.ts +122 -0
- package/dist/admin-account-types.js +1 -0
- package/dist/admin-account-types.js.map +1 -0
- package/dist/admin-adoption-api.d.ts +35 -0
- package/dist/admin-adoption-api.js +16 -0
- package/dist/admin-adoption-api.js.map +1 -0
- package/dist/admin-api.d.ts +1219 -0
- package/dist/admin-api.js +325 -0
- package/dist/admin-api.js.map +1 -0
- package/dist/admin-case-api.d.ts +32 -0
- package/dist/admin-case-api.js +63 -0
- package/dist/admin-case-api.js.map +1 -0
- package/dist/admin-case-types.d.ts +166 -0
- package/dist/admin-case-types.js +1 -0
- package/dist/admin-case-types.js.map +1 -0
- package/dist/admin-compliance-api.d.ts +31 -0
- package/dist/admin-compliance-api.js +20 -0
- package/dist/admin-compliance-api.js.map +1 -0
- package/dist/admin-country-api.d.ts +28 -0
- package/dist/admin-country-api.js +9 -0
- package/dist/admin-country-api.js.map +1 -0
- package/dist/admin-currency-types.d.ts +138 -0
- package/dist/admin-currency-types.js +1 -0
- package/dist/admin-currency-types.js.map +1 -0
- package/dist/admin-feedback-api.d.ts +215 -0
- package/dist/admin-feedback-api.js +63 -0
- package/dist/admin-feedback-api.js.map +1 -0
- package/dist/admin-inbox-seen.d.ts +22 -0
- package/dist/admin-inbox-seen.js +47 -0
- package/dist/admin-inbox-seen.js.map +1 -0
- package/dist/admin-ledger-api.d.ts +85 -0
- package/dist/admin-ledger-api.js +30 -0
- package/dist/admin-ledger-api.js.map +1 -0
- package/dist/admin-money-api.d.ts +127 -0
- package/dist/admin-money-api.js +125 -0
- package/dist/admin-money-api.js.map +1 -0
- package/dist/admin-newsletter-contacts-api.d.ts +70 -0
- package/dist/admin-newsletter-contacts-api.js +20 -0
- package/dist/admin-newsletter-contacts-api.js.map +1 -0
- package/dist/admin-newsletter-deliveries-api.d.ts +47 -0
- package/dist/admin-newsletter-deliveries-api.js +16 -0
- package/dist/admin-newsletter-deliveries-api.js.map +1 -0
- package/dist/admin-newsletters-api.d.ts +118 -0
- package/dist/admin-newsletters-api.js +47 -0
- package/dist/admin-newsletters-api.js.map +1 -0
- package/dist/admin-pos-api.d.ts +16 -0
- package/dist/admin-pos-api.js +35 -0
- package/dist/admin-pos-api.js.map +1 -0
- package/dist/admin-pos-query.d.ts +43 -0
- package/dist/admin-pos-query.js +55 -0
- package/dist/admin-pos-query.js.map +1 -0
- package/dist/admin-pos-types.d.ts +122 -0
- package/dist/admin-pos-types.js +1 -0
- package/dist/admin-pos-types.js.map +1 -0
- package/dist/admin-pricing-api.d.ts +88 -0
- package/dist/admin-pricing-api.js +66 -0
- package/dist/admin-pricing-api.js.map +1 -0
- package/dist/admin-readiness-api.d.ts +25 -0
- package/dist/admin-readiness-api.js +39 -0
- package/dist/admin-readiness-api.js.map +1 -0
- package/dist/admin-sales-api.d.ts +124 -0
- package/dist/admin-sales-api.js +41 -0
- package/dist/admin-sales-api.js.map +1 -0
- package/dist/admin-saved-replies-api.d.ts +35 -0
- package/dist/admin-saved-replies-api.js +70 -0
- package/dist/admin-saved-replies-api.js.map +1 -0
- package/dist/admin-service-operations-api.d.ts +142 -0
- package/dist/admin-service-operations-api.js +52 -0
- package/dist/admin-service-operations-api.js.map +1 -0
- package/dist/admin-signatures-api.d.ts +57 -0
- package/dist/admin-signatures-api.js +15 -0
- package/dist/admin-signatures-api.js.map +1 -0
- package/dist/admin-support-analytics-api.d.ts +36 -0
- package/dist/admin-support-analytics-api.js +71 -0
- package/dist/admin-support-analytics-api.js.map +1 -0
- package/dist/admin-tenant-setup-types.d.ts +85 -0
- package/dist/admin-tenant-setup-types.js +1 -0
- package/dist/admin-tenant-setup-types.js.map +1 -0
- package/dist/admin-tenants-query.d.ts +14 -0
- package/dist/admin-tenants-query.js +17 -0
- package/dist/admin-tenants-query.js.map +1 -0
- package/dist/analytics/PostHogProvider.d.ts +25 -0
- package/dist/analytics/PostHogProvider.js +44 -0
- package/dist/analytics/PostHogProvider.js.map +1 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +11 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics.d.ts +1 -0
- package/dist/analytics.js +1 -0
- package/dist/api/abandoned-cart.d.ts +18 -0
- package/dist/api/abandoned-cart.js +68 -0
- package/dist/api/abandoned-cart.js.map +1 -0
- package/dist/api/accounts.d.ts +176 -0
- package/dist/api/accounts.js +194 -0
- package/dist/api/accounts.js.map +1 -0
- package/dist/api/analytics-patterns.d.ts +18 -0
- package/dist/api/analytics-patterns.js +52 -0
- package/dist/api/analytics-patterns.js.map +1 -0
- package/dist/api/analytics.d.ts +143 -0
- package/dist/api/analytics.js +379 -0
- package/dist/api/analytics.js.map +1 -0
- package/dist/api/assignee-prefs.d.ts +7 -0
- package/dist/api/assignee-prefs.js +17 -0
- package/dist/api/assignee-prefs.js.map +1 -0
- package/dist/api/automations.d.ts +73 -0
- package/dist/api/automations.js +102 -0
- package/dist/api/automations.js.map +1 -0
- package/dist/api/behaviors.d.ts +15 -0
- package/dist/api/behaviors.js +15 -0
- package/dist/api/behaviors.js.map +1 -0
- package/dist/api/bio.d.ts +7 -0
- package/dist/api/bio.js +17 -0
- package/dist/api/bio.js.map +1 -0
- package/dist/api/booking-calendar.d.ts +14 -0
- package/dist/api/booking-calendar.js +33 -0
- package/dist/api/booking-calendar.js.map +1 -0
- package/dist/api/bookings.d.ts +199 -0
- package/dist/api/bookings.js +284 -0
- package/dist/api/bookings.js.map +1 -0
- package/dist/api/business-devices.d.ts +108 -0
- package/dist/api/business-devices.js +139 -0
- package/dist/api/business-devices.js.map +1 -0
- package/dist/api/business-locations.d.ts +26 -0
- package/dist/api/business-locations.js +39 -0
- package/dist/api/business-locations.js.map +1 -0
- package/dist/api/cache-bus.d.ts +56 -0
- package/dist/api/cache-bus.js +18 -0
- package/dist/api/cache-bus.js.map +1 -0
- package/dist/api/calendar-sync.d.ts +49 -0
- package/dist/api/calendar-sync.js +50 -0
- package/dist/api/calendar-sync.js.map +1 -0
- package/dist/api/campaign-initiatives.d.ts +115 -0
- package/dist/api/campaign-initiatives.js +42 -0
- package/dist/api/campaign-initiatives.js.map +1 -0
- package/dist/api/campaigns.d.ts +89 -0
- package/dist/api/campaigns.js +100 -0
- package/dist/api/campaigns.js.map +1 -0
- package/dist/api/capabilities.d.ts +12 -0
- package/dist/api/capabilities.js +16 -0
- package/dist/api/capabilities.js.map +1 -0
- package/dist/api/commerce.d.ts +19 -0
- package/dist/api/commerce.js +31 -0
- package/dist/api/commerce.js.map +1 -0
- package/dist/api/communications.d.ts +166 -0
- package/dist/api/communications.js +141 -0
- package/dist/api/communications.js.map +1 -0
- package/dist/api/connect.d.ts +72 -0
- package/dist/api/connect.js +50 -0
- package/dist/api/connect.js.map +1 -0
- package/dist/api/content.d.ts +146 -0
- package/dist/api/content.js +187 -0
- package/dist/api/content.js.map +1 -0
- package/dist/api/conversations.d.ts +79 -0
- package/dist/api/conversations.js +41 -0
- package/dist/api/conversations.js.map +1 -0
- package/dist/api/core.d.ts +62 -0
- package/dist/api/core.js +223 -0
- package/dist/api/core.js.map +1 -0
- package/dist/api/credentials.d.ts +65 -0
- package/dist/api/credentials.js +48 -0
- package/dist/api/credentials.js.map +1 -0
- package/dist/api/credits.d.ts +96 -0
- package/dist/api/credits.js +24 -0
- package/dist/api/credits.js.map +1 -0
- package/dist/api/crm-analytics.d.ts +10 -0
- package/dist/api/crm-analytics.js +22 -0
- package/dist/api/crm-analytics.js.map +1 -0
- package/dist/api/crm-segments.d.ts +14 -0
- package/dist/api/crm-segments.js +42 -0
- package/dist/api/crm-segments.js.map +1 -0
- package/dist/api/deliveries.d.ts +99 -0
- package/dist/api/deliveries.js +37 -0
- package/dist/api/deliveries.js.map +1 -0
- package/dist/api/demo-content.d.ts +104 -0
- package/dist/api/demo-content.js +36 -0
- package/dist/api/demo-content.js.map +1 -0
- package/dist/api/device-shifts.d.ts +56 -0
- package/dist/api/device-shifts.js +50 -0
- package/dist/api/device-shifts.js.map +1 -0
- package/dist/api/devices.d.ts +6 -0
- package/dist/api/devices.js +10 -0
- package/dist/api/devices.js.map +1 -0
- package/dist/api/digital-files.d.ts +22 -0
- package/dist/api/digital-files.js +55 -0
- package/dist/api/digital-files.js.map +1 -0
- package/dist/api/discounts.d.ts +29 -0
- package/dist/api/discounts.js +46 -0
- package/dist/api/discounts.js.map +1 -0
- package/dist/api/disputes.d.ts +47 -0
- package/dist/api/disputes.js +42 -0
- package/dist/api/disputes.js.map +1 -0
- package/dist/api/feature-locked.d.ts +11 -0
- package/dist/api/feature-locked.js +18 -0
- package/dist/api/feature-locked.js.map +1 -0
- package/dist/api/feedback-prompts.d.ts +45 -0
- package/dist/api/feedback-prompts.js +85 -0
- package/dist/api/feedback-prompts.js.map +1 -0
- package/dist/api/feedback.d.ts +254 -0
- package/dist/api/feedback.js +108 -0
- package/dist/api/feedback.js.map +1 -0
- package/dist/api/finance.d.ts +199 -0
- package/dist/api/finance.js +203 -0
- package/dist/api/finance.js.map +1 -0
- package/dist/api/gallery.d.ts +30 -0
- package/dist/api/gallery.js +48 -0
- package/dist/api/gallery.js.map +1 -0
- package/dist/api/geo.d.ts +18 -0
- package/dist/api/geo.js +19 -0
- package/dist/api/geo.js.map +1 -0
- package/dist/api/giftcards.d.ts +63 -0
- package/dist/api/giftcards.js +63 -0
- package/dist/api/giftcards.js.map +1 -0
- package/dist/api/hardware-orders.d.ts +40 -0
- package/dist/api/hardware-orders.js +37 -0
- package/dist/api/hardware-orders.js.map +1 -0
- package/dist/api/index.d.ts +71 -0
- package/dist/api/index.js +78 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/inquiries.d.ts +92 -0
- package/dist/api/inquiries.js +129 -0
- package/dist/api/inquiries.js.map +1 -0
- package/dist/api/inventory.d.ts +133 -0
- package/dist/api/inventory.js +203 -0
- package/dist/api/inventory.js.map +1 -0
- package/dist/api/invite-body.d.ts +19 -0
- package/dist/api/invite-body.js +8 -0
- package/dist/api/invite-body.js.map +1 -0
- package/dist/api/invoices.d.ts +19 -0
- package/dist/api/invoices.js +80 -0
- package/dist/api/invoices.js.map +1 -0
- package/dist/api/locations.d.ts +15 -0
- package/dist/api/locations.js +30 -0
- package/dist/api/locations.js.map +1 -0
- package/dist/api/loyalty.d.ts +68 -0
- package/dist/api/loyalty.js +112 -0
- package/dist/api/loyalty.js.map +1 -0
- package/dist/api/marketing-consent.d.ts +36 -0
- package/dist/api/marketing-consent.js +11 -0
- package/dist/api/marketing-consent.js.map +1 -0
- package/dist/api/marketing-suppressions.d.ts +81 -0
- package/dist/api/marketing-suppressions.js +65 -0
- package/dist/api/marketing-suppressions.js.map +1 -0
- package/dist/api/members.d.ts +79 -0
- package/dist/api/members.js +148 -0
- package/dist/api/members.js.map +1 -0
- package/dist/api/merchant-notifications.d.ts +27 -0
- package/dist/api/merchant-notifications.js +41 -0
- package/dist/api/merchant-notifications.js.map +1 -0
- package/dist/api/merchant-referrals.d.ts +23 -0
- package/dist/api/merchant-referrals.js +10 -0
- package/dist/api/merchant-referrals.js.map +1 -0
- package/dist/api/merchant-subscriptions.d.ts +117 -0
- package/dist/api/merchant-subscriptions.js +113 -0
- package/dist/api/merchant-subscriptions.js.map +1 -0
- package/dist/api/misc.d.ts +4 -0
- package/dist/api/misc.js +24 -0
- package/dist/api/misc.js.map +1 -0
- package/dist/api/odoo.d.ts +102 -0
- package/dist/api/odoo.js +36 -0
- package/dist/api/odoo.js.map +1 -0
- package/dist/api/onboarding.d.ts +48 -0
- package/dist/api/onboarding.js +78 -0
- package/dist/api/onboarding.js.map +1 -0
- package/dist/api/orders.d.ts +153 -0
- package/dist/api/orders.js +303 -0
- package/dist/api/orders.js.map +1 -0
- package/dist/api/organizations.d.ts +14 -0
- package/dist/api/organizations.js +19 -0
- package/dist/api/organizations.js.map +1 -0
- package/dist/api/packages.d.ts +16 -0
- package/dist/api/packages.js +25 -0
- package/dist/api/packages.js.map +1 -0
- package/dist/api/pages.d.ts +79 -0
- package/dist/api/pages.js +125 -0
- package/dist/api/pages.js.map +1 -0
- package/dist/api/payables.d.ts +34 -0
- package/dist/api/payables.js +70 -0
- package/dist/api/payables.js.map +1 -0
- package/dist/api/plan-refusal.d.ts +21 -0
- package/dist/api/plan-refusal.js +28 -0
- package/dist/api/plan-refusal.js.map +1 -0
- package/dist/api/pos.d.ts +66 -0
- package/dist/api/pos.js +115 -0
- package/dist/api/pos.js.map +1 -0
- package/dist/api/potter.d.ts +114 -0
- package/dist/api/potter.js +88 -0
- package/dist/api/potter.js.map +1 -0
- package/dist/api/push.d.ts +25 -0
- package/dist/api/push.js +23 -0
- package/dist/api/push.js.map +1 -0
- package/dist/api/referrals.d.ts +10 -0
- package/dist/api/referrals.js +16 -0
- package/dist/api/referrals.js.map +1 -0
- package/dist/api/resource-categories.d.ts +35 -0
- package/dist/api/resource-categories.js +76 -0
- package/dist/api/resource-categories.js.map +1 -0
- package/dist/api/resources.d.ts +54 -0
- package/dist/api/resources.js +92 -0
- package/dist/api/resources.js.map +1 -0
- package/dist/api/reviews.d.ts +18 -0
- package/dist/api/reviews.js +46 -0
- package/dist/api/reviews.js.map +1 -0
- package/dist/api/riders.d.ts +70 -0
- package/dist/api/riders.js +24 -0
- package/dist/api/riders.js.map +1 -0
- package/dist/api/role-permissions.d.ts +25 -0
- package/dist/api/role-permissions.js +47 -0
- package/dist/api/role-permissions.js.map +1 -0
- package/dist/api/sales-channels.d.ts +234 -0
- package/dist/api/sales-channels.js +119 -0
- package/dist/api/sales-channels.js.map +1 -0
- package/dist/api/service-missing.d.ts +10 -0
- package/dist/api/service-missing.js +19 -0
- package/dist/api/service-missing.js.map +1 -0
- package/dist/api/session-refresh.d.ts +18 -0
- package/dist/api/session-refresh.js +37 -0
- package/dist/api/session-refresh.js.map +1 -0
- package/dist/api/session-scope.d.ts +35 -0
- package/dist/api/session-scope.js +53 -0
- package/dist/api/session-scope.js.map +1 -0
- package/dist/api/settlements.d.ts +106 -0
- package/dist/api/settlements.js +114 -0
- package/dist/api/settlements.js.map +1 -0
- package/dist/api/share-links.d.ts +46 -0
- package/dist/api/share-links.js +25 -0
- package/dist/api/share-links.js.map +1 -0
- package/dist/api/shift-notes.d.ts +19 -0
- package/dist/api/shift-notes.js +13 -0
- package/dist/api/shift-notes.js.map +1 -0
- package/dist/api/shipping.d.ts +42 -0
- package/dist/api/shipping.js +53 -0
- package/dist/api/shipping.js.map +1 -0
- package/dist/api/social-sources.d.ts +58 -0
- package/dist/api/social-sources.js +23 -0
- package/dist/api/social-sources.js.map +1 -0
- package/dist/api/tabs.d.ts +14 -0
- package/dist/api/tabs.js +39 -0
- package/dist/api/tabs.js.map +1 -0
- package/dist/api/team.d.ts +112 -0
- package/dist/api/team.js +144 -0
- package/dist/api/team.js.map +1 -0
- package/dist/api/template-settings.d.ts +26 -0
- package/dist/api/template-settings.js +36 -0
- package/dist/api/template-settings.js.map +1 -0
- package/dist/api/templates.d.ts +21 -0
- package/dist/api/templates.js +25 -0
- package/dist/api/templates.js.map +1 -0
- package/dist/api/tenant-slug.d.ts +13 -0
- package/dist/api/tenant-slug.js +18 -0
- package/dist/api/tenant-slug.js.map +1 -0
- package/dist/api/tenant.d.ts +33 -0
- package/dist/api/tenant.js +51 -0
- package/dist/api/tenant.js.map +1 -0
- package/dist/api/types/analytics-attribution.d.ts +43 -0
- package/dist/api/types/analytics-attribution.js +1 -0
- package/dist/api/types/analytics-attribution.js.map +1 -0
- package/dist/api/types/analytics.d.ts +465 -0
- package/dist/api/types/analytics.js +1 -0
- package/dist/api/types/analytics.js.map +1 -0
- package/dist/api/types/auth.d.ts +206 -0
- package/dist/api/types/auth.js +7 -0
- package/dist/api/types/auth.js.map +1 -0
- package/dist/api/types/automation-flow.d.ts +199 -0
- package/dist/api/types/automation-flow.js +1 -0
- package/dist/api/types/automation-flow.js.map +1 -0
- package/dist/api/types/bookings.d.ts +226 -0
- package/dist/api/types/bookings.js +1 -0
- package/dist/api/types/bookings.js.map +1 -0
- package/dist/api/types/campaigns.d.ts +262 -0
- package/dist/api/types/campaigns.js +1 -0
- package/dist/api/types/campaigns.js.map +1 -0
- package/dist/api/types/catalog.d.ts +273 -0
- package/dist/api/types/catalog.js +1 -0
- package/dist/api/types/catalog.js.map +1 -0
- package/dist/api/types/collections.d.ts +189 -0
- package/dist/api/types/collections.js +1 -0
- package/dist/api/types/collections.js.map +1 -0
- package/dist/api/types/crm.d.ts +264 -0
- package/dist/api/types/crm.js +1 -0
- package/dist/api/types/crm.js.map +1 -0
- package/dist/api/types/customers.d.ts +269 -0
- package/dist/api/types/customers.js +1 -0
- package/dist/api/types/customers.js.map +1 -0
- package/dist/api/types/devices.d.ts +390 -0
- package/dist/api/types/devices.js +1 -0
- package/dist/api/types/devices.js.map +1 -0
- package/dist/api/types/discounts.d.ts +237 -0
- package/dist/api/types/discounts.js +1 -0
- package/dist/api/types/discounts.js.map +1 -0
- package/dist/api/types/filters.d.ts +258 -0
- package/dist/api/types/filters.js +1 -0
- package/dist/api/types/filters.js.map +1 -0
- package/dist/api/types/index.d.ts +31 -0
- package/dist/api/types/index.js +25 -0
- package/dist/api/types/index.js.map +1 -0
- package/dist/api/types/inquiries.d.ts +266 -0
- package/dist/api/types/inquiries.js +1 -0
- package/dist/api/types/inquiries.js.map +1 -0
- package/dist/api/types/locations.d.ts +208 -0
- package/dist/api/types/locations.js +1 -0
- package/dist/api/types/locations.js.map +1 -0
- package/dist/api/types/onboarding.d.ts +311 -0
- package/dist/api/types/onboarding.js +1 -0
- package/dist/api/types/onboarding.js.map +1 -0
- package/dist/api/types/operations.d.ts +136 -0
- package/dist/api/types/operations.js +1 -0
- package/dist/api/types/operations.js.map +1 -0
- package/dist/api/types/orders.d.ts +242 -0
- package/dist/api/types/orders.js +1 -0
- package/dist/api/types/orders.js.map +1 -0
- package/dist/api/types/payables.d.ts +140 -0
- package/dist/api/types/payables.js +1 -0
- package/dist/api/types/payables.js.map +1 -0
- package/dist/api/types/pos.d.ts +121 -0
- package/dist/api/types/pos.js +5 -0
- package/dist/api/types/pos.js.map +1 -0
- package/dist/api/types/record-analytics.d.ts +95 -0
- package/dist/api/types/record-analytics.js +1 -0
- package/dist/api/types/record-analytics.js.map +1 -0
- package/dist/api/types/sales-patterns.d.ts +58 -0
- package/dist/api/types/sales-patterns.js +1 -0
- package/dist/api/types/sales-patterns.js.map +1 -0
- package/dist/api/types/tabs.d.ts +210 -0
- package/dist/api/types/tabs.js +1 -0
- package/dist/api/types/tabs.js.map +1 -0
- package/dist/api/types/templates.d.ts +398 -0
- package/dist/api/types/templates.js +1 -0
- package/dist/api/types/templates.js.map +1 -0
- package/dist/api/types/waitlist.d.ts +324 -0
- package/dist/api/types/waitlist.js +1 -0
- package/dist/api/types/waitlist.js.map +1 -0
- package/dist/api/types.d.ts +1 -0
- package/dist/api/types.js +1 -0
- package/dist/api/unserved-routes.d.ts +4 -0
- package/dist/api/unserved-routes.js +15 -0
- package/dist/api/unserved-routes.js.map +1 -0
- package/dist/api/waitlist.d.ts +80 -0
- package/dist/api/waitlist.js +85 -0
- package/dist/api/waitlist.js.map +1 -0
- package/dist/api.d.ts +1 -0
- package/dist/api.js +1 -0
- package/dist/app-name.d.ts +29 -0
- package/dist/app-name.js +11 -0
- package/dist/app-name.js.map +1 -0
- package/dist/arrival.d.ts +48 -0
- package/dist/arrival.js +34 -0
- package/dist/arrival.js.map +1 -0
- package/dist/auth-context.d.ts +90 -0
- package/dist/auth-context.js +732 -0
- package/dist/auth-context.js.map +1 -0
- package/dist/auth-session.d.ts +1 -0
- package/dist/auth-session.js +25 -0
- package/dist/auth-session.js.map +1 -0
- package/dist/bank-phone.d.ts +2 -0
- package/dist/bank-phone.js +12 -0
- package/dist/bank-phone.js.map +1 -0
- package/dist/behavior-config-types.d.ts +49 -0
- package/dist/behavior-config-types.js +1 -0
- package/dist/behavior-config-types.js.map +1 -0
- package/dist/behavior-context.d.ts +15 -0
- package/dist/behavior-context.js +38 -0
- package/dist/behavior-context.js.map +1 -0
- package/dist/behavior-fields.d.ts +41 -0
- package/dist/behavior-fields.js +20 -0
- package/dist/behavior-fields.js.map +1 -0
- package/dist/blog/__fixtures__/paste-hygiene.d.ts +7 -0
- package/dist/blog/__fixtures__/paste-hygiene.js +36 -0
- package/dist/blog/__fixtures__/paste-hygiene.js.map +1 -0
- package/dist/blog/density.d.ts +65 -0
- package/dist/blog/density.js +126 -0
- package/dist/blog/density.js.map +1 -0
- package/dist/blog/paste-hygiene.d.ts +3 -0
- package/dist/blog/paste-hygiene.js +168 -0
- package/dist/blog/paste-hygiene.js.map +1 -0
- package/dist/booking-location-label.d.ts +10 -0
- package/dist/booking-location-label.js +24 -0
- package/dist/booking-location-label.js.map +1 -0
- package/dist/booking-meeting-link.d.ts +48 -0
- package/dist/booking-meeting-link.js +40 -0
- package/dist/booking-meeting-link.js.map +1 -0
- package/dist/box-channels.d.ts +22 -0
- package/dist/box-channels.js +16 -0
- package/dist/box-channels.js.map +1 -0
- package/dist/box-delivery.d.ts +10 -0
- package/dist/box-delivery.js +5 -0
- package/dist/box-delivery.js.map +1 -0
- package/dist/box-inbox.d.ts +11 -0
- package/dist/box-inbox.js +5 -0
- package/dist/box-inbox.js.map +1 -0
- package/dist/box-letting.d.ts +14 -0
- package/dist/box-letting.js +7 -0
- package/dist/box-letting.js.map +1 -0
- package/dist/box-mark-paths.d.ts +28 -0
- package/dist/box-mark-paths.js +23 -0
- package/dist/box-mark-paths.js.map +1 -0
- package/dist/box-media.d.ts +9 -0
- package/dist/box-media.js +5 -0
- package/dist/box-media.js.map +1 -0
- package/dist/box-products.d.ts +16 -0
- package/dist/box-products.js +9 -0
- package/dist/box-products.js.map +1 -0
- package/dist/box-splits.d.ts +12 -0
- package/dist/box-splits.js +5 -0
- package/dist/box-splits.js.map +1 -0
- package/dist/brand.d.ts +26 -0
- package/dist/brand.js +22 -0
- package/dist/brand.js.map +1 -0
- package/dist/business-categories.d.ts +50 -0
- package/dist/business-categories.js +378 -0
- package/dist/business-categories.js.map +1 -0
- package/dist/business-intents.d.ts +31 -0
- package/dist/business-intents.js +142 -0
- package/dist/business-intents.js.map +1 -0
- package/dist/capability-context.d.ts +63 -0
- package/dist/capability-context.js +84 -0
- package/dist/capability-context.js.map +1 -0
- package/dist/carriers.d.ts +83 -0
- package/dist/carriers.js +124 -0
- package/dist/carriers.js.map +1 -0
- package/dist/commerce-build/api.d.ts +29 -0
- package/dist/commerce-build/api.js +152 -0
- package/dist/commerce-build/api.js.map +1 -0
- package/dist/commerce-build/contracts-profile.d.ts +83 -0
- package/dist/commerce-build/contracts-profile.js +1 -0
- package/dist/commerce-build/contracts-profile.js.map +1 -0
- package/dist/commerce-build/contracts-spec.d.ts +217 -0
- package/dist/commerce-build/contracts-spec.js +1 -0
- package/dist/commerce-build/contracts-spec.js.map +1 -0
- package/dist/commerce-build/contracts.d.ts +2 -0
- package/dist/commerce-build/contracts.js +1 -0
- package/dist/commerce-build/contracts.js.map +1 -0
- package/dist/commerce-build/launch-state.d.ts +20 -0
- package/dist/commerce-build/launch-state.js +72 -0
- package/dist/commerce-build/launch-state.js.map +1 -0
- package/dist/commerce-build/profile-utils.d.ts +5 -0
- package/dist/commerce-build/profile-utils.js +14 -0
- package/dist/commerce-build/profile-utils.js.map +1 -0
- package/dist/commerce-build/setup-flow.d.ts +10 -0
- package/dist/commerce-build/setup-flow.js +24 -0
- package/dist/commerce-build/setup-flow.js.map +1 -0
- package/dist/commerce-build/setup-session.d.ts +26 -0
- package/dist/commerce-build/setup-session.js +70 -0
- package/dist/commerce-build/setup-session.js.map +1 -0
- package/dist/commerce-build/turn-streaming.d.ts +21 -0
- package/dist/commerce-build/turn-streaming.js +113 -0
- package/dist/commerce-build/turn-streaming.js.map +1 -0
- package/dist/commerce-build/workspace-components.d.ts +23 -0
- package/dist/commerce-build/workspace-components.js +66 -0
- package/dist/commerce-build/workspace-components.js.map +1 -0
- package/dist/commerce-build/workspace-config.d.ts +7 -0
- package/dist/commerce-build/workspace-config.js +74 -0
- package/dist/commerce-build/workspace-config.js.map +1 -0
- package/dist/companion/config.d.ts +31 -0
- package/dist/companion/config.js +59 -0
- package/dist/companion/config.js.map +1 -0
- package/dist/connect/catalog.d.ts +32 -0
- package/dist/connect/catalog.js +268 -0
- package/dist/connect/catalog.js.map +1 -0
- package/dist/connect/fixtures/commands.d.ts +8 -0
- package/dist/connect/fixtures/commands.js +146 -0
- package/dist/connect/fixtures/commands.js.map +1 -0
- package/dist/connect/fixtures/connections.d.ts +21 -0
- package/dist/connect/fixtures/connections.js +370 -0
- package/dist/connect/fixtures/connections.js.map +1 -0
- package/dist/connect/fixtures/identities.d.ts +10 -0
- package/dist/connect/fixtures/identities.js +61 -0
- package/dist/connect/fixtures/identities.js.map +1 -0
- package/dist/connect/fixtures/index.d.ts +11 -0
- package/dist/connect/fixtures/index.js +11 -0
- package/dist/connect/fixtures/index.js.map +1 -0
- package/dist/connect/fixtures/usage.d.ts +2 -0
- package/dist/connect/fixtures/usage.js +21 -0
- package/dist/connect/fixtures/usage.js.map +1 -0
- package/dist/connect/fixtures.d.ts +1 -0
- package/dist/connect/fixtures.js +1 -0
- package/dist/connect/from-notifications.d.ts +3 -0
- package/dist/connect/from-notifications.js +78 -0
- package/dist/connect/from-notifications.js.map +1 -0
- package/dist/connect/identity.d.ts +67 -0
- package/dist/connect/identity.js +24 -0
- package/dist/connect/identity.js.map +1 -0
- package/dist/connect/index.d.ts +13 -0
- package/dist/connect/index.js +22 -0
- package/dist/connect/index.js.map +1 -0
- package/dist/connect/next-up.d.ts +18 -0
- package/dist/connect/next-up.js +45 -0
- package/dist/connect/next-up.js.map +1 -0
- package/dist/connect/types.d.ts +354 -0
- package/dist/connect/types.js +68 -0
- package/dist/connect/types.js.map +1 -0
- package/dist/connect/use-connect.d.ts +51 -0
- package/dist/connect/use-connect.js +85 -0
- package/dist/connect/use-connect.js.map +1 -0
- package/dist/connect.d.ts +1 -0
- package/dist/connect.js +1 -0
- package/dist/converted-tag.d.ts +7 -0
- package/dist/converted-tag.js +9 -0
- package/dist/converted-tag.js.map +1 -0
- package/dist/countries.d.ts +65 -0
- package/dist/countries.js +374 -0
- package/dist/countries.js.map +1 -0
- package/dist/country-regions.d.ts +12 -0
- package/dist/country-regions.js +36 -0
- package/dist/country-regions.js.map +1 -0
- package/dist/csv.d.ts +28 -0
- package/dist/csv.js +91 -0
- package/dist/csv.js.map +1 -0
- package/dist/currency.d.ts +5 -0
- package/dist/currency.js +25 -0
- package/dist/currency.js.map +1 -0
- package/dist/customer-helpers.d.ts +30 -0
- package/dist/customer-helpers.js +66 -0
- package/dist/customer-helpers.js.map +1 -0
- package/dist/customer-stage.d.ts +125 -0
- package/dist/customer-stage.js +113 -0
- package/dist/customer-stage.js.map +1 -0
- package/dist/dashboard-destinations.d.ts +5 -0
- package/dist/dashboard-destinations.js +29 -0
- package/dist/dashboard-destinations.js.map +1 -0
- package/dist/demo-content-mock.d.ts +22 -0
- package/dist/demo-content-mock.js +70 -0
- package/dist/demo-content-mock.js.map +1 -0
- package/dist/demo-content-poller.d.ts +33 -0
- package/dist/demo-content-poller.js +80 -0
- package/dist/demo-content-poller.js.map +1 -0
- package/dist/demo-content.d.ts +43 -0
- package/dist/demo-content.js +78 -0
- package/dist/demo-content.js.map +1 -0
- package/dist/describe-activity.d.ts +44 -0
- package/dist/describe-activity.js +16 -0
- package/dist/describe-activity.js.map +1 -0
- package/dist/describe-invite.d.ts +19 -0
- package/dist/describe-invite.js +46 -0
- package/dist/describe-invite.js.map +1 -0
- package/dist/design-schema.d.ts +76 -0
- package/dist/design-schema.js +47 -0
- package/dist/design-schema.js.map +1 -0
- package/dist/destination-alias.d.ts +43 -0
- package/dist/destination-alias.js +146 -0
- package/dist/destination-alias.js.map +1 -0
- package/dist/document-numbering.d.ts +40 -0
- package/dist/document-numbering.js +48 -0
- package/dist/document-numbering.js.map +1 -0
- package/dist/document-title.d.ts +22 -0
- package/dist/document-title.js +85 -0
- package/dist/document-title.js.map +1 -0
- package/dist/editor/row-ops.d.ts +39 -0
- package/dist/editor/row-ops.js +25 -0
- package/dist/editor/row-ops.js.map +1 -0
- package/dist/editor-agent/apply-proposal.d.ts +12 -0
- package/dist/editor-agent/apply-proposal.js +44 -0
- package/dist/editor-agent/apply-proposal.js.map +1 -0
- package/dist/editor-agent/contracts.d.ts +174 -0
- package/dist/editor-agent/contracts.js +1 -0
- package/dist/editor-agent/contracts.js.map +1 -0
- package/dist/editor-agent/converse.d.ts +34 -0
- package/dist/editor-agent/converse.js +141 -0
- package/dist/editor-agent/converse.js.map +1 -0
- package/dist/editor-agent/flag.d.ts +12 -0
- package/dist/editor-agent/flag.js +19 -0
- package/dist/editor-agent/flag.js.map +1 -0
- package/dist/editor-agent/template-document.d.ts +52 -0
- package/dist/editor-agent/template-document.js +50 -0
- package/dist/editor-agent/template-document.js.map +1 -0
- package/dist/editor-agent/use-converse.d.ts +30 -0
- package/dist/editor-agent/use-converse.js +130 -0
- package/dist/editor-agent/use-converse.js.map +1 -0
- package/dist/effective-module-labels.d.ts +17 -0
- package/dist/effective-module-labels.js +14 -0
- package/dist/effective-module-labels.js.map +1 -0
- package/dist/embedded-frame.d.ts +30 -0
- package/dist/embedded-frame.js +23 -0
- package/dist/embedded-frame.js.map +1 -0
- package/dist/empty-state-copy.d.ts +27 -0
- package/dist/empty-state-copy.js +167 -0
- package/dist/empty-state-copy.js.map +1 -0
- package/dist/end-session.d.ts +23 -0
- package/dist/end-session.js +30 -0
- package/dist/end-session.js.map +1 -0
- package/dist/file-intake.d.ts +65 -0
- package/dist/file-intake.js +162 -0
- package/dist/file-intake.js.map +1 -0
- package/dist/first-run.d.ts +5 -0
- package/dist/first-run.js +13 -0
- package/dist/first-run.js.map +1 -0
- package/dist/form-answers.d.ts +57 -0
- package/dist/form-answers.js +79 -0
- package/dist/form-answers.js.map +1 -0
- package/dist/form-draft.d.ts +30 -0
- package/dist/form-draft.js +73 -0
- package/dist/form-draft.js.map +1 -0
- package/dist/format.d.ts +29 -0
- package/dist/format.js +21 -0
- package/dist/format.js.map +1 -0
- package/dist/fulfilment-nav.d.ts +79 -0
- package/dist/fulfilment-nav.js +18 -0
- package/dist/fulfilment-nav.js.map +1 -0
- package/dist/go-live-gate.d.ts +55 -0
- package/dist/go-live-gate.js +17 -0
- package/dist/go-live-gate.js.map +1 -0
- package/dist/group-activity.d.ts +37 -0
- package/dist/group-activity.js +43 -0
- package/dist/group-activity.js.map +1 -0
- package/dist/haptic.d.ts +5 -0
- package/dist/haptic.js +16 -0
- package/dist/haptic.js.map +1 -0
- package/dist/help-topics.d.ts +77 -0
- package/dist/help-topics.js +308 -0
- package/dist/help-topics.js.map +1 -0
- package/dist/icon-resolver.d.ts +45 -0
- package/dist/icon-resolver.js +40 -0
- package/dist/icon-resolver.js.map +1 -0
- package/dist/icons/commerce.d.ts +9 -0
- package/dist/icons/commerce.js +168 -0
- package/dist/icons/commerce.js.map +1 -0
- package/dist/icons/core.d.ts +9 -0
- package/dist/icons/core.js +173 -0
- package/dist/icons/core.js.map +1 -0
- package/dist/icons/making.d.ts +9 -0
- package/dist/icons/making.js +209 -0
- package/dist/icons/making.js.map +1 -0
- package/dist/icons/places.d.ts +9 -0
- package/dist/icons/places.js +232 -0
- package/dist/icons/places.js.map +1 -0
- package/dist/icons/world.d.ts +9 -0
- package/dist/icons/world.js +87 -0
- package/dist/icons/world.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/industry-configs/beauty.d.ts +2 -0
- package/dist/industry-configs/beauty.js +152 -0
- package/dist/industry-configs/beauty.js.map +1 -0
- package/dist/industry-configs/creative.d.ts +2 -0
- package/dist/industry-configs/creative.js +131 -0
- package/dist/industry-configs/creative.js.map +1 -0
- package/dist/industry-configs/default.d.ts +2 -0
- package/dist/industry-configs/default.js +77 -0
- package/dist/industry-configs/default.js.map +1 -0
- package/dist/industry-configs/education.d.ts +2 -0
- package/dist/industry-configs/education.js +137 -0
- package/dist/industry-configs/education.js.map +1 -0
- package/dist/industry-configs/events.d.ts +2 -0
- package/dist/industry-configs/events.js +118 -0
- package/dist/industry-configs/events.js.map +1 -0
- package/dist/industry-configs/fashion.d.ts +2 -0
- package/dist/industry-configs/fashion.js +128 -0
- package/dist/industry-configs/fashion.js.map +1 -0
- package/dist/industry-configs/fitness.d.ts +2 -0
- package/dist/industry-configs/fitness.js +128 -0
- package/dist/industry-configs/fitness.js.map +1 -0
- package/dist/industry-configs/food.d.ts +2 -0
- package/dist/industry-configs/food.js +138 -0
- package/dist/industry-configs/food.js.map +1 -0
- package/dist/industry-configs/hospitality.d.ts +2 -0
- package/dist/industry-configs/hospitality.js +157 -0
- package/dist/industry-configs/hospitality.js.map +1 -0
- package/dist/industry-configs/index.d.ts +25 -0
- package/dist/industry-configs/index.js +77 -0
- package/dist/industry-configs/index.js.map +1 -0
- package/dist/industry-configs/professional.d.ts +2 -0
- package/dist/industry-configs/professional.js +129 -0
- package/dist/industry-configs/professional.js.map +1 -0
- package/dist/industry-configs/realestate.d.ts +2 -0
- package/dist/industry-configs/realestate.js +146 -0
- package/dist/industry-configs/realestate.js.map +1 -0
- package/dist/industry-configs/retail.d.ts +2 -0
- package/dist/industry-configs/retail.js +108 -0
- package/dist/industry-configs/retail.js.map +1 -0
- package/dist/industry-configs/services.d.ts +2 -0
- package/dist/industry-configs/services.js +120 -0
- package/dist/industry-configs/services.js.map +1 -0
- package/dist/industry-configs/technology.d.ts +2 -0
- package/dist/industry-configs/technology.js +120 -0
- package/dist/industry-configs/technology.js.map +1 -0
- package/dist/industry-configs/types.d.ts +99 -0
- package/dist/industry-configs/types.js +1 -0
- package/dist/industry-configs/types.js.map +1 -0
- package/dist/industry-configs/wellness.d.ts +2 -0
- package/dist/industry-configs/wellness.js +112 -0
- package/dist/industry-configs/wellness.js.map +1 -0
- package/dist/industry-configs.d.ts +1 -0
- package/dist/industry-configs.js +1 -0
- package/dist/intents/analytics-labels.d.ts +70 -0
- package/dist/intents/analytics-labels.js +39 -0
- package/dist/intents/analytics-labels.js.map +1 -0
- package/dist/intents/archetype-flow.d.ts +146 -0
- package/dist/intents/archetype-flow.js +185 -0
- package/dist/intents/archetype-flow.js.map +1 -0
- package/dist/intents/booking-query-style.d.ts +32 -0
- package/dist/intents/booking-query-style.js +22 -0
- package/dist/intents/booking-query-style.js.map +1 -0
- package/dist/intents/capture-leads.config.d.ts +31 -0
- package/dist/intents/capture-leads.config.js +231 -0
- package/dist/intents/capture-leads.config.js.map +1 -0
- package/dist/intents/catalog-stock.d.ts +43 -0
- package/dist/intents/catalog-stock.js +43 -0
- package/dist/intents/catalog-stock.js.map +1 -0
- package/dist/intents/collapse-shared-nav.d.ts +95 -0
- package/dist/intents/collapse-shared-nav.js +171 -0
- package/dist/intents/collapse-shared-nav.js.map +1 -0
- package/dist/intents/default-commerce.config.d.ts +6 -0
- package/dist/intents/default-commerce.config.js +281 -0
- package/dist/intents/default-commerce.config.js.map +1 -0
- package/dist/intents/digital-products.config.d.ts +2 -0
- package/dist/intents/digital-products.config.js +239 -0
- package/dist/intents/digital-products.config.js.map +1 -0
- package/dist/intents/dine-in.config.d.ts +15 -0
- package/dist/intents/dine-in.config.js +331 -0
- package/dist/intents/dine-in.config.js.map +1 -0
- package/dist/intents/event-tickets.config.d.ts +2 -0
- package/dist/intents/event-tickets.config.js +368 -0
- package/dist/intents/event-tickets.config.js.map +1 -0
- package/dist/intents/food-orders.config.d.ts +2 -0
- package/dist/intents/food-orders.config.js +299 -0
- package/dist/intents/food-orders.config.js.map +1 -0
- package/dist/intents/icon-map.d.ts +15 -0
- package/dist/intents/icon-map.js +104 -0
- package/dist/intents/icon-map.js.map +1 -0
- package/dist/intents/index.d.ts +12 -0
- package/dist/intents/index.js +50 -0
- package/dist/intents/index.js.map +1 -0
- package/dist/intents/infer-intents.d.ts +10 -0
- package/dist/intents/infer-intents.js +23 -0
- package/dist/intents/infer-intents.js.map +1 -0
- package/dist/intents/intent-chips.d.ts +47 -0
- package/dist/intents/intent-chips.js +38 -0
- package/dist/intents/intent-chips.js.map +1 -0
- package/dist/intents/intent-nav.d.ts +95 -0
- package/dist/intents/intent-nav.js +423 -0
- package/dist/intents/intent-nav.js.map +1 -0
- package/dist/intents/intent-scope.d.ts +52 -0
- package/dist/intents/intent-scope.js +19 -0
- package/dist/intents/intent-scope.js.map +1 -0
- package/dist/intents/nav-coverage.d.ts +71 -0
- package/dist/intents/nav-coverage.js +132 -0
- package/dist/intents/nav-coverage.js.map +1 -0
- package/dist/intents/operating-shell.d.ts +45 -0
- package/dist/intents/operating-shell.js +142 -0
- package/dist/intents/operating-shell.js.map +1 -0
- package/dist/intents/order-display.d.ts +21 -0
- package/dist/intents/order-display.js +110 -0
- package/dist/intents/order-display.js.map +1 -0
- package/dist/intents/order-intent.d.ts +18 -0
- package/dist/intents/order-intent.js +14 -0
- package/dist/intents/order-intent.js.map +1 -0
- package/dist/intents/order-progress.d.ts +81 -0
- package/dist/intents/order-progress.js +91 -0
- package/dist/intents/order-progress.js.map +1 -0
- package/dist/intents/order-sections.d.ts +173 -0
- package/dist/intents/order-sections.js +188 -0
- package/dist/intents/order-sections.js.map +1 -0
- package/dist/intents/order-stats.d.ts +24 -0
- package/dist/intents/order-stats.js +16 -0
- package/dist/intents/order-stats.js.map +1 -0
- package/dist/intents/order-transitions.d.ts +19 -0
- package/dist/intents/order-transitions.js +66 -0
- package/dist/intents/order-transitions.js.map +1 -0
- package/dist/intents/product-editor-config.d.ts +23 -0
- package/dist/intents/product-editor-config.js +13 -0
- package/dist/intents/product-editor-config.js.map +1 -0
- package/dist/intents/product-intent.d.ts +38 -0
- package/dist/intents/product-intent.js +19 -0
- package/dist/intents/product-intent.js.map +1 -0
- package/dist/intents/registry.d.ts +32 -0
- package/dist/intents/registry.js +41 -0
- package/dist/intents/registry.js.map +1 -0
- package/dist/intents/rent-property.config.d.ts +2 -0
- package/dist/intents/rent-property.config.js +284 -0
- package/dist/intents/rent-property.config.js.map +1 -0
- package/dist/intents/resolve-stats.d.ts +7 -0
- package/dist/intents/resolve-stats.js +29 -0
- package/dist/intents/resolve-stats.js.map +1 -0
- package/dist/intents/resolve-tenant-intents.d.ts +11 -0
- package/dist/intents/resolve-tenant-intents.js +61 -0
- package/dist/intents/resolve-tenant-intents.js.map +1 -0
- package/dist/intents/resolvers.d.ts +52 -0
- package/dist/intents/resolvers.js +177 -0
- package/dist/intents/resolvers.js.map +1 -0
- package/dist/intents/row-identity.d.ts +62 -0
- package/dist/intents/row-identity.js +25 -0
- package/dist/intents/row-identity.js.map +1 -0
- package/dist/intents/sales-verb.d.ts +8 -0
- package/dist/intents/sales-verb.js +12 -0
- package/dist/intents/sales-verb.js.map +1 -0
- package/dist/intents/scoped-config.d.ts +12 -0
- package/dist/intents/scoped-config.js +17 -0
- package/dist/intents/scoped-config.js.map +1 -0
- package/dist/intents/screen-title.d.ts +27 -0
- package/dist/intents/screen-title.js +59 -0
- package/dist/intents/screen-title.js.map +1 -0
- package/dist/intents/section-registry.d.ts +48 -0
- package/dist/intents/section-registry.js +33 -0
- package/dist/intents/section-registry.js.map +1 -0
- package/dist/intents/sell-products.config.d.ts +2 -0
- package/dist/intents/sell-products.config.js +275 -0
- package/dist/intents/sell-products.config.js.map +1 -0
- package/dist/intents/send-invoices.config.d.ts +16 -0
- package/dist/intents/send-invoices.config.js +223 -0
- package/dist/intents/send-invoices.config.js.map +1 -0
- package/dist/intents/subscriptions.config.d.ts +2 -0
- package/dist/intents/subscriptions.config.js +260 -0
- package/dist/intents/subscriptions.config.js.map +1 -0
- package/dist/intents/take-bookings.config.d.ts +2 -0
- package/dist/intents/take-bookings.config.js +298 -0
- package/dist/intents/take-bookings.config.js.map +1 -0
- package/dist/intents/types.d.ts +246 -0
- package/dist/intents/types.js +1 -0
- package/dist/intents/types.js.map +1 -0
- package/dist/intents/use-active-intent.d.ts +27 -0
- package/dist/intents/use-active-intent.js +74 -0
- package/dist/intents/use-active-intent.js.map +1 -0
- package/dist/intents/use-destination-label.d.ts +18 -0
- package/dist/intents/use-destination-label.js +45 -0
- package/dist/intents/use-destination-label.js.map +1 -0
- package/dist/intents/use-entity-label.d.ts +32 -0
- package/dist/intents/use-entity-label.js +75 -0
- package/dist/intents/use-entity-label.js.map +1 -0
- package/dist/intents/use-intent-config.d.ts +20 -0
- package/dist/intents/use-intent-config.js +91 -0
- package/dist/intents/use-intent-config.js.map +1 -0
- package/dist/intents/use-intent-nav-rows.d.ts +26 -0
- package/dist/intents/use-intent-nav-rows.js +49 -0
- package/dist/intents/use-intent-nav-rows.js.map +1 -0
- package/dist/intents/use-resource-label.d.ts +10 -0
- package/dist/intents/use-resource-label.js +9 -0
- package/dist/intents/use-resource-label.js.map +1 -0
- package/dist/intents/use-row-noun.d.ts +19 -0
- package/dist/intents/use-row-noun.js +13 -0
- package/dist/intents/use-row-noun.js.map +1 -0
- package/dist/intents/use-screen-title.d.ts +9 -0
- package/dist/intents/use-screen-title.js +25 -0
- package/dist/intents/use-screen-title.js.map +1 -0
- package/dist/intents/what-it-adds.d.ts +70 -0
- package/dist/intents/what-it-adds.js +29 -0
- package/dist/intents/what-it-adds.js.map +1 -0
- package/dist/intents/workflow-shape.d.ts +66 -0
- package/dist/intents/workflow-shape.js +151 -0
- package/dist/intents/workflow-shape.js.map +1 -0
- package/dist/intents.d.ts +1 -0
- package/dist/intents.js +1 -0
- package/dist/invite-refusal.d.ts +37 -0
- package/dist/invite-refusal.js +26 -0
- package/dist/invite-refusal.js.map +1 -0
- package/dist/invoice-brand.d.ts +28 -0
- package/dist/invoice-brand.js +33 -0
- package/dist/invoice-brand.js.map +1 -0
- package/dist/ios-navigation-context.d.ts +11 -0
- package/dist/ios-navigation-context.js +52 -0
- package/dist/ios-navigation-context.js.map +1 -0
- package/dist/legal-links.d.ts +10 -0
- package/dist/legal-links.js +7 -0
- package/dist/legal-links.js.map +1 -0
- package/dist/letting-policy.d.ts +85 -0
- package/dist/letting-policy.js +47 -0
- package/dist/letting-policy.js.map +1 -0
- package/dist/list-page-size.d.ts +24 -0
- package/dist/list-page-size.js +5 -0
- package/dist/list-page-size.js.map +1 -0
- package/dist/live-events/sse-frames.d.ts +15 -0
- package/dist/live-events/sse-frames.js +37 -0
- package/dist/live-events/sse-frames.js.map +1 -0
- package/dist/location-options.d.ts +16 -0
- package/dist/location-options.js +94 -0
- package/dist/location-options.js.map +1 -0
- package/dist/location-scope-context.d.ts +47 -0
- package/dist/location-scope-context.js +85 -0
- package/dist/location-scope-context.js.map +1 -0
- package/dist/media-service.d.ts +97 -0
- package/dist/media-service.js +282 -0
- package/dist/media-service.js.map +1 -0
- package/dist/media-utils.d.ts +51 -0
- package/dist/media-utils.js +85 -0
- package/dist/media-utils.js.map +1 -0
- package/dist/member-presence.d.ts +40 -0
- package/dist/member-presence.js +77 -0
- package/dist/member-presence.js.map +1 -0
- package/dist/member-subscription-enrollment.d.ts +16 -0
- package/dist/member-subscription-enrollment.js +32 -0
- package/dist/member-subscription-enrollment.js.map +1 -0
- package/dist/membership-freshness.d.ts +31 -0
- package/dist/membership-freshness.js +21 -0
- package/dist/membership-freshness.js.map +1 -0
- package/dist/mobile-header-context.d.ts +32 -0
- package/dist/mobile-header-context.js +59 -0
- package/dist/mobile-header-context.js.map +1 -0
- package/dist/mobile-routes.d.ts +81 -0
- package/dist/mobile-routes.js +406 -0
- package/dist/mobile-routes.js.map +1 -0
- package/dist/mobile-tab-config.d.ts +18 -0
- package/dist/mobile-tab-config.js +43 -0
- package/dist/mobile-tab-config.js.map +1 -0
- package/dist/money-coming-soon.d.ts +16 -0
- package/dist/money-coming-soon.js +22 -0
- package/dist/money-coming-soon.js.map +1 -0
- package/dist/money-minor.d.ts +17 -0
- package/dist/money-minor.js +53 -0
- package/dist/money-minor.js.map +1 -0
- package/dist/money-visibility.d.ts +38 -0
- package/dist/money-visibility.js +13 -0
- package/dist/money-visibility.js.map +1 -0
- package/dist/motion.d.ts +160 -0
- package/dist/motion.js +130 -0
- package/dist/motion.js.map +1 -0
- package/dist/nav-pending.d.ts +42 -0
- package/dist/nav-pending.js +84 -0
- package/dist/nav-pending.js.map +1 -0
- package/dist/navigation-groups.d.ts +52 -0
- package/dist/navigation-groups.js +64 -0
- package/dist/navigation-groups.js.map +1 -0
- package/dist/onboarding-draft.d.ts +23 -0
- package/dist/onboarding-draft.js +35 -0
- package/dist/onboarding-draft.js.map +1 -0
- package/dist/operating-model/index.d.ts +4 -0
- package/dist/operating-model/index.js +13 -0
- package/dist/operating-model/index.js.map +1 -0
- package/dist/operating-model/order-display.d.ts +10 -0
- package/dist/operating-model/order-display.js +24 -0
- package/dist/operating-model/order-display.js.map +1 -0
- package/dist/operating-model/resolver.d.ts +9 -0
- package/dist/operating-model/resolver.js +110 -0
- package/dist/operating-model/resolver.js.map +1 -0
- package/dist/operating-model/types.d.ts +36 -0
- package/dist/operating-model/types.js +1 -0
- package/dist/operating-model/types.js.map +1 -0
- package/dist/operating-model/use-operating-model.d.ts +7 -0
- package/dist/operating-model/use-operating-model.js +65 -0
- package/dist/operating-model/use-operating-model.js.map +1 -0
- package/dist/operating-model.d.ts +1 -0
- package/dist/operating-model.js +1 -0
- package/dist/order-config.d.ts +30 -0
- package/dist/order-config.js +56 -0
- package/dist/order-config.js.map +1 -0
- package/dist/order-discounts.d.ts +25 -0
- package/dist/order-discounts.js +27 -0
- package/dist/order-discounts.js.map +1 -0
- package/dist/order-shipping.d.ts +33 -0
- package/dist/order-shipping.js +49 -0
- package/dist/order-shipping.js.map +1 -0
- package/dist/order-tax.d.ts +28 -0
- package/dist/order-tax.js +21 -0
- package/dist/order-tax.js.map +1 -0
- package/dist/page-intros.d.ts +78 -0
- package/dist/page-intros.js +164 -0
- package/dist/page-intros.js.map +1 -0
- package/dist/page-transition.d.ts +20 -0
- package/dist/page-transition.js +19 -0
- package/dist/page-transition.js.map +1 -0
- package/dist/pages-api-response.d.ts +8 -0
- package/dist/pages-api-response.js +18 -0
- package/dist/pages-api-response.js.map +1 -0
- package/dist/payment-method-label.d.ts +6 -0
- package/dist/payment-method-label.js +14 -0
- package/dist/payment-method-label.js.map +1 -0
- package/dist/permission-aliases.d.ts +18 -0
- package/dist/permission-aliases.js +20 -0
- package/dist/permission-aliases.js.map +1 -0
- package/dist/permission-catalog-fallback.d.ts +17 -0
- package/dist/permission-catalog-fallback.js +147 -0
- package/dist/permission-catalog-fallback.js.map +1 -0
- package/dist/permission-change.d.ts +42 -0
- package/dist/permission-change.js +33 -0
- package/dist/permission-change.js.map +1 -0
- package/dist/phone.d.ts +16 -0
- package/dist/phone.js +20 -0
- package/dist/phone.js.map +1 -0
- package/dist/plan-access.d.ts +39 -0
- package/dist/plan-access.js +57 -0
- package/dist/plan-access.js.map +1 -0
- package/dist/plan-card-api.d.ts +34 -0
- package/dist/plan-card-api.js +30 -0
- package/dist/plan-card-api.js.map +1 -0
- package/dist/plan-price.d.ts +34 -0
- package/dist/plan-price.js +57 -0
- package/dist/plan-price.js.map +1 -0
- package/dist/post-login-target.d.ts +24 -0
- package/dist/post-login-target.js +12 -0
- package/dist/post-login-target.js.map +1 -0
- package/dist/potter-mark-paths.d.ts +21 -0
- package/dist/potter-mark-paths.js +9 -0
- package/dist/potter-mark-paths.js.map +1 -0
- package/dist/pricing-plans-types.d.ts +143 -0
- package/dist/pricing-plans-types.js +1 -0
- package/dist/pricing-plans-types.js.map +1 -0
- package/dist/product-assignees.d.ts +1 -0
- package/dist/product-assignees.js +18 -0
- package/dist/product-assignees.js.map +1 -0
- package/dist/product-collection-sync.d.ts +12 -0
- package/dist/product-collection-sync.js +97 -0
- package/dist/product-collection-sync.js.map +1 -0
- package/dist/product-cost.d.ts +12 -0
- package/dist/product-cost.js +24 -0
- package/dist/product-cost.js.map +1 -0
- package/dist/product-insights-api.d.ts +38 -0
- package/dist/product-insights-api.js +51 -0
- package/dist/product-insights-api.js.map +1 -0
- package/dist/product-types.d.ts +311 -0
- package/dist/product-types.js +38 -0
- package/dist/product-types.js.map +1 -0
- package/dist/promised-day.d.ts +33 -0
- package/dist/promised-day.js +38 -0
- package/dist/promised-day.js.map +1 -0
- package/dist/proposals-api.d.ts +96 -0
- package/dist/proposals-api.js +41 -0
- package/dist/proposals-api.js.map +1 -0
- package/dist/proxy-allowlist.d.ts +15 -0
- package/dist/proxy-allowlist.js +153 -0
- package/dist/proxy-allowlist.js.map +1 -0
- package/dist/public-config-loader.d.ts +27 -0
- package/dist/public-config-loader.js +12 -0
- package/dist/public-config-loader.js.map +1 -0
- package/dist/public-config-provider.d.ts +16 -0
- package/dist/public-config-provider.js +14 -0
- package/dist/public-config-provider.js.map +1 -0
- package/dist/resolve-enabled-behaviors.d.ts +55 -0
- package/dist/resolve-enabled-behaviors.js +134 -0
- package/dist/resolve-enabled-behaviors.js.map +1 -0
- package/dist/resource-types.d.ts +198 -0
- package/dist/resource-types.js +96 -0
- package/dist/resource-types.js.map +1 -0
- package/dist/resume-screen.d.ts +31 -0
- package/dist/resume-screen.js +25 -0
- package/dist/resume-screen.js.map +1 -0
- package/dist/rider-display.d.ts +37 -0
- package/dist/rider-display.js +110 -0
- package/dist/rider-display.js.map +1 -0
- package/dist/rider-view.d.ts +37 -0
- package/dist/rider-view.js +47 -0
- package/dist/rider-view.js.map +1 -0
- package/dist/roster-label.d.ts +27 -0
- package/dist/roster-label.js +8 -0
- package/dist/roster-label.js.map +1 -0
- package/dist/route-pattern.d.ts +11 -0
- package/dist/route-pattern.js +20 -0
- package/dist/route-pattern.js.map +1 -0
- package/dist/route-permission.d.ts +60 -0
- package/dist/route-permission.js +48 -0
- package/dist/route-permission.js.map +1 -0
- package/dist/runtime-config.d.ts +33 -0
- package/dist/runtime-config.js +23 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/schema-validation.d.ts +172 -0
- package/dist/schema-validation.js +252 -0
- package/dist/schema-validation.js.map +1 -0
- package/dist/service-areas.d.ts +30 -0
- package/dist/service-areas.js +24 -0
- package/dist/service-areas.js.map +1 -0
- package/dist/service-operations-api.d.ts +78 -0
- package/dist/service-operations-api.js +37 -0
- package/dist/service-operations-api.js.map +1 -0
- package/dist/settings-relevance.d.ts +64 -0
- package/dist/settings-relevance.js +25 -0
- package/dist/settings-relevance.js.map +1 -0
- package/dist/singularise.d.ts +16 -0
- package/dist/singularise.js +37 -0
- package/dist/singularise.js.map +1 -0
- package/dist/site-address.d.ts +14 -0
- package/dist/site-address.js +28 -0
- package/dist/site-address.js.map +1 -0
- package/dist/slug.d.ts +26 -0
- package/dist/slug.js +15 -0
- package/dist/slug.js.map +1 -0
- package/dist/sound.d.ts +14 -0
- package/dist/sound.js +166 -0
- package/dist/sound.js.map +1 -0
- package/dist/staff-arrival.d.ts +3 -0
- package/dist/staff-arrival.js +11 -0
- package/dist/staff-arrival.js.map +1 -0
- package/dist/staff-home.d.ts +58 -0
- package/dist/staff-home.js +90 -0
- package/dist/staff-home.js.map +1 -0
- package/dist/staff-landing.d.ts +1 -0
- package/dist/staff-landing.js +15 -0
- package/dist/staff-landing.js.map +1 -0
- package/dist/stat-card-types.d.ts +19 -0
- package/dist/stat-card-types.js +1 -0
- package/dist/stat-card-types.js.map +1 -0
- package/dist/stock-levels.d.ts +32 -0
- package/dist/stock-levels.js +17 -0
- package/dist/stock-levels.js.map +1 -0
- package/dist/stored-token.d.ts +1 -0
- package/dist/stored-token.js +11 -0
- package/dist/stored-token.js.map +1 -0
- package/dist/storefront-url.d.ts +31 -0
- package/dist/storefront-url.js +40 -0
- package/dist/storefront-url.js.map +1 -0
- package/dist/storefront.d.ts +64 -0
- package/dist/storefront.js +51 -0
- package/dist/storefront.js.map +1 -0
- package/dist/subscription-billing-api.d.ts +115 -0
- package/dist/subscription-billing-api.js +27 -0
- package/dist/subscription-billing-api.js.map +1 -0
- package/dist/subscription-billing-model.d.ts +26 -0
- package/dist/subscription-billing-model.js +58 -0
- package/dist/subscription-billing-model.js.map +1 -0
- package/dist/support-case-subject.d.ts +10 -0
- package/dist/support-case-subject.js +13 -0
- package/dist/support-case-subject.js.map +1 -0
- package/dist/support-inbox.d.ts +6 -0
- package/dist/support-inbox.js +5 -0
- package/dist/support-inbox.js.map +1 -0
- package/dist/support.d.ts +7 -0
- package/dist/support.js +16 -0
- package/dist/support.js.map +1 -0
- package/dist/team-page.d.ts +9 -0
- package/dist/team-page.js +5 -0
- package/dist/team-page.js.map +1 -0
- package/dist/team-roles.d.ts +140 -0
- package/dist/team-roles.js +247 -0
- package/dist/team-roles.js.map +1 -0
- package/dist/team-successors.d.ts +20 -0
- package/dist/team-successors.js +13 -0
- package/dist/team-successors.js.map +1 -0
- package/dist/template-asset-url.d.ts +11 -0
- package/dist/template-asset-url.js +8 -0
- package/dist/template-asset-url.js.map +1 -0
- package/dist/template-capabilities.d.ts +2 -0
- package/dist/template-capabilities.js +71 -0
- package/dist/template-capabilities.js.map +1 -0
- package/dist/template-context.d.ts +111 -0
- package/dist/template-context.js +1278 -0
- package/dist/template-context.js.map +1 -0
- package/dist/template-filter.d.ts +29 -0
- package/dist/template-filter.js +41 -0
- package/dist/template-filter.js.map +1 -0
- package/dist/template-preview/preview-author-patch.d.ts +24 -0
- package/dist/template-preview/preview-author-patch.js +78 -0
- package/dist/template-preview/preview-author-patch.js.map +1 -0
- package/dist/template-preview/use-template-document.d.ts +38 -0
- package/dist/template-preview/use-template-document.js +45 -0
- package/dist/template-preview/use-template-document.js.map +1 -0
- package/dist/template-requirements.d.ts +38 -0
- package/dist/template-requirements.js +13 -0
- package/dist/template-requirements.js.map +1 -0
- package/dist/template-types.d.ts +317 -0
- package/dist/template-types.js +1 -0
- package/dist/template-types.js.map +1 -0
- package/dist/templates.d.ts +22 -0
- package/dist/templates.js +1 -0
- package/dist/templates.js.map +1 -0
- package/dist/theme-context.d.ts +58 -0
- package/dist/theme-context.js +283 -0
- package/dist/theme-context.js.map +1 -0
- package/dist/theme-policy.d.ts +41 -0
- package/dist/theme-policy.js +32 -0
- package/dist/theme-policy.js.map +1 -0
- package/dist/ticket-access.d.ts +20 -0
- package/dist/ticket-access.js +39 -0
- package/dist/ticket-access.js.map +1 -0
- package/dist/timeline-copy.d.ts +65 -0
- package/dist/timeline-copy.js +150 -0
- package/dist/timeline-copy.js.map +1 -0
- package/dist/url-params.d.ts +23 -0
- package/dist/url-params.js +43 -0
- package/dist/url-params.js.map +1 -0
- package/dist/use-behaviors.d.ts +13 -0
- package/dist/use-behaviors.js +41 -0
- package/dist/use-behaviors.js.map +1 -0
- package/dist/use-business-locations.d.ts +35 -0
- package/dist/use-business-locations.js +71 -0
- package/dist/use-business-locations.js.map +1 -0
- package/dist/use-currency.d.ts +12 -0
- package/dist/use-currency.js +16 -0
- package/dist/use-currency.js.map +1 -0
- package/dist/use-empty-state-copy.d.ts +12 -0
- package/dist/use-empty-state-copy.js +13 -0
- package/dist/use-empty-state-copy.js.map +1 -0
- package/dist/use-geo-cities.d.ts +1 -0
- package/dist/use-geo-cities.js +42 -0
- package/dist/use-geo-cities.js.map +1 -0
- package/dist/use-has-hardware.d.ts +13 -0
- package/dist/use-has-hardware.js +14 -0
- package/dist/use-has-hardware.js.map +1 -0
- package/dist/use-industry-key.d.ts +10 -0
- package/dist/use-industry-key.js +16 -0
- package/dist/use-industry-key.js.map +1 -0
- package/dist/use-item-links.d.ts +20 -0
- package/dist/use-item-links.js +30 -0
- package/dist/use-item-links.js.map +1 -0
- package/dist/use-job-roles.d.ts +21 -0
- package/dist/use-job-roles.js +76 -0
- package/dist/use-job-roles.js.map +1 -0
- package/dist/use-merchant-plan.d.ts +36 -0
- package/dist/use-merchant-plan.js +78 -0
- package/dist/use-merchant-plan.js.map +1 -0
- package/dist/use-module-label.d.ts +12 -0
- package/dist/use-module-label.js +13 -0
- package/dist/use-module-label.js.map +1 -0
- package/dist/use-money-visibility.d.ts +14 -0
- package/dist/use-money-visibility.js +13 -0
- package/dist/use-money-visibility.js.map +1 -0
- package/dist/use-nav-groups.d.ts +27 -0
- package/dist/use-nav-groups.js +141 -0
- package/dist/use-nav-groups.js.map +1 -0
- package/dist/use-pathname.d.ts +15 -0
- package/dist/use-pathname.js +29 -0
- package/dist/use-pathname.js.map +1 -0
- package/dist/use-permissions.d.ts +43 -0
- package/dist/use-permissions.js +158 -0
- package/dist/use-permissions.js.map +1 -0
- package/dist/use-platform-modules.d.ts +49 -0
- package/dist/use-platform-modules.js +416 -0
- package/dist/use-platform-modules.js.map +1 -0
- package/dist/use-staff-home.d.ts +9 -0
- package/dist/use-staff-home.js +24 -0
- package/dist/use-staff-home.js.map +1 -0
- package/dist/use-workspace-invite.d.ts +37 -0
- package/dist/use-workspace-invite.js +69 -0
- package/dist/use-workspace-invite.js.map +1 -0
- package/dist/utils.d.ts +53 -0
- package/dist/utils.js +161 -0
- package/dist/utils.js.map +1 -0
- package/dist/wallet-format.d.ts +8 -0
- package/dist/wallet-format.js +36 -0
- package/dist/wallet-format.js.map +1 -0
- package/dist/wallet-settlement.d.ts +14 -0
- package/dist/wallet-settlement.js +5 -0
- package/dist/wallet-settlement.js.map +1 -0
- package/dist/web-url.d.ts +1 -0
- package/dist/web-url.js +50 -0
- package/dist/web-url.js.map +1 -0
- package/dist/whats-new.d.ts +59 -0
- package/dist/whats-new.js +77 -0
- package/dist/whats-new.js.map +1 -0
- package/dist/workspace-recents.d.ts +30 -0
- package/dist/workspace-recents.js +37 -0
- package/dist/workspace-recents.js.map +1 -0
- package/dist/workspace-slug.d.ts +1 -0
- package/dist/workspace-slug.js +15 -0
- package/dist/workspace-slug.js.map +1 -0
- package/package.json +57 -0
package/dist/currency.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const CURRENCY_SYMBOLS = {
|
|
2
|
+
NGN: "\u20A6",
|
|
3
|
+
USD: "$",
|
|
4
|
+
EUR: "\u20AC",
|
|
5
|
+
GBP: "\xA3",
|
|
6
|
+
CAD: "C$",
|
|
7
|
+
AUD: "A$",
|
|
8
|
+
GHS: "\u20B5",
|
|
9
|
+
KES: "KSh",
|
|
10
|
+
ZAR: "R",
|
|
11
|
+
INR: "\u20B9",
|
|
12
|
+
JPY: "\xA5",
|
|
13
|
+
CNY: "\xA5",
|
|
14
|
+
BRL: "R$",
|
|
15
|
+
MXN: "$",
|
|
16
|
+
AED: "\u062F.\u0625"
|
|
17
|
+
};
|
|
18
|
+
function getCurrencySymbol(code) {
|
|
19
|
+
return CURRENCY_SYMBOLS[code] || code;
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
CURRENCY_SYMBOLS,
|
|
23
|
+
getCurrencySymbol
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=currency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/currency.ts"],"sourcesContent":["/**\n * Currency formatting helpers shared across dashboard forms and hooks.\n */\n\n// Currency code to symbol mapping\nexport const CURRENCY_SYMBOLS: Record<string, string> = {\n NGN: '₦',\n USD: '$',\n EUR: '€',\n GBP: '£',\n CAD: 'C$',\n AUD: 'A$',\n GHS: '₵',\n KES: 'KSh',\n ZAR: 'R',\n INR: '₹',\n JPY: '¥',\n CNY: '¥',\n BRL: 'R$',\n MXN: '$',\n AED: 'د.إ',\n};\n\nexport function getCurrencySymbol(code: string): string {\n return CURRENCY_SYMBOLS[code] || code;\n}\n"],"mappings":"AAKO,MAAM,mBAA2C;AAAA,EACtD,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEO,SAAS,kBAAkB,MAAsB;AACtD,SAAO,iBAAiB,IAAI,KAAK;AACnC;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared customer/member helper utilities.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from customers/page.tsx and customers/[customerId]/page.tsx
|
|
5
|
+
* where they were duplicated verbatim.
|
|
6
|
+
*/
|
|
7
|
+
import type { CustomerType } from '@withpotter/lib/api/types';
|
|
8
|
+
export declare function getTypeColor(type: CustomerType): {
|
|
9
|
+
bg: string;
|
|
10
|
+
text: string;
|
|
11
|
+
dot: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function getTypeLabel(type: CustomerType): string;
|
|
14
|
+
export declare function getInitials(name: string | null | undefined): string;
|
|
15
|
+
/** Light readability spacing for a phone number; unusual values pass through. */
|
|
16
|
+
export declare function formatPhone(phone: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* A customer's display identity. Phone is first-class (it's the WhatsApp
|
|
19
|
+
* handle): many customers have no email, and "name" is often a nickname or
|
|
20
|
+
* missing — so we resolve name → phone → email → "Guest" and never show a bare
|
|
21
|
+
* "Unnamed".
|
|
22
|
+
*/
|
|
23
|
+
export declare function getCustomerIdentity(member: {
|
|
24
|
+
name?: string | null;
|
|
25
|
+
email?: string | null;
|
|
26
|
+
phone?: string | null;
|
|
27
|
+
}): {
|
|
28
|
+
primary: string;
|
|
29
|
+
secondary: string;
|
|
30
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
function getTypeColor(type) {
|
|
2
|
+
const colors = {
|
|
3
|
+
registered: {
|
|
4
|
+
bg: "bg-[var(--info-bg)]",
|
|
5
|
+
text: "text-[var(--info)]",
|
|
6
|
+
dot: "bg-[var(--info)]"
|
|
7
|
+
},
|
|
8
|
+
guest: {
|
|
9
|
+
bg: "bg-[var(--success-bg)]",
|
|
10
|
+
text: "text-[var(--success)]",
|
|
11
|
+
dot: "bg-[var(--success)]"
|
|
12
|
+
},
|
|
13
|
+
subscriber: {
|
|
14
|
+
bg: "bg-[var(--accent-secondary)]",
|
|
15
|
+
text: "text-[var(--accent-primary)]",
|
|
16
|
+
dot: "bg-[var(--accent-primary)]"
|
|
17
|
+
},
|
|
18
|
+
lead: {
|
|
19
|
+
bg: "bg-[var(--warning-bg)]",
|
|
20
|
+
text: "text-[var(--warning)]",
|
|
21
|
+
dot: "bg-[var(--warning)]"
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
return colors[type] || colors.guest;
|
|
25
|
+
}
|
|
26
|
+
function getTypeLabel(type) {
|
|
27
|
+
const labels = {
|
|
28
|
+
registered: "Registered",
|
|
29
|
+
guest: "Guest",
|
|
30
|
+
// The mailing list. Only `subscribe-newsletter.usecase.ts` sets this type;
|
|
31
|
+
// a paying member is a `customer_subscription` and never touches it.
|
|
32
|
+
subscriber: "Newsletter",
|
|
33
|
+
lead: "Lead"
|
|
34
|
+
};
|
|
35
|
+
return labels[type] || type;
|
|
36
|
+
}
|
|
37
|
+
function getInitials(name) {
|
|
38
|
+
if (!name) return "?";
|
|
39
|
+
return name.split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
|
|
40
|
+
}
|
|
41
|
+
function formatPhone(phone) {
|
|
42
|
+
const d = phone.replace(/[^\d+]/g, "");
|
|
43
|
+
const m = d.match(/^(\+?\d{1,4})?(\d{3})(\d{3})(\d{2,4})$/);
|
|
44
|
+
return m ? [m[1], m[2], m[3], m[4]].filter(Boolean).join(" ") : phone;
|
|
45
|
+
}
|
|
46
|
+
function getCustomerIdentity(member) {
|
|
47
|
+
const name = member.name?.trim();
|
|
48
|
+
const email = member.email?.trim();
|
|
49
|
+
const phone = member.phone?.trim();
|
|
50
|
+
if (name)
|
|
51
|
+
return {
|
|
52
|
+
primary: name,
|
|
53
|
+
secondary: email || (phone ? formatPhone(phone) : "")
|
|
54
|
+
};
|
|
55
|
+
if (phone) return { primary: formatPhone(phone), secondary: email || "" };
|
|
56
|
+
if (email) return { primary: email, secondary: "" };
|
|
57
|
+
return { primary: "Guest", secondary: "" };
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
formatPhone,
|
|
61
|
+
getCustomerIdentity,
|
|
62
|
+
getInitials,
|
|
63
|
+
getTypeColor,
|
|
64
|
+
getTypeLabel
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=customer-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/customer-helpers.ts"],"sourcesContent":["/**\n * Shared customer/member helper utilities.\n *\n * Extracted from customers/page.tsx and customers/[customerId]/page.tsx\n * where they were duplicated verbatim.\n */\nimport type { CustomerType } from '@withpotter/lib/api/types';\n\nexport function getTypeColor(type: CustomerType) {\n const colors: Record<\n CustomerType,\n { bg: string; text: string; dot: string }\n > = {\n registered: {\n bg: 'bg-[var(--info-bg)]',\n text: 'text-[var(--info)]',\n dot: 'bg-[var(--info)]',\n },\n guest: {\n bg: 'bg-[var(--success-bg)]',\n text: 'text-[var(--success)]',\n dot: 'bg-[var(--success)]',\n },\n subscriber: {\n bg: 'bg-[var(--accent-secondary)]',\n text: 'text-[var(--accent-primary)]',\n dot: 'bg-[var(--accent-primary)]',\n },\n lead: {\n bg: 'bg-[var(--warning-bg)]',\n text: 'text-[var(--warning)]',\n dot: 'bg-[var(--warning)]',\n },\n };\n return colors[type] || colors.guest;\n}\n\nexport function getTypeLabel(type: CustomerType): string {\n const labels: Record<CustomerType, string> = {\n registered: 'Registered',\n guest: 'Guest',\n // The mailing list. Only `subscribe-newsletter.usecase.ts` sets this type;\n // a paying member is a `customer_subscription` and never touches it.\n subscriber: 'Newsletter',\n lead: 'Lead',\n };\n return labels[type] || type;\n}\n\nexport function getInitials(name: string | null | undefined): string {\n if (!name) return '?';\n return name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n}\n\n/** Light readability spacing for a phone number; unusual values pass through. */\nexport function formatPhone(phone: string): string {\n const d = phone.replace(/[^\\d+]/g, '');\n const m = d.match(/^(\\+?\\d{1,4})?(\\d{3})(\\d{3})(\\d{2,4})$/);\n return m ? [m[1], m[2], m[3], m[4]].filter(Boolean).join(' ') : phone;\n}\n\n/**\n * A customer's display identity. Phone is first-class (it's the WhatsApp\n * handle): many customers have no email, and \"name\" is often a nickname or\n * missing — so we resolve name → phone → email → \"Guest\" and never show a bare\n * \"Unnamed\".\n */\nexport function getCustomerIdentity(member: {\n name?: string | null;\n email?: string | null;\n phone?: string | null;\n}): { primary: string; secondary: string } {\n const name = member.name?.trim();\n const email = member.email?.trim();\n const phone = member.phone?.trim();\n if (name)\n return {\n primary: name,\n secondary: email || (phone ? formatPhone(phone) : ''),\n };\n if (phone) return { primary: formatPhone(phone), secondary: email || '' };\n if (email) return { primary: email, secondary: '' };\n return { primary: 'Guest', secondary: '' };\n}\n"],"mappings":"AAQO,SAAS,aAAa,MAAoB;AAC/C,QAAM,SAGF;AAAA,IACF,YAAY;AAAA,MACV,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,IACA,YAAY;AAAA,MACV,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,IACA,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AACA,SAAO,OAAO,IAAI,KAAK,OAAO;AAChC;AAEO,SAAS,aAAa,MAA4B;AACvD,QAAM,SAAuC;AAAA,IAC3C,YAAY;AAAA,IACZ,OAAO;AAAA;AAAA;AAAA,IAGP,YAAY;AAAA,IACZ,MAAM;AAAA,EACR;AACA,SAAO,OAAO,IAAI,KAAK;AACzB;AAEO,SAAS,YAAY,MAAyC;AACnE,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KACJ,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EACf,KAAK,EAAE,EACP,YAAY,EACZ,MAAM,GAAG,CAAC;AACf;AAGO,SAAS,YAAY,OAAuB;AACjD,QAAM,IAAI,MAAM,QAAQ,WAAW,EAAE;AACrC,QAAM,IAAI,EAAE,MAAM,wCAAwC;AAC1D,SAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,IAAI;AAClE;AAQO,SAAS,oBAAoB,QAIO;AACzC,QAAM,OAAO,OAAO,MAAM,KAAK;AAC/B,QAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,QAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,MAAI;AACF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,WAAW,UAAU,QAAQ,YAAY,KAAK,IAAI;AAAA,IACpD;AACF,MAAI,MAAO,QAAO,EAAE,SAAS,YAAY,KAAK,GAAG,WAAW,SAAS,GAAG;AACxE,MAAI,MAAO,QAAO,EAAE,SAAS,OAAO,WAAW,GAAG;AAClD,SAAO,EAAE,SAAS,SAAS,WAAW,GAAG;AAC3C;","names":[]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { Member, SegmentFilters } from '@withpotter/lib/api/types';
|
|
2
|
+
/**
|
|
3
|
+
* Where a customer stands with the business, computed rather than stored.
|
|
4
|
+
*
|
|
5
|
+
* The table used to spend its most scannable column on `type` — Subscriber,
|
|
6
|
+
* Registered, Guest, Lead — which mixes account state with funnel stage and,
|
|
7
|
+
* more to the point, never changes based on anything the customer does. A
|
|
8
|
+
* merchant scanning that column learns how somebody signed up, not who is
|
|
9
|
+
* worth a phone call this week.
|
|
10
|
+
*
|
|
11
|
+
* Square ships two of these as smart groups before a merchant configures
|
|
12
|
+
* anything (Regulars: three visits in six months; Lapsed: a former regular
|
|
13
|
+
* gone six weeks), and Shopify leads its customer record with an RFM group.
|
|
14
|
+
* Both platforms answer "who is slipping away" on the surface. This is that
|
|
15
|
+
* answer, derived from the two fields every row already carries.
|
|
16
|
+
*
|
|
17
|
+
* `status` is taken on this entity (active/suspended/pending/deleted), so the
|
|
18
|
+
* word here is `stage` — which the domain expiry timeline already uses for the
|
|
19
|
+
* same shape of idea, down to `lost` being its final value.
|
|
20
|
+
*/
|
|
21
|
+
export type CustomerStage = 'prospect' | 'new' | 'regular' | 'at-risk' | 'lost';
|
|
22
|
+
/**
|
|
23
|
+
* Thresholds, in days, gathered here because they are the whole opinion.
|
|
24
|
+
*
|
|
25
|
+
* REGULAR_ORDERS/REGULAR_WINDOW are Square's definition of a regular. QUIET is
|
|
26
|
+
* their six-week lapse trigger. GONE is the point past which we stop calling it
|
|
27
|
+
* a lapse and call it lost.
|
|
28
|
+
*/
|
|
29
|
+
export declare const STAGE_THRESHOLDS: {
|
|
30
|
+
readonly REGULAR_ORDERS: 3;
|
|
31
|
+
readonly REGULAR_WINDOW: 180;
|
|
32
|
+
readonly QUIET: 42;
|
|
33
|
+
readonly GONE: 180;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* First match wins, and the order is the argument.
|
|
37
|
+
*
|
|
38
|
+
* "Lost" outranks "at risk" because a merchant chasing a win-back list wants
|
|
39
|
+
* the six-week group, not everybody who ever bought once. "At risk" outranks
|
|
40
|
+
* "regular" for the same reason it does at Square: somebody who was a regular
|
|
41
|
+
* and has gone quiet is the single most actionable row in the book, and if
|
|
42
|
+
* `regular` were checked first they would hide inside it until they were lost.
|
|
43
|
+
*/
|
|
44
|
+
export declare function customerStage(member: Pick<Member, 'totalOrders' | 'lastOrderAt'>, now?: number): CustomerStage;
|
|
45
|
+
export interface StageMeta {
|
|
46
|
+
/** The merchant-facing word. Deliberately not a phrase. */
|
|
47
|
+
label: string;
|
|
48
|
+
/** What earns a row this stage, for the filter panel and the chip tooltip. */
|
|
49
|
+
hint: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Only `at-risk` carries colour.
|
|
53
|
+
*
|
|
54
|
+
* The old `type` column rendered four values in four brand colours, which made
|
|
55
|
+
* a table of ordinary customers look like a table of alerts. A stage is a fact
|
|
56
|
+
* about almost every row; the exception is the one that wants a phone call.
|
|
57
|
+
*/
|
|
58
|
+
export declare const STAGE_META: Record<CustomerStage, StageMeta>;
|
|
59
|
+
/** Rail order: the arc from never-bought to gone, so the row reads left to right. */
|
|
60
|
+
export declare const STAGE_ORDER: CustomerStage[];
|
|
61
|
+
/**
|
|
62
|
+
* Whether a stage means anything for this business at all.
|
|
63
|
+
*
|
|
64
|
+
* VERIFIED in potter-api: `totalOrders`, `totalSpent` and `lastOrderAt` are
|
|
65
|
+
* incremented in exactly one place — the order-payment handler. No booking,
|
|
66
|
+
* enquiry or subscription path touches them. So for a club, a salon or a
|
|
67
|
+
* clinic, whose customers only ever book, every one of those three fields is
|
|
68
|
+
* permanently zero and every customer would compute as "Prospect": a rail
|
|
69
|
+
* reading `Prospect 46 · New 0 · Regular 0 · At risk 0 · Lost 0`, which is not
|
|
70
|
+
* a lie the merchant can even detect.
|
|
71
|
+
*
|
|
72
|
+
* `SegmentFilters` has no booking-shaped field either, so this cannot be fixed
|
|
73
|
+
* on the client — the counts come from the database and the database is only
|
|
74
|
+
* counting orders. Until Member carries a transaction-wide `lastActivityAt`,
|
|
75
|
+
* the honest move is to not show the column rather than to show a wrong one.
|
|
76
|
+
*
|
|
77
|
+
* Keyed on capability rather than on any named vertical: a business that can
|
|
78
|
+
* take an order or raise an invoice gets stages, whatever trade it is in.
|
|
79
|
+
*/
|
|
80
|
+
export declare function stagesApply(behaviors: readonly string[]): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Whether this business records money against a customer at all.
|
|
83
|
+
*
|
|
84
|
+
* The same fact `stagesApply` turns on, named for the other thing it decides.
|
|
85
|
+
* `totalSpent`, `totalOrders` and `lastOrderAt` are written in exactly one
|
|
86
|
+
* place — the order-payment handler — so for a club or a clinic whose customers
|
|
87
|
+
* only book, all three are permanently zero. That makes a segment's value ₦0
|
|
88
|
+
* for every segment, which is not an amount, it is an absence wearing an
|
|
89
|
+
* amount. One predicate rather than two, because it is one question asked by
|
|
90
|
+
* two screens.
|
|
91
|
+
*/
|
|
92
|
+
export declare function customerSpendRecorded(behaviors: readonly string[]): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* The same five stages, written in the language saved segments already speak.
|
|
95
|
+
*
|
|
96
|
+
* This is the difference between a chip rail that is honest and one that is
|
|
97
|
+
* decorative. Computing a stage from a loaded row (above) labels the rows on
|
|
98
|
+
* the page correctly and can say nothing true about the ones on page 2 — so a
|
|
99
|
+
* count beside the chip would be a count of twenty rows dressed as a count of
|
|
100
|
+
* the book. `SegmentFilters` already carries `minOrders`, `maxOrders`,
|
|
101
|
+
* `lastOrderBefore` and `lastOrderAfter`, and `/crm/segments/preview` already
|
|
102
|
+
* counts against them, so every stage is expressible as a real query the
|
|
103
|
+
* database answers.
|
|
104
|
+
*
|
|
105
|
+
* It also means there is ONE mechanism here, not two: a built-in stage and a
|
|
106
|
+
* merchant's saved segment are the same kind of object, and the rail can show
|
|
107
|
+
* them side by side without the code branching on which is which.
|
|
108
|
+
*/
|
|
109
|
+
export declare function stageFilters(stage: CustomerStage, now?: number): SegmentFilters;
|
|
110
|
+
/**
|
|
111
|
+
* Whether this person can actually be sent anything.
|
|
112
|
+
*
|
|
113
|
+
* The customers list exists partly to pick a broadcast audience — the bulk bar
|
|
114
|
+
* offers WhatsApp, and the segment banner offers it to a whole segment — but
|
|
115
|
+
* the table gave no way to see who consents until after the rows were selected
|
|
116
|
+
* and the composer reported the shortfall. `source` was occupying the column
|
|
117
|
+
* that should have been answering this.
|
|
118
|
+
*/
|
|
119
|
+
export interface Reach {
|
|
120
|
+
email: boolean;
|
|
121
|
+
whatsapp: boolean;
|
|
122
|
+
/** Short label for the cell: the channels, or why there are none. */
|
|
123
|
+
label: string;
|
|
124
|
+
}
|
|
125
|
+
export declare function customerReach(member: Pick<Member, 'email' | 'phone' | 'acceptsMarketing'>): Reach;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { BOX_HIDE_WHATSAPP } from "./box-channels";
|
|
2
|
+
const STAGE_THRESHOLDS = {
|
|
3
|
+
REGULAR_ORDERS: 3,
|
|
4
|
+
REGULAR_WINDOW: 180,
|
|
5
|
+
QUIET: 42,
|
|
6
|
+
GONE: 180
|
|
7
|
+
};
|
|
8
|
+
const DAY = 24 * 60 * 60 * 1e3;
|
|
9
|
+
function daysSince(iso, now) {
|
|
10
|
+
if (!iso) return null;
|
|
11
|
+
const then = new Date(iso).getTime();
|
|
12
|
+
if (Number.isNaN(then)) return null;
|
|
13
|
+
return Math.floor((now - then) / DAY);
|
|
14
|
+
}
|
|
15
|
+
function customerStage(member, now = Date.now()) {
|
|
16
|
+
const orders = member.totalOrders ?? 0;
|
|
17
|
+
if (orders === 0) return "prospect";
|
|
18
|
+
const quiet = daysSince(member.lastOrderAt, now);
|
|
19
|
+
if (quiet === null) return "new";
|
|
20
|
+
if (quiet > STAGE_THRESHOLDS.GONE) return "lost";
|
|
21
|
+
if (orders >= STAGE_THRESHOLDS.REGULAR_ORDERS) {
|
|
22
|
+
return quiet > STAGE_THRESHOLDS.QUIET ? "at-risk" : "regular";
|
|
23
|
+
}
|
|
24
|
+
return "new";
|
|
25
|
+
}
|
|
26
|
+
const STAGE_META = {
|
|
27
|
+
prospect: {
|
|
28
|
+
label: "Prospect",
|
|
29
|
+
hint: "Has not ordered yet"
|
|
30
|
+
},
|
|
31
|
+
new: {
|
|
32
|
+
label: "New",
|
|
33
|
+
hint: "Fewer than 3 orders, seen in the last 6 months"
|
|
34
|
+
},
|
|
35
|
+
regular: {
|
|
36
|
+
label: "Regular",
|
|
37
|
+
hint: "3 or more orders, seen in the last 6 weeks"
|
|
38
|
+
},
|
|
39
|
+
"at-risk": {
|
|
40
|
+
label: "At risk",
|
|
41
|
+
hint: "Was a regular, nothing for 6 weeks"
|
|
42
|
+
},
|
|
43
|
+
lost: {
|
|
44
|
+
label: "Lost",
|
|
45
|
+
hint: "Nothing for 6 months"
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const STAGE_ORDER = [
|
|
49
|
+
"prospect",
|
|
50
|
+
"new",
|
|
51
|
+
"regular",
|
|
52
|
+
"at-risk",
|
|
53
|
+
"lost"
|
|
54
|
+
];
|
|
55
|
+
function stagesApply(behaviors) {
|
|
56
|
+
return customerSpendRecorded(behaviors);
|
|
57
|
+
}
|
|
58
|
+
function customerSpendRecorded(behaviors) {
|
|
59
|
+
return behaviors.includes("sellable") || behaviors.includes("billable");
|
|
60
|
+
}
|
|
61
|
+
function stageFilters(stage, now = Date.now()) {
|
|
62
|
+
const at = (daysAgo) => new Date(now - daysAgo * DAY).toISOString();
|
|
63
|
+
const quiet = at(STAGE_THRESHOLDS.QUIET);
|
|
64
|
+
const gone = at(STAGE_THRESHOLDS.GONE);
|
|
65
|
+
switch (stage) {
|
|
66
|
+
case "prospect":
|
|
67
|
+
return { maxOrders: 0 };
|
|
68
|
+
case "new":
|
|
69
|
+
return {
|
|
70
|
+
minOrders: 1,
|
|
71
|
+
maxOrders: STAGE_THRESHOLDS.REGULAR_ORDERS - 1,
|
|
72
|
+
lastOrderAfter: gone
|
|
73
|
+
};
|
|
74
|
+
case "regular":
|
|
75
|
+
return {
|
|
76
|
+
minOrders: STAGE_THRESHOLDS.REGULAR_ORDERS,
|
|
77
|
+
lastOrderAfter: quiet
|
|
78
|
+
};
|
|
79
|
+
case "at-risk":
|
|
80
|
+
return {
|
|
81
|
+
minOrders: STAGE_THRESHOLDS.REGULAR_ORDERS,
|
|
82
|
+
lastOrderBefore: quiet,
|
|
83
|
+
lastOrderAfter: gone
|
|
84
|
+
};
|
|
85
|
+
case "lost":
|
|
86
|
+
return { minOrders: 1, lastOrderBefore: gone };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function customerReach(member) {
|
|
90
|
+
if (!member.acceptsMarketing) {
|
|
91
|
+
return { email: false, whatsapp: false, label: "No consent" };
|
|
92
|
+
}
|
|
93
|
+
const email = Boolean(member.email);
|
|
94
|
+
const whatsapp = Boolean(member.phone) && !BOX_HIDE_WHATSAPP;
|
|
95
|
+
if (!email && !whatsapp) {
|
|
96
|
+
return { email, whatsapp, label: "No contact" };
|
|
97
|
+
}
|
|
98
|
+
const channels = [email && "Email", whatsapp && "WhatsApp"].filter(
|
|
99
|
+
Boolean
|
|
100
|
+
);
|
|
101
|
+
return { email, whatsapp, label: channels.join(" \xB7 ") };
|
|
102
|
+
}
|
|
103
|
+
export {
|
|
104
|
+
STAGE_META,
|
|
105
|
+
STAGE_ORDER,
|
|
106
|
+
STAGE_THRESHOLDS,
|
|
107
|
+
customerReach,
|
|
108
|
+
customerSpendRecorded,
|
|
109
|
+
customerStage,
|
|
110
|
+
stageFilters,
|
|
111
|
+
stagesApply
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=customer-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/customer-stage.ts"],"sourcesContent":["import type { Member, SegmentFilters } from '@withpotter/lib/api/types';\nimport { BOX_HIDE_WHATSAPP } from './box-channels';\n\n/**\n * Where a customer stands with the business, computed rather than stored.\n *\n * The table used to spend its most scannable column on `type` — Subscriber,\n * Registered, Guest, Lead — which mixes account state with funnel stage and,\n * more to the point, never changes based on anything the customer does. A\n * merchant scanning that column learns how somebody signed up, not who is\n * worth a phone call this week.\n *\n * Square ships two of these as smart groups before a merchant configures\n * anything (Regulars: three visits in six months; Lapsed: a former regular\n * gone six weeks), and Shopify leads its customer record with an RFM group.\n * Both platforms answer \"who is slipping away\" on the surface. This is that\n * answer, derived from the two fields every row already carries.\n *\n * `status` is taken on this entity (active/suspended/pending/deleted), so the\n * word here is `stage` — which the domain expiry timeline already uses for the\n * same shape of idea, down to `lost` being its final value.\n */\nexport type CustomerStage = 'prospect' | 'new' | 'regular' | 'at-risk' | 'lost';\n\n/**\n * Thresholds, in days, gathered here because they are the whole opinion.\n *\n * REGULAR_ORDERS/REGULAR_WINDOW are Square's definition of a regular. QUIET is\n * their six-week lapse trigger. GONE is the point past which we stop calling it\n * a lapse and call it lost.\n */\nexport const STAGE_THRESHOLDS = {\n REGULAR_ORDERS: 3,\n REGULAR_WINDOW: 180,\n QUIET: 42,\n GONE: 180,\n} as const;\n\nconst DAY = 24 * 60 * 60 * 1000;\n\nfunction daysSince(iso: string | null | undefined, now: number): number | null {\n if (!iso) return null;\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) return null;\n return Math.floor((now - then) / DAY);\n}\n\n/**\n * First match wins, and the order is the argument.\n *\n * \"Lost\" outranks \"at risk\" because a merchant chasing a win-back list wants\n * the six-week group, not everybody who ever bought once. \"At risk\" outranks\n * \"regular\" for the same reason it does at Square: somebody who was a regular\n * and has gone quiet is the single most actionable row in the book, and if\n * `regular` were checked first they would hide inside it until they were lost.\n */\nexport function customerStage(\n member: Pick<Member, 'totalOrders' | 'lastOrderAt'>,\n now: number = Date.now(),\n): CustomerStage {\n const orders = member.totalOrders ?? 0;\n if (orders === 0) return 'prospect';\n\n const quiet = daysSince(member.lastOrderAt, now);\n // Ordered, but we have no date for it. Treat the order as the evidence and\n // let the row sit in `new` rather than inventing a lapse we cannot support.\n if (quiet === null) return 'new';\n\n if (quiet > STAGE_THRESHOLDS.GONE) return 'lost';\n if (orders >= STAGE_THRESHOLDS.REGULAR_ORDERS) {\n return quiet > STAGE_THRESHOLDS.QUIET ? 'at-risk' : 'regular';\n }\n return 'new';\n}\n\nexport interface StageMeta {\n /** The merchant-facing word. Deliberately not a phrase. */\n label: string;\n /** What earns a row this stage, for the filter panel and the chip tooltip. */\n hint: string;\n}\n\n/**\n * Only `at-risk` carries colour.\n *\n * The old `type` column rendered four values in four brand colours, which made\n * a table of ordinary customers look like a table of alerts. A stage is a fact\n * about almost every row; the exception is the one that wants a phone call.\n */\nexport const STAGE_META: Record<CustomerStage, StageMeta> = {\n prospect: {\n label: 'Prospect',\n hint: 'Has not ordered yet',\n },\n new: {\n label: 'New',\n hint: 'Fewer than 3 orders, seen in the last 6 months',\n },\n regular: {\n label: 'Regular',\n hint: '3 or more orders, seen in the last 6 weeks',\n },\n 'at-risk': {\n label: 'At risk',\n hint: 'Was a regular, nothing for 6 weeks',\n },\n lost: {\n label: 'Lost',\n hint: 'Nothing for 6 months',\n },\n};\n\n/** Rail order: the arc from never-bought to gone, so the row reads left to right. */\nexport const STAGE_ORDER: CustomerStage[] = [\n 'prospect',\n 'new',\n 'regular',\n 'at-risk',\n 'lost',\n];\n\n/**\n * Whether a stage means anything for this business at all.\n *\n * VERIFIED in potter-api: `totalOrders`, `totalSpent` and `lastOrderAt` are\n * incremented in exactly one place — the order-payment handler. No booking,\n * enquiry or subscription path touches them. So for a club, a salon or a\n * clinic, whose customers only ever book, every one of those three fields is\n * permanently zero and every customer would compute as \"Prospect\": a rail\n * reading `Prospect 46 · New 0 · Regular 0 · At risk 0 · Lost 0`, which is not\n * a lie the merchant can even detect.\n *\n * `SegmentFilters` has no booking-shaped field either, so this cannot be fixed\n * on the client — the counts come from the database and the database is only\n * counting orders. Until Member carries a transaction-wide `lastActivityAt`,\n * the honest move is to not show the column rather than to show a wrong one.\n *\n * Keyed on capability rather than on any named vertical: a business that can\n * take an order or raise an invoice gets stages, whatever trade it is in.\n */\nexport function stagesApply(behaviors: readonly string[]): boolean {\n return customerSpendRecorded(behaviors);\n}\n\n/**\n * Whether this business records money against a customer at all.\n *\n * The same fact `stagesApply` turns on, named for the other thing it decides.\n * `totalSpent`, `totalOrders` and `lastOrderAt` are written in exactly one\n * place — the order-payment handler — so for a club or a clinic whose customers\n * only book, all three are permanently zero. That makes a segment's value ₦0\n * for every segment, which is not an amount, it is an absence wearing an\n * amount. One predicate rather than two, because it is one question asked by\n * two screens.\n */\nexport function customerSpendRecorded(behaviors: readonly string[]): boolean {\n return behaviors.includes('sellable') || behaviors.includes('billable');\n}\n\n// ── Stages as queries ───────────────────────────────────────────────────────\n\n/**\n * The same five stages, written in the language saved segments already speak.\n *\n * This is the difference between a chip rail that is honest and one that is\n * decorative. Computing a stage from a loaded row (above) labels the rows on\n * the page correctly and can say nothing true about the ones on page 2 — so a\n * count beside the chip would be a count of twenty rows dressed as a count of\n * the book. `SegmentFilters` already carries `minOrders`, `maxOrders`,\n * `lastOrderBefore` and `lastOrderAfter`, and `/crm/segments/preview` already\n * counts against them, so every stage is expressible as a real query the\n * database answers.\n *\n * It also means there is ONE mechanism here, not two: a built-in stage and a\n * merchant's saved segment are the same kind of object, and the rail can show\n * them side by side without the code branching on which is which.\n */\nexport function stageFilters(\n stage: CustomerStage,\n now: number = Date.now(),\n): SegmentFilters {\n const at = (daysAgo: number) => new Date(now - daysAgo * DAY).toISOString();\n const quiet = at(STAGE_THRESHOLDS.QUIET);\n const gone = at(STAGE_THRESHOLDS.GONE);\n\n switch (stage) {\n case 'prospect':\n return { maxOrders: 0 };\n case 'new':\n // Fewer than three orders, and not yet gone quiet enough to be lost.\n return {\n minOrders: 1,\n maxOrders: STAGE_THRESHOLDS.REGULAR_ORDERS - 1,\n lastOrderAfter: gone,\n };\n case 'regular':\n return {\n minOrders: STAGE_THRESHOLDS.REGULAR_ORDERS,\n lastOrderAfter: quiet,\n };\n case 'at-risk':\n // Was a regular, has gone quiet, but is not yet written off — the band\n // between the two thresholds, which is the only group here that is worth\n // interrupting someone's day over.\n return {\n minOrders: STAGE_THRESHOLDS.REGULAR_ORDERS,\n lastOrderBefore: quiet,\n lastOrderAfter: gone,\n };\n case 'lost':\n return { minOrders: 1, lastOrderBefore: gone };\n }\n}\n\n// ── Reachability ────────────────────────────────────────────────────────────\n\n/**\n * Whether this person can actually be sent anything.\n *\n * The customers list exists partly to pick a broadcast audience — the bulk bar\n * offers WhatsApp, and the segment banner offers it to a whole segment — but\n * the table gave no way to see who consents until after the rows were selected\n * and the composer reported the shortfall. `source` was occupying the column\n * that should have been answering this.\n */\nexport interface Reach {\n email: boolean;\n whatsapp: boolean;\n /** Short label for the cell: the channels, or why there are none. */\n label: string;\n}\n\nexport function customerReach(\n member: Pick<Member, 'email' | 'phone' | 'acceptsMarketing'>,\n): Reach {\n // Consent is one flag over both channels, so a withheld consent is the whole\n // answer — say that rather than listing addresses nothing may be sent to.\n if (!member.acceptsMarketing) {\n return { email: false, whatsapp: false, label: 'No consent' };\n }\n const email = Boolean(member.email);\n // A box that sends by email alone has no WhatsApp to reach anyone on.\n const whatsapp = Boolean(member.phone) && !BOX_HIDE_WHATSAPP;\n if (!email && !whatsapp) {\n return { email, whatsapp, label: 'No contact' };\n }\n const channels = [email && 'Email', whatsapp && 'WhatsApp'].filter(\n Boolean,\n ) as string[];\n return { email, whatsapp, label: channels.join(' · ') };\n}\n"],"mappings":"AACA,SAAS,yBAAyB;AA8B3B,MAAM,mBAAmB;AAAA,EAC9B,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,MAAM;AACR;AAEA,MAAM,MAAM,KAAK,KAAK,KAAK;AAE3B,SAAS,UAAU,KAAgC,KAA4B;AAC7E,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,OAAO,IAAI,KAAK,GAAG,EAAE,QAAQ;AACnC,MAAI,OAAO,MAAM,IAAI,EAAG,QAAO;AAC/B,SAAO,KAAK,OAAO,MAAM,QAAQ,GAAG;AACtC;AAWO,SAAS,cACd,QACA,MAAc,KAAK,IAAI,GACR;AACf,QAAM,SAAS,OAAO,eAAe;AACrC,MAAI,WAAW,EAAG,QAAO;AAEzB,QAAM,QAAQ,UAAU,OAAO,aAAa,GAAG;AAG/C,MAAI,UAAU,KAAM,QAAO;AAE3B,MAAI,QAAQ,iBAAiB,KAAM,QAAO;AAC1C,MAAI,UAAU,iBAAiB,gBAAgB;AAC7C,WAAO,QAAQ,iBAAiB,QAAQ,YAAY;AAAA,EACtD;AACA,SAAO;AACT;AAgBO,MAAM,aAA+C;AAAA,EAC1D,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;AAGO,MAAM,cAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAqBO,SAAS,YAAY,WAAuC;AACjE,SAAO,sBAAsB,SAAS;AACxC;AAaO,SAAS,sBAAsB,WAAuC;AAC3E,SAAO,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,UAAU;AACxE;AAoBO,SAAS,aACd,OACA,MAAc,KAAK,IAAI,GACP;AAChB,QAAM,KAAK,CAAC,YAAoB,IAAI,KAAK,MAAM,UAAU,GAAG,EAAE,YAAY;AAC1E,QAAM,QAAQ,GAAG,iBAAiB,KAAK;AACvC,QAAM,OAAO,GAAG,iBAAiB,IAAI;AAErC,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,EAAE,WAAW,EAAE;AAAA,IACxB,KAAK;AAEH,aAAO;AAAA,QACL,WAAW;AAAA,QACX,WAAW,iBAAiB,iBAAiB;AAAA,QAC7C,gBAAgB;AAAA,MAClB;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,WAAW,iBAAiB;AAAA,QAC5B,gBAAgB;AAAA,MAClB;AAAA,IACF,KAAK;AAIH,aAAO;AAAA,QACL,WAAW,iBAAiB;AAAA,QAC5B,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,MAClB;AAAA,IACF,KAAK;AACH,aAAO,EAAE,WAAW,GAAG,iBAAiB,KAAK;AAAA,EACjD;AACF;AAoBO,SAAS,cACd,QACO;AAGP,MAAI,CAAC,OAAO,kBAAkB;AAC5B,WAAO,EAAE,OAAO,OAAO,UAAU,OAAO,OAAO,aAAa;AAAA,EAC9D;AACA,QAAM,QAAQ,QAAQ,OAAO,KAAK;AAElC,QAAM,WAAW,QAAQ,OAAO,KAAK,KAAK,CAAC;AAC3C,MAAI,CAAC,SAAS,CAAC,UAAU;AACvB,WAAO,EAAE,OAAO,UAAU,OAAO,aAAa;AAAA,EAChD;AACA,QAAM,WAAW,CAAC,SAAS,SAAS,YAAY,UAAU,EAAE;AAAA,IAC1D;AAAA,EACF;AACA,SAAO,EAAE,OAAO,UAAU,OAAO,SAAS,KAAK,QAAK,EAAE;AACxD;","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ACCOUNT_GROUPS, BUSINESS_GROUPS } from "@withpotter/components/sidebar/config";
|
|
2
|
+
import {
|
|
3
|
+
platformNavigation,
|
|
4
|
+
universalCoreModules
|
|
5
|
+
} from "./use-platform-modules";
|
|
6
|
+
const settingsDestinations = [...BUSINESS_GROUPS, ...ACCOUNT_GROUPS].flatMap(
|
|
7
|
+
(group) => group.items.flatMap((item) => [
|
|
8
|
+
{ value: item.href, label: item.name },
|
|
9
|
+
...(item.match ?? []).map((route) => ({
|
|
10
|
+
value: route,
|
|
11
|
+
label: `${item.name} (${route.split("/").at(-1)?.replaceAll("-", " ")})`
|
|
12
|
+
}))
|
|
13
|
+
])
|
|
14
|
+
);
|
|
15
|
+
const dashboardDestinations = Array.from(
|
|
16
|
+
new Map(
|
|
17
|
+
[
|
|
18
|
+
...[...platformNavigation, ...universalCoreModules].map((module) => ({
|
|
19
|
+
value: module.href.split("?")[0],
|
|
20
|
+
label: module.name
|
|
21
|
+
})),
|
|
22
|
+
...settingsDestinations
|
|
23
|
+
].map((destination) => [destination.value, destination])
|
|
24
|
+
).values()
|
|
25
|
+
).sort((first, second) => first.label.localeCompare(second.label));
|
|
26
|
+
export {
|
|
27
|
+
dashboardDestinations
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=dashboard-destinations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dashboard-destinations.ts"],"sourcesContent":["import { ACCOUNT_GROUPS, BUSINESS_GROUPS } from '@withpotter/components/sidebar/config';\nimport {\n platformNavigation,\n universalCoreModules,\n} from './use-platform-modules';\n\nexport interface DashboardDestination {\n value: string;\n label: string;\n}\n\nconst settingsDestinations = [...BUSINESS_GROUPS, ...ACCOUNT_GROUPS].flatMap(\n (group) =>\n group.items.flatMap((item) => [\n { value: item.href, label: item.name },\n ...(item.match ?? []).map((route) => ({\n value: route,\n label: `${item.name} (${route.split('/').at(-1)?.replaceAll('-', ' ')})`,\n })),\n ]),\n);\n\nexport const dashboardDestinations: DashboardDestination[] = Array.from(\n new Map(\n [\n ...[...platformNavigation, ...universalCoreModules].map((module) => ({\n value: module.href.split('?')[0],\n label: module.name,\n })),\n ...settingsDestinations,\n ].map((destination) => [destination.value, destination] as const),\n ).values(),\n).sort((first, second) => first.label.localeCompare(second.label));\n"],"mappings":"AAAA,SAAS,gBAAgB,uBAAuB;AAChD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAOP,MAAM,uBAAuB,CAAC,GAAG,iBAAiB,GAAG,cAAc,EAAE;AAAA,EACnE,CAAC,UACC,MAAM,MAAM,QAAQ,CAAC,SAAS;AAAA,IAC5B,EAAE,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK;AAAA,IACrC,IAAI,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW;AAAA,MACpC,OAAO;AAAA,MACP,OAAO,GAAG,KAAK,IAAI,KAAK,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,WAAW,KAAK,GAAG,CAAC;AAAA,IACvE,EAAE;AAAA,EACJ,CAAC;AACL;AAEO,MAAM,wBAAgD,MAAM;AAAA,EACjE,IAAI;AAAA,IACF;AAAA,MACE,GAAG,CAAC,GAAG,oBAAoB,GAAG,oBAAoB,EAAE,IAAI,CAAC,YAAY;AAAA,QACnE,OAAO,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,QAC/B,OAAO,OAAO;AAAA,MAChB,EAAE;AAAA,MACF,GAAG;AAAA,IACL,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY,OAAO,WAAW,CAAU;AAAA,EAClE,EAAE,OAAO;AACX,EAAE,KAAK,CAAC,OAAO,WAAW,MAAM,MAAM,cAAc,OAAO,KAAK,CAAC;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DemoContentAvailability, DemoContentClient, DemoContentStatus } from './api/demo-content';
|
|
2
|
+
/**
|
|
3
|
+
* A stand-in server for the demo-content screens: tests, and previewing the
|
|
4
|
+
* screens with no backend. It holds the state the real one would, and moves a
|
|
5
|
+
* job along each time the status is read.
|
|
6
|
+
*/
|
|
7
|
+
export interface MockDemoOptions {
|
|
8
|
+
status?: DemoContentStatus;
|
|
9
|
+
availability?: DemoContentAvailability;
|
|
10
|
+
/** Reads before a started job finishes. */
|
|
11
|
+
stepsPerJob?: number;
|
|
12
|
+
/** Make the next calls to these fail with the server's message. */
|
|
13
|
+
failNext?: Partial<Record<keyof DemoContentClient, string>>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createMockDemoClient(options?: MockDemoOptions): {
|
|
16
|
+
client: DemoContentClient;
|
|
17
|
+
calls: {
|
|
18
|
+
name: string;
|
|
19
|
+
args: unknown;
|
|
20
|
+
}[];
|
|
21
|
+
setStatus: (s: DemoContentStatus) => DemoContentStatus;
|
|
22
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
function createMockDemoClient(options = {}) {
|
|
2
|
+
let status = options.status ?? { state: "none" };
|
|
3
|
+
const stepsPerJob = options.stepsPerJob ?? 3;
|
|
4
|
+
const failNext = { ...options.failNext ?? {} };
|
|
5
|
+
let step = 0;
|
|
6
|
+
let nextJob = 1;
|
|
7
|
+
const calls = [];
|
|
8
|
+
const maybeFail = (name) => {
|
|
9
|
+
const message = failNext[name];
|
|
10
|
+
if (message) {
|
|
11
|
+
delete failNext[name];
|
|
12
|
+
throw new Error(message);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const client = {
|
|
16
|
+
async status() {
|
|
17
|
+
calls.push({ name: "status", args: void 0 });
|
|
18
|
+
maybeFail("status");
|
|
19
|
+
if (status.state === "applying" || status.state === "clearing") {
|
|
20
|
+
step += 1;
|
|
21
|
+
if (step >= stepsPerJob) {
|
|
22
|
+
status = status.state === "applying" ? {
|
|
23
|
+
state: "applied",
|
|
24
|
+
pack: status.pack,
|
|
25
|
+
counts: { products: 12, collections: 3, pages: 4, media: 20 },
|
|
26
|
+
finishedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
27
|
+
} : { state: "none", finishedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
28
|
+
} else {
|
|
29
|
+
status = {
|
|
30
|
+
...status,
|
|
31
|
+
progress: { phase: "products", done: step, total: stepsPerJob }
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return status;
|
|
36
|
+
},
|
|
37
|
+
async available() {
|
|
38
|
+
calls.push({ name: "available", args: void 0 });
|
|
39
|
+
maybeFail("available");
|
|
40
|
+
return options.availability ?? { available: true };
|
|
41
|
+
},
|
|
42
|
+
async apply(input) {
|
|
43
|
+
calls.push({ name: "apply", args: input });
|
|
44
|
+
maybeFail("apply");
|
|
45
|
+
step = 0;
|
|
46
|
+
status = {
|
|
47
|
+
state: "applying",
|
|
48
|
+
pack: { id: "pack", template: "demo", version: "1", audience: "all", hash: "h" },
|
|
49
|
+
progress: { phase: "media", done: 0, total: stepsPerJob },
|
|
50
|
+
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
51
|
+
};
|
|
52
|
+
return { jobId: `job-${nextJob++}` };
|
|
53
|
+
},
|
|
54
|
+
async clear(args) {
|
|
55
|
+
calls.push({ name: "clear", args });
|
|
56
|
+
maybeFail("clear");
|
|
57
|
+
step = 0;
|
|
58
|
+
status = { ...status, state: "clearing", progress: { phase: "products", done: 0, total: stepsPerJob } };
|
|
59
|
+
},
|
|
60
|
+
async adopt(input) {
|
|
61
|
+
calls.push({ name: "adopt", args: input });
|
|
62
|
+
maybeFail("adopt");
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
return { client, calls, setStatus: (s) => status = s };
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
createMockDemoClient
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=demo-content-mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/demo-content-mock.ts"],"sourcesContent":["import type {\n DemoContentAvailability,\n DemoContentClient,\n DemoContentStatus,\n} from './api/demo-content';\n\n/**\n * A stand-in server for the demo-content screens: tests, and previewing the\n * screens with no backend. It holds the state the real one would, and moves a\n * job along each time the status is read.\n */\nexport interface MockDemoOptions {\n status?: DemoContentStatus;\n availability?: DemoContentAvailability;\n /** Reads before a started job finishes. */\n stepsPerJob?: number;\n /** Make the next calls to these fail with the server's message. */\n failNext?: Partial<Record<keyof DemoContentClient, string>>;\n}\n\nexport function createMockDemoClient(options: MockDemoOptions = {}) {\n let status: DemoContentStatus = options.status ?? { state: 'none' };\n const stepsPerJob = options.stepsPerJob ?? 3;\n const failNext = { ...(options.failNext ?? {}) };\n let step = 0;\n let nextJob = 1;\n const calls: { name: string; args: unknown }[] = [];\n\n const maybeFail = (name: keyof DemoContentClient) => {\n const message = failNext[name];\n if (message) {\n delete failNext[name];\n throw new Error(message);\n }\n };\n\n const client: DemoContentClient = {\n async status() {\n calls.push({ name: 'status', args: undefined });\n maybeFail('status');\n if (status.state === 'applying' || status.state === 'clearing') {\n step += 1;\n if (step >= stepsPerJob) {\n status =\n status.state === 'applying'\n ? {\n state: 'applied',\n pack: status.pack,\n counts: { products: 12, collections: 3, pages: 4, media: 20 },\n finishedAt: new Date().toISOString(),\n }\n : { state: 'none', finishedAt: new Date().toISOString() };\n } else {\n status = {\n ...status,\n progress: { phase: 'products', done: step, total: stepsPerJob },\n };\n }\n }\n return status;\n },\n async available() {\n calls.push({ name: 'available', args: undefined });\n maybeFail('available');\n return options.availability ?? { available: true };\n },\n async apply(input) {\n calls.push({ name: 'apply', args: input });\n maybeFail('apply');\n step = 0;\n status = {\n state: 'applying',\n pack: { id: 'pack', template: 'demo', version: '1', audience: 'all', hash: 'h' },\n progress: { phase: 'media', done: 0, total: stepsPerJob },\n startedAt: new Date().toISOString(),\n };\n return { jobId: `job-${nextJob++}` };\n },\n async clear(args) {\n calls.push({ name: 'clear', args });\n maybeFail('clear');\n step = 0;\n status = { ...status, state: 'clearing', progress: { phase: 'products', done: 0, total: stepsPerJob } };\n },\n async adopt(input) {\n calls.push({ name: 'adopt', args: input });\n maybeFail('adopt');\n },\n };\n return { client, calls, setStatus: (s: DemoContentStatus) => (status = s) };\n}\n"],"mappings":"AAoBO,SAAS,qBAAqB,UAA2B,CAAC,GAAG;AAClE,MAAI,SAA4B,QAAQ,UAAU,EAAE,OAAO,OAAO;AAClE,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,WAAW,EAAE,GAAI,QAAQ,YAAY,CAAC,EAAG;AAC/C,MAAI,OAAO;AACX,MAAI,UAAU;AACd,QAAM,QAA2C,CAAC;AAElD,QAAM,YAAY,CAAC,SAAkC;AACnD,UAAM,UAAU,SAAS,IAAI;AAC7B,QAAI,SAAS;AACX,aAAO,SAAS,IAAI;AACpB,YAAM,IAAI,MAAM,OAAO;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,SAA4B;AAAA,IAChC,MAAM,SAAS;AACb,YAAM,KAAK,EAAE,MAAM,UAAU,MAAM,OAAU,CAAC;AAC9C,gBAAU,QAAQ;AAClB,UAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY;AAC9D,gBAAQ;AACR,YAAI,QAAQ,aAAa;AACvB,mBACE,OAAO,UAAU,aACb;AAAA,YACE,OAAO;AAAA,YACP,MAAM,OAAO;AAAA,YACb,QAAQ,EAAE,UAAU,IAAI,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG;AAAA,YAC5D,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,UACrC,IACA,EAAE,OAAO,QAAQ,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE;AAAA,QAC9D,OAAO;AACL,mBAAS;AAAA,YACP,GAAG;AAAA,YACH,UAAU,EAAE,OAAO,YAAY,MAAM,MAAM,OAAO,YAAY;AAAA,UAChE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,MAAM,YAAY;AAChB,YAAM,KAAK,EAAE,MAAM,aAAa,MAAM,OAAU,CAAC;AACjD,gBAAU,WAAW;AACrB,aAAO,QAAQ,gBAAgB,EAAE,WAAW,KAAK;AAAA,IACnD;AAAA,IACA,MAAM,MAAM,OAAO;AACjB,YAAM,KAAK,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC;AACzC,gBAAU,OAAO;AACjB,aAAO;AACP,eAAS;AAAA,QACP,OAAO;AAAA,QACP,MAAM,EAAE,IAAI,QAAQ,UAAU,QAAQ,SAAS,KAAK,UAAU,OAAO,MAAM,IAAI;AAAA,QAC/E,UAAU,EAAE,OAAO,SAAS,MAAM,GAAG,OAAO,YAAY;AAAA,QACxD,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC;AACA,aAAO,EAAE,OAAO,OAAO,SAAS,GAAG;AAAA,IACrC;AAAA,IACA,MAAM,MAAM,MAAM;AAChB,YAAM,KAAK,EAAE,MAAM,SAAS,KAAK,CAAC;AAClC,gBAAU,OAAO;AACjB,aAAO;AACP,eAAS,EAAE,GAAG,QAAQ,OAAO,YAAY,UAAU,EAAE,OAAO,YAAY,MAAM,GAAG,OAAO,YAAY,EAAE;AAAA,IACxG;AAAA,IACA,MAAM,MAAM,OAAO;AACjB,YAAM,KAAK,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC;AACzC,gBAAU,OAAO;AAAA,IACnB;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,OAAO,WAAW,CAAC,MAA0B,SAAS,EAAG;AAC5E;","names":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { DemoContentStatus } from './api/demo-content';
|
|
2
|
+
/**
|
|
3
|
+
* Keeps asking the server how a demo-content job is going until it stops.
|
|
4
|
+
*
|
|
5
|
+
* No React in it, and the clock and the tab are handed in, so a test moves time
|
|
6
|
+
* by hand. The rules:
|
|
7
|
+
*
|
|
8
|
+
* - Asks once straight away, which is also what picks up a job that was
|
|
9
|
+
* running when the page was closed and opened again.
|
|
10
|
+
* - Keeps asking only while the job is running (`applying` or `clearing`).
|
|
11
|
+
* - A hidden tab stops asking and asks once when it is shown again.
|
|
12
|
+
* - Requests never overlap; the next is timed from the end of the last.
|
|
13
|
+
* - A failed ask is not the end of the job: it backs off and tries again, and
|
|
14
|
+
* reports the error without losing the last good answer.
|
|
15
|
+
*/
|
|
16
|
+
export interface DemoPollEnv {
|
|
17
|
+
isVisible: () => boolean;
|
|
18
|
+
onVisibilityChange: (listener: () => void) => () => void;
|
|
19
|
+
setTimer: (run: () => void, ms: number) => unknown;
|
|
20
|
+
clearTimer: (timer: unknown) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare function browserDemoPollEnv(): DemoPollEnv;
|
|
23
|
+
export interface DemoPollHandlers {
|
|
24
|
+
read: () => Promise<DemoContentStatus>;
|
|
25
|
+
onStatus: (status: DemoContentStatus) => void;
|
|
26
|
+
onError: (error: unknown) => void;
|
|
27
|
+
}
|
|
28
|
+
export interface DemoPoller {
|
|
29
|
+
/** Ask now (after the merchant starts or clears), then keep going while busy. */
|
|
30
|
+
refresh: () => void;
|
|
31
|
+
stop: () => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function startDemoPoller(handlers: DemoPollHandlers, env?: DemoPollEnv): DemoPoller;
|