@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/intents/resolve-stats.ts"],"sourcesContent":["import type { StatDef } from './types';\nimport type { StatCardProps } from '../stat-card-types';\nimport { resolveIcon } from './icon-map';\n\n/**\n * Maps intent-config StatDef[] + raw API stats data → StatCardProps[]\n * ready for the existing <StatsGrid> component.\n */\nexport function resolveStatDefs(\n defs: StatDef[],\n data: Record<string, unknown>,\n formatCurrency?: (amount: number) => string,\n): StatCardProps[] {\n return defs.map((def) => {\n const raw = data[def.dataKey];\n const numValue = typeof raw === 'number' ? raw : 0;\n\n let value: string | number;\n switch (def.format) {\n case 'currency':\n value = formatCurrency\n ? formatCurrency(numValue)\n : `$${numValue.toLocaleString()}`;\n break;\n case 'percentage':\n value = `${numValue}%`;\n break;\n case 'number':\n default:\n value = numValue.toLocaleString();\n break;\n }\n\n return {\n label: def.label,\n value,\n icon: resolveIcon(def.icon),\n };\n });\n}\n"],"mappings":"AAEA,SAAS,mBAAmB;AAMrB,SAAS,gBACd,MACA,MACA,gBACiB;AACjB,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,UAAM,MAAM,KAAK,IAAI,OAAO;AAC5B,UAAM,WAAW,OAAO,QAAQ,WAAW,MAAM;AAEjD,QAAI;AACJ,YAAQ,IAAI,QAAQ;AAAA,MAClB,KAAK;AACH,gBAAQ,iBACJ,eAAe,QAAQ,IACvB,IAAI,SAAS,eAAe,CAAC;AACjC;AAAA,MACF,KAAK;AACH,gBAAQ,GAAG,QAAQ;AACnB;AAAA,MACF,KAAK;AAAA,MACL;AACE,gBAAQ,SAAS,eAAe;AAChC;AAAA,IACJ;AAEA,WAAO;AAAA,MACL,OAAO,IAAI;AAAA,MACX;AAAA,MACA,MAAM,YAAY,IAAI,IAAI;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IntentConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the active intent configs for a tenant.
|
|
4
|
+
*
|
|
5
|
+
* Priority:
|
|
6
|
+
* 1. operatingModel.profiles intentKeys, in profile order
|
|
7
|
+
* 2. selectedIntents (backward compatibility when no operating model exists)
|
|
8
|
+
* 3. inferred intents from enabledBehaviors (backward compatibility)
|
|
9
|
+
* 4. defaultCommerceConfig
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveTenantIntentConfigs(tenantSettings?: Record<string, unknown>, templateCategory?: string): IntentConfig[];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { defaultCommerceConfig, intentRegistry } from "./registry";
|
|
2
|
+
import { inferIntentsFromBehaviors } from "./infer-intents";
|
|
3
|
+
function resolveConfigsFromIntentKeys(intentKeys) {
|
|
4
|
+
const configs = [];
|
|
5
|
+
for (const key of intentKeys) {
|
|
6
|
+
const config = intentRegistry[key];
|
|
7
|
+
if (config) {
|
|
8
|
+
configs.push(config);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return configs;
|
|
12
|
+
}
|
|
13
|
+
function collectOperatingModelIntentKeys(operatingModel) {
|
|
14
|
+
if (!Array.isArray(operatingModel?.profiles)) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const keys = [];
|
|
18
|
+
const seen = /* @__PURE__ */ new Set();
|
|
19
|
+
for (const profile of operatingModel.profiles) {
|
|
20
|
+
if (profile.enabled === false || !Array.isArray(profile.intentKeys)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
for (const intentKey of profile.intentKeys) {
|
|
24
|
+
if (!intentRegistry[intentKey] || seen.has(intentKey)) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
seen.add(intentKey);
|
|
28
|
+
keys.push(intentKey);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return keys;
|
|
32
|
+
}
|
|
33
|
+
function resolveTenantIntentConfigs(tenantSettings, templateCategory) {
|
|
34
|
+
if (templateCategory === "ecommerce") {
|
|
35
|
+
return [defaultCommerceConfig];
|
|
36
|
+
}
|
|
37
|
+
const selectedIntents = tenantSettings?.selectedIntents;
|
|
38
|
+
const enabledBehaviors = tenantSettings?.enabledBehaviors;
|
|
39
|
+
const operatingModel = tenantSettings?.operatingModel;
|
|
40
|
+
const modelKeys = collectOperatingModelIntentKeys(operatingModel);
|
|
41
|
+
const chosen = Array.isArray(selectedIntents) ? selectedIntents : [];
|
|
42
|
+
const intentKeys = modelKeys.length > 0 ? [...modelKeys, ...chosen.filter((key) => !modelKeys.includes(key))] : modelKeys;
|
|
43
|
+
if (intentKeys.length > 0) {
|
|
44
|
+
const configs = resolveConfigsFromIntentKeys(intentKeys);
|
|
45
|
+
return configs.length > 0 ? configs : [defaultCommerceConfig];
|
|
46
|
+
}
|
|
47
|
+
if (Array.isArray(selectedIntents) && selectedIntents.length > 0) {
|
|
48
|
+
const configs = resolveConfigsFromIntentKeys(selectedIntents);
|
|
49
|
+
return configs.length > 0 ? configs : [defaultCommerceConfig];
|
|
50
|
+
}
|
|
51
|
+
if (enabledBehaviors?.length) {
|
|
52
|
+
const inferred = inferIntentsFromBehaviors(enabledBehaviors);
|
|
53
|
+
const configs = resolveConfigsFromIntentKeys(inferred);
|
|
54
|
+
return configs.length > 0 ? configs : [defaultCommerceConfig];
|
|
55
|
+
}
|
|
56
|
+
return [defaultCommerceConfig];
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
resolveTenantIntentConfigs
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=resolve-tenant-intents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/intents/resolve-tenant-intents.ts"],"sourcesContent":["import { defaultCommerceConfig, intentRegistry } from './registry';\nimport { inferIntentsFromBehaviors } from './infer-intents';\nimport type { IntentConfig } from './types';\n\ninterface PersistedOperatingModelProfile {\n enabled?: boolean;\n intentKeys?: string[];\n}\n\ninterface PersistedOperatingModelSettings {\n profiles?: PersistedOperatingModelProfile[];\n}\n\nfunction resolveConfigsFromIntentKeys(intentKeys: string[]): IntentConfig[] {\n const configs: IntentConfig[] = [];\n\n for (const key of intentKeys) {\n const config = intentRegistry[key];\n if (config) {\n configs.push(config);\n }\n }\n\n return configs;\n}\n\nfunction collectOperatingModelIntentKeys(\n operatingModel: PersistedOperatingModelSettings | undefined,\n): string[] {\n if (!Array.isArray(operatingModel?.profiles)) {\n return [];\n }\n\n const keys: string[] = [];\n const seen = new Set<string>();\n\n for (const profile of operatingModel.profiles) {\n if (profile.enabled === false || !Array.isArray(profile.intentKeys)) {\n continue;\n }\n\n for (const intentKey of profile.intentKeys) {\n if (!intentRegistry[intentKey] || seen.has(intentKey)) {\n continue;\n }\n\n seen.add(intentKey);\n keys.push(intentKey);\n }\n }\n\n return keys;\n}\n\n/**\n * Resolve the active intent configs for a tenant.\n *\n * Priority:\n * 1. operatingModel.profiles intentKeys, in profile order\n * 2. selectedIntents (backward compatibility when no operating model exists)\n * 3. inferred intents from enabledBehaviors (backward compatibility)\n * 4. defaultCommerceConfig\n */\nexport function resolveTenantIntentConfigs(\n tenantSettings?: Record<string, unknown>,\n templateCategory?: string,\n): IntentConfig[] {\n if (templateCategory === 'ecommerce') {\n return [defaultCommerceConfig];\n }\n\n const selectedIntents = tenantSettings?.selectedIntents as\n | string[]\n | undefined;\n const enabledBehaviors = tenantSettings?.enabledBehaviors as\n | string[]\n | undefined;\n const operatingModel = tenantSettings?.operatingModel as\n | PersistedOperatingModelSettings\n | undefined;\n\n const modelKeys = collectOperatingModelIntentKeys(operatingModel);\n // The operating model is written by the engine, and an engine older than this\n // dashboard writes no profile for a model it does not know. The merchant's\n // own choice still stands, so a chosen model the profiles leave out is added.\n const chosen = Array.isArray(selectedIntents) ? selectedIntents : [];\n const intentKeys =\n modelKeys.length > 0\n ? [...modelKeys, ...chosen.filter((key) => !modelKeys.includes(key))]\n : modelKeys;\n\n if (intentKeys.length > 0) {\n const configs = resolveConfigsFromIntentKeys(intentKeys);\n return configs.length > 0 ? configs : [defaultCommerceConfig];\n }\n\n // An empty selection is \"unset\", not \"no business model\" — same rule as\n // resolveEnabledBehaviors, so the nav and the behaviors can't disagree.\n if (Array.isArray(selectedIntents) && selectedIntents.length > 0) {\n const configs = resolveConfigsFromIntentKeys(selectedIntents);\n return configs.length > 0 ? configs : [defaultCommerceConfig];\n }\n\n if (enabledBehaviors?.length) {\n const inferred = inferIntentsFromBehaviors(enabledBehaviors);\n const configs = resolveConfigsFromIntentKeys(inferred);\n return configs.length > 0 ? configs : [defaultCommerceConfig];\n }\n\n return [defaultCommerceConfig];\n}\n"],"mappings":"AAAA,SAAS,uBAAuB,sBAAsB;AACtD,SAAS,iCAAiC;AAY1C,SAAS,6BAA6B,YAAsC;AAC1E,QAAM,UAA0B,CAAC;AAEjC,aAAW,OAAO,YAAY;AAC5B,UAAM,SAAS,eAAe,GAAG;AACjC,QAAI,QAAQ;AACV,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,gCACP,gBACU;AACV,MAAI,CAAC,MAAM,QAAQ,gBAAgB,QAAQ,GAAG;AAC5C,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,OAAiB,CAAC;AACxB,QAAM,OAAO,oBAAI,IAAY;AAE7B,aAAW,WAAW,eAAe,UAAU;AAC7C,QAAI,QAAQ,YAAY,SAAS,CAAC,MAAM,QAAQ,QAAQ,UAAU,GAAG;AACnE;AAAA,IACF;AAEA,eAAW,aAAa,QAAQ,YAAY;AAC1C,UAAI,CAAC,eAAe,SAAS,KAAK,KAAK,IAAI,SAAS,GAAG;AACrD;AAAA,MACF;AAEA,WAAK,IAAI,SAAS;AAClB,WAAK,KAAK,SAAS;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;AAWO,SAAS,2BACd,gBACA,kBACgB;AAChB,MAAI,qBAAqB,aAAa;AACpC,WAAO,CAAC,qBAAqB;AAAA,EAC/B;AAEA,QAAM,kBAAkB,gBAAgB;AAGxC,QAAM,mBAAmB,gBAAgB;AAGzC,QAAM,iBAAiB,gBAAgB;AAIvC,QAAM,YAAY,gCAAgC,cAAc;AAIhE,QAAM,SAAS,MAAM,QAAQ,eAAe,IAAI,kBAAkB,CAAC;AACnE,QAAM,aACJ,UAAU,SAAS,IACf,CAAC,GAAG,WAAW,GAAG,OAAO,OAAO,CAAC,QAAQ,CAAC,UAAU,SAAS,GAAG,CAAC,CAAC,IAClE;AAEN,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,UAAU,6BAA6B,UAAU;AACvD,WAAO,QAAQ,SAAS,IAAI,UAAU,CAAC,qBAAqB;AAAA,EAC9D;AAIA,MAAI,MAAM,QAAQ,eAAe,KAAK,gBAAgB,SAAS,GAAG;AAChE,UAAM,UAAU,6BAA6B,eAAe;AAC5D,WAAO,QAAQ,SAAS,IAAI,UAAU,CAAC,qBAAqB;AAAA,EAC9D;AAEA,MAAI,kBAAkB,QAAQ;AAC5B,UAAM,WAAW,0BAA0B,gBAAgB;AAC3D,UAAM,UAAU,6BAA6B,QAAQ;AACrD,WAAO,QAAQ,SAAS,IAAI,UAAU,CAAC,qBAAqB;AAAA,EAC9D;AAEA,SAAO,CAAC,qBAAqB;AAC/B;","names":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { LucideIcon } from 'lucide-react';
|
|
2
|
+
import type { InventoryProduct } from '@withpotter/lib/api/types';
|
|
3
|
+
import type { ColumnDef, StatDef, ActionDef } from './types';
|
|
4
|
+
export type ListingContextType = 'retail' | 'services' | 'properties' | 'menu';
|
|
5
|
+
export declare function getStockStatus(p: InventoryProduct): 'inStock' | 'lowStock' | 'outOfStock';
|
|
6
|
+
export declare const stockStatusConfig: Record<string, {
|
|
7
|
+
label: string;
|
|
8
|
+
className: string;
|
|
9
|
+
dot: string;
|
|
10
|
+
icon: React.ElementType;
|
|
11
|
+
}>;
|
|
12
|
+
export type ListingColumnId = 'checkbox' | 'product' | 'sku' | 'price' | 'quantity' | 'reserved' | 'available' | 'lowThreshold' | 'status' | 'duration';
|
|
13
|
+
export interface ListingColumn {
|
|
14
|
+
id: ListingColumnId;
|
|
15
|
+
header: string;
|
|
16
|
+
align: 'left' | 'center' | 'right';
|
|
17
|
+
sortable?: boolean;
|
|
18
|
+
sortField?: 'title' | 'quantity' | 'price';
|
|
19
|
+
editable?: boolean;
|
|
20
|
+
editField?: 'quantity' | 'lowStockThreshold';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolve declarative ColumnDef[] from intent config → full ListingColumn[]
|
|
24
|
+
* with rendering metadata from the column registry.
|
|
25
|
+
* Always prepends checkbox column.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveColumns(defs: ColumnDef[]): ListingColumn[];
|
|
28
|
+
export interface ListingStat {
|
|
29
|
+
key: string;
|
|
30
|
+
label: string;
|
|
31
|
+
icon: React.ElementType;
|
|
32
|
+
getValue: (products: InventoryProduct[], currencySymbol: string) => string | number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve declarative StatDef[] from intent config → ListingStat[]
|
|
36
|
+
* with computation functions from the stat registry.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveItemStats(defs: StatDef[]): ListingStat[];
|
|
39
|
+
export interface QuickAction {
|
|
40
|
+
label: string;
|
|
41
|
+
href: string;
|
|
42
|
+
icon: LucideIcon;
|
|
43
|
+
}
|
|
44
|
+
export declare function resolveQuickActions(defs: ActionDef[]): QuickAction[];
|
|
45
|
+
/**
|
|
46
|
+
* Derive CSV headers from resolved columns (excluding checkbox).
|
|
47
|
+
*/
|
|
48
|
+
export declare function deriveCsvHeaders(columns: ListingColumn[]): string[];
|
|
49
|
+
/**
|
|
50
|
+
* Standard CSV row generator based on column IDs.
|
|
51
|
+
*/
|
|
52
|
+
export declare function deriveCsvRow(columns: ListingColumn[], product: InventoryProduct): string[];
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Package,
|
|
3
|
+
CheckCircle,
|
|
4
|
+
AlertTriangle,
|
|
5
|
+
XCircle,
|
|
6
|
+
BarChart3,
|
|
7
|
+
Coins,
|
|
8
|
+
FileText
|
|
9
|
+
} from "lucide-react";
|
|
10
|
+
import { INTENT_ICON_MAP, resolveIcon } from "./icon-map";
|
|
11
|
+
function getStockStatus(p) {
|
|
12
|
+
if (!p.trackInventory) return "inStock";
|
|
13
|
+
const available = p.quantity - (p.reserved || 0);
|
|
14
|
+
if (available <= 0) return "outOfStock";
|
|
15
|
+
if (available <= (p.lowStockThreshold || 5)) return "lowStock";
|
|
16
|
+
return "inStock";
|
|
17
|
+
}
|
|
18
|
+
const stockStatusConfig = {
|
|
19
|
+
inStock: {
|
|
20
|
+
label: "In stock",
|
|
21
|
+
className: "bg-[var(--success-bg)] text-[var(--success)]",
|
|
22
|
+
/** The same state as a single swatch, for surfaces that render a dot
|
|
23
|
+
rather than a filled pill — see the catalogue table. */
|
|
24
|
+
dot: "var(--success)",
|
|
25
|
+
icon: CheckCircle
|
|
26
|
+
},
|
|
27
|
+
lowStock: {
|
|
28
|
+
label: "Low stock",
|
|
29
|
+
className: "bg-[var(--warning-bg)] text-[var(--warning)]",
|
|
30
|
+
dot: "var(--warning)",
|
|
31
|
+
icon: AlertTriangle
|
|
32
|
+
},
|
|
33
|
+
outOfStock: {
|
|
34
|
+
label: "Out of stock",
|
|
35
|
+
className: "bg-[var(--error-bg)] text-[var(--error)]",
|
|
36
|
+
dot: "var(--error)",
|
|
37
|
+
icon: XCircle
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const COLUMN_REGISTRY = {
|
|
41
|
+
checkbox: { id: "checkbox", align: "left" },
|
|
42
|
+
product: {
|
|
43
|
+
id: "product",
|
|
44
|
+
align: "left",
|
|
45
|
+
sortable: true,
|
|
46
|
+
sortField: "title"
|
|
47
|
+
},
|
|
48
|
+
sku: { id: "sku", align: "left" },
|
|
49
|
+
price: {
|
|
50
|
+
id: "price",
|
|
51
|
+
align: "right",
|
|
52
|
+
sortable: true,
|
|
53
|
+
sortField: "price"
|
|
54
|
+
},
|
|
55
|
+
quantity: {
|
|
56
|
+
id: "quantity",
|
|
57
|
+
align: "right",
|
|
58
|
+
sortable: true,
|
|
59
|
+
sortField: "quantity",
|
|
60
|
+
editable: true,
|
|
61
|
+
editField: "quantity"
|
|
62
|
+
},
|
|
63
|
+
reserved: { id: "reserved", align: "right" },
|
|
64
|
+
available: { id: "available", align: "right" },
|
|
65
|
+
lowThreshold: {
|
|
66
|
+
id: "lowThreshold",
|
|
67
|
+
align: "right",
|
|
68
|
+
editable: true,
|
|
69
|
+
editField: "lowStockThreshold"
|
|
70
|
+
},
|
|
71
|
+
/* Left, like every other non-numeric column and like the orders queue.
|
|
72
|
+
A centred column in a table whose text columns all start at the same left
|
|
73
|
+
edge puts one ragged edge in the middle of the row, and the pill is
|
|
74
|
+
content rather than a measurement — only numbers earn the right edge. */
|
|
75
|
+
status: { id: "status", align: "left" },
|
|
76
|
+
duration: { id: "duration", align: "left" }
|
|
77
|
+
};
|
|
78
|
+
function resolveColumns(defs) {
|
|
79
|
+
const cols = [{ ...COLUMN_REGISTRY.checkbox, header: "" }];
|
|
80
|
+
for (const def of defs) {
|
|
81
|
+
const reg = COLUMN_REGISTRY[def.key];
|
|
82
|
+
if (reg) {
|
|
83
|
+
cols.push({ ...reg, header: def.label });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return cols;
|
|
87
|
+
}
|
|
88
|
+
const STAT_ICON_MAP = {
|
|
89
|
+
Package,
|
|
90
|
+
CheckCircle,
|
|
91
|
+
AlertTriangle,
|
|
92
|
+
XCircle,
|
|
93
|
+
BarChart3,
|
|
94
|
+
Coins,
|
|
95
|
+
FileText
|
|
96
|
+
};
|
|
97
|
+
function resolveStatIcon(iconName) {
|
|
98
|
+
return INTENT_ICON_MAP[iconName] ?? STAT_ICON_MAP[iconName] ?? Package;
|
|
99
|
+
}
|
|
100
|
+
const ITEM_STAT_COMPUTATIONS = {
|
|
101
|
+
total: (p) => p.length,
|
|
102
|
+
tracked: (p) => p.filter((x) => x.trackInventory).length,
|
|
103
|
+
inStock: (p) => p.filter((x) => getStockStatus(x) === "inStock").length,
|
|
104
|
+
lowStock: (p) => p.filter((x) => getStockStatus(x) === "lowStock").length,
|
|
105
|
+
outOfStock: (p) => p.filter((x) => getStockStatus(x) === "outOfStock").length,
|
|
106
|
+
active: (p) => p.filter((x) => x.isActive !== false).length,
|
|
107
|
+
draft: (p) => p.filter((x) => x.isActive === false).length,
|
|
108
|
+
totalValue: (p, cs) => {
|
|
109
|
+
const total = p.reduce((sum, x) => sum + (Number(x.price) || 0), 0);
|
|
110
|
+
return `${cs} ${total.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
|
|
111
|
+
},
|
|
112
|
+
avgPrice: (p, cs) => {
|
|
113
|
+
if (p.length === 0) return `${cs} 0.00`;
|
|
114
|
+
const avg = p.reduce((sum, x) => sum + (Number(x.price) || 0), 0) / p.length;
|
|
115
|
+
return `${cs} ${avg.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
function resolveItemStats(defs) {
|
|
119
|
+
return defs.map((def) => {
|
|
120
|
+
const compute = ITEM_STAT_COMPUTATIONS[def.dataKey];
|
|
121
|
+
if (!compute) return null;
|
|
122
|
+
return {
|
|
123
|
+
key: def.key,
|
|
124
|
+
label: def.label,
|
|
125
|
+
icon: resolveStatIcon(def.icon),
|
|
126
|
+
getValue: compute
|
|
127
|
+
};
|
|
128
|
+
}).filter(Boolean);
|
|
129
|
+
}
|
|
130
|
+
function resolveQuickActions(defs) {
|
|
131
|
+
return defs.filter((a) => a.href).map((a) => ({
|
|
132
|
+
label: a.label,
|
|
133
|
+
href: a.href,
|
|
134
|
+
icon: resolveIcon(a.icon)
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
function deriveCsvHeaders(columns) {
|
|
138
|
+
return columns.filter((c) => c.id !== "checkbox").map((c) => c.header);
|
|
139
|
+
}
|
|
140
|
+
function deriveCsvRow(columns, product) {
|
|
141
|
+
return columns.filter((c) => c.id !== "checkbox").map((col) => {
|
|
142
|
+
switch (col.id) {
|
|
143
|
+
case "product":
|
|
144
|
+
return product.title;
|
|
145
|
+
case "sku":
|
|
146
|
+
return product.sku || "";
|
|
147
|
+
case "price":
|
|
148
|
+
return product.price?.toString() || "0";
|
|
149
|
+
case "quantity":
|
|
150
|
+
return product.quantity?.toString() || "0";
|
|
151
|
+
case "reserved":
|
|
152
|
+
return (product.reserved || 0).toString();
|
|
153
|
+
case "available":
|
|
154
|
+
return ((product.quantity || 0) - (product.reserved || 0)).toString();
|
|
155
|
+
case "lowThreshold":
|
|
156
|
+
return (product.lowStockThreshold || 5).toString();
|
|
157
|
+
case "status":
|
|
158
|
+
return getStockStatus(product);
|
|
159
|
+
case "duration": {
|
|
160
|
+
const behaviors = product.behaviors;
|
|
161
|
+
return behaviors?.bookable?.durationMinutes?.toString() || "";
|
|
162
|
+
}
|
|
163
|
+
default:
|
|
164
|
+
return "";
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
export {
|
|
169
|
+
deriveCsvHeaders,
|
|
170
|
+
deriveCsvRow,
|
|
171
|
+
getStockStatus,
|
|
172
|
+
resolveColumns,
|
|
173
|
+
resolveItemStats,
|
|
174
|
+
resolveQuickActions,
|
|
175
|
+
stockStatusConfig
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=resolvers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/intents/resolvers.ts"],"sourcesContent":["// ─── Intent-Driven Page Composition: Resolvers ───\n//\n// Bridges declarative IntentConfig definitions → renderable props.\n// Intent configs say *what* to show (keys + labels).\n// Registries know *how* to render (alignment, sorting, cell format).\n// Resolvers combine both into props that components consume directly.\n\nimport type { LucideIcon } from 'lucide-react';\nimport {\n Package,\n CheckCircle,\n AlertTriangle,\n XCircle,\n BarChart3,\n Coins,\n FileText,\n} from 'lucide-react';\nimport type { InventoryProduct } from '@withpotter/lib/api/types';\nimport type { ColumnDef, StatDef, ActionDef } from './types';\nimport { INTENT_ICON_MAP, resolveIcon } from './icon-map';\n\n// ============================================================================\n// SHARED HELPERS (migrated from listing-config.ts)\n// ============================================================================\n\nexport type ListingContextType = 'retail' | 'services' | 'properties' | 'menu';\n\nexport function getStockStatus(\n p: InventoryProduct,\n): 'inStock' | 'lowStock' | 'outOfStock' {\n if (!p.trackInventory) return 'inStock';\n const available = p.quantity - (p.reserved || 0);\n if (available <= 0) return 'outOfStock';\n if (available <= (p.lowStockThreshold || 5)) return 'lowStock';\n return 'inStock';\n}\n\nexport const stockStatusConfig: Record<\n string,\n { label: string; className: string; dot: string; icon: React.ElementType }\n> = {\n inStock: {\n label: 'In stock',\n className: 'bg-[var(--success-bg)] text-[var(--success)]',\n /** The same state as a single swatch, for surfaces that render a dot\n rather than a filled pill — see the catalogue table. */\n dot: 'var(--success)',\n icon: CheckCircle,\n },\n lowStock: {\n label: 'Low stock',\n className: 'bg-[var(--warning-bg)] text-[var(--warning)]',\n dot: 'var(--warning)',\n icon: AlertTriangle,\n },\n outOfStock: {\n label: 'Out of stock',\n className: 'bg-[var(--error-bg)] text-[var(--error)]',\n dot: 'var(--error)',\n icon: XCircle,\n },\n};\n\n// ============================================================================\n// COLUMN REGISTRY\n// ============================================================================\n\nexport type ListingColumnId =\n | 'checkbox'\n | 'product'\n | 'sku'\n | 'price'\n | 'quantity'\n | 'reserved'\n | 'available'\n | 'lowThreshold'\n | 'status'\n | 'duration';\n\nexport interface ListingColumn {\n id: ListingColumnId;\n header: string;\n align: 'left' | 'center' | 'right';\n sortable?: boolean;\n sortField?: 'title' | 'quantity' | 'price';\n editable?: boolean;\n editField?: 'quantity' | 'lowStockThreshold';\n}\n\nconst COLUMN_REGISTRY: Record<string, Omit<ListingColumn, 'header'>> = {\n checkbox: { id: 'checkbox', align: 'left' },\n product: {\n id: 'product',\n align: 'left',\n sortable: true,\n sortField: 'title',\n },\n sku: { id: 'sku', align: 'left' },\n price: {\n id: 'price',\n align: 'right',\n sortable: true,\n sortField: 'price',\n },\n quantity: {\n id: 'quantity',\n align: 'right',\n sortable: true,\n sortField: 'quantity',\n editable: true,\n editField: 'quantity',\n },\n reserved: { id: 'reserved', align: 'right' },\n available: { id: 'available', align: 'right' },\n lowThreshold: {\n id: 'lowThreshold',\n align: 'right',\n editable: true,\n editField: 'lowStockThreshold',\n },\n /* Left, like every other non-numeric column and like the orders queue.\n A centred column in a table whose text columns all start at the same left\n edge puts one ragged edge in the middle of the row, and the pill is\n content rather than a measurement — only numbers earn the right edge. */\n status: { id: 'status', align: 'left' },\n duration: { id: 'duration', align: 'left' },\n};\n\n/**\n * Resolve declarative ColumnDef[] from intent config → full ListingColumn[]\n * with rendering metadata from the column registry.\n * Always prepends checkbox column.\n */\nexport function resolveColumns(defs: ColumnDef[]): ListingColumn[] {\n const cols: ListingColumn[] = [{ ...COLUMN_REGISTRY.checkbox, header: '' }];\n for (const def of defs) {\n const reg = COLUMN_REGISTRY[def.key];\n if (reg) {\n cols.push({ ...reg, header: def.label });\n }\n }\n return cols;\n}\n\n// ============================================================================\n// ITEM STAT REGISTRY (client-computed from product array)\n// ============================================================================\n\n/** Icon map for stat keys that use icons not in INTENT_ICON_MAP */\nconst STAT_ICON_MAP: Record<string, React.ElementType> = {\n Package,\n CheckCircle,\n AlertTriangle,\n XCircle,\n BarChart3,\n Coins,\n FileText,\n};\n\nfunction resolveStatIcon(iconName: string): React.ElementType {\n return INTENT_ICON_MAP[iconName] ?? STAT_ICON_MAP[iconName] ?? Package;\n}\n\nexport interface ListingStat {\n key: string;\n label: string;\n icon: React.ElementType;\n getValue: (\n products: InventoryProduct[],\n currencySymbol: string,\n ) => string | number;\n}\n\nconst ITEM_STAT_COMPUTATIONS: Record<\n string,\n (products: InventoryProduct[], currencySymbol: string) => string | number\n> = {\n total: (p) => p.length,\n tracked: (p) => p.filter((x) => x.trackInventory).length,\n inStock: (p) => p.filter((x) => getStockStatus(x) === 'inStock').length,\n lowStock: (p) => p.filter((x) => getStockStatus(x) === 'lowStock').length,\n outOfStock: (p) => p.filter((x) => getStockStatus(x) === 'outOfStock').length,\n active: (p) => p.filter((x) => x.isActive !== false).length,\n draft: (p) => p.filter((x) => x.isActive === false).length,\n totalValue: (p, cs) => {\n const total = p.reduce((sum, x) => sum + (Number(x.price) || 0), 0);\n return `${cs} ${total.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n },\n avgPrice: (p, cs) => {\n if (p.length === 0) return `${cs} 0.00`;\n const avg =\n p.reduce((sum, x) => sum + (Number(x.price) || 0), 0) / p.length;\n return `${cs} ${avg.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n },\n};\n\n/**\n * Resolve declarative StatDef[] from intent config → ListingStat[]\n * with computation functions from the stat registry.\n */\nexport function resolveItemStats(defs: StatDef[]): ListingStat[] {\n return defs\n .map((def) => {\n const compute = ITEM_STAT_COMPUTATIONS[def.dataKey];\n if (!compute) return null;\n return {\n key: def.key,\n label: def.label,\n icon: resolveStatIcon(def.icon),\n getValue: compute,\n };\n })\n .filter(Boolean) as ListingStat[];\n}\n\n// ============================================================================\n// QUICK ACTION RESOLVER\n// ============================================================================\n\nexport interface QuickAction {\n label: string;\n href: string;\n icon: LucideIcon;\n}\n\nexport function resolveQuickActions(defs: ActionDef[]): QuickAction[] {\n return defs\n .filter((a) => a.href)\n .map((a) => ({\n label: a.label,\n href: a.href!,\n icon: resolveIcon(a.icon),\n }));\n}\n\n// ============================================================================\n// CSV EXPORT HELPERS\n// ============================================================================\n\n/**\n * Derive CSV headers from resolved columns (excluding checkbox).\n */\nexport function deriveCsvHeaders(columns: ListingColumn[]): string[] {\n return columns.filter((c) => c.id !== 'checkbox').map((c) => c.header);\n}\n\n/**\n * Standard CSV row generator based on column IDs.\n */\nexport function deriveCsvRow(\n columns: ListingColumn[],\n product: InventoryProduct,\n): string[] {\n return columns\n .filter((c) => c.id !== 'checkbox')\n .map((col) => {\n switch (col.id) {\n case 'product':\n return product.title;\n case 'sku':\n return product.sku || '';\n case 'price':\n return product.price?.toString() || '0';\n case 'quantity':\n return product.quantity?.toString() || '0';\n case 'reserved':\n return (product.reserved || 0).toString();\n case 'available':\n return ((product.quantity || 0) - (product.reserved || 0)).toString();\n case 'lowThreshold':\n return (product.lowStockThreshold || 5).toString();\n case 'status':\n return getStockStatus(product);\n case 'duration': {\n const behaviors = product.behaviors as\n | Record<string, { durationMinutes?: number } | undefined>\n | undefined;\n return behaviors?.bookable?.durationMinutes?.toString() || '';\n }\n default:\n return '';\n }\n });\n}\n"],"mappings":"AAQA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,iBAAiB,mBAAmB;AAQtC,SAAS,eACd,GACuC;AACvC,MAAI,CAAC,EAAE,eAAgB,QAAO;AAC9B,QAAM,YAAY,EAAE,YAAY,EAAE,YAAY;AAC9C,MAAI,aAAa,EAAG,QAAO;AAC3B,MAAI,cAAc,EAAE,qBAAqB,GAAI,QAAO;AACpD,SAAO;AACT;AAEO,MAAM,oBAGT;AAAA,EACF,SAAS;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA;AAAA;AAAA,IAGX,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AACF;AA4BA,MAAM,kBAAiE;AAAA,EACrE,UAAU,EAAE,IAAI,YAAY,OAAO,OAAO;AAAA,EAC1C,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,KAAK,EAAE,IAAI,OAAO,OAAO,OAAO;AAAA,EAChC,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,UAAU,EAAE,IAAI,YAAY,OAAO,QAAQ;AAAA,EAC3C,WAAW,EAAE,IAAI,aAAa,OAAO,QAAQ;AAAA,EAC7C,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,EAAE,IAAI,UAAU,OAAO,OAAO;AAAA,EACtC,UAAU,EAAE,IAAI,YAAY,OAAO,OAAO;AAC5C;AAOO,SAAS,eAAe,MAAoC;AACjE,QAAM,OAAwB,CAAC,EAAE,GAAG,gBAAgB,UAAU,QAAQ,GAAG,CAAC;AAC1E,aAAW,OAAO,MAAM;AACtB,UAAM,MAAM,gBAAgB,IAAI,GAAG;AACnC,QAAI,KAAK;AACP,WAAK,KAAK,EAAE,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;AAOA,MAAM,gBAAmD;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,gBAAgB,UAAqC;AAC5D,SAAO,gBAAgB,QAAQ,KAAK,cAAc,QAAQ,KAAK;AACjE;AAYA,MAAM,yBAGF;AAAA,EACF,OAAO,CAAC,MAAM,EAAE;AAAA,EAChB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE;AAAA,EAClD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,eAAe,CAAC,MAAM,SAAS,EAAE;AAAA,EACjE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,eAAe,CAAC,MAAM,UAAU,EAAE;AAAA,EACnE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,eAAe,CAAC,MAAM,YAAY,EAAE;AAAA,EACvE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,KAAK,EAAE;AAAA,EACrD,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,KAAK,EAAE;AAAA,EACpD,YAAY,CAAC,GAAG,OAAO;AACrB,UAAM,QAAQ,EAAE,OAAO,CAAC,KAAK,MAAM,OAAO,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC;AAClE,WAAO,GAAG,EAAE,IAAI,MAAM,eAAe,SAAS,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC,CAAC;AAAA,EACvG;AAAA,EACA,UAAU,CAAC,GAAG,OAAO;AACnB,QAAI,EAAE,WAAW,EAAG,QAAO,GAAG,EAAE;AAChC,UAAM,MACJ,EAAE,OAAO,CAAC,KAAK,MAAM,OAAO,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;AAC5D,WAAO,GAAG,EAAE,IAAI,IAAI,eAAe,SAAS,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC,CAAC;AAAA,EACrG;AACF;AAMO,SAAS,iBAAiB,MAAgC;AAC/D,SAAO,KACJ,IAAI,CAAC,QAAQ;AACZ,UAAM,UAAU,uBAAuB,IAAI,OAAO;AAClD,QAAI,CAAC,QAAS,QAAO;AACrB,WAAO;AAAA,MACL,KAAK,IAAI;AAAA,MACT,OAAO,IAAI;AAAA,MACX,MAAM,gBAAgB,IAAI,IAAI;AAAA,MAC9B,UAAU;AAAA,IACZ;AAAA,EACF,CAAC,EACA,OAAO,OAAO;AACnB;AAYO,SAAS,oBAAoB,MAAkC;AACpE,SAAO,KACJ,OAAO,CAAC,MAAM,EAAE,IAAI,EACpB,IAAI,CAAC,OAAO;AAAA,IACX,OAAO,EAAE;AAAA,IACT,MAAM,EAAE;AAAA,IACR,MAAM,YAAY,EAAE,IAAI;AAAA,EAC1B,EAAE;AACN;AASO,SAAS,iBAAiB,SAAoC;AACnE,SAAO,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AACvE;AAKO,SAAS,aACd,SACA,SACU;AACV,SAAO,QACJ,OAAO,CAAC,MAAM,EAAE,OAAO,UAAU,EACjC,IAAI,CAAC,QAAQ;AACZ,YAAQ,IAAI,IAAI;AAAA,MACd,KAAK;AACH,eAAO,QAAQ;AAAA,MACjB,KAAK;AACH,eAAO,QAAQ,OAAO;AAAA,MACxB,KAAK;AACH,eAAO,QAAQ,OAAO,SAAS,KAAK;AAAA,MACtC,KAAK;AACH,eAAO,QAAQ,UAAU,SAAS,KAAK;AAAA,MACzC,KAAK;AACH,gBAAQ,QAAQ,YAAY,GAAG,SAAS;AAAA,MAC1C,KAAK;AACH,iBAAS,QAAQ,YAAY,MAAM,QAAQ,YAAY,IAAI,SAAS;AAAA,MACtE,KAAK;AACH,gBAAQ,QAAQ,qBAAqB,GAAG,SAAS;AAAA,MACnD,KAAK;AACH,eAAO,eAAe,OAAO;AAAA,MAC/B,KAAK,YAAY;AACf,cAAM,YAAY,QAAQ;AAG1B,eAAO,WAAW,UAAU,iBAAiB,SAAS,KAAK;AAAA,MAC7D;AAAA,MACA;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AACL;","names":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { IntentConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* What one ROW is, asked of the row.
|
|
4
|
+
*
|
|
5
|
+
* Every archetype defect in the multi-archetype audit was the same question
|
|
6
|
+
* asked of the wrong thing: *what archetype is this SCREEN about?* — which has
|
|
7
|
+
* no answer for a business running four, and `primary` returned one anyway.
|
|
8
|
+
* The single resolver that never had a bug found against it is
|
|
9
|
+
* `resolveOrderSections`, and it is the only one that asks something else: it
|
|
10
|
+
* reads the record's own behaviours.
|
|
11
|
+
*
|
|
12
|
+
* This is that question, one screen over. A catalogue holding a membership, a
|
|
13
|
+
* personal-training session and a lifting belt has no true word — the sweep
|
|
14
|
+
* measured the noun falling through to "Items" in 13 of the 16 businesses this
|
|
15
|
+
* system exists for. But the shelf was never one thing, and each row has always
|
|
16
|
+
* known what it is: `InventoryProduct.behaviors` ships on every row already.
|
|
17
|
+
*
|
|
18
|
+
* So the heading stays neutral, because it genuinely covers all of them, and
|
|
19
|
+
* the rows carry the meaning. Nothing is guessed and nothing is averaged.
|
|
20
|
+
*
|
|
21
|
+
* Returns null where a row identifies as nothing in particular — an item with
|
|
22
|
+
* no behaviours, or one whose archetype this business does not run. A row that
|
|
23
|
+
* cannot say what it is says nothing, rather than borrowing a neighbour's word.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveRowNoun(behaviors: Record<string, boolean> | undefined, configs: IntentConfig[], renamed?: boolean): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* The core the three adapters share.
|
|
28
|
+
*
|
|
29
|
+
* A catalogue row keeps its behaviours as an object, an order line as an array,
|
|
30
|
+
* and a commitment as an array the API now sends. Three shapes, one question,
|
|
31
|
+
* so one place answers it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveBehaviourNoun(present: string[], configs: IntentConfig[],
|
|
34
|
+
/**
|
|
35
|
+
* True when the merchant has renamed this slot in Settings.
|
|
36
|
+
*
|
|
37
|
+
* They typed ONE word for the shelf — "Properties" — and per-row archetype
|
|
38
|
+
* words contradict it: the row would say Product under a heading the
|
|
39
|
+
* merchant wrote themselves. A rename is the strongest statement anyone
|
|
40
|
+
* makes about a noun, so it wins by silencing this rather than by being
|
|
41
|
+
* repeated on every row, which would erase the distinction the row exists to
|
|
42
|
+
* draw.
|
|
43
|
+
*/
|
|
44
|
+
renamed?: boolean): string | null;
|
|
45
|
+
/**
|
|
46
|
+
* The same question, of an order.
|
|
47
|
+
*
|
|
48
|
+
* `Commitment` — the Sales register's row — carries eleven flat fields and no
|
|
49
|
+
* behaviours, so the cross-rail list cannot answer this without the API sending
|
|
50
|
+
* more. An ORDER can: every line carries `behaviors`, which is what
|
|
51
|
+
* `resolveOrderSections` has always read to decide the detail screen's shape.
|
|
52
|
+
*
|
|
53
|
+
* A mixed order resolves to nothing on purpose. One that holds a membership and
|
|
54
|
+
* a lifting belt is genuinely both, and the row has one line to say it in;
|
|
55
|
+
* `resolveOrderSections` unions the SECTIONS for exactly that case because a
|
|
56
|
+
* detail screen has room to show both, and a table cell does not.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveOrderRowNoun(order: {
|
|
59
|
+
items?: {
|
|
60
|
+
behaviors?: string[];
|
|
61
|
+
}[] | null;
|
|
62
|
+
}, configs: IntentConfig[], renamed?: boolean): string | null;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { configsForBehaviors, orderBehaviors } from "./order-sections";
|
|
2
|
+
function resolveRowNoun(behaviors, configs, renamed = false) {
|
|
3
|
+
if (!behaviors) return null;
|
|
4
|
+
return resolveBehaviourNoun(
|
|
5
|
+
Object.entries(behaviors).filter(([, on]) => on).map(([name]) => name),
|
|
6
|
+
configs,
|
|
7
|
+
renamed
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
function resolveBehaviourNoun(present, configs, renamed = false) {
|
|
11
|
+
if (!present.length) return null;
|
|
12
|
+
if (configs.length < 2 || renamed) return null;
|
|
13
|
+
const matched = configsForBehaviors(configs, present);
|
|
14
|
+
if (matched.length !== 1) return null;
|
|
15
|
+
return matched[0].entities.item.singular;
|
|
16
|
+
}
|
|
17
|
+
function resolveOrderRowNoun(order, configs, renamed = false) {
|
|
18
|
+
return resolveBehaviourNoun([...orderBehaviors(order)], configs, renamed);
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
resolveBehaviourNoun,
|
|
22
|
+
resolveOrderRowNoun,
|
|
23
|
+
resolveRowNoun
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=row-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/intents/row-identity.ts"],"sourcesContent":["import type { IntentConfig } from './types';\nimport { configsForBehaviors, orderBehaviors } from './order-sections';\n\n/**\n * What one ROW is, asked of the row.\n *\n * Every archetype defect in the multi-archetype audit was the same question\n * asked of the wrong thing: *what archetype is this SCREEN about?* — which has\n * no answer for a business running four, and `primary` returned one anyway.\n * The single resolver that never had a bug found against it is\n * `resolveOrderSections`, and it is the only one that asks something else: it\n * reads the record's own behaviours.\n *\n * This is that question, one screen over. A catalogue holding a membership, a\n * personal-training session and a lifting belt has no true word — the sweep\n * measured the noun falling through to \"Items\" in 13 of the 16 businesses this\n * system exists for. But the shelf was never one thing, and each row has always\n * known what it is: `InventoryProduct.behaviors` ships on every row already.\n *\n * So the heading stays neutral, because it genuinely covers all of them, and\n * the rows carry the meaning. Nothing is guessed and nothing is averaged.\n *\n * Returns null where a row identifies as nothing in particular — an item with\n * no behaviours, or one whose archetype this business does not run. A row that\n * cannot say what it is says nothing, rather than borrowing a neighbour's word.\n */\nexport function resolveRowNoun(\n behaviors: Record<string, boolean> | undefined,\n configs: IntentConfig[],\n renamed = false,\n): string | null {\n if (!behaviors) return null;\n return resolveBehaviourNoun(\n Object.entries(behaviors)\n .filter(([, on]) => on)\n .map(([name]) => name),\n configs,\n renamed,\n );\n}\n\n/**\n * The core the three adapters share.\n *\n * A catalogue row keeps its behaviours as an object, an order line as an array,\n * and a commitment as an array the API now sends. Three shapes, one question,\n * so one place answers it.\n */\nexport function resolveBehaviourNoun(\n present: string[],\n configs: IntentConfig[],\n /**\n * True when the merchant has renamed this slot in Settings.\n *\n * They typed ONE word for the shelf — \"Properties\" — and per-row archetype\n * words contradict it: the row would say Product under a heading the\n * merchant wrote themselves. A rename is the strongest statement anyone\n * makes about a noun, so it wins by silencing this rather than by being\n * repeated on every row, which would erase the distinction the row exists to\n * draw.\n */\n renamed = false,\n): string | null {\n if (!present.length) return null;\n\n /*\n * A noun that repeats the heading is noise.\n *\n * One archetype means the shelf already says what everything on it is —\n * \"Inventory\" over rows each reading Product. The row noun exists to\n * separate things a heading CANNOT name, so with nothing to separate it\n * says nothing. That is the same reason the heading itself falls through to\n * the neutral word when archetypes disagree: each says the part it can.\n */\n if (configs.length < 2 || renamed) return null;\n\n const matched = configsForBehaviors(configs, present);\n\n /*\n * Exactly one, or nothing.\n *\n * A row can satisfy two archetypes — `dine-in` and `food-orders` are both\n * identified by `sellable`, so no line can tell a plate from a takeaway bag.\n * Naming it either would be the same invention this replaces, one level\n * down, so an ambiguous row stays quiet. The place to fix that is the data:\n * until an order line records which it is, no resolver can know.\n */\n if (matched.length !== 1) return null;\n\n return matched[0].entities.item.singular;\n}\n\n/**\n * The same question, of an order.\n *\n * `Commitment` — the Sales register's row — carries eleven flat fields and no\n * behaviours, so the cross-rail list cannot answer this without the API sending\n * more. An ORDER can: every line carries `behaviors`, which is what\n * `resolveOrderSections` has always read to decide the detail screen's shape.\n *\n * A mixed order resolves to nothing on purpose. One that holds a membership and\n * a lifting belt is genuinely both, and the row has one line to say it in;\n * `resolveOrderSections` unions the SECTIONS for exactly that case because a\n * detail screen has room to show both, and a table cell does not.\n */\nexport function resolveOrderRowNoun(\n order: { items?: { behaviors?: string[] }[] | null },\n configs: IntentConfig[],\n renamed = false,\n): string | null {\n return resolveBehaviourNoun([...orderBehaviors(order)], configs, renamed);\n}\n"],"mappings":"AACA,SAAS,qBAAqB,sBAAsB;AAyB7C,SAAS,eACd,WACA,SACA,UAAU,OACK;AACf,MAAI,CAAC,UAAW,QAAO;AACvB,SAAO;AAAA,IACL,OAAO,QAAQ,SAAS,EACrB,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EACrB,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACF;AASO,SAAS,qBACd,SACA,SAWA,UAAU,OACK;AACf,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAW5B,MAAI,QAAQ,SAAS,KAAK,QAAS,QAAO;AAE1C,QAAM,UAAU,oBAAoB,SAAS,OAAO;AAWpD,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,SAAO,QAAQ,CAAC,EAAE,SAAS,KAAK;AAClC;AAeO,SAAS,oBACd,OACA,SACA,UAAU,OACK;AACf,SAAO,qBAAqB,CAAC,GAAG,eAAe,KAAK,CAAC,GAAG,SAAS,OAAO;AAC1E;","names":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IntentConfig } from './types';
|
|
2
|
+
export interface SalesVerb {
|
|
3
|
+
/** Column header: "Sold" / "Booked". */
|
|
4
|
+
noun: string;
|
|
5
|
+
/** Past participle used in a phrase: "Never sold" / "Booked 3d ago". */
|
|
6
|
+
past: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveSalesVerb(configs: IntentConfig[]): SalesVerb;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const BOOKED = /* @__PURE__ */ new Set(["rent-property", "take-bookings"]);
|
|
2
|
+
const SOLD = { noun: "Sold", past: "Sold" };
|
|
3
|
+
const BOOKED_VERB = { noun: "Booked", past: "Booked" };
|
|
4
|
+
function resolveSalesVerb(configs) {
|
|
5
|
+
const keys = configs.map((c) => c.key);
|
|
6
|
+
const booked = keys.filter((k) => BOOKED.has(k)).length;
|
|
7
|
+
return booked > 0 && booked === keys.length ? BOOKED_VERB : SOLD;
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
resolveSalesVerb
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=sales-verb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/intents/sales-verb.ts"],"sourcesContent":["import type { IntentConfig } from './types';\n\n/**\n * The word for \"this has been paid for\", in the merchant's trade.\n *\n * The catalogue hardcoded **Sold**: a \"Sold\" column, and a signal reading\n * \"Never sold\", \"Sold today\", \"Sold 3d ago\". On a beach house that is not\n * shorthand, it is the wrong verb — a property is booked, a consultation is\n * booked, and neither is ever sold. CLAUDE.md has one rule about this and it is\n * \"never hardcode a merchant-facing noun\".\n *\n * Only the archetypes whose thing is genuinely not sold override it. A menu\n * item, a ticket, a download and a product are all sold, and inventing a\n * distinction for them would be the mistake this walkthrough keeps finding in\n * the other direction.\n */\nconst BOOKED = new Set(['rent-property', 'take-bookings']);\n\nexport interface SalesVerb {\n /** Column header: \"Sold\" / \"Booked\". */\n noun: string;\n /** Past participle used in a phrase: \"Never sold\" / \"Booked 3d ago\". */\n past: string;\n}\n\nconst SOLD: SalesVerb = { noun: 'Sold', past: 'Sold' };\nconst BOOKED_VERB: SalesVerb = { noun: 'Booked', past: 'Booked' };\n\nexport function resolveSalesVerb(configs: IntentConfig[]): SalesVerb {\n const keys = configs.map((c) => c.key);\n const booked = keys.filter((k) => BOOKED.has(k)).length;\n\n // A business that only ever books says Booked. One that does both sells\n // some of what is on this shelf, and Sold is the word that covers a mixed\n // list — the same reason a shared row is called Catalog rather than Menu.\n return booked > 0 && booked === keys.length ? BOOKED_VERB : SOLD;\n}\n"],"mappings":"AAgBA,MAAM,SAAS,oBAAI,IAAI,CAAC,iBAAiB,eAAe,CAAC;AASzD,MAAM,OAAkB,EAAE,MAAM,QAAQ,MAAM,OAAO;AACrD,MAAM,cAAyB,EAAE,MAAM,UAAU,MAAM,SAAS;AAEzD,SAAS,iBAAiB,SAAoC;AACnE,QAAM,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,GAAG;AACrC,QAAM,SAAS,KAAK,OAAO,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC,EAAE;AAKjD,SAAO,SAAS,KAAK,WAAW,KAAK,SAAS,cAAc;AAC9D;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntentConfig, ResolvedIntentConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The resolved config for a screen scoped to one intent.
|
|
4
|
+
*
|
|
5
|
+
* Takes the tenant's own copy of the config when it runs the intent, which
|
|
6
|
+
* carries their operating-shell overrides, and falls back to the registry's
|
|
7
|
+
* when it does not — a route can be opened by URL on a business that never
|
|
8
|
+
* selected the intent, and a blank screen there is worse than the intent's own
|
|
9
|
+
* default wording. Unknown keys answer undefined so the caller can fall
|
|
10
|
+
* through to the ordinary resolution.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveScopedConfig(tenantConfigs: readonly IntentConfig[], scopeKey: string, registryConfig: IntentConfig | undefined): ResolvedIntentConfig | undefined;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function resolveScopedConfig(tenantConfigs, scopeKey, registryConfig) {
|
|
2
|
+
const only = tenantConfigs.find((config) => config.key === scopeKey) ?? registryConfig;
|
|
3
|
+
if (!only) return void 0;
|
|
4
|
+
return {
|
|
5
|
+
mode: "single",
|
|
6
|
+
primary: only,
|
|
7
|
+
all: [only],
|
|
8
|
+
activeKeys: [only.key],
|
|
9
|
+
active: [only],
|
|
10
|
+
hasArchetype: true,
|
|
11
|
+
isAllIntents: false
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
resolveScopedConfig
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=scoped-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/intents/scoped-config.ts"],"sourcesContent":["import type { IntentConfig, ResolvedIntentConfig } from './types';\n\n/**\n * The resolved config for a screen scoped to one intent.\n *\n * Takes the tenant's own copy of the config when it runs the intent, which\n * carries their operating-shell overrides, and falls back to the registry's\n * when it does not — a route can be opened by URL on a business that never\n * selected the intent, and a blank screen there is worse than the intent's own\n * default wording. Unknown keys answer undefined so the caller can fall\n * through to the ordinary resolution.\n */\nexport function resolveScopedConfig(\n tenantConfigs: readonly IntentConfig[],\n scopeKey: string,\n registryConfig: IntentConfig | undefined,\n): ResolvedIntentConfig | undefined {\n const only =\n tenantConfigs.find((config) => config.key === scopeKey) ?? registryConfig;\n if (!only) return undefined;\n\n return {\n mode: 'single',\n primary: only,\n all: [only],\n activeKeys: [only.key],\n active: [only],\n hasArchetype: true,\n isAllIntents: false,\n };\n}\n"],"mappings":"AAYO,SAAS,oBACd,eACA,UACA,gBACkC;AAClC,QAAM,OACJ,cAAc,KAAK,CAAC,WAAW,OAAO,QAAQ,QAAQ,KAAK;AAC7D,MAAI,CAAC,KAAM,QAAO;AAElB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK,CAAC,IAAI;AAAA,IACV,YAAY,CAAC,KAAK,GAAG;AAAA,IACrB,QAAQ,CAAC,IAAI;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AACF;","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IntentConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* What the screen at this route is called.
|
|
4
|
+
*
|
|
5
|
+
* A page must not name itself. The sidebar row and the page heading were two
|
|
6
|
+
* independent strings in two different files, and nothing failed when they
|
|
7
|
+
* disagreed — so a restaurant clicked **Tables** and got "Staff", a short-let
|
|
8
|
+
* clicked **Availability** and got "Calendar Sync", a membership business
|
|
9
|
+
* clicked **Plans** and got "Subscriptions". Each was found by a person using
|
|
10
|
+
* the product, one at a time, and each was fixed as a copy problem.
|
|
11
|
+
*
|
|
12
|
+
* The fix that scales is to remove the second string. This resolves a route to
|
|
13
|
+
* the label the nav is showing for it, from the same `decideSharedNav` pass the
|
|
14
|
+
* sidebar runs, so the two cannot drift: there is only one value.
|
|
15
|
+
*
|
|
16
|
+
* Pure, and takes everything it needs, so `screen-title.test.ts` can assert it
|
|
17
|
+
* for every archetype and every row without rendering anything.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveScreenTitle({ configs, mode, pathname, search, moduleLabels, }: {
|
|
20
|
+
configs: IntentConfig[];
|
|
21
|
+
mode: 'single' | 'multi';
|
|
22
|
+
/** May carry its own query string, which is honoured. */
|
|
23
|
+
pathname: string;
|
|
24
|
+
/** The live query string, when the caller has it separately. */
|
|
25
|
+
search?: string;
|
|
26
|
+
moduleLabels?: Record<string, string>;
|
|
27
|
+
}): string | undefined;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { INTENT_NAV_DEFINITIONS } from "./intent-nav";
|
|
2
|
+
import { decideSharedNav, navDecisionKey } from "./collapse-shared-nav";
|
|
3
|
+
import { moduleLabelFor } from "./use-entity-label";
|
|
4
|
+
function resolveScreenTitle({
|
|
5
|
+
configs,
|
|
6
|
+
mode,
|
|
7
|
+
pathname,
|
|
8
|
+
search,
|
|
9
|
+
moduleLabels
|
|
10
|
+
}) {
|
|
11
|
+
const active = new Set(configs.map((c) => c.key));
|
|
12
|
+
const definitions = INTENT_NAV_DEFINITIONS.filter((d) => active.has(d.key));
|
|
13
|
+
const decisions = decideSharedNav(
|
|
14
|
+
definitions,
|
|
15
|
+
mode === "multi" && definitions.length > 1 ? "multi" : "single"
|
|
16
|
+
);
|
|
17
|
+
const [rawPath, inlineQuery] = pathname.split("?");
|
|
18
|
+
const path = rawPath.replace(/\/$/, "");
|
|
19
|
+
const query = new URLSearchParams(search ?? inlineQuery ?? "");
|
|
20
|
+
const scoped = (query.get("intent") ?? "").split(",").map((key) => key.trim()).filter(Boolean);
|
|
21
|
+
let best;
|
|
22
|
+
for (const definition of definitions) {
|
|
23
|
+
const config = configs.find((c) => c.key === definition.key);
|
|
24
|
+
if (!config) continue;
|
|
25
|
+
const declared = new Map(
|
|
26
|
+
config.navigation.groups.flatMap((g) => g.items).map((i) => [i.id, i.href.replace(/\/$/, "")])
|
|
27
|
+
);
|
|
28
|
+
const rows = definition.items.flatMap((item) => [
|
|
29
|
+
item,
|
|
30
|
+
...item.children ?? []
|
|
31
|
+
]);
|
|
32
|
+
for (const item of rows) {
|
|
33
|
+
const declaredHref = declared.get(item.id);
|
|
34
|
+
if (!declaredHref) continue;
|
|
35
|
+
const [target, targetQuery] = declaredHref.split("?");
|
|
36
|
+
if (path !== target && !path.startsWith(target + "/")) continue;
|
|
37
|
+
const wanted = new URLSearchParams(targetQuery ?? "");
|
|
38
|
+
let matched = 0;
|
|
39
|
+
let contradicted = false;
|
|
40
|
+
for (const [key, value] of wanted) {
|
|
41
|
+
if (query.get(key) === value) matched += 1;
|
|
42
|
+
else contradicted = true;
|
|
43
|
+
}
|
|
44
|
+
if (contradicted) continue;
|
|
45
|
+
const decision = decisions.get(navDecisionKey(definition.key, item.id));
|
|
46
|
+
const navLabel = decision?.emit ? decision.label : item.label;
|
|
47
|
+
const label = moduleLabelFor(moduleLabels, item.id, target) ?? navLabel;
|
|
48
|
+
const owned = scoped.length === 1 && scoped[0] === definition.key;
|
|
49
|
+
const better = !best || target.length > best.length || target.length === best.length && (owned !== best.owned ? owned : matched > best.query);
|
|
50
|
+
if (better)
|
|
51
|
+
best = { label, length: target.length, query: matched, owned };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return best?.label;
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
resolveScreenTitle
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=screen-title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/intents/screen-title.ts"],"sourcesContent":["import type { IntentConfig } from './types';\nimport { INTENT_NAV_DEFINITIONS } from './intent-nav';\nimport { decideSharedNav, navDecisionKey } from './collapse-shared-nav';\nimport { moduleLabelFor } from './use-entity-label';\n\n/**\n * What the screen at this route is called.\n *\n * A page must not name itself. The sidebar row and the page heading were two\n * independent strings in two different files, and nothing failed when they\n * disagreed — so a restaurant clicked **Tables** and got \"Staff\", a short-let\n * clicked **Availability** and got \"Calendar Sync\", a membership business\n * clicked **Plans** and got \"Subscriptions\". Each was found by a person using\n * the product, one at a time, and each was fixed as a copy problem.\n *\n * The fix that scales is to remove the second string. This resolves a route to\n * the label the nav is showing for it, from the same `decideSharedNav` pass the\n * sidebar runs, so the two cannot drift: there is only one value.\n *\n * Pure, and takes everything it needs, so `screen-title.test.ts` can assert it\n * for every archetype and every row without rendering anything.\n */\nexport function resolveScreenTitle({\n configs,\n mode,\n pathname,\n search,\n moduleLabels,\n}: {\n configs: IntentConfig[];\n mode: 'single' | 'multi';\n /** May carry its own query string, which is honoured. */\n pathname: string;\n /** The live query string, when the caller has it separately. */\n search?: string;\n moduleLabels?: Record<string, string>;\n}): string | undefined {\n const active = new Set(configs.map((c) => c.key));\n const definitions = INTENT_NAV_DEFINITIONS.filter((d) => active.has(d.key));\n const decisions = decideSharedNav(\n definitions,\n mode === 'multi' && definitions.length > 1 ? 'multi' : 'single',\n );\n\n const [rawPath, inlineQuery] = pathname.split('?');\n const path = rawPath.replace(/\\/$/, '');\n const query = new URLSearchParams(search ?? inlineQuery ?? '');\n\n /**\n * Two rows can open the same path and differ only by query.\n *\n * A membership business has **Plans** at `/dashboard/subscriptions` and\n * **Subscribers** at `/dashboard/subscriptions?tab=subscribers`; a restaurant\n * has **Reservations** at `/dashboard/bookings?intent=dine-in` beside a\n * collapsed **Bookings** at the same path. Matching on pathname alone\n * answered with whichever was declared first — which is the drift this\n * function exists to remove, one level down.\n *\n * So: the deepest path wins, and among equal paths the row whose query the\n * URL actually carries wins. `/dashboard/bookings/attendees` is Attendees\n * rather than the Bookings row above it, for the same reason.\n */\n /**\n * `?intent=` says whose row this was.\n *\n * A hotel with a dining room has two rows on `/dashboard/bookings`: the\n * stays, collapsed to **Bookings**, and dine-in's **Reservations**. Neither\n * declares a query of its own, so the path alone cannot tell them apart and\n * the answer fell to whichever archetype is declared first. The sidebar\n * already scopes each row — that is what the param is for.\n */\n const scoped = (query.get('intent') ?? '')\n .split(',')\n .map((key) => key.trim())\n .filter(Boolean);\n\n let best:\n | { label: string; length: number; query: number; owned: boolean }\n | undefined;\n\n for (const definition of definitions) {\n const config = configs.find((c) => c.key === definition.key);\n if (!config) continue;\n\n const declared = new Map(\n config.navigation.groups\n .flatMap((g) => g.items)\n .map((i) => [i.id, i.href.replace(/\\/$/, '')] as const),\n );\n\n const rows = definition.items.flatMap((item) => [\n item,\n ...(item.children ?? []),\n ]);\n\n for (const item of rows) {\n const declaredHref = declared.get(item.id);\n if (!declaredHref) continue;\n const [target, targetQuery] = declaredHref.split('?');\n if (path !== target && !path.startsWith(target + '/')) continue;\n\n // A row that names a query only answers for a URL carrying it.\n const wanted = new URLSearchParams(targetQuery ?? '');\n let matched = 0;\n let contradicted = false;\n for (const [key, value] of wanted) {\n if (query.get(key) === value) matched += 1;\n else contradicted = true;\n }\n if (contradicted) continue;\n\n const decision = decisions.get(navDecisionKey(definition.key, item.id));\n // A child row is not part of the collapse pass, so it keeps its own word.\n const navLabel = decision?.emit ? decision.label : item.label;\n // The merchant's own rename outranks every archetype's word, and it is\n // stored against the destination rather than the row.\n const label = moduleLabelFor(moduleLabels, item.id, target) ?? navLabel;\n\n // Exactly this archetype's row, not one of several the param names.\n const owned = scoped.length === 1 && scoped[0] === definition.key;\n\n const better =\n !best ||\n target.length > best.length ||\n (target.length === best.length &&\n (owned !== best.owned ? owned : matched > best.query));\n\n if (better)\n best = { label, length: target.length, query: matched, owned };\n }\n }\n\n return best?.label;\n}\n"],"mappings":"AACA,SAAS,8BAA8B;AACvC,SAAS,iBAAiB,sBAAsB;AAChD,SAAS,sBAAsB;AAmBxB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQuB;AACrB,QAAM,SAAS,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAChD,QAAM,cAAc,uBAAuB,OAAO,CAAC,MAAM,OAAO,IAAI,EAAE,GAAG,CAAC;AAC1E,QAAM,YAAY;AAAA,IAChB;AAAA,IACA,SAAS,WAAW,YAAY,SAAS,IAAI,UAAU;AAAA,EACzD;AAEA,QAAM,CAAC,SAAS,WAAW,IAAI,SAAS,MAAM,GAAG;AACjD,QAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE;AACtC,QAAM,QAAQ,IAAI,gBAAgB,UAAU,eAAe,EAAE;AAyB7D,QAAM,UAAU,MAAM,IAAI,QAAQ,KAAK,IACpC,MAAM,GAAG,EACT,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EACvB,OAAO,OAAO;AAEjB,MAAI;AAIJ,aAAW,cAAc,aAAa;AACpC,UAAM,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,WAAW,GAAG;AAC3D,QAAI,CAAC,OAAQ;AAEb,UAAM,WAAW,IAAI;AAAA,MACnB,OAAO,WAAW,OACf,QAAQ,CAAC,MAAM,EAAE,KAAK,EACtB,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,OAAO,EAAE,CAAC,CAAU;AAAA,IAC1D;AAEA,UAAM,OAAO,WAAW,MAAM,QAAQ,CAAC,SAAS;AAAA,MAC9C;AAAA,MACA,GAAI,KAAK,YAAY,CAAC;AAAA,IACxB,CAAC;AAED,eAAW,QAAQ,MAAM;AACvB,YAAM,eAAe,SAAS,IAAI,KAAK,EAAE;AACzC,UAAI,CAAC,aAAc;AACnB,YAAM,CAAC,QAAQ,WAAW,IAAI,aAAa,MAAM,GAAG;AACpD,UAAI,SAAS,UAAU,CAAC,KAAK,WAAW,SAAS,GAAG,EAAG;AAGvD,YAAM,SAAS,IAAI,gBAAgB,eAAe,EAAE;AACpD,UAAI,UAAU;AACd,UAAI,eAAe;AACnB,iBAAW,CAAC,KAAK,KAAK,KAAK,QAAQ;AACjC,YAAI,MAAM,IAAI,GAAG,MAAM,MAAO,YAAW;AAAA,YACpC,gBAAe;AAAA,MACtB;AACA,UAAI,aAAc;AAElB,YAAM,WAAW,UAAU,IAAI,eAAe,WAAW,KAAK,KAAK,EAAE,CAAC;AAEtE,YAAM,WAAW,UAAU,OAAO,SAAS,QAAQ,KAAK;AAGxD,YAAM,QAAQ,eAAe,cAAc,KAAK,IAAI,MAAM,KAAK;AAG/D,YAAM,QAAQ,OAAO,WAAW,KAAK,OAAO,CAAC,MAAM,WAAW;AAE9D,YAAM,SACJ,CAAC,QACD,OAAO,SAAS,KAAK,UACpB,OAAO,WAAW,KAAK,WACrB,UAAU,KAAK,QAAQ,QAAQ,UAAU,KAAK;AAEnD,UAAI;AACF,eAAO,EAAE,OAAO,QAAQ,OAAO,QAAQ,OAAO,SAAS,MAAM;AAAA,IACjE;AAAA,EACF;AAEA,SAAO,MAAM;AACf;","names":[]}
|