@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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const fieldTypeSchema = z.enum([
|
|
3
|
+
"text",
|
|
4
|
+
"textarea",
|
|
5
|
+
"richtext",
|
|
6
|
+
"number",
|
|
7
|
+
"currency",
|
|
8
|
+
"boolean",
|
|
9
|
+
"toggle",
|
|
10
|
+
"image",
|
|
11
|
+
"gallery",
|
|
12
|
+
"select",
|
|
13
|
+
"categorySelect",
|
|
14
|
+
"resourceSelect",
|
|
15
|
+
"contentSelect",
|
|
16
|
+
"multiselect",
|
|
17
|
+
"tags",
|
|
18
|
+
"date",
|
|
19
|
+
"datetime",
|
|
20
|
+
"time",
|
|
21
|
+
"duration",
|
|
22
|
+
"url",
|
|
23
|
+
"email",
|
|
24
|
+
"phone",
|
|
25
|
+
"color",
|
|
26
|
+
"icon",
|
|
27
|
+
"array",
|
|
28
|
+
"json",
|
|
29
|
+
"relation",
|
|
30
|
+
"component",
|
|
31
|
+
"repeatable"
|
|
32
|
+
]);
|
|
33
|
+
const selectOptionSchema = z.object({
|
|
34
|
+
label: z.string(),
|
|
35
|
+
value: z.string(),
|
|
36
|
+
icon: z.string().optional(),
|
|
37
|
+
color: z.string().optional()
|
|
38
|
+
});
|
|
39
|
+
const validationRuleSchema = z.object({
|
|
40
|
+
type: z.enum([
|
|
41
|
+
"required",
|
|
42
|
+
"min",
|
|
43
|
+
"max",
|
|
44
|
+
"minLength",
|
|
45
|
+
"maxLength",
|
|
46
|
+
"pattern",
|
|
47
|
+
"custom"
|
|
48
|
+
]),
|
|
49
|
+
value: z.union([z.number(), z.string()]).optional(),
|
|
50
|
+
message: z.string().optional()
|
|
51
|
+
});
|
|
52
|
+
const contentFieldSchema = z.lazy(
|
|
53
|
+
() => z.object({
|
|
54
|
+
name: z.string().min(1, "Field name is required"),
|
|
55
|
+
label: z.string().min(1, "Field label is required"),
|
|
56
|
+
type: fieldTypeSchema,
|
|
57
|
+
description: z.string().optional(),
|
|
58
|
+
placeholder: z.string().optional(),
|
|
59
|
+
required: z.boolean().optional(),
|
|
60
|
+
validations: z.array(validationRuleSchema).optional(),
|
|
61
|
+
options: z.array(selectOptionSchema).optional(),
|
|
62
|
+
min: z.number().optional(),
|
|
63
|
+
max: z.number().optional(),
|
|
64
|
+
step: z.number().optional(),
|
|
65
|
+
prefix: z.string().optional(),
|
|
66
|
+
suffix: z.string().optional(),
|
|
67
|
+
showIf: z.object({
|
|
68
|
+
field: z.string(),
|
|
69
|
+
equals: z.unknown().optional(),
|
|
70
|
+
notEquals: z.unknown().optional(),
|
|
71
|
+
in: z.array(z.unknown()).optional()
|
|
72
|
+
}).optional(),
|
|
73
|
+
width: z.enum(["full", "half", "third"]).optional(),
|
|
74
|
+
group: z.string().optional(),
|
|
75
|
+
relation: z.object({
|
|
76
|
+
endpoint: z.string(),
|
|
77
|
+
displayField: z.string(),
|
|
78
|
+
multiple: z.boolean().optional()
|
|
79
|
+
}).optional(),
|
|
80
|
+
fields: z.array(z.lazy(() => contentFieldSchema)).optional(),
|
|
81
|
+
maxItems: z.number().optional(),
|
|
82
|
+
minItems: z.number().optional(),
|
|
83
|
+
defaultValue: z.unknown().optional(),
|
|
84
|
+
// Allow additional properties for template-specific extensions
|
|
85
|
+
categoryKey: z.string().optional()
|
|
86
|
+
}).passthrough()
|
|
87
|
+
);
|
|
88
|
+
const fieldGroupSchema = z.object({
|
|
89
|
+
name: z.string().min(1),
|
|
90
|
+
label: z.string(),
|
|
91
|
+
description: z.string().optional(),
|
|
92
|
+
collapsed: z.boolean().optional(),
|
|
93
|
+
fields: z.array(z.string())
|
|
94
|
+
});
|
|
95
|
+
const contentBehaviorSchema = z.enum([
|
|
96
|
+
"sellable",
|
|
97
|
+
"bookable",
|
|
98
|
+
"giftable",
|
|
99
|
+
"subscribable",
|
|
100
|
+
"leadCapture",
|
|
101
|
+
"downloadable",
|
|
102
|
+
"shippable",
|
|
103
|
+
"rentable",
|
|
104
|
+
"ticketed",
|
|
105
|
+
"billable",
|
|
106
|
+
"publishable",
|
|
107
|
+
"showcase"
|
|
108
|
+
]);
|
|
109
|
+
const contentTypeSchema = z.object({
|
|
110
|
+
name: z.string().min(1, "Content type name is required"),
|
|
111
|
+
singularName: z.string().optional(),
|
|
112
|
+
description: z.string().optional(),
|
|
113
|
+
icon: z.string().optional(),
|
|
114
|
+
apiEndpoint: z.string().min(1, "API endpoint is required"),
|
|
115
|
+
contentTypeKey: z.string().optional(),
|
|
116
|
+
behaviors: z.array(contentBehaviorSchema).optional(),
|
|
117
|
+
bookingModel: z.enum(["time-slot", "date-range"]).optional(),
|
|
118
|
+
excludeGroups: z.array(z.string()).optional(),
|
|
119
|
+
fields: z.array(contentFieldSchema).min(1, "Content type must have at least one field"),
|
|
120
|
+
fieldGroups: z.array(fieldGroupSchema).optional(),
|
|
121
|
+
listFields: z.array(z.string()).optional(),
|
|
122
|
+
searchFields: z.array(z.string()).optional(),
|
|
123
|
+
listView: z.record(z.string(), z.unknown()).optional(),
|
|
124
|
+
// ListViewConfig is complex, validate structurally
|
|
125
|
+
defaultSort: z.object({
|
|
126
|
+
field: z.string(),
|
|
127
|
+
direction: z.enum(["asc", "desc"])
|
|
128
|
+
}).optional()
|
|
129
|
+
}).passthrough();
|
|
130
|
+
const dashboardModuleSchema = z.object({
|
|
131
|
+
id: z.string().min(1, "Module ID is required"),
|
|
132
|
+
// Support both old (title) and new (label) formats
|
|
133
|
+
label: z.string().optional(),
|
|
134
|
+
title: z.string().optional(),
|
|
135
|
+
name: z.string().optional(),
|
|
136
|
+
// Support both old (/admin/*) and new (/dashboard/*) path formats
|
|
137
|
+
path: z.string().min(1, "Module path is required"),
|
|
138
|
+
icon: z.string().optional(),
|
|
139
|
+
description: z.string().optional(),
|
|
140
|
+
badge: z.string().optional(),
|
|
141
|
+
contentType: z.string().optional(),
|
|
142
|
+
enabled: z.boolean().optional()
|
|
143
|
+
// old format
|
|
144
|
+
}).refine((mod) => mod.label || mod.title || mod.name, {
|
|
145
|
+
message: "Module must have at least one of: label, title, or name"
|
|
146
|
+
});
|
|
147
|
+
const settingsFieldSchema = z.object({
|
|
148
|
+
name: z.string().min(1),
|
|
149
|
+
label: z.string().min(1),
|
|
150
|
+
type: fieldTypeSchema,
|
|
151
|
+
description: z.string().optional(),
|
|
152
|
+
placeholder: z.string().optional(),
|
|
153
|
+
required: z.boolean().optional(),
|
|
154
|
+
default: z.unknown().optional(),
|
|
155
|
+
options: z.array(selectOptionSchema).optional()
|
|
156
|
+
}).passthrough();
|
|
157
|
+
const settingsSectionSchema = z.object({
|
|
158
|
+
label: z.string().optional(),
|
|
159
|
+
title: z.string().optional(),
|
|
160
|
+
// old format
|
|
161
|
+
description: z.string().optional(),
|
|
162
|
+
fields: z.union([
|
|
163
|
+
z.array(settingsFieldSchema),
|
|
164
|
+
z.record(z.string(), z.unknown())
|
|
165
|
+
// object-keyed fields (old format)
|
|
166
|
+
]).optional()
|
|
167
|
+
}).passthrough();
|
|
168
|
+
const siteSettingsSchema = z.record(z.string(), settingsSectionSchema);
|
|
169
|
+
const pageContentSchema = z.record(z.string(), z.unknown()).optional();
|
|
170
|
+
const dashboardSchemaValidator = z.object({
|
|
171
|
+
contentTypes: z.record(z.string(), contentTypeSchema).optional(),
|
|
172
|
+
behaviors: z.array(contentBehaviorSchema).optional(),
|
|
173
|
+
siteSettings: siteSettingsSchema.optional(),
|
|
174
|
+
pageContent: pageContentSchema,
|
|
175
|
+
dashboardModules: z.array(dashboardModuleSchema).min(1, "At least one dashboard module is required")
|
|
176
|
+
}).refine(
|
|
177
|
+
(schema) => {
|
|
178
|
+
const modules = schema.dashboardModules || [];
|
|
179
|
+
const hasOverview = modules.some(
|
|
180
|
+
(m) => m.id === "overview" || m.path === "/dashboard" || m.path === "/admin" || m.path === "/overview"
|
|
181
|
+
);
|
|
182
|
+
return hasOverview;
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
message: 'dashboardModules must include an overview module (id="overview" or path="/dashboard")',
|
|
186
|
+
path: ["dashboardModules"]
|
|
187
|
+
}
|
|
188
|
+
);
|
|
189
|
+
function validateDashboardSchema(schema) {
|
|
190
|
+
const errors = [];
|
|
191
|
+
const warnings = [];
|
|
192
|
+
if (!schema || typeof schema !== "object") {
|
|
193
|
+
return {
|
|
194
|
+
valid: false,
|
|
195
|
+
errors: [{ path: "", message: "Schema must be a non-null object" }],
|
|
196
|
+
warnings: []
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const result = dashboardSchemaValidator.safeParse(schema);
|
|
200
|
+
if (!result.success) {
|
|
201
|
+
for (const issue of result.error.issues) {
|
|
202
|
+
errors.push({
|
|
203
|
+
path: issue.path.join("."),
|
|
204
|
+
message: issue.message
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const s = schema;
|
|
209
|
+
if (!s.contentTypes || Object.keys(s.contentTypes).length === 0) {
|
|
210
|
+
warnings.push(
|
|
211
|
+
"No contentTypes defined \u2014 content management modules will be empty"
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
if (!s.siteSettings || Object.keys(s.siteSettings).length === 0) {
|
|
215
|
+
warnings.push(
|
|
216
|
+
"No siteSettings defined \u2014 settings pages will have no configurable fields"
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
if (!s.behaviors || Array.isArray(s.behaviors) && s.behaviors.length === 0) {
|
|
220
|
+
warnings.push(
|
|
221
|
+
"No behaviors defined \u2014 behavior-gated features (inventory, bookings) may not appear"
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
const modules = s.dashboardModules || [];
|
|
225
|
+
const hasOrders = modules.some((m) => m.id === "orders");
|
|
226
|
+
if (!hasOrders) {
|
|
227
|
+
warnings.push(
|
|
228
|
+
"No orders module in dashboardModules \u2014 orders will only appear via platform injection"
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
valid: errors.length === 0,
|
|
233
|
+
errors,
|
|
234
|
+
warnings
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
function validateTemplateConfig(apiTemplate) {
|
|
238
|
+
const schemaSubset = {
|
|
239
|
+
contentTypes: apiTemplate.contentTypes,
|
|
240
|
+
behaviors: apiTemplate.behaviors,
|
|
241
|
+
siteSettings: apiTemplate.siteSettings,
|
|
242
|
+
pageContent: apiTemplate.pageContent,
|
|
243
|
+
dashboardModules: apiTemplate.dashboardModules
|
|
244
|
+
};
|
|
245
|
+
return validateDashboardSchema(schemaSubset);
|
|
246
|
+
}
|
|
247
|
+
export {
|
|
248
|
+
dashboardSchemaValidator,
|
|
249
|
+
validateDashboardSchema,
|
|
250
|
+
validateTemplateConfig
|
|
251
|
+
};
|
|
252
|
+
//# sourceMappingURL=schema-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema-validation.ts"],"sourcesContent":["/**\n * Dashboard Schema Validation\n *\n * Zod-based validation for dashboard-schema.json files.\n * Validates the structural integrity of template configurations\n * to prevent silent rendering failures and inaccessible platform modules.\n *\n * Used at:\n * - Template load time (in template-context.tsx)\n * - Build/CI time (can be imported by validation scripts)\n */\n\nimport { z } from 'zod';\n\n// ============================================\n// Field-level schemas\n// ============================================\n\nconst fieldTypeSchema = z.enum([\n 'text',\n 'textarea',\n 'richtext',\n 'number',\n 'currency',\n 'boolean',\n 'toggle',\n 'image',\n 'gallery',\n 'select',\n 'categorySelect',\n 'resourceSelect',\n 'contentSelect',\n 'multiselect',\n 'tags',\n 'date',\n 'datetime',\n 'time',\n 'duration',\n 'url',\n 'email',\n 'phone',\n 'color',\n 'icon',\n 'array',\n 'json',\n 'relation',\n 'component',\n 'repeatable',\n]);\n\nconst selectOptionSchema = z.object({\n label: z.string(),\n value: z.string(),\n icon: z.string().optional(),\n color: z.string().optional(),\n});\n\nconst validationRuleSchema = z.object({\n type: z.enum([\n 'required',\n 'min',\n 'max',\n 'minLength',\n 'maxLength',\n 'pattern',\n 'custom',\n ]),\n value: z.union([z.number(), z.string()]).optional(),\n message: z.string().optional(),\n});\n\nconst contentFieldSchema: z.ZodType<Record<string, unknown>> = z.lazy(() =>\n z\n .object({\n name: z.string().min(1, 'Field name is required'),\n label: z.string().min(1, 'Field label is required'),\n type: fieldTypeSchema,\n description: z.string().optional(),\n placeholder: z.string().optional(),\n required: z.boolean().optional(),\n validations: z.array(validationRuleSchema).optional(),\n options: z.array(selectOptionSchema).optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n prefix: z.string().optional(),\n suffix: z.string().optional(),\n showIf: z\n .object({\n field: z.string(),\n equals: z.unknown().optional(),\n notEquals: z.unknown().optional(),\n in: z.array(z.unknown()).optional(),\n })\n .optional(),\n width: z.enum(['full', 'half', 'third']).optional(),\n group: z.string().optional(),\n relation: z\n .object({\n endpoint: z.string(),\n displayField: z.string(),\n multiple: z.boolean().optional(),\n })\n .optional(),\n fields: z.array(z.lazy(() => contentFieldSchema)).optional(),\n maxItems: z.number().optional(),\n minItems: z.number().optional(),\n defaultValue: z.unknown().optional(),\n // Allow additional properties for template-specific extensions\n categoryKey: z.string().optional(),\n })\n .passthrough(),\n);\n\nconst fieldGroupSchema = z.object({\n name: z.string().min(1),\n label: z.string(),\n description: z.string().optional(),\n collapsed: z.boolean().optional(),\n fields: z.array(z.string()),\n});\n\n// ============================================\n// Content type schema\n// ============================================\n\nconst contentBehaviorSchema = z.enum([\n 'sellable',\n 'bookable',\n 'giftable',\n 'subscribable',\n 'leadCapture',\n 'downloadable',\n 'shippable',\n 'rentable',\n 'ticketed',\n 'billable',\n 'publishable',\n 'showcase',\n]);\n\nconst contentTypeSchema = z\n .object({\n name: z.string().min(1, 'Content type name is required'),\n singularName: z.string().optional(),\n description: z.string().optional(),\n icon: z.string().optional(),\n apiEndpoint: z.string().min(1, 'API endpoint is required'),\n contentTypeKey: z.string().optional(),\n behaviors: z.array(contentBehaviorSchema).optional(),\n bookingModel: z.enum(['time-slot', 'date-range']).optional(),\n excludeGroups: z.array(z.string()).optional(),\n fields: z\n .array(contentFieldSchema)\n .min(1, 'Content type must have at least one field'),\n fieldGroups: z.array(fieldGroupSchema).optional(),\n listFields: z.array(z.string()).optional(),\n searchFields: z.array(z.string()).optional(),\n listView: z.record(z.string(), z.unknown()).optional(), // ListViewConfig is complex, validate structurally\n defaultSort: z\n .object({\n field: z.string(),\n direction: z.enum(['asc', 'desc']),\n })\n .optional(),\n })\n .passthrough();\n\n// ============================================\n// Dashboard module schema\n// ============================================\n\nconst dashboardModuleSchema = z\n .object({\n id: z.string().min(1, 'Module ID is required'),\n // Support both old (title) and new (label) formats\n label: z.string().optional(),\n title: z.string().optional(),\n name: z.string().optional(),\n // Support both old (/admin/*) and new (/dashboard/*) path formats\n path: z.string().min(1, 'Module path is required'),\n icon: z.string().optional(),\n description: z.string().optional(),\n badge: z.string().optional(),\n contentType: z.string().optional(),\n enabled: z.boolean().optional(), // old format\n })\n .refine((mod) => mod.label || mod.title || mod.name, {\n message: 'Module must have at least one of: label, title, or name',\n });\n\n// ============================================\n// Site settings schema\n// ============================================\n\nconst settingsFieldSchema = z\n .object({\n name: z.string().min(1),\n label: z.string().min(1),\n type: fieldTypeSchema,\n description: z.string().optional(),\n placeholder: z.string().optional(),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n options: z.array(selectOptionSchema).optional(),\n })\n .passthrough();\n\nconst settingsSectionSchema = z\n .object({\n label: z.string().optional(),\n title: z.string().optional(), // old format\n description: z.string().optional(),\n fields: z\n .union([\n z.array(settingsFieldSchema),\n z.record(z.string(), z.unknown()), // object-keyed fields (old format)\n ])\n .optional(),\n })\n .passthrough(); // Allow categoryManager and other custom section types\n\nconst siteSettingsSchema = z.record(z.string(), settingsSectionSchema);\n\n// ============================================\n// Page content schema\n// ============================================\n\nconst pageContentSchema = z.record(z.string(), z.unknown()).optional();\n\n// ============================================\n// Full dashboard-schema.json validation\n// ============================================\n\n/**\n * The complete Zod schema for dashboard-schema.json files.\n *\n * Required structure:\n * - dashboardModules: array with ≥1 entry (must include overview)\n * - Either contentTypes OR behaviors must be present (new-format schemas)\n * - siteSettings: at least 1 section with fields\n *\n * Old-format schemas (serenity-spa, noteable) won't have contentTypes,\n * but are still valid if they have dashboardModules + siteSettings.\n */\nexport const dashboardSchemaValidator = z\n .object({\n contentTypes: z.record(z.string(), contentTypeSchema).optional(),\n behaviors: z.array(contentBehaviorSchema).optional(),\n siteSettings: siteSettingsSchema.optional(),\n pageContent: pageContentSchema,\n dashboardModules: z\n .array(dashboardModuleSchema)\n .min(1, 'At least one dashboard module is required'),\n })\n .refine(\n (schema) => {\n // Must have at least dashboardModules with an overview or equivalent\n const modules = schema.dashboardModules || [];\n const hasOverview = modules.some(\n (m) =>\n m.id === 'overview' ||\n m.path === '/dashboard' ||\n m.path === '/admin' ||\n m.path === '/overview',\n );\n return hasOverview;\n },\n {\n message:\n 'dashboardModules must include an overview module (id=\"overview\" or path=\"/dashboard\")',\n path: ['dashboardModules'],\n },\n );\n\n// ============================================\n// Validation types and helpers\n// ============================================\n\nexport interface SchemaValidationError {\n path: string;\n message: string;\n}\n\nexport interface SchemaValidationResult {\n valid: boolean;\n errors: SchemaValidationError[];\n warnings: string[];\n}\n\n/**\n * Validate a dashboard-schema.json object using the Zod schema.\n *\n * Returns structured errors (blocking) and warnings (non-blocking).\n * - Errors: schema is structurally invalid and will cause rendering failures\n * - Warnings: schema is valid but missing recommended sections\n */\nexport function validateDashboardSchema(\n schema: unknown,\n): SchemaValidationResult {\n const errors: SchemaValidationError[] = [];\n const warnings: string[] = [];\n\n // Basic type check\n if (!schema || typeof schema !== 'object') {\n return {\n valid: false,\n errors: [{ path: '', message: 'Schema must be a non-null object' }],\n warnings: [],\n };\n }\n\n // Run Zod validation\n const result = dashboardSchemaValidator.safeParse(schema);\n if (!result.success) {\n for (const issue of result.error.issues) {\n errors.push({\n path: issue.path.join('.'),\n message: issue.message,\n });\n }\n }\n\n // Additional warnings (non-blocking recommendations)\n const s = schema as Record<string, unknown>;\n\n if (!s.contentTypes || Object.keys(s.contentTypes as object).length === 0) {\n warnings.push(\n 'No contentTypes defined — content management modules will be empty',\n );\n }\n\n if (!s.siteSettings || Object.keys(s.siteSettings as object).length === 0) {\n warnings.push(\n 'No siteSettings defined — settings pages will have no configurable fields',\n );\n }\n\n if (\n !s.behaviors ||\n (Array.isArray(s.behaviors) && s.behaviors.length === 0)\n ) {\n warnings.push(\n 'No behaviors defined — behavior-gated features (inventory, bookings) may not appear',\n );\n }\n\n const modules = (s.dashboardModules || []) as Array<Record<string, unknown>>;\n const hasOrders = modules.some((m) => m.id === 'orders');\n if (!hasOrders) {\n warnings.push(\n 'No orders module in dashboardModules — orders will only appear via platform injection',\n );\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n}\n\n/**\n * Validate a template API response (TemplateConfigAPI) structure.\n *\n * This is used at runtime when the dashboard fetches a template schema.\n * It replaces the ad-hoc validateTemplateSchema in template-context.tsx\n * with proper Zod-based validation.\n */\nexport function validateTemplateConfig(\n apiTemplate: Record<string, unknown>,\n): SchemaValidationResult {\n // The API template has additional fields (id, name, category, etc.)\n // We only validate the dashboard-schema portion\n const schemaSubset = {\n contentTypes: apiTemplate.contentTypes,\n behaviors: apiTemplate.behaviors,\n siteSettings: apiTemplate.siteSettings,\n pageContent: apiTemplate.pageContent,\n dashboardModules: apiTemplate.dashboardModules,\n };\n\n return validateDashboardSchema(schemaSubset);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service areas: the places a business will actually go.
|
|
3
|
+
*
|
|
4
|
+
* A row in `location_catalog` must carry a country, a state and a city, so
|
|
5
|
+
* "everywhere in Lagos" had nowhere to live. The only way to cover a state was
|
|
6
|
+
* to add every city in it from the geo list — dozens of rows to manage, and
|
|
7
|
+
* silent about any city that list has never heard of. Since potter-api now
|
|
8
|
+
* refuses an order outside these areas, a city the list missed is a real order
|
|
9
|
+
* turned away.
|
|
10
|
+
*
|
|
11
|
+
* A wildcard city stands for the whole state, and a wildcard state for the
|
|
12
|
+
* whole country. Kept in step with `check-service-area.usecase.ts`, which
|
|
13
|
+
* accepts the same set on the way in.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SERVICE_AREA_WILDCARD = "*";
|
|
16
|
+
export declare function isServiceAreaWildcard(value?: string | null): boolean;
|
|
17
|
+
export interface ServiceAreaLike {
|
|
18
|
+
city: string;
|
|
19
|
+
state: string;
|
|
20
|
+
country: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* What to call a row on screen.
|
|
24
|
+
*
|
|
25
|
+
* Never the asterisk. A merchant wrote "everywhere in Lagos" and should read it
|
|
26
|
+
* back in those words, not in the symbol the database happens to store.
|
|
27
|
+
*/
|
|
28
|
+
export declare function serviceAreaLabel(area: ServiceAreaLike): string;
|
|
29
|
+
/** The line under the label: where this sits, without repeating it. */
|
|
30
|
+
export declare function serviceAreaContext(area: ServiceAreaLike): string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const SERVICE_AREA_WILDCARD = "*";
|
|
2
|
+
const WILDCARDS = /* @__PURE__ */ new Set(["*", "all", "any", "anywhere", "everywhere"]);
|
|
3
|
+
function isServiceAreaWildcard(value) {
|
|
4
|
+
return WILDCARDS.has((value ?? "").trim().toLowerCase());
|
|
5
|
+
}
|
|
6
|
+
function serviceAreaLabel(area) {
|
|
7
|
+
if (isServiceAreaWildcard(area.city)) {
|
|
8
|
+
return isServiceAreaWildcard(area.state) ? `Everywhere in ${area.country}` : `Everywhere in ${area.state}`;
|
|
9
|
+
}
|
|
10
|
+
return area.city;
|
|
11
|
+
}
|
|
12
|
+
function serviceAreaContext(area) {
|
|
13
|
+
if (isServiceAreaWildcard(area.city)) {
|
|
14
|
+
return isServiceAreaWildcard(area.state) ? "" : area.country;
|
|
15
|
+
}
|
|
16
|
+
return [area.state, area.country].filter(Boolean).join(", ");
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
SERVICE_AREA_WILDCARD,
|
|
20
|
+
isServiceAreaWildcard,
|
|
21
|
+
serviceAreaContext,
|
|
22
|
+
serviceAreaLabel
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=service-areas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/service-areas.ts"],"sourcesContent":["/**\n * Service areas: the places a business will actually go.\n *\n * A row in `location_catalog` must carry a country, a state and a city, so\n * \"everywhere in Lagos\" had nowhere to live. The only way to cover a state was\n * to add every city in it from the geo list — dozens of rows to manage, and\n * silent about any city that list has never heard of. Since potter-api now\n * refuses an order outside these areas, a city the list missed is a real order\n * turned away.\n *\n * A wildcard city stands for the whole state, and a wildcard state for the\n * whole country. Kept in step with `check-service-area.usecase.ts`, which\n * accepts the same set on the way in.\n */\nexport const SERVICE_AREA_WILDCARD = '*';\n\nconst WILDCARDS = new Set(['*', 'all', 'any', 'anywhere', 'everywhere']);\n\nexport function isServiceAreaWildcard(value?: string | null): boolean {\n return WILDCARDS.has((value ?? '').trim().toLowerCase());\n}\n\nexport interface ServiceAreaLike {\n city: string;\n state: string;\n country: string;\n}\n\n/**\n * What to call a row on screen.\n *\n * Never the asterisk. A merchant wrote \"everywhere in Lagos\" and should read it\n * back in those words, not in the symbol the database happens to store.\n */\nexport function serviceAreaLabel(area: ServiceAreaLike): string {\n if (isServiceAreaWildcard(area.city)) {\n return isServiceAreaWildcard(area.state)\n ? `Everywhere in ${area.country}`\n : `Everywhere in ${area.state}`;\n }\n return area.city;\n}\n\n/** The line under the label: where this sits, without repeating it. */\nexport function serviceAreaContext(area: ServiceAreaLike): string {\n if (isServiceAreaWildcard(area.city)) {\n return isServiceAreaWildcard(area.state) ? '' : area.country;\n }\n return [area.state, area.country].filter(Boolean).join(', ');\n}\n"],"mappings":"AAcO,MAAM,wBAAwB;AAErC,MAAM,YAAY,oBAAI,IAAI,CAAC,KAAK,OAAO,OAAO,YAAY,YAAY,CAAC;AAEhE,SAAS,sBAAsB,OAAgC;AACpE,SAAO,UAAU,KAAK,SAAS,IAAI,KAAK,EAAE,YAAY,CAAC;AACzD;AAcO,SAAS,iBAAiB,MAA+B;AAC9D,MAAI,sBAAsB,KAAK,IAAI,GAAG;AACpC,WAAO,sBAAsB,KAAK,KAAK,IACnC,iBAAiB,KAAK,OAAO,KAC7B,iBAAiB,KAAK,KAAK;AAAA,EACjC;AACA,SAAO,KAAK;AACd;AAGO,SAAS,mBAAmB,MAA+B;AAChE,MAAI,sBAAsB,KAAK,IAAI,GAAG;AACpC,WAAO,sBAAsB,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,EACvD;AACA,SAAO,CAAC,KAAK,OAAO,KAAK,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC7D;","names":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export type ServiceCaseStatus = 'open' | 'waiting_on_potter' | 'waiting_on_tenant' | 'waiting_on_customer' | 'resolved' | 'closed';
|
|
2
|
+
export type ServiceCaseCategory = 'account_access' | 'billing' | 'technical' | 'feature_request' | 'order_issue' | 'booking_issue' | 'delivery_issue' | 'refund_request' | 'product_question' | 'general';
|
|
3
|
+
export interface ServiceCaseAttachment {
|
|
4
|
+
url: string;
|
|
5
|
+
name: string;
|
|
6
|
+
mimeType: string;
|
|
7
|
+
size: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ServiceCaseMessage {
|
|
10
|
+
id: string;
|
|
11
|
+
authorType: 'merchant' | 'platform_admin' | 'system';
|
|
12
|
+
authorId: string | null;
|
|
13
|
+
visibility: 'participants';
|
|
14
|
+
body: string;
|
|
15
|
+
attachments: ServiceCaseAttachment[];
|
|
16
|
+
createdAt: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ServiceCase {
|
|
19
|
+
id: string;
|
|
20
|
+
reference: string;
|
|
21
|
+
type: 'potter_support';
|
|
22
|
+
tenantId: string;
|
|
23
|
+
reporterName: string;
|
|
24
|
+
reporterEmail: string;
|
|
25
|
+
subject: string;
|
|
26
|
+
description: string;
|
|
27
|
+
category: ServiceCaseCategory;
|
|
28
|
+
priority: 'low' | 'normal' | 'high' | 'urgent';
|
|
29
|
+
status: ServiceCaseStatus;
|
|
30
|
+
firstResponseDueAt: string | null;
|
|
31
|
+
resolutionDueAt: string | null;
|
|
32
|
+
firstRespondedAt: string | null;
|
|
33
|
+
resolvedAt: string | null;
|
|
34
|
+
closedAt: string | null;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
updatedAt: string;
|
|
37
|
+
messages?: ServiceCaseMessage[];
|
|
38
|
+
}
|
|
39
|
+
export interface ServiceCasePage {
|
|
40
|
+
items: ServiceCase[];
|
|
41
|
+
total: number;
|
|
42
|
+
page: number;
|
|
43
|
+
pageSize: number;
|
|
44
|
+
}
|
|
45
|
+
export interface CreateServiceCaseInput {
|
|
46
|
+
subject: string;
|
|
47
|
+
message: string;
|
|
48
|
+
/**
|
|
49
|
+
* Optional, and the merchant is never asked for one. Ten categories above a
|
|
50
|
+
* message box hands our triage to the person with the problem; a case lands
|
|
51
|
+
* as `general` and is re-filed from the sentence it was written in.
|
|
52
|
+
*/
|
|
53
|
+
category?: ServiceCaseCategory;
|
|
54
|
+
/** A voice note, a screenshot, or both, on the case's first message. */
|
|
55
|
+
attachments?: ServiceCaseAttachment[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* ON UNLESS TURNED OFF, and the inversion is deliberate.
|
|
59
|
+
*
|
|
60
|
+
* This read `=== '1'`, which is the right shape for a feature being rolled out
|
|
61
|
+
* and the wrong one for a feature that is finished: `/dashboard/support`
|
|
62
|
+
* answers 404 until somebody remembers an environment variable, and a merchant
|
|
63
|
+
* who followed a notification into a case would land on "page not found"
|
|
64
|
+
* rather than on their case. Off is still one variable away —
|
|
65
|
+
* `NEXT_PUBLIC_SERVICE_OPERATIONS_ENABLED=0` — and it must match the api's
|
|
66
|
+
* `SERVICE_OPERATIONS_ENABLED`, which defaults the same way.
|
|
67
|
+
*/
|
|
68
|
+
export declare function isServiceOperationsEnabled(): boolean;
|
|
69
|
+
export declare const serviceOperationsApi: {
|
|
70
|
+
list(tenantSlug: string, params?: {
|
|
71
|
+
status?: ServiceCaseStatus;
|
|
72
|
+
search?: string;
|
|
73
|
+
page?: number;
|
|
74
|
+
}): Promise<ServiceCasePage>;
|
|
75
|
+
get(tenantSlug: string, caseId: string): Promise<ServiceCase>;
|
|
76
|
+
create(tenantSlug: string, input: CreateServiceCaseInput): Promise<ServiceCase>;
|
|
77
|
+
reply(tenantSlug: string, caseId: string, message: string, attachments?: ServiceCaseAttachment[]): Promise<ServiceCase>;
|
|
78
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { apiFetch } from "./api";
|
|
2
|
+
function isServiceOperationsEnabled() {
|
|
3
|
+
return process.env.NEXT_PUBLIC_SERVICE_OPERATIONS_ENABLED !== "0";
|
|
4
|
+
}
|
|
5
|
+
const basePath = "/service-operations/support-cases";
|
|
6
|
+
const serviceOperationsApi = {
|
|
7
|
+
list(tenantSlug, params = {}) {
|
|
8
|
+
const query = new URLSearchParams();
|
|
9
|
+
if (params.status) query.set("status", params.status);
|
|
10
|
+
if (params.search) query.set("search", params.search);
|
|
11
|
+
if (params.page) query.set("page", String(params.page));
|
|
12
|
+
const suffix = query.size ? `?${query.toString()}` : "";
|
|
13
|
+
return apiFetch(`${basePath}${suffix}`, { tenantSlug });
|
|
14
|
+
},
|
|
15
|
+
get(tenantSlug, caseId) {
|
|
16
|
+
return apiFetch(`${basePath}/${caseId}`, { tenantSlug });
|
|
17
|
+
},
|
|
18
|
+
create(tenantSlug, input) {
|
|
19
|
+
return apiFetch(basePath, {
|
|
20
|
+
method: "POST",
|
|
21
|
+
tenantSlug,
|
|
22
|
+
body: JSON.stringify(input)
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
reply(tenantSlug, caseId, message, attachments) {
|
|
26
|
+
return apiFetch(`${basePath}/${caseId}/messages`, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
tenantSlug,
|
|
29
|
+
body: JSON.stringify({ message, attachments })
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
isServiceOperationsEnabled,
|
|
35
|
+
serviceOperationsApi
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=service-operations-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/service-operations-api.ts"],"sourcesContent":["import { apiFetch } from './api';\n\nexport type ServiceCaseStatus =\n | 'open'\n | 'waiting_on_potter'\n | 'waiting_on_tenant'\n | 'waiting_on_customer'\n | 'resolved'\n | 'closed';\n\nexport type ServiceCaseCategory =\n | 'account_access'\n | 'billing'\n | 'technical'\n | 'feature_request'\n | 'order_issue'\n | 'booking_issue'\n | 'delivery_issue'\n | 'refund_request'\n | 'product_question'\n | 'general';\n\nexport interface ServiceCaseAttachment {\n url: string;\n name: string;\n mimeType: string;\n size: number;\n}\n\nexport interface ServiceCaseMessage {\n id: string;\n authorType: 'merchant' | 'platform_admin' | 'system';\n authorId: string | null;\n visibility: 'participants';\n body: string;\n attachments: ServiceCaseAttachment[];\n createdAt: string;\n}\n\nexport interface ServiceCase {\n id: string;\n reference: string;\n type: 'potter_support';\n tenantId: string;\n reporterName: string;\n reporterEmail: string;\n subject: string;\n description: string;\n category: ServiceCaseCategory;\n priority: 'low' | 'normal' | 'high' | 'urgent';\n status: ServiceCaseStatus;\n firstResponseDueAt: string | null;\n resolutionDueAt: string | null;\n firstRespondedAt: string | null;\n resolvedAt: string | null;\n closedAt: string | null;\n createdAt: string;\n updatedAt: string;\n messages?: ServiceCaseMessage[];\n}\n\nexport interface ServiceCasePage {\n items: ServiceCase[];\n total: number;\n page: number;\n pageSize: number;\n}\n\nexport interface CreateServiceCaseInput {\n subject: string;\n message: string;\n /**\n * Optional, and the merchant is never asked for one. Ten categories above a\n * message box hands our triage to the person with the problem; a case lands\n * as `general` and is re-filed from the sentence it was written in.\n */\n category?: ServiceCaseCategory;\n /** A voice note, a screenshot, or both, on the case's first message. */\n attachments?: ServiceCaseAttachment[];\n}\n\n/**\n * ON UNLESS TURNED OFF, and the inversion is deliberate.\n *\n * This read `=== '1'`, which is the right shape for a feature being rolled out\n * and the wrong one for a feature that is finished: `/dashboard/support`\n * answers 404 until somebody remembers an environment variable, and a merchant\n * who followed a notification into a case would land on \"page not found\"\n * rather than on their case. Off is still one variable away —\n * `NEXT_PUBLIC_SERVICE_OPERATIONS_ENABLED=0` — and it must match the api's\n * `SERVICE_OPERATIONS_ENABLED`, which defaults the same way.\n */\nexport function isServiceOperationsEnabled() {\n return process.env.NEXT_PUBLIC_SERVICE_OPERATIONS_ENABLED !== '0';\n}\n\nconst basePath = '/service-operations/support-cases';\n\nexport const serviceOperationsApi = {\n list(\n tenantSlug: string,\n params: { status?: ServiceCaseStatus; search?: string; page?: number } = {},\n ) {\n const query = new URLSearchParams();\n if (params.status) query.set('status', params.status);\n if (params.search) query.set('search', params.search);\n if (params.page) query.set('page', String(params.page));\n const suffix = query.size ? `?${query.toString()}` : '';\n return apiFetch<ServiceCasePage>(`${basePath}${suffix}`, { tenantSlug });\n },\n\n get(tenantSlug: string, caseId: string) {\n return apiFetch<ServiceCase>(`${basePath}/${caseId}`, { tenantSlug });\n },\n\n create(tenantSlug: string, input: CreateServiceCaseInput) {\n return apiFetch<ServiceCase>(basePath, {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify(input),\n });\n },\n\n reply(\n tenantSlug: string,\n caseId: string,\n message: string,\n attachments?: ServiceCaseAttachment[],\n ) {\n return apiFetch<ServiceCase>(`${basePath}/${caseId}/messages`, {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify({ message, attachments }),\n });\n },\n};\n"],"mappings":"AAAA,SAAS,gBAAgB;AA4FlB,SAAS,6BAA6B;AAC3C,SAAO,QAAQ,IAAI,2CAA2C;AAChE;AAEA,MAAM,WAAW;AAEV,MAAM,uBAAuB;AAAA,EAClC,KACE,YACA,SAAyE,CAAC,GAC1E;AACA,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,OAAO,OAAQ,OAAM,IAAI,UAAU,OAAO,MAAM;AACpD,QAAI,OAAO,OAAQ,OAAM,IAAI,UAAU,OAAO,MAAM;AACpD,QAAI,OAAO,KAAM,OAAM,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtD,UAAM,SAAS,MAAM,OAAO,IAAI,MAAM,SAAS,CAAC,KAAK;AACrD,WAAO,SAA0B,GAAG,QAAQ,GAAG,MAAM,IAAI,EAAE,WAAW,CAAC;AAAA,EACzE;AAAA,EAEA,IAAI,YAAoB,QAAgB;AACtC,WAAO,SAAsB,GAAG,QAAQ,IAAI,MAAM,IAAI,EAAE,WAAW,CAAC;AAAA,EACtE;AAAA,EAEA,OAAO,YAAoB,OAA+B;AACxD,WAAO,SAAsB,UAAU;AAAA,MACrC,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,KAAK,UAAU,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MACE,YACA,QACA,SACA,aACA;AACA,WAAO,SAAsB,GAAG,QAAQ,IAAI,MAAM,aAAa;AAAA,MAC7D,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,SAAS,YAAY,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ContentBehavior } from '@withpotter/lib/template-types';
|
|
2
|
+
/**
|
|
3
|
+
* Settings relevance — the ONE place that decides which settings a given
|
|
4
|
+
* business type sees, and the ONE function that evaluates it.
|
|
5
|
+
*
|
|
6
|
+
* The problem this solves: settings-nav gating used to be hand-rolled in every
|
|
7
|
+
* surface that renders it (the desktop rail, the hub tabs, the mobile hub), so
|
|
8
|
+
* the rules drifted — a business could get Shipping in one place and not in
|
|
9
|
+
* another. Every surface now imports {@link passesGate} / {@link isSettingRelevant}
|
|
10
|
+
* and the atomic rules live in {@link SETTINGS_RELEVANCE}.
|
|
11
|
+
*
|
|
12
|
+
* A settings surface is either **universal** (relevant to any business with a
|
|
13
|
+
* storefront) or **situational** (only meaningful for certain operating models).
|
|
14
|
+
* Only situational settings appear in the map below; anything absent is
|
|
15
|
+
* universal and always shown.
|
|
16
|
+
*
|
|
17
|
+
* Design rationale (senior commerce review, 2026-07):
|
|
18
|
+
* - Shipping → only businesses that physically ship goods (`shippable`). A
|
|
19
|
+
* service, bookings, digital, or subscription business never
|
|
20
|
+
* ships, so the surface is pure noise for them.
|
|
21
|
+
* - Hours → only businesses that run on a bookable schedule or a venue with
|
|
22
|
+
* opening hours (`bookable`).
|
|
23
|
+
* - Locations → any business with a physical footprint: a venue to book, or a
|
|
24
|
+
* place goods ship from / are picked up (`bookable` OR `shippable`).
|
|
25
|
+
* - Operations → the desktop rail merges Hours + Locations into one entry, so it
|
|
26
|
+
* inherits the union (`bookable` OR `shippable`).
|
|
27
|
+
*
|
|
28
|
+
* Deliberately NOT gated (universal), and why hiding them would be wrong:
|
|
29
|
+
* - Taxes, Checkout — every monetized storefront can owe tax and take payment;
|
|
30
|
+
* you cannot infer "no tax / no checkout" from an operating model.
|
|
31
|
+
* - Policies, Domains, Notifications, Team, Billing, Features, Activity, General
|
|
32
|
+
* — apply to any storefront regardless of what it sells.
|
|
33
|
+
*/
|
|
34
|
+
export type BehaviorGate = {
|
|
35
|
+
/** Show only when the business has ALL of these behaviors. */
|
|
36
|
+
requires?: ContentBehavior | ContentBehavior[];
|
|
37
|
+
/** Show when the business has AT LEAST ONE of these. */
|
|
38
|
+
requiresAny?: ContentBehavior[];
|
|
39
|
+
};
|
|
40
|
+
/** Canonical atomic rules, keyed by settings id. Unlisted ids are universal. */
|
|
41
|
+
export declare const SETTINGS_RELEVANCE: Record<string, BehaviorGate>;
|
|
42
|
+
/**
|
|
43
|
+
* The gate shape the evaluator accepts. Looser than {@link BehaviorGate} (plain
|
|
44
|
+
* `string`s) so callers whose items already declare `requires`/`requiresAny` as
|
|
45
|
+
* strings — the sidebar's `SettingsItem`, hub-tabs' `HubTab` — pass without a
|
|
46
|
+
* cast, while {@link SETTINGS_RELEVANCE} stays authored with typed behaviors.
|
|
47
|
+
*/
|
|
48
|
+
type LooseGate = {
|
|
49
|
+
requires?: string | readonly string[];
|
|
50
|
+
requiresAny?: readonly string[];
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Does a business with `behaviors` pass this gate?
|
|
54
|
+
*
|
|
55
|
+
* Fail-open: when `behaviors` is null/undefined (operating model unknown) we
|
|
56
|
+
* return true. Showing a rarely-used setting beats hiding one a business needs.
|
|
57
|
+
*/
|
|
58
|
+
export declare function passesGate(gate: LooseGate, behaviors: readonly string[] | null | undefined): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Is a settings surface relevant to a business with `behaviors`?
|
|
61
|
+
* `id` is the settings id (e.g. 'shipping'); unlisted ids are universal → true.
|
|
62
|
+
*/
|
|
63
|
+
export declare function isSettingRelevant(id: string, behaviors: readonly string[] | null | undefined): boolean;
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const SETTINGS_RELEVANCE = {
|
|
2
|
+
shipping: { requires: "shippable" },
|
|
3
|
+
hours: { requires: "bookable" },
|
|
4
|
+
locations: { requiresAny: ["bookable", "shippable"] },
|
|
5
|
+
operations: { requiresAny: ["bookable", "shippable"] }
|
|
6
|
+
};
|
|
7
|
+
const asArray = (v) => v == null ? [] : Array.isArray(v) ? v : [v];
|
|
8
|
+
function passesGate(gate, behaviors) {
|
|
9
|
+
if (!behaviors) return true;
|
|
10
|
+
const requiresAll = asArray(gate.requires).every(
|
|
11
|
+
(b) => behaviors.includes(b)
|
|
12
|
+
);
|
|
13
|
+
const requiresAny = !gate.requiresAny || gate.requiresAny.some((b) => behaviors.includes(b));
|
|
14
|
+
return requiresAll && requiresAny;
|
|
15
|
+
}
|
|
16
|
+
function isSettingRelevant(id, behaviors) {
|
|
17
|
+
const gate = SETTINGS_RELEVANCE[id];
|
|
18
|
+
return gate ? passesGate(gate, behaviors) : true;
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
SETTINGS_RELEVANCE,
|
|
22
|
+
isSettingRelevant,
|
|
23
|
+
passesGate
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=settings-relevance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/settings-relevance.ts"],"sourcesContent":["import type { ContentBehavior } from '@withpotter/lib/template-types';\n\n/**\n * Settings relevance — the ONE place that decides which settings a given\n * business type sees, and the ONE function that evaluates it.\n *\n * The problem this solves: settings-nav gating used to be hand-rolled in every\n * surface that renders it (the desktop rail, the hub tabs, the mobile hub), so\n * the rules drifted — a business could get Shipping in one place and not in\n * another. Every surface now imports {@link passesGate} / {@link isSettingRelevant}\n * and the atomic rules live in {@link SETTINGS_RELEVANCE}.\n *\n * A settings surface is either **universal** (relevant to any business with a\n * storefront) or **situational** (only meaningful for certain operating models).\n * Only situational settings appear in the map below; anything absent is\n * universal and always shown.\n *\n * Design rationale (senior commerce review, 2026-07):\n * - Shipping → only businesses that physically ship goods (`shippable`). A\n * service, bookings, digital, or subscription business never\n * ships, so the surface is pure noise for them.\n * - Hours → only businesses that run on a bookable schedule or a venue with\n * opening hours (`bookable`).\n * - Locations → any business with a physical footprint: a venue to book, or a\n * place goods ship from / are picked up (`bookable` OR `shippable`).\n * - Operations → the desktop rail merges Hours + Locations into one entry, so it\n * inherits the union (`bookable` OR `shippable`).\n *\n * Deliberately NOT gated (universal), and why hiding them would be wrong:\n * - Taxes, Checkout — every monetized storefront can owe tax and take payment;\n * you cannot infer \"no tax / no checkout\" from an operating model.\n * - Policies, Domains, Notifications, Team, Billing, Features, Activity, General\n * — apply to any storefront regardless of what it sells.\n */\n\nexport type BehaviorGate = {\n /** Show only when the business has ALL of these behaviors. */\n requires?: ContentBehavior | ContentBehavior[];\n /** Show when the business has AT LEAST ONE of these. */\n requiresAny?: ContentBehavior[];\n};\n\n/** Canonical atomic rules, keyed by settings id. Unlisted ids are universal. */\nexport const SETTINGS_RELEVANCE: Record<string, BehaviorGate> = {\n shipping: { requires: 'shippable' },\n hours: { requires: 'bookable' },\n locations: { requiresAny: ['bookable', 'shippable'] },\n operations: { requiresAny: ['bookable', 'shippable'] },\n};\n\n/**\n * The gate shape the evaluator accepts. Looser than {@link BehaviorGate} (plain\n * `string`s) so callers whose items already declare `requires`/`requiresAny` as\n * strings — the sidebar's `SettingsItem`, hub-tabs' `HubTab` — pass without a\n * cast, while {@link SETTINGS_RELEVANCE} stays authored with typed behaviors.\n */\ntype LooseGate = {\n requires?: string | readonly string[];\n requiresAny?: readonly string[];\n};\n\nconst asArray = (\n v: string | readonly string[] | undefined,\n): readonly string[] => (v == null ? [] : Array.isArray(v) ? v : [v as string]);\n\n/**\n * Does a business with `behaviors` pass this gate?\n *\n * Fail-open: when `behaviors` is null/undefined (operating model unknown) we\n * return true. Showing a rarely-used setting beats hiding one a business needs.\n */\nexport function passesGate(\n gate: LooseGate,\n behaviors: readonly string[] | null | undefined,\n): boolean {\n if (!behaviors) return true;\n const requiresAll = asArray(gate.requires).every((b) =>\n behaviors.includes(b),\n );\n const requiresAny =\n !gate.requiresAny || gate.requiresAny.some((b) => behaviors.includes(b));\n return requiresAll && requiresAny;\n}\n\n/**\n * Is a settings surface relevant to a business with `behaviors`?\n * `id` is the settings id (e.g. 'shipping'); unlisted ids are universal → true.\n */\nexport function isSettingRelevant(\n id: string,\n behaviors: readonly string[] | null | undefined,\n): boolean {\n const gate = SETTINGS_RELEVANCE[id];\n return gate ? passesGate(gate, behaviors) : true;\n}\n"],"mappings":"AA2CO,MAAM,qBAAmD;AAAA,EAC9D,UAAU,EAAE,UAAU,YAAY;AAAA,EAClC,OAAO,EAAE,UAAU,WAAW;AAAA,EAC9B,WAAW,EAAE,aAAa,CAAC,YAAY,WAAW,EAAE;AAAA,EACpD,YAAY,EAAE,aAAa,CAAC,YAAY,WAAW,EAAE;AACvD;AAaA,MAAM,UAAU,CACd,MACuB,KAAK,OAAO,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAW;AAQtE,SAAS,WACd,MACA,WACS;AACT,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,cAAc,QAAQ,KAAK,QAAQ,EAAE;AAAA,IAAM,CAAC,MAChD,UAAU,SAAS,CAAC;AAAA,EACtB;AACA,QAAM,cACJ,CAAC,KAAK,eAAe,KAAK,YAAY,KAAK,CAAC,MAAM,UAAU,SAAS,CAAC,CAAC;AACzE,SAAO,eAAe;AACxB;AAMO,SAAS,kBACd,IACA,WACS;AACT,QAAM,OAAO,mBAAmB,EAAE;AAClC,SAAO,OAAO,WAAW,MAAM,SAAS,IAAI;AAC9C;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The singular of a merchant's own plural noun.
|
|
3
|
+
*
|
|
4
|
+
* Module labels are stored as plurals — "Guests", "Clients", "Patients" — because
|
|
5
|
+
* that is what a nav row and a page title need. An action needs the singular:
|
|
6
|
+
* a page headed **Guests** with a button reading **Add customer** is the word
|
|
7
|
+
* being taken and then ignored, which is the exact failure `useModuleLabel`
|
|
8
|
+
* exists to prevent.
|
|
9
|
+
*
|
|
10
|
+
* English, deliberately naive, and bounded. This handles the shapes a merchant
|
|
11
|
+
* actually types for a group of people or things they sell. It is NOT a general
|
|
12
|
+
* inflector, and it must never mangle a word it does not recognise: anything
|
|
13
|
+
* unmatched comes back unchanged, because "Add Staff" reads fine and
|
|
14
|
+
* "Add Staf" does not.
|
|
15
|
+
*/
|
|
16
|
+
export declare function singularise(plural: string): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const UNCHANGED = /* @__PURE__ */ new Set([
|
|
2
|
+
"staff",
|
|
3
|
+
"people",
|
|
4
|
+
"crew",
|
|
5
|
+
"team",
|
|
6
|
+
"clientele",
|
|
7
|
+
"series",
|
|
8
|
+
"species"
|
|
9
|
+
]);
|
|
10
|
+
const IRREGULAR = {
|
|
11
|
+
people: "person",
|
|
12
|
+
children: "child",
|
|
13
|
+
women: "woman",
|
|
14
|
+
men: "man"
|
|
15
|
+
};
|
|
16
|
+
function singularise(plural) {
|
|
17
|
+
const word = plural.trim();
|
|
18
|
+
if (!word) return word;
|
|
19
|
+
const lower = word.toLowerCase();
|
|
20
|
+
if (IRREGULAR[lower]) return matchCase(word, IRREGULAR[lower]);
|
|
21
|
+
if (UNCHANGED.has(lower)) return word;
|
|
22
|
+
if (/[^aeiou]ies$/i.test(word)) return word.slice(0, -3) + "y";
|
|
23
|
+
if (/(ch|sh|s|x|z)es$/i.test(word)) return word.slice(0, -2);
|
|
24
|
+
if (/[^s]s$/i.test(word)) return word.slice(0, -1);
|
|
25
|
+
return word;
|
|
26
|
+
}
|
|
27
|
+
function matchCase(source, replacement) {
|
|
28
|
+
if (source === source.toUpperCase()) return replacement.toUpperCase();
|
|
29
|
+
if (source[0] === source[0]?.toUpperCase()) {
|
|
30
|
+
return replacement[0].toUpperCase() + replacement.slice(1);
|
|
31
|
+
}
|
|
32
|
+
return replacement;
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
singularise
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=singularise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/singularise.ts"],"sourcesContent":["/**\n * The singular of a merchant's own plural noun.\n *\n * Module labels are stored as plurals — \"Guests\", \"Clients\", \"Patients\" — because\n * that is what a nav row and a page title need. An action needs the singular:\n * a page headed **Guests** with a button reading **Add customer** is the word\n * being taken and then ignored, which is the exact failure `useModuleLabel`\n * exists to prevent.\n *\n * English, deliberately naive, and bounded. This handles the shapes a merchant\n * actually types for a group of people or things they sell. It is NOT a general\n * inflector, and it must never mangle a word it does not recognise: anything\n * unmatched comes back unchanged, because \"Add Staff\" reads fine and\n * \"Add Staf\" does not.\n */\n\n/** Words that are already singular, or identical in both. */\nconst UNCHANGED = new Set([\n 'staff',\n 'people',\n 'crew',\n 'team',\n 'clientele',\n 'series',\n 'species',\n]);\n\n/** Irregulars worth knowing, in the register merchants use. */\nconst IRREGULAR: Record<string, string> = {\n people: 'person',\n children: 'child',\n women: 'woman',\n men: 'man',\n};\n\nexport function singularise(plural: string): string {\n const word = plural.trim();\n if (!word) return word;\n\n const lower = word.toLowerCase();\n\n // \"People\" stays \"People\" as a heading, but \"Add person\" is the right action,\n // so an irregular beats the unchanged list when one exists.\n if (IRREGULAR[lower]) return matchCase(word, IRREGULAR[lower]);\n if (UNCHANGED.has(lower)) return word;\n\n // Companies → Company, Parties → Party, Agencies → Agency.\n //\n // This also turns Movies into \"Movy\", and nothing short of a dictionary\n // separates the two: \"Companies\" comes from \"Company\", \"Movies\" from\n // \"Movie\". The -y reading wins because the nouns this exists for name people\n // and things a merchant sells, not media. Pinned in the tests so it is a\n // decision rather than a surprise.\n if (/[^aeiou]ies$/i.test(word)) return word.slice(0, -3) + 'y';\n\n // Boxes, Churches, Dishes, Classes → drop the whole \"es\".\n if (/(ch|sh|s|x|z)es$/i.test(word)) return word.slice(0, -2);\n\n // Guests, Clients, Patients, Members. \"ss\" is not a plural marker.\n if (/[^s]s$/i.test(word)) return word.slice(0, -1);\n\n return word;\n}\n\n/** Keep the shape the merchant typed: Guests → Guest, GUESTS → GUEST. */\nfunction matchCase(source: string, replacement: string): string {\n if (source === source.toUpperCase()) return replacement.toUpperCase();\n if (source[0] === source[0]?.toUpperCase()) {\n return replacement[0].toUpperCase() + replacement.slice(1);\n }\n return replacement;\n}\n"],"mappings":"AAiBA,MAAM,YAAY,oBAAI,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,MAAM,YAAoC;AAAA,EACxC,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,KAAK;AACP;AAEO,SAAS,YAAY,QAAwB;AAClD,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,QAAQ,KAAK,YAAY;AAI/B,MAAI,UAAU,KAAK,EAAG,QAAO,UAAU,MAAM,UAAU,KAAK,CAAC;AAC7D,MAAI,UAAU,IAAI,KAAK,EAAG,QAAO;AASjC,MAAI,gBAAgB,KAAK,IAAI,EAAG,QAAO,KAAK,MAAM,GAAG,EAAE,IAAI;AAG3D,MAAI,oBAAoB,KAAK,IAAI,EAAG,QAAO,KAAK,MAAM,GAAG,EAAE;AAG3D,MAAI,UAAU,KAAK,IAAI,EAAG,QAAO,KAAK,MAAM,GAAG,EAAE;AAEjD,SAAO;AACT;AAGA,SAAS,UAAU,QAAgB,aAA6B;AAC9D,MAAI,WAAW,OAAO,YAAY,EAAG,QAAO,YAAY,YAAY;AACpE,MAAI,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,YAAY,GAAG;AAC1C,WAAO,YAAY,CAAC,EAAE,YAAY,IAAI,YAAY,MAAM,CAAC;AAAA,EAC3D;AACA,SAAO;AACT;","names":[]}
|