@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.
Files changed (1341) hide show
  1. package/dist/__fixtures__/demo-content-server.json +484 -0
  2. package/dist/accessibility-context.d.ts +27 -0
  3. package/dist/accessibility-context.js +107 -0
  4. package/dist/accessibility-context.js.map +1 -0
  5. package/dist/active-workspace.d.ts +45 -0
  6. package/dist/active-workspace.js +34 -0
  7. package/dist/active-workspace.js.map +1 -0
  8. package/dist/admin-account-officer-api.d.ts +13 -0
  9. package/dist/admin-account-officer-api.js +12 -0
  10. package/dist/admin-account-officer-api.js.map +1 -0
  11. package/dist/admin-account-types.d.ts +122 -0
  12. package/dist/admin-account-types.js +1 -0
  13. package/dist/admin-account-types.js.map +1 -0
  14. package/dist/admin-adoption-api.d.ts +35 -0
  15. package/dist/admin-adoption-api.js +16 -0
  16. package/dist/admin-adoption-api.js.map +1 -0
  17. package/dist/admin-api.d.ts +1219 -0
  18. package/dist/admin-api.js +325 -0
  19. package/dist/admin-api.js.map +1 -0
  20. package/dist/admin-case-api.d.ts +32 -0
  21. package/dist/admin-case-api.js +63 -0
  22. package/dist/admin-case-api.js.map +1 -0
  23. package/dist/admin-case-types.d.ts +166 -0
  24. package/dist/admin-case-types.js +1 -0
  25. package/dist/admin-case-types.js.map +1 -0
  26. package/dist/admin-compliance-api.d.ts +31 -0
  27. package/dist/admin-compliance-api.js +20 -0
  28. package/dist/admin-compliance-api.js.map +1 -0
  29. package/dist/admin-country-api.d.ts +28 -0
  30. package/dist/admin-country-api.js +9 -0
  31. package/dist/admin-country-api.js.map +1 -0
  32. package/dist/admin-currency-types.d.ts +138 -0
  33. package/dist/admin-currency-types.js +1 -0
  34. package/dist/admin-currency-types.js.map +1 -0
  35. package/dist/admin-feedback-api.d.ts +215 -0
  36. package/dist/admin-feedback-api.js +63 -0
  37. package/dist/admin-feedback-api.js.map +1 -0
  38. package/dist/admin-inbox-seen.d.ts +22 -0
  39. package/dist/admin-inbox-seen.js +47 -0
  40. package/dist/admin-inbox-seen.js.map +1 -0
  41. package/dist/admin-ledger-api.d.ts +85 -0
  42. package/dist/admin-ledger-api.js +30 -0
  43. package/dist/admin-ledger-api.js.map +1 -0
  44. package/dist/admin-money-api.d.ts +127 -0
  45. package/dist/admin-money-api.js +125 -0
  46. package/dist/admin-money-api.js.map +1 -0
  47. package/dist/admin-newsletter-contacts-api.d.ts +70 -0
  48. package/dist/admin-newsletter-contacts-api.js +20 -0
  49. package/dist/admin-newsletter-contacts-api.js.map +1 -0
  50. package/dist/admin-newsletter-deliveries-api.d.ts +47 -0
  51. package/dist/admin-newsletter-deliveries-api.js +16 -0
  52. package/dist/admin-newsletter-deliveries-api.js.map +1 -0
  53. package/dist/admin-newsletters-api.d.ts +118 -0
  54. package/dist/admin-newsletters-api.js +47 -0
  55. package/dist/admin-newsletters-api.js.map +1 -0
  56. package/dist/admin-pos-api.d.ts +16 -0
  57. package/dist/admin-pos-api.js +35 -0
  58. package/dist/admin-pos-api.js.map +1 -0
  59. package/dist/admin-pos-query.d.ts +43 -0
  60. package/dist/admin-pos-query.js +55 -0
  61. package/dist/admin-pos-query.js.map +1 -0
  62. package/dist/admin-pos-types.d.ts +122 -0
  63. package/dist/admin-pos-types.js +1 -0
  64. package/dist/admin-pos-types.js.map +1 -0
  65. package/dist/admin-pricing-api.d.ts +88 -0
  66. package/dist/admin-pricing-api.js +66 -0
  67. package/dist/admin-pricing-api.js.map +1 -0
  68. package/dist/admin-readiness-api.d.ts +25 -0
  69. package/dist/admin-readiness-api.js +39 -0
  70. package/dist/admin-readiness-api.js.map +1 -0
  71. package/dist/admin-sales-api.d.ts +124 -0
  72. package/dist/admin-sales-api.js +41 -0
  73. package/dist/admin-sales-api.js.map +1 -0
  74. package/dist/admin-saved-replies-api.d.ts +35 -0
  75. package/dist/admin-saved-replies-api.js +70 -0
  76. package/dist/admin-saved-replies-api.js.map +1 -0
  77. package/dist/admin-service-operations-api.d.ts +142 -0
  78. package/dist/admin-service-operations-api.js +52 -0
  79. package/dist/admin-service-operations-api.js.map +1 -0
  80. package/dist/admin-signatures-api.d.ts +57 -0
  81. package/dist/admin-signatures-api.js +15 -0
  82. package/dist/admin-signatures-api.js.map +1 -0
  83. package/dist/admin-support-analytics-api.d.ts +36 -0
  84. package/dist/admin-support-analytics-api.js +71 -0
  85. package/dist/admin-support-analytics-api.js.map +1 -0
  86. package/dist/admin-tenant-setup-types.d.ts +85 -0
  87. package/dist/admin-tenant-setup-types.js +1 -0
  88. package/dist/admin-tenant-setup-types.js.map +1 -0
  89. package/dist/admin-tenants-query.d.ts +14 -0
  90. package/dist/admin-tenants-query.js +17 -0
  91. package/dist/admin-tenants-query.js.map +1 -0
  92. package/dist/analytics/PostHogProvider.d.ts +25 -0
  93. package/dist/analytics/PostHogProvider.js +44 -0
  94. package/dist/analytics/PostHogProvider.js.map +1 -0
  95. package/dist/analytics/index.d.ts +1 -0
  96. package/dist/analytics/index.js +11 -0
  97. package/dist/analytics/index.js.map +1 -0
  98. package/dist/analytics.d.ts +1 -0
  99. package/dist/analytics.js +1 -0
  100. package/dist/api/abandoned-cart.d.ts +18 -0
  101. package/dist/api/abandoned-cart.js +68 -0
  102. package/dist/api/abandoned-cart.js.map +1 -0
  103. package/dist/api/accounts.d.ts +176 -0
  104. package/dist/api/accounts.js +194 -0
  105. package/dist/api/accounts.js.map +1 -0
  106. package/dist/api/analytics-patterns.d.ts +18 -0
  107. package/dist/api/analytics-patterns.js +52 -0
  108. package/dist/api/analytics-patterns.js.map +1 -0
  109. package/dist/api/analytics.d.ts +143 -0
  110. package/dist/api/analytics.js +379 -0
  111. package/dist/api/analytics.js.map +1 -0
  112. package/dist/api/assignee-prefs.d.ts +7 -0
  113. package/dist/api/assignee-prefs.js +17 -0
  114. package/dist/api/assignee-prefs.js.map +1 -0
  115. package/dist/api/automations.d.ts +73 -0
  116. package/dist/api/automations.js +102 -0
  117. package/dist/api/automations.js.map +1 -0
  118. package/dist/api/behaviors.d.ts +15 -0
  119. package/dist/api/behaviors.js +15 -0
  120. package/dist/api/behaviors.js.map +1 -0
  121. package/dist/api/bio.d.ts +7 -0
  122. package/dist/api/bio.js +17 -0
  123. package/dist/api/bio.js.map +1 -0
  124. package/dist/api/booking-calendar.d.ts +14 -0
  125. package/dist/api/booking-calendar.js +33 -0
  126. package/dist/api/booking-calendar.js.map +1 -0
  127. package/dist/api/bookings.d.ts +199 -0
  128. package/dist/api/bookings.js +284 -0
  129. package/dist/api/bookings.js.map +1 -0
  130. package/dist/api/business-devices.d.ts +108 -0
  131. package/dist/api/business-devices.js +139 -0
  132. package/dist/api/business-devices.js.map +1 -0
  133. package/dist/api/business-locations.d.ts +26 -0
  134. package/dist/api/business-locations.js +39 -0
  135. package/dist/api/business-locations.js.map +1 -0
  136. package/dist/api/cache-bus.d.ts +56 -0
  137. package/dist/api/cache-bus.js +18 -0
  138. package/dist/api/cache-bus.js.map +1 -0
  139. package/dist/api/calendar-sync.d.ts +49 -0
  140. package/dist/api/calendar-sync.js +50 -0
  141. package/dist/api/calendar-sync.js.map +1 -0
  142. package/dist/api/campaign-initiatives.d.ts +115 -0
  143. package/dist/api/campaign-initiatives.js +42 -0
  144. package/dist/api/campaign-initiatives.js.map +1 -0
  145. package/dist/api/campaigns.d.ts +89 -0
  146. package/dist/api/campaigns.js +100 -0
  147. package/dist/api/campaigns.js.map +1 -0
  148. package/dist/api/capabilities.d.ts +12 -0
  149. package/dist/api/capabilities.js +16 -0
  150. package/dist/api/capabilities.js.map +1 -0
  151. package/dist/api/commerce.d.ts +19 -0
  152. package/dist/api/commerce.js +31 -0
  153. package/dist/api/commerce.js.map +1 -0
  154. package/dist/api/communications.d.ts +166 -0
  155. package/dist/api/communications.js +141 -0
  156. package/dist/api/communications.js.map +1 -0
  157. package/dist/api/connect.d.ts +72 -0
  158. package/dist/api/connect.js +50 -0
  159. package/dist/api/connect.js.map +1 -0
  160. package/dist/api/content.d.ts +146 -0
  161. package/dist/api/content.js +187 -0
  162. package/dist/api/content.js.map +1 -0
  163. package/dist/api/conversations.d.ts +79 -0
  164. package/dist/api/conversations.js +41 -0
  165. package/dist/api/conversations.js.map +1 -0
  166. package/dist/api/core.d.ts +62 -0
  167. package/dist/api/core.js +223 -0
  168. package/dist/api/core.js.map +1 -0
  169. package/dist/api/credentials.d.ts +65 -0
  170. package/dist/api/credentials.js +48 -0
  171. package/dist/api/credentials.js.map +1 -0
  172. package/dist/api/credits.d.ts +96 -0
  173. package/dist/api/credits.js +24 -0
  174. package/dist/api/credits.js.map +1 -0
  175. package/dist/api/crm-analytics.d.ts +10 -0
  176. package/dist/api/crm-analytics.js +22 -0
  177. package/dist/api/crm-analytics.js.map +1 -0
  178. package/dist/api/crm-segments.d.ts +14 -0
  179. package/dist/api/crm-segments.js +42 -0
  180. package/dist/api/crm-segments.js.map +1 -0
  181. package/dist/api/deliveries.d.ts +99 -0
  182. package/dist/api/deliveries.js +37 -0
  183. package/dist/api/deliveries.js.map +1 -0
  184. package/dist/api/demo-content.d.ts +104 -0
  185. package/dist/api/demo-content.js +36 -0
  186. package/dist/api/demo-content.js.map +1 -0
  187. package/dist/api/device-shifts.d.ts +56 -0
  188. package/dist/api/device-shifts.js +50 -0
  189. package/dist/api/device-shifts.js.map +1 -0
  190. package/dist/api/devices.d.ts +6 -0
  191. package/dist/api/devices.js +10 -0
  192. package/dist/api/devices.js.map +1 -0
  193. package/dist/api/digital-files.d.ts +22 -0
  194. package/dist/api/digital-files.js +55 -0
  195. package/dist/api/digital-files.js.map +1 -0
  196. package/dist/api/discounts.d.ts +29 -0
  197. package/dist/api/discounts.js +46 -0
  198. package/dist/api/discounts.js.map +1 -0
  199. package/dist/api/disputes.d.ts +47 -0
  200. package/dist/api/disputes.js +42 -0
  201. package/dist/api/disputes.js.map +1 -0
  202. package/dist/api/feature-locked.d.ts +11 -0
  203. package/dist/api/feature-locked.js +18 -0
  204. package/dist/api/feature-locked.js.map +1 -0
  205. package/dist/api/feedback-prompts.d.ts +45 -0
  206. package/dist/api/feedback-prompts.js +85 -0
  207. package/dist/api/feedback-prompts.js.map +1 -0
  208. package/dist/api/feedback.d.ts +254 -0
  209. package/dist/api/feedback.js +108 -0
  210. package/dist/api/feedback.js.map +1 -0
  211. package/dist/api/finance.d.ts +199 -0
  212. package/dist/api/finance.js +203 -0
  213. package/dist/api/finance.js.map +1 -0
  214. package/dist/api/gallery.d.ts +30 -0
  215. package/dist/api/gallery.js +48 -0
  216. package/dist/api/gallery.js.map +1 -0
  217. package/dist/api/geo.d.ts +18 -0
  218. package/dist/api/geo.js +19 -0
  219. package/dist/api/geo.js.map +1 -0
  220. package/dist/api/giftcards.d.ts +63 -0
  221. package/dist/api/giftcards.js +63 -0
  222. package/dist/api/giftcards.js.map +1 -0
  223. package/dist/api/hardware-orders.d.ts +40 -0
  224. package/dist/api/hardware-orders.js +37 -0
  225. package/dist/api/hardware-orders.js.map +1 -0
  226. package/dist/api/index.d.ts +71 -0
  227. package/dist/api/index.js +78 -0
  228. package/dist/api/index.js.map +1 -0
  229. package/dist/api/inquiries.d.ts +92 -0
  230. package/dist/api/inquiries.js +129 -0
  231. package/dist/api/inquiries.js.map +1 -0
  232. package/dist/api/inventory.d.ts +133 -0
  233. package/dist/api/inventory.js +203 -0
  234. package/dist/api/inventory.js.map +1 -0
  235. package/dist/api/invite-body.d.ts +19 -0
  236. package/dist/api/invite-body.js +8 -0
  237. package/dist/api/invite-body.js.map +1 -0
  238. package/dist/api/invoices.d.ts +19 -0
  239. package/dist/api/invoices.js +80 -0
  240. package/dist/api/invoices.js.map +1 -0
  241. package/dist/api/locations.d.ts +15 -0
  242. package/dist/api/locations.js +30 -0
  243. package/dist/api/locations.js.map +1 -0
  244. package/dist/api/loyalty.d.ts +68 -0
  245. package/dist/api/loyalty.js +112 -0
  246. package/dist/api/loyalty.js.map +1 -0
  247. package/dist/api/marketing-consent.d.ts +36 -0
  248. package/dist/api/marketing-consent.js +11 -0
  249. package/dist/api/marketing-consent.js.map +1 -0
  250. package/dist/api/marketing-suppressions.d.ts +81 -0
  251. package/dist/api/marketing-suppressions.js +65 -0
  252. package/dist/api/marketing-suppressions.js.map +1 -0
  253. package/dist/api/members.d.ts +79 -0
  254. package/dist/api/members.js +148 -0
  255. package/dist/api/members.js.map +1 -0
  256. package/dist/api/merchant-notifications.d.ts +27 -0
  257. package/dist/api/merchant-notifications.js +41 -0
  258. package/dist/api/merchant-notifications.js.map +1 -0
  259. package/dist/api/merchant-referrals.d.ts +23 -0
  260. package/dist/api/merchant-referrals.js +10 -0
  261. package/dist/api/merchant-referrals.js.map +1 -0
  262. package/dist/api/merchant-subscriptions.d.ts +117 -0
  263. package/dist/api/merchant-subscriptions.js +113 -0
  264. package/dist/api/merchant-subscriptions.js.map +1 -0
  265. package/dist/api/misc.d.ts +4 -0
  266. package/dist/api/misc.js +24 -0
  267. package/dist/api/misc.js.map +1 -0
  268. package/dist/api/odoo.d.ts +102 -0
  269. package/dist/api/odoo.js +36 -0
  270. package/dist/api/odoo.js.map +1 -0
  271. package/dist/api/onboarding.d.ts +48 -0
  272. package/dist/api/onboarding.js +78 -0
  273. package/dist/api/onboarding.js.map +1 -0
  274. package/dist/api/orders.d.ts +153 -0
  275. package/dist/api/orders.js +303 -0
  276. package/dist/api/orders.js.map +1 -0
  277. package/dist/api/organizations.d.ts +14 -0
  278. package/dist/api/organizations.js +19 -0
  279. package/dist/api/organizations.js.map +1 -0
  280. package/dist/api/packages.d.ts +16 -0
  281. package/dist/api/packages.js +25 -0
  282. package/dist/api/packages.js.map +1 -0
  283. package/dist/api/pages.d.ts +79 -0
  284. package/dist/api/pages.js +125 -0
  285. package/dist/api/pages.js.map +1 -0
  286. package/dist/api/payables.d.ts +34 -0
  287. package/dist/api/payables.js +70 -0
  288. package/dist/api/payables.js.map +1 -0
  289. package/dist/api/plan-refusal.d.ts +21 -0
  290. package/dist/api/plan-refusal.js +28 -0
  291. package/dist/api/plan-refusal.js.map +1 -0
  292. package/dist/api/pos.d.ts +66 -0
  293. package/dist/api/pos.js +115 -0
  294. package/dist/api/pos.js.map +1 -0
  295. package/dist/api/potter.d.ts +114 -0
  296. package/dist/api/potter.js +88 -0
  297. package/dist/api/potter.js.map +1 -0
  298. package/dist/api/push.d.ts +25 -0
  299. package/dist/api/push.js +23 -0
  300. package/dist/api/push.js.map +1 -0
  301. package/dist/api/referrals.d.ts +10 -0
  302. package/dist/api/referrals.js +16 -0
  303. package/dist/api/referrals.js.map +1 -0
  304. package/dist/api/resource-categories.d.ts +35 -0
  305. package/dist/api/resource-categories.js +76 -0
  306. package/dist/api/resource-categories.js.map +1 -0
  307. package/dist/api/resources.d.ts +54 -0
  308. package/dist/api/resources.js +92 -0
  309. package/dist/api/resources.js.map +1 -0
  310. package/dist/api/reviews.d.ts +18 -0
  311. package/dist/api/reviews.js +46 -0
  312. package/dist/api/reviews.js.map +1 -0
  313. package/dist/api/riders.d.ts +70 -0
  314. package/dist/api/riders.js +24 -0
  315. package/dist/api/riders.js.map +1 -0
  316. package/dist/api/role-permissions.d.ts +25 -0
  317. package/dist/api/role-permissions.js +47 -0
  318. package/dist/api/role-permissions.js.map +1 -0
  319. package/dist/api/sales-channels.d.ts +234 -0
  320. package/dist/api/sales-channels.js +119 -0
  321. package/dist/api/sales-channels.js.map +1 -0
  322. package/dist/api/service-missing.d.ts +10 -0
  323. package/dist/api/service-missing.js +19 -0
  324. package/dist/api/service-missing.js.map +1 -0
  325. package/dist/api/session-refresh.d.ts +18 -0
  326. package/dist/api/session-refresh.js +37 -0
  327. package/dist/api/session-refresh.js.map +1 -0
  328. package/dist/api/session-scope.d.ts +35 -0
  329. package/dist/api/session-scope.js +53 -0
  330. package/dist/api/session-scope.js.map +1 -0
  331. package/dist/api/settlements.d.ts +106 -0
  332. package/dist/api/settlements.js +114 -0
  333. package/dist/api/settlements.js.map +1 -0
  334. package/dist/api/share-links.d.ts +46 -0
  335. package/dist/api/share-links.js +25 -0
  336. package/dist/api/share-links.js.map +1 -0
  337. package/dist/api/shift-notes.d.ts +19 -0
  338. package/dist/api/shift-notes.js +13 -0
  339. package/dist/api/shift-notes.js.map +1 -0
  340. package/dist/api/shipping.d.ts +42 -0
  341. package/dist/api/shipping.js +53 -0
  342. package/dist/api/shipping.js.map +1 -0
  343. package/dist/api/social-sources.d.ts +58 -0
  344. package/dist/api/social-sources.js +23 -0
  345. package/dist/api/social-sources.js.map +1 -0
  346. package/dist/api/tabs.d.ts +14 -0
  347. package/dist/api/tabs.js +39 -0
  348. package/dist/api/tabs.js.map +1 -0
  349. package/dist/api/team.d.ts +112 -0
  350. package/dist/api/team.js +144 -0
  351. package/dist/api/team.js.map +1 -0
  352. package/dist/api/template-settings.d.ts +26 -0
  353. package/dist/api/template-settings.js +36 -0
  354. package/dist/api/template-settings.js.map +1 -0
  355. package/dist/api/templates.d.ts +21 -0
  356. package/dist/api/templates.js +25 -0
  357. package/dist/api/templates.js.map +1 -0
  358. package/dist/api/tenant-slug.d.ts +13 -0
  359. package/dist/api/tenant-slug.js +18 -0
  360. package/dist/api/tenant-slug.js.map +1 -0
  361. package/dist/api/tenant.d.ts +33 -0
  362. package/dist/api/tenant.js +51 -0
  363. package/dist/api/tenant.js.map +1 -0
  364. package/dist/api/types/analytics-attribution.d.ts +43 -0
  365. package/dist/api/types/analytics-attribution.js +1 -0
  366. package/dist/api/types/analytics-attribution.js.map +1 -0
  367. package/dist/api/types/analytics.d.ts +465 -0
  368. package/dist/api/types/analytics.js +1 -0
  369. package/dist/api/types/analytics.js.map +1 -0
  370. package/dist/api/types/auth.d.ts +206 -0
  371. package/dist/api/types/auth.js +7 -0
  372. package/dist/api/types/auth.js.map +1 -0
  373. package/dist/api/types/automation-flow.d.ts +199 -0
  374. package/dist/api/types/automation-flow.js +1 -0
  375. package/dist/api/types/automation-flow.js.map +1 -0
  376. package/dist/api/types/bookings.d.ts +226 -0
  377. package/dist/api/types/bookings.js +1 -0
  378. package/dist/api/types/bookings.js.map +1 -0
  379. package/dist/api/types/campaigns.d.ts +262 -0
  380. package/dist/api/types/campaigns.js +1 -0
  381. package/dist/api/types/campaigns.js.map +1 -0
  382. package/dist/api/types/catalog.d.ts +273 -0
  383. package/dist/api/types/catalog.js +1 -0
  384. package/dist/api/types/catalog.js.map +1 -0
  385. package/dist/api/types/collections.d.ts +189 -0
  386. package/dist/api/types/collections.js +1 -0
  387. package/dist/api/types/collections.js.map +1 -0
  388. package/dist/api/types/crm.d.ts +264 -0
  389. package/dist/api/types/crm.js +1 -0
  390. package/dist/api/types/crm.js.map +1 -0
  391. package/dist/api/types/customers.d.ts +269 -0
  392. package/dist/api/types/customers.js +1 -0
  393. package/dist/api/types/customers.js.map +1 -0
  394. package/dist/api/types/devices.d.ts +390 -0
  395. package/dist/api/types/devices.js +1 -0
  396. package/dist/api/types/devices.js.map +1 -0
  397. package/dist/api/types/discounts.d.ts +237 -0
  398. package/dist/api/types/discounts.js +1 -0
  399. package/dist/api/types/discounts.js.map +1 -0
  400. package/dist/api/types/filters.d.ts +258 -0
  401. package/dist/api/types/filters.js +1 -0
  402. package/dist/api/types/filters.js.map +1 -0
  403. package/dist/api/types/index.d.ts +31 -0
  404. package/dist/api/types/index.js +25 -0
  405. package/dist/api/types/index.js.map +1 -0
  406. package/dist/api/types/inquiries.d.ts +266 -0
  407. package/dist/api/types/inquiries.js +1 -0
  408. package/dist/api/types/inquiries.js.map +1 -0
  409. package/dist/api/types/locations.d.ts +208 -0
  410. package/dist/api/types/locations.js +1 -0
  411. package/dist/api/types/locations.js.map +1 -0
  412. package/dist/api/types/onboarding.d.ts +311 -0
  413. package/dist/api/types/onboarding.js +1 -0
  414. package/dist/api/types/onboarding.js.map +1 -0
  415. package/dist/api/types/operations.d.ts +136 -0
  416. package/dist/api/types/operations.js +1 -0
  417. package/dist/api/types/operations.js.map +1 -0
  418. package/dist/api/types/orders.d.ts +242 -0
  419. package/dist/api/types/orders.js +1 -0
  420. package/dist/api/types/orders.js.map +1 -0
  421. package/dist/api/types/payables.d.ts +140 -0
  422. package/dist/api/types/payables.js +1 -0
  423. package/dist/api/types/payables.js.map +1 -0
  424. package/dist/api/types/pos.d.ts +121 -0
  425. package/dist/api/types/pos.js +5 -0
  426. package/dist/api/types/pos.js.map +1 -0
  427. package/dist/api/types/record-analytics.d.ts +95 -0
  428. package/dist/api/types/record-analytics.js +1 -0
  429. package/dist/api/types/record-analytics.js.map +1 -0
  430. package/dist/api/types/sales-patterns.d.ts +58 -0
  431. package/dist/api/types/sales-patterns.js +1 -0
  432. package/dist/api/types/sales-patterns.js.map +1 -0
  433. package/dist/api/types/tabs.d.ts +210 -0
  434. package/dist/api/types/tabs.js +1 -0
  435. package/dist/api/types/tabs.js.map +1 -0
  436. package/dist/api/types/templates.d.ts +398 -0
  437. package/dist/api/types/templates.js +1 -0
  438. package/dist/api/types/templates.js.map +1 -0
  439. package/dist/api/types/waitlist.d.ts +324 -0
  440. package/dist/api/types/waitlist.js +1 -0
  441. package/dist/api/types/waitlist.js.map +1 -0
  442. package/dist/api/types.d.ts +1 -0
  443. package/dist/api/types.js +1 -0
  444. package/dist/api/unserved-routes.d.ts +4 -0
  445. package/dist/api/unserved-routes.js +15 -0
  446. package/dist/api/unserved-routes.js.map +1 -0
  447. package/dist/api/waitlist.d.ts +80 -0
  448. package/dist/api/waitlist.js +85 -0
  449. package/dist/api/waitlist.js.map +1 -0
  450. package/dist/api.d.ts +1 -0
  451. package/dist/api.js +1 -0
  452. package/dist/app-name.d.ts +29 -0
  453. package/dist/app-name.js +11 -0
  454. package/dist/app-name.js.map +1 -0
  455. package/dist/arrival.d.ts +48 -0
  456. package/dist/arrival.js +34 -0
  457. package/dist/arrival.js.map +1 -0
  458. package/dist/auth-context.d.ts +90 -0
  459. package/dist/auth-context.js +732 -0
  460. package/dist/auth-context.js.map +1 -0
  461. package/dist/auth-session.d.ts +1 -0
  462. package/dist/auth-session.js +25 -0
  463. package/dist/auth-session.js.map +1 -0
  464. package/dist/bank-phone.d.ts +2 -0
  465. package/dist/bank-phone.js +12 -0
  466. package/dist/bank-phone.js.map +1 -0
  467. package/dist/behavior-config-types.d.ts +49 -0
  468. package/dist/behavior-config-types.js +1 -0
  469. package/dist/behavior-config-types.js.map +1 -0
  470. package/dist/behavior-context.d.ts +15 -0
  471. package/dist/behavior-context.js +38 -0
  472. package/dist/behavior-context.js.map +1 -0
  473. package/dist/behavior-fields.d.ts +41 -0
  474. package/dist/behavior-fields.js +20 -0
  475. package/dist/behavior-fields.js.map +1 -0
  476. package/dist/blog/__fixtures__/paste-hygiene.d.ts +7 -0
  477. package/dist/blog/__fixtures__/paste-hygiene.js +36 -0
  478. package/dist/blog/__fixtures__/paste-hygiene.js.map +1 -0
  479. package/dist/blog/density.d.ts +65 -0
  480. package/dist/blog/density.js +126 -0
  481. package/dist/blog/density.js.map +1 -0
  482. package/dist/blog/paste-hygiene.d.ts +3 -0
  483. package/dist/blog/paste-hygiene.js +168 -0
  484. package/dist/blog/paste-hygiene.js.map +1 -0
  485. package/dist/booking-location-label.d.ts +10 -0
  486. package/dist/booking-location-label.js +24 -0
  487. package/dist/booking-location-label.js.map +1 -0
  488. package/dist/booking-meeting-link.d.ts +48 -0
  489. package/dist/booking-meeting-link.js +40 -0
  490. package/dist/booking-meeting-link.js.map +1 -0
  491. package/dist/box-channels.d.ts +22 -0
  492. package/dist/box-channels.js +16 -0
  493. package/dist/box-channels.js.map +1 -0
  494. package/dist/box-delivery.d.ts +10 -0
  495. package/dist/box-delivery.js +5 -0
  496. package/dist/box-delivery.js.map +1 -0
  497. package/dist/box-inbox.d.ts +11 -0
  498. package/dist/box-inbox.js +5 -0
  499. package/dist/box-inbox.js.map +1 -0
  500. package/dist/box-letting.d.ts +14 -0
  501. package/dist/box-letting.js +7 -0
  502. package/dist/box-letting.js.map +1 -0
  503. package/dist/box-mark-paths.d.ts +28 -0
  504. package/dist/box-mark-paths.js +23 -0
  505. package/dist/box-mark-paths.js.map +1 -0
  506. package/dist/box-media.d.ts +9 -0
  507. package/dist/box-media.js +5 -0
  508. package/dist/box-media.js.map +1 -0
  509. package/dist/box-products.d.ts +16 -0
  510. package/dist/box-products.js +9 -0
  511. package/dist/box-products.js.map +1 -0
  512. package/dist/box-splits.d.ts +12 -0
  513. package/dist/box-splits.js +5 -0
  514. package/dist/box-splits.js.map +1 -0
  515. package/dist/brand.d.ts +26 -0
  516. package/dist/brand.js +22 -0
  517. package/dist/brand.js.map +1 -0
  518. package/dist/business-categories.d.ts +50 -0
  519. package/dist/business-categories.js +378 -0
  520. package/dist/business-categories.js.map +1 -0
  521. package/dist/business-intents.d.ts +31 -0
  522. package/dist/business-intents.js +142 -0
  523. package/dist/business-intents.js.map +1 -0
  524. package/dist/capability-context.d.ts +63 -0
  525. package/dist/capability-context.js +84 -0
  526. package/dist/capability-context.js.map +1 -0
  527. package/dist/carriers.d.ts +83 -0
  528. package/dist/carriers.js +124 -0
  529. package/dist/carriers.js.map +1 -0
  530. package/dist/commerce-build/api.d.ts +29 -0
  531. package/dist/commerce-build/api.js +152 -0
  532. package/dist/commerce-build/api.js.map +1 -0
  533. package/dist/commerce-build/contracts-profile.d.ts +83 -0
  534. package/dist/commerce-build/contracts-profile.js +1 -0
  535. package/dist/commerce-build/contracts-profile.js.map +1 -0
  536. package/dist/commerce-build/contracts-spec.d.ts +217 -0
  537. package/dist/commerce-build/contracts-spec.js +1 -0
  538. package/dist/commerce-build/contracts-spec.js.map +1 -0
  539. package/dist/commerce-build/contracts.d.ts +2 -0
  540. package/dist/commerce-build/contracts.js +1 -0
  541. package/dist/commerce-build/contracts.js.map +1 -0
  542. package/dist/commerce-build/launch-state.d.ts +20 -0
  543. package/dist/commerce-build/launch-state.js +72 -0
  544. package/dist/commerce-build/launch-state.js.map +1 -0
  545. package/dist/commerce-build/profile-utils.d.ts +5 -0
  546. package/dist/commerce-build/profile-utils.js +14 -0
  547. package/dist/commerce-build/profile-utils.js.map +1 -0
  548. package/dist/commerce-build/setup-flow.d.ts +10 -0
  549. package/dist/commerce-build/setup-flow.js +24 -0
  550. package/dist/commerce-build/setup-flow.js.map +1 -0
  551. package/dist/commerce-build/setup-session.d.ts +26 -0
  552. package/dist/commerce-build/setup-session.js +70 -0
  553. package/dist/commerce-build/setup-session.js.map +1 -0
  554. package/dist/commerce-build/turn-streaming.d.ts +21 -0
  555. package/dist/commerce-build/turn-streaming.js +113 -0
  556. package/dist/commerce-build/turn-streaming.js.map +1 -0
  557. package/dist/commerce-build/workspace-components.d.ts +23 -0
  558. package/dist/commerce-build/workspace-components.js +66 -0
  559. package/dist/commerce-build/workspace-components.js.map +1 -0
  560. package/dist/commerce-build/workspace-config.d.ts +7 -0
  561. package/dist/commerce-build/workspace-config.js +74 -0
  562. package/dist/commerce-build/workspace-config.js.map +1 -0
  563. package/dist/companion/config.d.ts +31 -0
  564. package/dist/companion/config.js +59 -0
  565. package/dist/companion/config.js.map +1 -0
  566. package/dist/connect/catalog.d.ts +32 -0
  567. package/dist/connect/catalog.js +268 -0
  568. package/dist/connect/catalog.js.map +1 -0
  569. package/dist/connect/fixtures/commands.d.ts +8 -0
  570. package/dist/connect/fixtures/commands.js +146 -0
  571. package/dist/connect/fixtures/commands.js.map +1 -0
  572. package/dist/connect/fixtures/connections.d.ts +21 -0
  573. package/dist/connect/fixtures/connections.js +370 -0
  574. package/dist/connect/fixtures/connections.js.map +1 -0
  575. package/dist/connect/fixtures/identities.d.ts +10 -0
  576. package/dist/connect/fixtures/identities.js +61 -0
  577. package/dist/connect/fixtures/identities.js.map +1 -0
  578. package/dist/connect/fixtures/index.d.ts +11 -0
  579. package/dist/connect/fixtures/index.js +11 -0
  580. package/dist/connect/fixtures/index.js.map +1 -0
  581. package/dist/connect/fixtures/usage.d.ts +2 -0
  582. package/dist/connect/fixtures/usage.js +21 -0
  583. package/dist/connect/fixtures/usage.js.map +1 -0
  584. package/dist/connect/fixtures.d.ts +1 -0
  585. package/dist/connect/fixtures.js +1 -0
  586. package/dist/connect/from-notifications.d.ts +3 -0
  587. package/dist/connect/from-notifications.js +78 -0
  588. package/dist/connect/from-notifications.js.map +1 -0
  589. package/dist/connect/identity.d.ts +67 -0
  590. package/dist/connect/identity.js +24 -0
  591. package/dist/connect/identity.js.map +1 -0
  592. package/dist/connect/index.d.ts +13 -0
  593. package/dist/connect/index.js +22 -0
  594. package/dist/connect/index.js.map +1 -0
  595. package/dist/connect/next-up.d.ts +18 -0
  596. package/dist/connect/next-up.js +45 -0
  597. package/dist/connect/next-up.js.map +1 -0
  598. package/dist/connect/types.d.ts +354 -0
  599. package/dist/connect/types.js +68 -0
  600. package/dist/connect/types.js.map +1 -0
  601. package/dist/connect/use-connect.d.ts +51 -0
  602. package/dist/connect/use-connect.js +85 -0
  603. package/dist/connect/use-connect.js.map +1 -0
  604. package/dist/connect.d.ts +1 -0
  605. package/dist/connect.js +1 -0
  606. package/dist/converted-tag.d.ts +7 -0
  607. package/dist/converted-tag.js +9 -0
  608. package/dist/converted-tag.js.map +1 -0
  609. package/dist/countries.d.ts +65 -0
  610. package/dist/countries.js +374 -0
  611. package/dist/countries.js.map +1 -0
  612. package/dist/country-regions.d.ts +12 -0
  613. package/dist/country-regions.js +36 -0
  614. package/dist/country-regions.js.map +1 -0
  615. package/dist/csv.d.ts +28 -0
  616. package/dist/csv.js +91 -0
  617. package/dist/csv.js.map +1 -0
  618. package/dist/currency.d.ts +5 -0
  619. package/dist/currency.js +25 -0
  620. package/dist/currency.js.map +1 -0
  621. package/dist/customer-helpers.d.ts +30 -0
  622. package/dist/customer-helpers.js +66 -0
  623. package/dist/customer-helpers.js.map +1 -0
  624. package/dist/customer-stage.d.ts +125 -0
  625. package/dist/customer-stage.js +113 -0
  626. package/dist/customer-stage.js.map +1 -0
  627. package/dist/dashboard-destinations.d.ts +5 -0
  628. package/dist/dashboard-destinations.js +29 -0
  629. package/dist/dashboard-destinations.js.map +1 -0
  630. package/dist/demo-content-mock.d.ts +22 -0
  631. package/dist/demo-content-mock.js +70 -0
  632. package/dist/demo-content-mock.js.map +1 -0
  633. package/dist/demo-content-poller.d.ts +33 -0
  634. package/dist/demo-content-poller.js +80 -0
  635. package/dist/demo-content-poller.js.map +1 -0
  636. package/dist/demo-content.d.ts +43 -0
  637. package/dist/demo-content.js +78 -0
  638. package/dist/demo-content.js.map +1 -0
  639. package/dist/describe-activity.d.ts +44 -0
  640. package/dist/describe-activity.js +16 -0
  641. package/dist/describe-activity.js.map +1 -0
  642. package/dist/describe-invite.d.ts +19 -0
  643. package/dist/describe-invite.js +46 -0
  644. package/dist/describe-invite.js.map +1 -0
  645. package/dist/design-schema.d.ts +76 -0
  646. package/dist/design-schema.js +47 -0
  647. package/dist/design-schema.js.map +1 -0
  648. package/dist/destination-alias.d.ts +43 -0
  649. package/dist/destination-alias.js +146 -0
  650. package/dist/destination-alias.js.map +1 -0
  651. package/dist/document-numbering.d.ts +40 -0
  652. package/dist/document-numbering.js +48 -0
  653. package/dist/document-numbering.js.map +1 -0
  654. package/dist/document-title.d.ts +22 -0
  655. package/dist/document-title.js +85 -0
  656. package/dist/document-title.js.map +1 -0
  657. package/dist/editor/row-ops.d.ts +39 -0
  658. package/dist/editor/row-ops.js +25 -0
  659. package/dist/editor/row-ops.js.map +1 -0
  660. package/dist/editor-agent/apply-proposal.d.ts +12 -0
  661. package/dist/editor-agent/apply-proposal.js +44 -0
  662. package/dist/editor-agent/apply-proposal.js.map +1 -0
  663. package/dist/editor-agent/contracts.d.ts +174 -0
  664. package/dist/editor-agent/contracts.js +1 -0
  665. package/dist/editor-agent/contracts.js.map +1 -0
  666. package/dist/editor-agent/converse.d.ts +34 -0
  667. package/dist/editor-agent/converse.js +141 -0
  668. package/dist/editor-agent/converse.js.map +1 -0
  669. package/dist/editor-agent/flag.d.ts +12 -0
  670. package/dist/editor-agent/flag.js +19 -0
  671. package/dist/editor-agent/flag.js.map +1 -0
  672. package/dist/editor-agent/template-document.d.ts +52 -0
  673. package/dist/editor-agent/template-document.js +50 -0
  674. package/dist/editor-agent/template-document.js.map +1 -0
  675. package/dist/editor-agent/use-converse.d.ts +30 -0
  676. package/dist/editor-agent/use-converse.js +130 -0
  677. package/dist/editor-agent/use-converse.js.map +1 -0
  678. package/dist/effective-module-labels.d.ts +17 -0
  679. package/dist/effective-module-labels.js +14 -0
  680. package/dist/effective-module-labels.js.map +1 -0
  681. package/dist/embedded-frame.d.ts +30 -0
  682. package/dist/embedded-frame.js +23 -0
  683. package/dist/embedded-frame.js.map +1 -0
  684. package/dist/empty-state-copy.d.ts +27 -0
  685. package/dist/empty-state-copy.js +167 -0
  686. package/dist/empty-state-copy.js.map +1 -0
  687. package/dist/end-session.d.ts +23 -0
  688. package/dist/end-session.js +30 -0
  689. package/dist/end-session.js.map +1 -0
  690. package/dist/file-intake.d.ts +65 -0
  691. package/dist/file-intake.js +162 -0
  692. package/dist/file-intake.js.map +1 -0
  693. package/dist/first-run.d.ts +5 -0
  694. package/dist/first-run.js +13 -0
  695. package/dist/first-run.js.map +1 -0
  696. package/dist/form-answers.d.ts +57 -0
  697. package/dist/form-answers.js +79 -0
  698. package/dist/form-answers.js.map +1 -0
  699. package/dist/form-draft.d.ts +30 -0
  700. package/dist/form-draft.js +73 -0
  701. package/dist/form-draft.js.map +1 -0
  702. package/dist/format.d.ts +29 -0
  703. package/dist/format.js +21 -0
  704. package/dist/format.js.map +1 -0
  705. package/dist/fulfilment-nav.d.ts +79 -0
  706. package/dist/fulfilment-nav.js +18 -0
  707. package/dist/fulfilment-nav.js.map +1 -0
  708. package/dist/go-live-gate.d.ts +55 -0
  709. package/dist/go-live-gate.js +17 -0
  710. package/dist/go-live-gate.js.map +1 -0
  711. package/dist/group-activity.d.ts +37 -0
  712. package/dist/group-activity.js +43 -0
  713. package/dist/group-activity.js.map +1 -0
  714. package/dist/haptic.d.ts +5 -0
  715. package/dist/haptic.js +16 -0
  716. package/dist/haptic.js.map +1 -0
  717. package/dist/help-topics.d.ts +77 -0
  718. package/dist/help-topics.js +308 -0
  719. package/dist/help-topics.js.map +1 -0
  720. package/dist/icon-resolver.d.ts +45 -0
  721. package/dist/icon-resolver.js +40 -0
  722. package/dist/icon-resolver.js.map +1 -0
  723. package/dist/icons/commerce.d.ts +9 -0
  724. package/dist/icons/commerce.js +168 -0
  725. package/dist/icons/commerce.js.map +1 -0
  726. package/dist/icons/core.d.ts +9 -0
  727. package/dist/icons/core.js +173 -0
  728. package/dist/icons/core.js.map +1 -0
  729. package/dist/icons/making.d.ts +9 -0
  730. package/dist/icons/making.js +209 -0
  731. package/dist/icons/making.js.map +1 -0
  732. package/dist/icons/places.d.ts +9 -0
  733. package/dist/icons/places.js +232 -0
  734. package/dist/icons/places.js.map +1 -0
  735. package/dist/icons/world.d.ts +9 -0
  736. package/dist/icons/world.js +87 -0
  737. package/dist/icons/world.js.map +1 -0
  738. package/dist/index.d.ts +9 -0
  739. package/dist/index.js +2 -0
  740. package/dist/index.js.map +1 -0
  741. package/dist/industry-configs/beauty.d.ts +2 -0
  742. package/dist/industry-configs/beauty.js +152 -0
  743. package/dist/industry-configs/beauty.js.map +1 -0
  744. package/dist/industry-configs/creative.d.ts +2 -0
  745. package/dist/industry-configs/creative.js +131 -0
  746. package/dist/industry-configs/creative.js.map +1 -0
  747. package/dist/industry-configs/default.d.ts +2 -0
  748. package/dist/industry-configs/default.js +77 -0
  749. package/dist/industry-configs/default.js.map +1 -0
  750. package/dist/industry-configs/education.d.ts +2 -0
  751. package/dist/industry-configs/education.js +137 -0
  752. package/dist/industry-configs/education.js.map +1 -0
  753. package/dist/industry-configs/events.d.ts +2 -0
  754. package/dist/industry-configs/events.js +118 -0
  755. package/dist/industry-configs/events.js.map +1 -0
  756. package/dist/industry-configs/fashion.d.ts +2 -0
  757. package/dist/industry-configs/fashion.js +128 -0
  758. package/dist/industry-configs/fashion.js.map +1 -0
  759. package/dist/industry-configs/fitness.d.ts +2 -0
  760. package/dist/industry-configs/fitness.js +128 -0
  761. package/dist/industry-configs/fitness.js.map +1 -0
  762. package/dist/industry-configs/food.d.ts +2 -0
  763. package/dist/industry-configs/food.js +138 -0
  764. package/dist/industry-configs/food.js.map +1 -0
  765. package/dist/industry-configs/hospitality.d.ts +2 -0
  766. package/dist/industry-configs/hospitality.js +157 -0
  767. package/dist/industry-configs/hospitality.js.map +1 -0
  768. package/dist/industry-configs/index.d.ts +25 -0
  769. package/dist/industry-configs/index.js +77 -0
  770. package/dist/industry-configs/index.js.map +1 -0
  771. package/dist/industry-configs/professional.d.ts +2 -0
  772. package/dist/industry-configs/professional.js +129 -0
  773. package/dist/industry-configs/professional.js.map +1 -0
  774. package/dist/industry-configs/realestate.d.ts +2 -0
  775. package/dist/industry-configs/realestate.js +146 -0
  776. package/dist/industry-configs/realestate.js.map +1 -0
  777. package/dist/industry-configs/retail.d.ts +2 -0
  778. package/dist/industry-configs/retail.js +108 -0
  779. package/dist/industry-configs/retail.js.map +1 -0
  780. package/dist/industry-configs/services.d.ts +2 -0
  781. package/dist/industry-configs/services.js +120 -0
  782. package/dist/industry-configs/services.js.map +1 -0
  783. package/dist/industry-configs/technology.d.ts +2 -0
  784. package/dist/industry-configs/technology.js +120 -0
  785. package/dist/industry-configs/technology.js.map +1 -0
  786. package/dist/industry-configs/types.d.ts +99 -0
  787. package/dist/industry-configs/types.js +1 -0
  788. package/dist/industry-configs/types.js.map +1 -0
  789. package/dist/industry-configs/wellness.d.ts +2 -0
  790. package/dist/industry-configs/wellness.js +112 -0
  791. package/dist/industry-configs/wellness.js.map +1 -0
  792. package/dist/industry-configs.d.ts +1 -0
  793. package/dist/industry-configs.js +1 -0
  794. package/dist/intents/analytics-labels.d.ts +70 -0
  795. package/dist/intents/analytics-labels.js +39 -0
  796. package/dist/intents/analytics-labels.js.map +1 -0
  797. package/dist/intents/archetype-flow.d.ts +146 -0
  798. package/dist/intents/archetype-flow.js +185 -0
  799. package/dist/intents/archetype-flow.js.map +1 -0
  800. package/dist/intents/booking-query-style.d.ts +32 -0
  801. package/dist/intents/booking-query-style.js +22 -0
  802. package/dist/intents/booking-query-style.js.map +1 -0
  803. package/dist/intents/capture-leads.config.d.ts +31 -0
  804. package/dist/intents/capture-leads.config.js +231 -0
  805. package/dist/intents/capture-leads.config.js.map +1 -0
  806. package/dist/intents/catalog-stock.d.ts +43 -0
  807. package/dist/intents/catalog-stock.js +43 -0
  808. package/dist/intents/catalog-stock.js.map +1 -0
  809. package/dist/intents/collapse-shared-nav.d.ts +95 -0
  810. package/dist/intents/collapse-shared-nav.js +171 -0
  811. package/dist/intents/collapse-shared-nav.js.map +1 -0
  812. package/dist/intents/default-commerce.config.d.ts +6 -0
  813. package/dist/intents/default-commerce.config.js +281 -0
  814. package/dist/intents/default-commerce.config.js.map +1 -0
  815. package/dist/intents/digital-products.config.d.ts +2 -0
  816. package/dist/intents/digital-products.config.js +239 -0
  817. package/dist/intents/digital-products.config.js.map +1 -0
  818. package/dist/intents/dine-in.config.d.ts +15 -0
  819. package/dist/intents/dine-in.config.js +331 -0
  820. package/dist/intents/dine-in.config.js.map +1 -0
  821. package/dist/intents/event-tickets.config.d.ts +2 -0
  822. package/dist/intents/event-tickets.config.js +368 -0
  823. package/dist/intents/event-tickets.config.js.map +1 -0
  824. package/dist/intents/food-orders.config.d.ts +2 -0
  825. package/dist/intents/food-orders.config.js +299 -0
  826. package/dist/intents/food-orders.config.js.map +1 -0
  827. package/dist/intents/icon-map.d.ts +15 -0
  828. package/dist/intents/icon-map.js +104 -0
  829. package/dist/intents/icon-map.js.map +1 -0
  830. package/dist/intents/index.d.ts +12 -0
  831. package/dist/intents/index.js +50 -0
  832. package/dist/intents/index.js.map +1 -0
  833. package/dist/intents/infer-intents.d.ts +10 -0
  834. package/dist/intents/infer-intents.js +23 -0
  835. package/dist/intents/infer-intents.js.map +1 -0
  836. package/dist/intents/intent-chips.d.ts +47 -0
  837. package/dist/intents/intent-chips.js +38 -0
  838. package/dist/intents/intent-chips.js.map +1 -0
  839. package/dist/intents/intent-nav.d.ts +95 -0
  840. package/dist/intents/intent-nav.js +423 -0
  841. package/dist/intents/intent-nav.js.map +1 -0
  842. package/dist/intents/intent-scope.d.ts +52 -0
  843. package/dist/intents/intent-scope.js +19 -0
  844. package/dist/intents/intent-scope.js.map +1 -0
  845. package/dist/intents/nav-coverage.d.ts +71 -0
  846. package/dist/intents/nav-coverage.js +132 -0
  847. package/dist/intents/nav-coverage.js.map +1 -0
  848. package/dist/intents/operating-shell.d.ts +45 -0
  849. package/dist/intents/operating-shell.js +142 -0
  850. package/dist/intents/operating-shell.js.map +1 -0
  851. package/dist/intents/order-display.d.ts +21 -0
  852. package/dist/intents/order-display.js +110 -0
  853. package/dist/intents/order-display.js.map +1 -0
  854. package/dist/intents/order-intent.d.ts +18 -0
  855. package/dist/intents/order-intent.js +14 -0
  856. package/dist/intents/order-intent.js.map +1 -0
  857. package/dist/intents/order-progress.d.ts +81 -0
  858. package/dist/intents/order-progress.js +91 -0
  859. package/dist/intents/order-progress.js.map +1 -0
  860. package/dist/intents/order-sections.d.ts +173 -0
  861. package/dist/intents/order-sections.js +188 -0
  862. package/dist/intents/order-sections.js.map +1 -0
  863. package/dist/intents/order-stats.d.ts +24 -0
  864. package/dist/intents/order-stats.js +16 -0
  865. package/dist/intents/order-stats.js.map +1 -0
  866. package/dist/intents/order-transitions.d.ts +19 -0
  867. package/dist/intents/order-transitions.js +66 -0
  868. package/dist/intents/order-transitions.js.map +1 -0
  869. package/dist/intents/product-editor-config.d.ts +23 -0
  870. package/dist/intents/product-editor-config.js +13 -0
  871. package/dist/intents/product-editor-config.js.map +1 -0
  872. package/dist/intents/product-intent.d.ts +38 -0
  873. package/dist/intents/product-intent.js +19 -0
  874. package/dist/intents/product-intent.js.map +1 -0
  875. package/dist/intents/registry.d.ts +32 -0
  876. package/dist/intents/registry.js +41 -0
  877. package/dist/intents/registry.js.map +1 -0
  878. package/dist/intents/rent-property.config.d.ts +2 -0
  879. package/dist/intents/rent-property.config.js +284 -0
  880. package/dist/intents/rent-property.config.js.map +1 -0
  881. package/dist/intents/resolve-stats.d.ts +7 -0
  882. package/dist/intents/resolve-stats.js +29 -0
  883. package/dist/intents/resolve-stats.js.map +1 -0
  884. package/dist/intents/resolve-tenant-intents.d.ts +11 -0
  885. package/dist/intents/resolve-tenant-intents.js +61 -0
  886. package/dist/intents/resolve-tenant-intents.js.map +1 -0
  887. package/dist/intents/resolvers.d.ts +52 -0
  888. package/dist/intents/resolvers.js +177 -0
  889. package/dist/intents/resolvers.js.map +1 -0
  890. package/dist/intents/row-identity.d.ts +62 -0
  891. package/dist/intents/row-identity.js +25 -0
  892. package/dist/intents/row-identity.js.map +1 -0
  893. package/dist/intents/sales-verb.d.ts +8 -0
  894. package/dist/intents/sales-verb.js +12 -0
  895. package/dist/intents/sales-verb.js.map +1 -0
  896. package/dist/intents/scoped-config.d.ts +12 -0
  897. package/dist/intents/scoped-config.js +17 -0
  898. package/dist/intents/scoped-config.js.map +1 -0
  899. package/dist/intents/screen-title.d.ts +27 -0
  900. package/dist/intents/screen-title.js +59 -0
  901. package/dist/intents/screen-title.js.map +1 -0
  902. package/dist/intents/section-registry.d.ts +48 -0
  903. package/dist/intents/section-registry.js +33 -0
  904. package/dist/intents/section-registry.js.map +1 -0
  905. package/dist/intents/sell-products.config.d.ts +2 -0
  906. package/dist/intents/sell-products.config.js +275 -0
  907. package/dist/intents/sell-products.config.js.map +1 -0
  908. package/dist/intents/send-invoices.config.d.ts +16 -0
  909. package/dist/intents/send-invoices.config.js +223 -0
  910. package/dist/intents/send-invoices.config.js.map +1 -0
  911. package/dist/intents/subscriptions.config.d.ts +2 -0
  912. package/dist/intents/subscriptions.config.js +260 -0
  913. package/dist/intents/subscriptions.config.js.map +1 -0
  914. package/dist/intents/take-bookings.config.d.ts +2 -0
  915. package/dist/intents/take-bookings.config.js +298 -0
  916. package/dist/intents/take-bookings.config.js.map +1 -0
  917. package/dist/intents/types.d.ts +246 -0
  918. package/dist/intents/types.js +1 -0
  919. package/dist/intents/types.js.map +1 -0
  920. package/dist/intents/use-active-intent.d.ts +27 -0
  921. package/dist/intents/use-active-intent.js +74 -0
  922. package/dist/intents/use-active-intent.js.map +1 -0
  923. package/dist/intents/use-destination-label.d.ts +18 -0
  924. package/dist/intents/use-destination-label.js +45 -0
  925. package/dist/intents/use-destination-label.js.map +1 -0
  926. package/dist/intents/use-entity-label.d.ts +32 -0
  927. package/dist/intents/use-entity-label.js +75 -0
  928. package/dist/intents/use-entity-label.js.map +1 -0
  929. package/dist/intents/use-intent-config.d.ts +20 -0
  930. package/dist/intents/use-intent-config.js +91 -0
  931. package/dist/intents/use-intent-config.js.map +1 -0
  932. package/dist/intents/use-intent-nav-rows.d.ts +26 -0
  933. package/dist/intents/use-intent-nav-rows.js +49 -0
  934. package/dist/intents/use-intent-nav-rows.js.map +1 -0
  935. package/dist/intents/use-resource-label.d.ts +10 -0
  936. package/dist/intents/use-resource-label.js +9 -0
  937. package/dist/intents/use-resource-label.js.map +1 -0
  938. package/dist/intents/use-row-noun.d.ts +19 -0
  939. package/dist/intents/use-row-noun.js +13 -0
  940. package/dist/intents/use-row-noun.js.map +1 -0
  941. package/dist/intents/use-screen-title.d.ts +9 -0
  942. package/dist/intents/use-screen-title.js +25 -0
  943. package/dist/intents/use-screen-title.js.map +1 -0
  944. package/dist/intents/what-it-adds.d.ts +70 -0
  945. package/dist/intents/what-it-adds.js +29 -0
  946. package/dist/intents/what-it-adds.js.map +1 -0
  947. package/dist/intents/workflow-shape.d.ts +66 -0
  948. package/dist/intents/workflow-shape.js +151 -0
  949. package/dist/intents/workflow-shape.js.map +1 -0
  950. package/dist/intents.d.ts +1 -0
  951. package/dist/intents.js +1 -0
  952. package/dist/invite-refusal.d.ts +37 -0
  953. package/dist/invite-refusal.js +26 -0
  954. package/dist/invite-refusal.js.map +1 -0
  955. package/dist/invoice-brand.d.ts +28 -0
  956. package/dist/invoice-brand.js +33 -0
  957. package/dist/invoice-brand.js.map +1 -0
  958. package/dist/ios-navigation-context.d.ts +11 -0
  959. package/dist/ios-navigation-context.js +52 -0
  960. package/dist/ios-navigation-context.js.map +1 -0
  961. package/dist/legal-links.d.ts +10 -0
  962. package/dist/legal-links.js +7 -0
  963. package/dist/legal-links.js.map +1 -0
  964. package/dist/letting-policy.d.ts +85 -0
  965. package/dist/letting-policy.js +47 -0
  966. package/dist/letting-policy.js.map +1 -0
  967. package/dist/list-page-size.d.ts +24 -0
  968. package/dist/list-page-size.js +5 -0
  969. package/dist/list-page-size.js.map +1 -0
  970. package/dist/live-events/sse-frames.d.ts +15 -0
  971. package/dist/live-events/sse-frames.js +37 -0
  972. package/dist/live-events/sse-frames.js.map +1 -0
  973. package/dist/location-options.d.ts +16 -0
  974. package/dist/location-options.js +94 -0
  975. package/dist/location-options.js.map +1 -0
  976. package/dist/location-scope-context.d.ts +47 -0
  977. package/dist/location-scope-context.js +85 -0
  978. package/dist/location-scope-context.js.map +1 -0
  979. package/dist/media-service.d.ts +97 -0
  980. package/dist/media-service.js +282 -0
  981. package/dist/media-service.js.map +1 -0
  982. package/dist/media-utils.d.ts +51 -0
  983. package/dist/media-utils.js +85 -0
  984. package/dist/media-utils.js.map +1 -0
  985. package/dist/member-presence.d.ts +40 -0
  986. package/dist/member-presence.js +77 -0
  987. package/dist/member-presence.js.map +1 -0
  988. package/dist/member-subscription-enrollment.d.ts +16 -0
  989. package/dist/member-subscription-enrollment.js +32 -0
  990. package/dist/member-subscription-enrollment.js.map +1 -0
  991. package/dist/membership-freshness.d.ts +31 -0
  992. package/dist/membership-freshness.js +21 -0
  993. package/dist/membership-freshness.js.map +1 -0
  994. package/dist/mobile-header-context.d.ts +32 -0
  995. package/dist/mobile-header-context.js +59 -0
  996. package/dist/mobile-header-context.js.map +1 -0
  997. package/dist/mobile-routes.d.ts +81 -0
  998. package/dist/mobile-routes.js +406 -0
  999. package/dist/mobile-routes.js.map +1 -0
  1000. package/dist/mobile-tab-config.d.ts +18 -0
  1001. package/dist/mobile-tab-config.js +43 -0
  1002. package/dist/mobile-tab-config.js.map +1 -0
  1003. package/dist/money-coming-soon.d.ts +16 -0
  1004. package/dist/money-coming-soon.js +22 -0
  1005. package/dist/money-coming-soon.js.map +1 -0
  1006. package/dist/money-minor.d.ts +17 -0
  1007. package/dist/money-minor.js +53 -0
  1008. package/dist/money-minor.js.map +1 -0
  1009. package/dist/money-visibility.d.ts +38 -0
  1010. package/dist/money-visibility.js +13 -0
  1011. package/dist/money-visibility.js.map +1 -0
  1012. package/dist/motion.d.ts +160 -0
  1013. package/dist/motion.js +130 -0
  1014. package/dist/motion.js.map +1 -0
  1015. package/dist/nav-pending.d.ts +42 -0
  1016. package/dist/nav-pending.js +84 -0
  1017. package/dist/nav-pending.js.map +1 -0
  1018. package/dist/navigation-groups.d.ts +52 -0
  1019. package/dist/navigation-groups.js +64 -0
  1020. package/dist/navigation-groups.js.map +1 -0
  1021. package/dist/onboarding-draft.d.ts +23 -0
  1022. package/dist/onboarding-draft.js +35 -0
  1023. package/dist/onboarding-draft.js.map +1 -0
  1024. package/dist/operating-model/index.d.ts +4 -0
  1025. package/dist/operating-model/index.js +13 -0
  1026. package/dist/operating-model/index.js.map +1 -0
  1027. package/dist/operating-model/order-display.d.ts +10 -0
  1028. package/dist/operating-model/order-display.js +24 -0
  1029. package/dist/operating-model/order-display.js.map +1 -0
  1030. package/dist/operating-model/resolver.d.ts +9 -0
  1031. package/dist/operating-model/resolver.js +110 -0
  1032. package/dist/operating-model/resolver.js.map +1 -0
  1033. package/dist/operating-model/types.d.ts +36 -0
  1034. package/dist/operating-model/types.js +1 -0
  1035. package/dist/operating-model/types.js.map +1 -0
  1036. package/dist/operating-model/use-operating-model.d.ts +7 -0
  1037. package/dist/operating-model/use-operating-model.js +65 -0
  1038. package/dist/operating-model/use-operating-model.js.map +1 -0
  1039. package/dist/operating-model.d.ts +1 -0
  1040. package/dist/operating-model.js +1 -0
  1041. package/dist/order-config.d.ts +30 -0
  1042. package/dist/order-config.js +56 -0
  1043. package/dist/order-config.js.map +1 -0
  1044. package/dist/order-discounts.d.ts +25 -0
  1045. package/dist/order-discounts.js +27 -0
  1046. package/dist/order-discounts.js.map +1 -0
  1047. package/dist/order-shipping.d.ts +33 -0
  1048. package/dist/order-shipping.js +49 -0
  1049. package/dist/order-shipping.js.map +1 -0
  1050. package/dist/order-tax.d.ts +28 -0
  1051. package/dist/order-tax.js +21 -0
  1052. package/dist/order-tax.js.map +1 -0
  1053. package/dist/page-intros.d.ts +78 -0
  1054. package/dist/page-intros.js +164 -0
  1055. package/dist/page-intros.js.map +1 -0
  1056. package/dist/page-transition.d.ts +20 -0
  1057. package/dist/page-transition.js +19 -0
  1058. package/dist/page-transition.js.map +1 -0
  1059. package/dist/pages-api-response.d.ts +8 -0
  1060. package/dist/pages-api-response.js +18 -0
  1061. package/dist/pages-api-response.js.map +1 -0
  1062. package/dist/payment-method-label.d.ts +6 -0
  1063. package/dist/payment-method-label.js +14 -0
  1064. package/dist/payment-method-label.js.map +1 -0
  1065. package/dist/permission-aliases.d.ts +18 -0
  1066. package/dist/permission-aliases.js +20 -0
  1067. package/dist/permission-aliases.js.map +1 -0
  1068. package/dist/permission-catalog-fallback.d.ts +17 -0
  1069. package/dist/permission-catalog-fallback.js +147 -0
  1070. package/dist/permission-catalog-fallback.js.map +1 -0
  1071. package/dist/permission-change.d.ts +42 -0
  1072. package/dist/permission-change.js +33 -0
  1073. package/dist/permission-change.js.map +1 -0
  1074. package/dist/phone.d.ts +16 -0
  1075. package/dist/phone.js +20 -0
  1076. package/dist/phone.js.map +1 -0
  1077. package/dist/plan-access.d.ts +39 -0
  1078. package/dist/plan-access.js +57 -0
  1079. package/dist/plan-access.js.map +1 -0
  1080. package/dist/plan-card-api.d.ts +34 -0
  1081. package/dist/plan-card-api.js +30 -0
  1082. package/dist/plan-card-api.js.map +1 -0
  1083. package/dist/plan-price.d.ts +34 -0
  1084. package/dist/plan-price.js +57 -0
  1085. package/dist/plan-price.js.map +1 -0
  1086. package/dist/post-login-target.d.ts +24 -0
  1087. package/dist/post-login-target.js +12 -0
  1088. package/dist/post-login-target.js.map +1 -0
  1089. package/dist/potter-mark-paths.d.ts +21 -0
  1090. package/dist/potter-mark-paths.js +9 -0
  1091. package/dist/potter-mark-paths.js.map +1 -0
  1092. package/dist/pricing-plans-types.d.ts +143 -0
  1093. package/dist/pricing-plans-types.js +1 -0
  1094. package/dist/pricing-plans-types.js.map +1 -0
  1095. package/dist/product-assignees.d.ts +1 -0
  1096. package/dist/product-assignees.js +18 -0
  1097. package/dist/product-assignees.js.map +1 -0
  1098. package/dist/product-collection-sync.d.ts +12 -0
  1099. package/dist/product-collection-sync.js +97 -0
  1100. package/dist/product-collection-sync.js.map +1 -0
  1101. package/dist/product-cost.d.ts +12 -0
  1102. package/dist/product-cost.js +24 -0
  1103. package/dist/product-cost.js.map +1 -0
  1104. package/dist/product-insights-api.d.ts +38 -0
  1105. package/dist/product-insights-api.js +51 -0
  1106. package/dist/product-insights-api.js.map +1 -0
  1107. package/dist/product-types.d.ts +311 -0
  1108. package/dist/product-types.js +38 -0
  1109. package/dist/product-types.js.map +1 -0
  1110. package/dist/promised-day.d.ts +33 -0
  1111. package/dist/promised-day.js +38 -0
  1112. package/dist/promised-day.js.map +1 -0
  1113. package/dist/proposals-api.d.ts +96 -0
  1114. package/dist/proposals-api.js +41 -0
  1115. package/dist/proposals-api.js.map +1 -0
  1116. package/dist/proxy-allowlist.d.ts +15 -0
  1117. package/dist/proxy-allowlist.js +153 -0
  1118. package/dist/proxy-allowlist.js.map +1 -0
  1119. package/dist/public-config-loader.d.ts +27 -0
  1120. package/dist/public-config-loader.js +12 -0
  1121. package/dist/public-config-loader.js.map +1 -0
  1122. package/dist/public-config-provider.d.ts +16 -0
  1123. package/dist/public-config-provider.js +14 -0
  1124. package/dist/public-config-provider.js.map +1 -0
  1125. package/dist/resolve-enabled-behaviors.d.ts +55 -0
  1126. package/dist/resolve-enabled-behaviors.js +134 -0
  1127. package/dist/resolve-enabled-behaviors.js.map +1 -0
  1128. package/dist/resource-types.d.ts +198 -0
  1129. package/dist/resource-types.js +96 -0
  1130. package/dist/resource-types.js.map +1 -0
  1131. package/dist/resume-screen.d.ts +31 -0
  1132. package/dist/resume-screen.js +25 -0
  1133. package/dist/resume-screen.js.map +1 -0
  1134. package/dist/rider-display.d.ts +37 -0
  1135. package/dist/rider-display.js +110 -0
  1136. package/dist/rider-display.js.map +1 -0
  1137. package/dist/rider-view.d.ts +37 -0
  1138. package/dist/rider-view.js +47 -0
  1139. package/dist/rider-view.js.map +1 -0
  1140. package/dist/roster-label.d.ts +27 -0
  1141. package/dist/roster-label.js +8 -0
  1142. package/dist/roster-label.js.map +1 -0
  1143. package/dist/route-pattern.d.ts +11 -0
  1144. package/dist/route-pattern.js +20 -0
  1145. package/dist/route-pattern.js.map +1 -0
  1146. package/dist/route-permission.d.ts +60 -0
  1147. package/dist/route-permission.js +48 -0
  1148. package/dist/route-permission.js.map +1 -0
  1149. package/dist/runtime-config.d.ts +33 -0
  1150. package/dist/runtime-config.js +23 -0
  1151. package/dist/runtime-config.js.map +1 -0
  1152. package/dist/schema-validation.d.ts +172 -0
  1153. package/dist/schema-validation.js +252 -0
  1154. package/dist/schema-validation.js.map +1 -0
  1155. package/dist/service-areas.d.ts +30 -0
  1156. package/dist/service-areas.js +24 -0
  1157. package/dist/service-areas.js.map +1 -0
  1158. package/dist/service-operations-api.d.ts +78 -0
  1159. package/dist/service-operations-api.js +37 -0
  1160. package/dist/service-operations-api.js.map +1 -0
  1161. package/dist/settings-relevance.d.ts +64 -0
  1162. package/dist/settings-relevance.js +25 -0
  1163. package/dist/settings-relevance.js.map +1 -0
  1164. package/dist/singularise.d.ts +16 -0
  1165. package/dist/singularise.js +37 -0
  1166. package/dist/singularise.js.map +1 -0
  1167. package/dist/site-address.d.ts +14 -0
  1168. package/dist/site-address.js +28 -0
  1169. package/dist/site-address.js.map +1 -0
  1170. package/dist/slug.d.ts +26 -0
  1171. package/dist/slug.js +15 -0
  1172. package/dist/slug.js.map +1 -0
  1173. package/dist/sound.d.ts +14 -0
  1174. package/dist/sound.js +166 -0
  1175. package/dist/sound.js.map +1 -0
  1176. package/dist/staff-arrival.d.ts +3 -0
  1177. package/dist/staff-arrival.js +11 -0
  1178. package/dist/staff-arrival.js.map +1 -0
  1179. package/dist/staff-home.d.ts +58 -0
  1180. package/dist/staff-home.js +90 -0
  1181. package/dist/staff-home.js.map +1 -0
  1182. package/dist/staff-landing.d.ts +1 -0
  1183. package/dist/staff-landing.js +15 -0
  1184. package/dist/staff-landing.js.map +1 -0
  1185. package/dist/stat-card-types.d.ts +19 -0
  1186. package/dist/stat-card-types.js +1 -0
  1187. package/dist/stat-card-types.js.map +1 -0
  1188. package/dist/stock-levels.d.ts +32 -0
  1189. package/dist/stock-levels.js +17 -0
  1190. package/dist/stock-levels.js.map +1 -0
  1191. package/dist/stored-token.d.ts +1 -0
  1192. package/dist/stored-token.js +11 -0
  1193. package/dist/stored-token.js.map +1 -0
  1194. package/dist/storefront-url.d.ts +31 -0
  1195. package/dist/storefront-url.js +40 -0
  1196. package/dist/storefront-url.js.map +1 -0
  1197. package/dist/storefront.d.ts +64 -0
  1198. package/dist/storefront.js +51 -0
  1199. package/dist/storefront.js.map +1 -0
  1200. package/dist/subscription-billing-api.d.ts +115 -0
  1201. package/dist/subscription-billing-api.js +27 -0
  1202. package/dist/subscription-billing-api.js.map +1 -0
  1203. package/dist/subscription-billing-model.d.ts +26 -0
  1204. package/dist/subscription-billing-model.js +58 -0
  1205. package/dist/subscription-billing-model.js.map +1 -0
  1206. package/dist/support-case-subject.d.ts +10 -0
  1207. package/dist/support-case-subject.js +13 -0
  1208. package/dist/support-case-subject.js.map +1 -0
  1209. package/dist/support-inbox.d.ts +6 -0
  1210. package/dist/support-inbox.js +5 -0
  1211. package/dist/support-inbox.js.map +1 -0
  1212. package/dist/support.d.ts +7 -0
  1213. package/dist/support.js +16 -0
  1214. package/dist/support.js.map +1 -0
  1215. package/dist/team-page.d.ts +9 -0
  1216. package/dist/team-page.js +5 -0
  1217. package/dist/team-page.js.map +1 -0
  1218. package/dist/team-roles.d.ts +140 -0
  1219. package/dist/team-roles.js +247 -0
  1220. package/dist/team-roles.js.map +1 -0
  1221. package/dist/team-successors.d.ts +20 -0
  1222. package/dist/team-successors.js +13 -0
  1223. package/dist/team-successors.js.map +1 -0
  1224. package/dist/template-asset-url.d.ts +11 -0
  1225. package/dist/template-asset-url.js +8 -0
  1226. package/dist/template-asset-url.js.map +1 -0
  1227. package/dist/template-capabilities.d.ts +2 -0
  1228. package/dist/template-capabilities.js +71 -0
  1229. package/dist/template-capabilities.js.map +1 -0
  1230. package/dist/template-context.d.ts +111 -0
  1231. package/dist/template-context.js +1278 -0
  1232. package/dist/template-context.js.map +1 -0
  1233. package/dist/template-filter.d.ts +29 -0
  1234. package/dist/template-filter.js +41 -0
  1235. package/dist/template-filter.js.map +1 -0
  1236. package/dist/template-preview/preview-author-patch.d.ts +24 -0
  1237. package/dist/template-preview/preview-author-patch.js +78 -0
  1238. package/dist/template-preview/preview-author-patch.js.map +1 -0
  1239. package/dist/template-preview/use-template-document.d.ts +38 -0
  1240. package/dist/template-preview/use-template-document.js +45 -0
  1241. package/dist/template-preview/use-template-document.js.map +1 -0
  1242. package/dist/template-requirements.d.ts +38 -0
  1243. package/dist/template-requirements.js +13 -0
  1244. package/dist/template-requirements.js.map +1 -0
  1245. package/dist/template-types.d.ts +317 -0
  1246. package/dist/template-types.js +1 -0
  1247. package/dist/template-types.js.map +1 -0
  1248. package/dist/templates.d.ts +22 -0
  1249. package/dist/templates.js +1 -0
  1250. package/dist/templates.js.map +1 -0
  1251. package/dist/theme-context.d.ts +58 -0
  1252. package/dist/theme-context.js +283 -0
  1253. package/dist/theme-context.js.map +1 -0
  1254. package/dist/theme-policy.d.ts +41 -0
  1255. package/dist/theme-policy.js +32 -0
  1256. package/dist/theme-policy.js.map +1 -0
  1257. package/dist/ticket-access.d.ts +20 -0
  1258. package/dist/ticket-access.js +39 -0
  1259. package/dist/ticket-access.js.map +1 -0
  1260. package/dist/timeline-copy.d.ts +65 -0
  1261. package/dist/timeline-copy.js +150 -0
  1262. package/dist/timeline-copy.js.map +1 -0
  1263. package/dist/url-params.d.ts +23 -0
  1264. package/dist/url-params.js +43 -0
  1265. package/dist/url-params.js.map +1 -0
  1266. package/dist/use-behaviors.d.ts +13 -0
  1267. package/dist/use-behaviors.js +41 -0
  1268. package/dist/use-behaviors.js.map +1 -0
  1269. package/dist/use-business-locations.d.ts +35 -0
  1270. package/dist/use-business-locations.js +71 -0
  1271. package/dist/use-business-locations.js.map +1 -0
  1272. package/dist/use-currency.d.ts +12 -0
  1273. package/dist/use-currency.js +16 -0
  1274. package/dist/use-currency.js.map +1 -0
  1275. package/dist/use-empty-state-copy.d.ts +12 -0
  1276. package/dist/use-empty-state-copy.js +13 -0
  1277. package/dist/use-empty-state-copy.js.map +1 -0
  1278. package/dist/use-geo-cities.d.ts +1 -0
  1279. package/dist/use-geo-cities.js +42 -0
  1280. package/dist/use-geo-cities.js.map +1 -0
  1281. package/dist/use-has-hardware.d.ts +13 -0
  1282. package/dist/use-has-hardware.js +14 -0
  1283. package/dist/use-has-hardware.js.map +1 -0
  1284. package/dist/use-industry-key.d.ts +10 -0
  1285. package/dist/use-industry-key.js +16 -0
  1286. package/dist/use-industry-key.js.map +1 -0
  1287. package/dist/use-item-links.d.ts +20 -0
  1288. package/dist/use-item-links.js +30 -0
  1289. package/dist/use-item-links.js.map +1 -0
  1290. package/dist/use-job-roles.d.ts +21 -0
  1291. package/dist/use-job-roles.js +76 -0
  1292. package/dist/use-job-roles.js.map +1 -0
  1293. package/dist/use-merchant-plan.d.ts +36 -0
  1294. package/dist/use-merchant-plan.js +78 -0
  1295. package/dist/use-merchant-plan.js.map +1 -0
  1296. package/dist/use-module-label.d.ts +12 -0
  1297. package/dist/use-module-label.js +13 -0
  1298. package/dist/use-module-label.js.map +1 -0
  1299. package/dist/use-money-visibility.d.ts +14 -0
  1300. package/dist/use-money-visibility.js +13 -0
  1301. package/dist/use-money-visibility.js.map +1 -0
  1302. package/dist/use-nav-groups.d.ts +27 -0
  1303. package/dist/use-nav-groups.js +141 -0
  1304. package/dist/use-nav-groups.js.map +1 -0
  1305. package/dist/use-pathname.d.ts +15 -0
  1306. package/dist/use-pathname.js +29 -0
  1307. package/dist/use-pathname.js.map +1 -0
  1308. package/dist/use-permissions.d.ts +43 -0
  1309. package/dist/use-permissions.js +158 -0
  1310. package/dist/use-permissions.js.map +1 -0
  1311. package/dist/use-platform-modules.d.ts +49 -0
  1312. package/dist/use-platform-modules.js +416 -0
  1313. package/dist/use-platform-modules.js.map +1 -0
  1314. package/dist/use-staff-home.d.ts +9 -0
  1315. package/dist/use-staff-home.js +24 -0
  1316. package/dist/use-staff-home.js.map +1 -0
  1317. package/dist/use-workspace-invite.d.ts +37 -0
  1318. package/dist/use-workspace-invite.js +69 -0
  1319. package/dist/use-workspace-invite.js.map +1 -0
  1320. package/dist/utils.d.ts +53 -0
  1321. package/dist/utils.js +161 -0
  1322. package/dist/utils.js.map +1 -0
  1323. package/dist/wallet-format.d.ts +8 -0
  1324. package/dist/wallet-format.js +36 -0
  1325. package/dist/wallet-format.js.map +1 -0
  1326. package/dist/wallet-settlement.d.ts +14 -0
  1327. package/dist/wallet-settlement.js +5 -0
  1328. package/dist/wallet-settlement.js.map +1 -0
  1329. package/dist/web-url.d.ts +1 -0
  1330. package/dist/web-url.js +50 -0
  1331. package/dist/web-url.js.map +1 -0
  1332. package/dist/whats-new.d.ts +59 -0
  1333. package/dist/whats-new.js +77 -0
  1334. package/dist/whats-new.js.map +1 -0
  1335. package/dist/workspace-recents.d.ts +30 -0
  1336. package/dist/workspace-recents.js +37 -0
  1337. package/dist/workspace-recents.js.map +1 -0
  1338. package/dist/workspace-slug.d.ts +1 -0
  1339. package/dist/workspace-slug.js +15 -0
  1340. package/dist/workspace-slug.js.map +1 -0
  1341. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth-context.tsx"],"sourcesContent":["'use client';\n\nimport {\n createContext,\n useContext,\n useState,\n useEffect,\n ReactNode,\n useCallback,\n} from 'react';\nimport {\n getApiUrl,\n apiFetch,\n accountsApi,\n tenantApi,\n type AuthSessionPayload,\n type Tenant,\n} from './api';\nimport { removeLegacyToken } from './stored-token';\nimport { resetPostHogIdentity } from '@withpotter/components/analytics';\nimport { uploadImage } from '@withpotter/lib/media-service';\nimport { endSession } from '@withpotter/lib/end-session';\nimport {\n pickWorkspace,\n readJoinedWorkspace,\n clearJoinedWorkspace,\n} from './active-workspace';\n\n// Tenant is defined once, canonically, in ./api. Re-exported here so the many\n// modules that historically imported it from auth-context keep working — there\n// is now a single Tenant shape (with the correct string id) across the app.\nexport type { Tenant };\n\nexport interface Workspace {\n tenant: Tenant;\n role: 'owner' | 'manager' | 'staff' | 'viewer';\n permissions?: Record<string, boolean>;\n}\n\nexport interface User {\n id: string;\n email: string;\n name: string;\n avatarUrl?: string;\n /** The account's own phone number, when they gave one. */\n phone?: string | null;\n emailVerified: boolean;\n /** Two-factor authentication is active on this account. */\n mfaEnabled?: boolean;\n organizationId: string; // Created during signup\n workspaces: Workspace[];\n currentWorkspace: Workspace | null;\n}\n\ninterface AuthContextType {\n user: User | null;\n tenant: Tenant | null;\n workspaces: Workspace[];\n loading: boolean;\n connectionError: boolean;\n login: (email: string, password: string) => Promise<void>;\n loginWithGoogle: (payload: AuthSessionPayload) => Promise<void>;\n loginWithCode: (\n payload: AuthSessionPayload,\n method?: SignInMethod,\n connection?: string,\n ) => Promise<void>;\n logout: () => Promise<void>;\n refreshTenant: () => Promise<void>;\n refreshUser: () => Promise<void>;\n switchWorkspace: (tenantSlug: string) => Promise<void>;\n createWorkspace: (input: CreateWorkspaceInput) => Promise<Tenant>;\n duplicateWorkspace: (\n tenantId: string,\n businessName?: string,\n ) => Promise<Tenant>;\n deleteWorkspace: (tenantSlug: string) => void;\n retryConnection: () => Promise<void>;\n}\n\n/**\n * The single input for creating a business. One shape for both entry paths\n * (first-run /onboarding and in-dashboard /workspaces/new) so every business is\n * provisioned identically. Fields not in the provision contract (salesChannel,\n * address) are persisted onto tenant.settings right after.\n */\nexport interface CreateWorkspaceInput {\n businessName: string;\n /**\n * Only for a deliberate choice of storefront look, which today means the\n * Website hub. Business creation leaves it unset: the API derives the\n * starting template from `intents`, so no client keeps a list of template ids\n * it cannot validate. Three copies of that list had already drifted.\n */\n templateId?: string;\n slug?: string;\n currency?: string;\n intents?: string[];\n isSolo?: boolean;\n category?: string;\n salesChannel?: string;\n address?: string;\n phone?: string;\n /** ISO-3166 alpha-2. Not in the provision contract, so it rides the same\n * settings patch as salesChannel. Onboarding used to collect this, derive a\n * currency from it and then throw it away — which is why Settings › General\n * showed an empty Country on every workspace ever created. */\n country?: string;\n /** Optional business logo, uploaded after provision (the media endpoint needs\n * the tenant to exist). Non-fatal — a failed upload never fails creation. */\n logoFile?: File | null;\n}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\n/**\n * Local-dev open access: when running `next dev` with NEXT_PUBLIC_DEV_OPEN_ACCESS=1,\n * skip auth entirely so any dashboard page is directly viewable without a\n * login/OTP (backend data just shows empty states if the API isn't running).\n * NEVER active in staging/prod — those build with NODE_ENV=production, so this\n * is false regardless of the flag.\n */\nconst DEV_OPEN_ACCESS =\n process.env.NODE_ENV === 'development' &&\n process.env.NEXT_PUBLIC_DEV_OPEN_ACCESS === '1';\n\n/**\n * The door an account came through. `connection` is a sign-in the host app provides, such as a payment or bank\n * provider's login; which one is kept beside it (see `LastAccount.connection`).\n */\nexport type SignInMethod = 'google' | 'email' | 'passkey' | 'connection';\n\n/**\n * THE PRECEDENCE RULE FOR \"WHICH WORKSPACE AM I IN\".\n *\n * `user.currentWorkspace` is the only authoritative answer. Four storage keys\n * cache it — `currentWorkspace`, `pb_current_tenant`, `tenant` and\n * `pb_last_workspace` — and they exist because consumers outside React need the\n * answer synchronously: the media proxy resolves `x-tenant-slug` straight out\n * of them (lib/media-service.ts), and the login door names the business it is\n * about to resume into before any provider has mounted.\n *\n * They are a projection of the resolved workspace, never an input to it, so\n * every path that resolves one must write all four together through here.\n * Written piecemeal they drift apart permanently: resolution falls back to\n * `workspaces[0]` whenever the stored slug is no longer in the account's tenant\n * list, and the paths that resolved by fallback used to write nothing back — so\n * storage kept naming a business the app was not in, uploads were tagged with\n * it, and the slug-keyed arrival flag never matched.\n *\n * Passing null clears the active-workspace cache without touching\n * `pb_last_workspace`, which deliberately outlives a session so a returning\n * owner resumes where they left off.\n */\nfunction persistActiveWorkspace(workspace: Workspace | null): void {\n if (!workspace) {\n localStorage.removeItem('currentWorkspace');\n localStorage.removeItem('pb_current_tenant');\n localStorage.removeItem('tenant');\n return;\n }\n const { slug } = workspace.tenant;\n localStorage.setItem('currentWorkspace', slug);\n localStorage.setItem('pb_current_tenant', slug);\n localStorage.setItem('tenant', JSON.stringify(workspace.tenant));\n localStorage.setItem('pb_last_workspace', slug);\n}\n\n/**\n * The slug to prefer when resolving the active workspace, in one order for\n * every entry path. Reload and login used to disagree on it, which let the two\n * doors into the same account land in two different businesses.\n *\n * It is a preference, not an answer: a slug that is not in the account's tenant\n * list loses to `workspaces[0]`, and the winner is written back immediately.\n */\nfunction readPreferredSlug(): string | null {\n return (\n localStorage.getItem('currentWorkspace') ||\n localStorage.getItem('pb_last_workspace') ||\n localStorage.getItem('pb_current_tenant')\n );\n}\n\n/**\n * The workspace this load lands in, for every entry path.\n *\n * Reload, login and refresh each wrote `find(slug) || workspaces[0]` inline,\n * which is why the accept-invite screen could not say \"land me in the business\n * I just joined\" — there was nowhere to say it. `pass authoritative` when the\n * list came from the API: a just-joined tenant missing from a real list is a\n * membership that no longer exists, and the handoff is dropped rather than\n * retried against every later load.\n */\nfunction resolveActiveWorkspace(\n workspaces: Workspace[],\n authoritative: boolean,\n): Workspace | null {\n const joinedTenantId = readJoinedWorkspace();\n const picked = pickWorkspace(workspaces, {\n joinedTenantId,\n preferredSlug: readPreferredSlug(),\n });\n if (\n joinedTenantId &&\n (authoritative || picked?.tenant.id === joinedTenantId)\n ) {\n clearJoinedWorkspace();\n }\n return picked;\n}\n\n/**\n * The workspace list cache, written as one unit. `workspaces` (slugs) is the\n * legacy shape, `pb_workspaces_cache` the full one; both are read as fallbacks\n * when the API is unreachable, so a business missing from either reads as a\n * business the owner does not have.\n */\nfunction persistWorkspaceList(workspaces: Workspace[]): void {\n localStorage.setItem(\n 'workspaces',\n JSON.stringify(workspaces.map((w) => w.tenant.slug)),\n );\n localStorage.setItem('pb_workspaces_cache', JSON.stringify(workspaces));\n}\n\n/**\n * Everything that makes the browser believe it is signed in.\n *\n * Hoisted out of the auth check because it was trapped in one effect's closure,\n * so any other place that discovered a dead session had no way to end it and\n * fell back to cached state instead.\n */\nfunction clearStoredAuth(): void {\n localStorage.removeItem('pb_token');\n localStorage.removeItem('pb_user');\n localStorage.removeItem('pb_account_id');\n localStorage.removeItem('userEmail');\n localStorage.removeItem('organizationId');\n persistActiveWorkspace(null);\n}\n\n/**\n * The workspace we can name WITHOUT asking the server.\n *\n * Every tenant-scoped query in the app is gated on `loading` being false, and\n * `loading` was only cleared after `/team/my-tenants` came back. So the whole\n * dashboard — twenty-odd requests on Home alone — sat waiting on one round trip\n * before it was allowed to ask for anything, on every single page load, even\n * though the answer was already sitting in localStorage from last time.\n *\n * This reads that cache so the app can start immediately. It is a HINT, not an\n * answer: `checkAuth` still calls the API and reconciles, so a workspace the\n * account has lost is corrected a moment later. Nothing is trusted for\n * authorisation either way — the API enforces access on every request, so the\n * worst case is a card that renders and then corrects itself.\n */\nfunction readCachedWorkspace(): Workspace | null {\n try {\n const raw = localStorage.getItem('pb_workspaces_cache');\n if (!raw) return null;\n const cached = JSON.parse(raw) as Workspace[];\n if (!Array.isArray(cached) || cached.length === 0) return null;\n const match =\n pickWorkspace(cached, {\n joinedTenantId: readJoinedWorkspace(),\n preferredSlug: readPreferredSlug(),\n }) ?? cached[0];\n // A slug-only legacy entry has no real id; starting on one would fire every\n // query against a tenant id that does not exist.\n return match?.tenant?.slug && match.tenant.id !== match.tenant.slug\n ? match\n : null;\n } catch {\n return null;\n }\n}\n\nexport function AuthProvider({ children }: { children: ReactNode }) {\n const [user, setUser] = useState<User | null>(null);\n const [loading, setLoading] = useState(true);\n const [connectionError, setConnectionError] = useState(false);\n\n const fetchTenant = useCallback(\n async (slug: string): Promise<Tenant | null> => {\n try {\n // Auth is handled via HttpOnly cookies (credentials: 'include')\n const res = await fetch(`${getApiUrl()}/tenants/${slug}`, {\n credentials: 'include',\n });\n if (!res.ok) return null;\n\n const data = await res.json();\n return {\n id: data.id,\n slug: data.slug,\n businessName: data.businessName,\n // Synthesize businessLogo from settings.logo.url (GET /tenants/:slug returns raw entity without businessLogo)\n businessLogo:\n data.businessLogo || data.settings?.logo?.url || undefined,\n contactEmail: data.contactEmail || data.email,\n contactPhone: data.contactPhone || data.phone,\n templateId: data.templateId || 'luxe-fashion-01',\n customDomain: data.customDomain || undefined,\n status: data.status,\n settings: data.settings,\n organizationId: data.organizationId,\n };\n } catch {\n return null;\n }\n },\n [],\n );\n\n // Load workspaces from API\n // Returns { workspaces, fromApi } to track if data came from API\n const loadWorkspaces = useCallback(async (): Promise<{\n workspaces: Workspace[];\n fromApi: boolean;\n }> => {\n // Auth is handled via HttpOnly cookies (credentials: 'include')\n try {\n const res = await fetch(`${getApiUrl()}/team/my-tenants`, {\n credentials: 'include',\n });\n\n // 401 means the session/token is invalid — force re-login\n if (res.status === 401 || res.status === 403) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n 'Auth expired (status',\n res.status,\n '), redirecting to login',\n );\n }\n // Clear stale auth data\n clearStoredAuth();\n // Redirect to login — throw to prevent checkAuth from updating\n // React state, which would race with this hard navigation\n if (typeof window !== 'undefined') {\n window.location.href = '/login';\n }\n throw new Error('AUTH_EXPIRED');\n }\n\n if (res.ok) {\n const apiTenants = (await res.json()) as Array<{\n id: string;\n tenantId: string;\n tenantSlug: string;\n tenantName: string;\n role: string;\n permissions?: Record<string, boolean>;\n templateId?: string | null;\n organizationId?: string | null;\n tenant?: {\n id: string;\n slug: string;\n businessName: string;\n businessLogo: string | null;\n contactEmail: string | null;\n contactPhone: string | null;\n customDomain: string | null;\n status: string;\n industryKey?: string | null;\n settings: Record<string, unknown> | null;\n };\n }>;\n\n /**\n * A DELETED WORKSPACE IS NOT A WORKSPACE.\n *\n * The membership row outlives the tenant, so deleting a workspace left\n * it in this list and therefore in the switcher. Choosing one looked\n * completely normal and then every request 401'd with \"Tenant context\n * required\" — the API's tenant middleware resolves only ACTIVE and\n * PENDING — so the whole dashboard rendered empty: no orders, no\n * customers, no analytics, no marketing. Nothing anywhere said the\n * workspace was gone, so it read as the product being broken rather\n * than the workspace not existing.\n *\n * Measured on staging: three of six workspaces in this list were\n * deleted, and all three 401 on every endpoint.\n */\n const liveTenants = apiTenants.filter(\n (t) => (t.tenant?.status ?? 'active') !== 'deleted',\n );\n\n // Use the full tenant details from the API response (no N+1 calls needed)\n const workspaces: Workspace[] = liveTenants.map((t) => ({\n tenant: {\n id: t.tenant?.id || t.tenantId,\n slug: t.tenant?.slug || t.tenantSlug,\n businessName: t.tenant?.businessName || t.tenantName,\n businessLogo: t.tenant?.businessLogo || undefined,\n contactEmail: t.tenant?.contactEmail || undefined,\n contactPhone: t.tenant?.contactPhone || undefined,\n customDomain: t.tenant?.customDomain || undefined,\n templateId: t.templateId || 'luxe-fashion-01',\n status:\n (t.tenant?.status as\n | 'active'\n | 'suspended'\n | 'pending'\n | 'deleted') || 'active',\n // What kind of business this is. The switcher labels every row\n // with it so four workspaces are four distinguishable things, and\n // dropping it here was why they all read as a bare name.\n industryKey: t.tenant?.industryKey ?? null,\n settings: t.tenant?.settings || undefined,\n organizationId: t.organizationId || undefined,\n },\n role: t.role as Workspace['role'],\n permissions: t.permissions,\n }));\n\n // Sync localStorage with API response (cache full workspace data for resilient fallback)\n if (workspaces.length > 0) {\n persistWorkspaceList(workspaces);\n }\n\n return { workspaces, fromApi: true };\n }\n\n // API returned non-ok status (e.g., 429, 500) — fall back to cached workspaces\n if (process.env.NODE_ENV === 'development') {\n console.warn('API returned error status:', res.status);\n }\n // Try full workspace cache first (has proper UUIDs)\n try {\n const cachedRaw = localStorage.getItem('pb_workspaces_cache');\n if (cachedRaw) {\n const cachedWorkspaces = JSON.parse(cachedRaw) as Workspace[];\n if (cachedWorkspaces.length > 0) {\n return { workspaces: cachedWorkspaces, fromApi: false };\n }\n }\n } catch {\n // Corrupted cache — fall through\n }\n // Legacy fallback: slugs-only cache (no UUIDs available — use connection error state)\n const cachedSlugs = JSON.parse(\n localStorage.getItem('workspaces') || '[]',\n ) as string[];\n if (cachedSlugs.length > 0) {\n const cachedWorkspaces: Workspace[] = cachedSlugs.map((slug) => ({\n tenant: {\n id: slug,\n slug,\n businessName: slug,\n templateId: 'luxe-fashion-01',\n status: 'active' as const,\n },\n role: 'owner' as const,\n }));\n return { workspaces: cachedWorkspaces, fromApi: false };\n }\n return { workspaces: [], fromApi: false };\n } catch (error) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('Failed to fetch workspaces from API:', error);\n }\n // Network error or other failure\n return { workspaces: [], fromApi: false };\n }\n }, []);\n\n useEffect(() => {\n const checkAuth = async () => {\n // Local-dev open access: bypass auth so any page renders directly.\n if (DEV_OPEN_ACCESS) {\n const slug = process.env.NEXT_PUBLIC_DEV_TENANT || 'demo';\n const tenant = {\n id: slug,\n slug,\n businessName: 'Dev Business',\n templateId: 'luxe-fashion-01',\n status: 'active' as const,\n };\n const workspace = { tenant, role: 'owner' as const };\n setUser({\n id: 'dev-user',\n email: 'dev@local',\n name: 'Dev',\n emailVerified: true,\n mfaEnabled: false,\n organizationId: '',\n workspaces: [workspace],\n currentWorkspace: workspace,\n });\n setLoading(false);\n return;\n }\n\n // The session is the HttpOnly cookie, which this code cannot see.\n // The cached account only says this browser has signed in before; the\n // calls below are the proof, and a 401 ends the session.\n removeLegacyToken();\n const pbUser = localStorage.getItem('pb_user');\n const storedOrgId = localStorage.getItem('organizationId');\n\n // No user data = invalid session\n if (!pbUser) {\n clearStoredAuth();\n setLoading(false);\n return;\n }\n\n let userData: {\n id: string;\n email: string;\n name?: string;\n avatarUrl?: string;\n phone?: string | null;\n emailVerified?: boolean;\n mfaEnabled?: boolean;\n organizationId?: string;\n } | null = null;\n try {\n userData = JSON.parse(pbUser);\n } catch {\n if (process.env.NODE_ENV === 'development') {\n console.warn('Invalid user data, clearing auth state');\n }\n clearStoredAuth();\n setLoading(false);\n return;\n }\n\n if (!userData?.email) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('No email in user data, clearing auth state');\n }\n clearStoredAuth();\n setLoading(false);\n return;\n }\n\n // ── Optimistic start ──────────────────────────────────────────────────\n // Everything tenant-scoped is gated on `loading`, so clearing it here\n // lets the dashboard begin fetching against the workspace we already\n // know, instead of idling through a round trip first. The API call below\n // still runs and reconciles; this only decides when the app is allowed\n // to START, not what is true.\n const cachedWorkspace = readCachedWorkspace();\n if (cachedWorkspace && !cancelled) {\n setUser({\n id: userData.id,\n email: userData.email,\n name: userData.name || userData.email.split('@')[0],\n avatarUrl: userData.avatarUrl || undefined,\n phone: userData.phone ?? null,\n emailVerified: userData.emailVerified ?? false,\n mfaEnabled: userData.mfaEnabled ?? false,\n organizationId:\n storedOrgId ||\n userData?.organizationId ||\n cachedWorkspace.tenant.organizationId ||\n '',\n workspaces: [cachedWorkspace],\n currentWorkspace: cachedWorkspace,\n });\n setLoading(false);\n }\n\n try {\n const freshAccount = await apiFetch<typeof userData>('/accounts/me');\n if (freshAccount) {\n userData = freshAccount;\n localStorage.setItem('pb_user', JSON.stringify(freshAccount));\n }\n } catch {\n // Keep the cached account when the API is temporarily unavailable.\n }\n\n // Load workspaces — may throw AUTH_EXPIRED if session is invalid\n let result;\n try {\n result = await loadWorkspaces();\n } catch (e: unknown) {\n if (e instanceof Error && e.message === 'AUTH_EXPIRED') return;\n throw e;\n }\n if (cancelled) return;\n const workspaces = result.workspaces;\n setConnectionError(!result.fromApi && workspaces.length === 0);\n\n const signupTenantSlug = localStorage.getItem('pb_current_tenant');\n\n // Find current workspace or use first one\n let currentWorkspace = resolveActiveWorkspace(workspaces, result.fromApi);\n\n // If no workspaces but we have signup tenant, fetch it\n if (workspaces.length === 0 && signupTenantSlug) {\n const signupTenant = await fetchTenant(signupTenantSlug);\n if (signupTenant) {\n currentWorkspace = { tenant: signupTenant, role: 'owner' };\n workspaces.push(currentWorkspace);\n persistWorkspaceList(workspaces);\n }\n }\n\n // Write the resolution back before rendering it. This is the reload path\n // that fell through with a stored slug the account no longer has: it\n // resolved `workspaces[0]` and left the cache naming the old business.\n if (currentWorkspace) persistActiveWorkspace(currentWorkspace);\n\n // Get organizationId - must be a valid UUID\n const userOrgId =\n storedOrgId ||\n userData?.organizationId ||\n currentWorkspace?.tenant?.organizationId;\n\n setUser({\n id: userData.id,\n email: userData.email,\n name: userData.name || userData.email.split('@')[0],\n avatarUrl: userData.avatarUrl || undefined,\n phone: userData.phone ?? null,\n emailVerified: userData.emailVerified ?? false,\n mfaEnabled: userData.mfaEnabled ?? false,\n organizationId: userOrgId ?? '',\n workspaces,\n currentWorkspace,\n });\n setLoading(false);\n };\n\n let cancelled = false;\n checkAuth();\n return () => {\n cancelled = true;\n };\n }, [fetchTenant, loadWorkspaces]);\n\n // Establish the client session from an auth payload (the /accounts/login\n // response, or a Google callback result of the same shape). Both the email\n // and Google doors funnel through here so they hydrate identically.\n /** Which door an account came through, remembered for the next visit. */\n // `method` is the door the account actually came through. It is stored on the\n // recognition hint so /login can offer that same door on return: greeting a\n // Google user by name and then emailing them a code is worse than not\n // recognising them at all.\n const establishSession = async (\n data: AuthSessionPayload,\n method: SignInMethod = 'email',\n connection?: string,\n ) => {\n const { account, tenants, organizationId } = data;\n\n // Build workspaces directly from enriched tenant data in the payload\n const workspaces: Workspace[] = [];\n for (const t of tenants || []) {\n workspaces.push({\n tenant: {\n id: t.id,\n slug: t.slug,\n businessName: t.name,\n businessLogo:\n t.businessLogo ||\n (t.settings as { logo?: { url?: string } } | null | undefined)?.logo\n ?.url ||\n undefined,\n contactEmail: t.contactEmail || undefined,\n contactPhone: t.contactPhone || undefined,\n customDomain: t.customDomain || undefined,\n templateId: t.templateId || 'luxe-fashion-01',\n status:\n (t.status as 'active' | 'suspended' | 'pending' | 'deleted') ||\n 'active',\n settings: t.settings || undefined,\n organizationId: t.organizationId || undefined,\n },\n role: t.role as Workspace['role'],\n permissions: t.permissions,\n });\n }\n\n // Resume the business the owner last worked in (matches the reload path),\n // falling back to the first workspace. Without this, a multi-business owner\n // whose session expired lands in an arbitrary business, not where they left.\n const signupTenantSlug = localStorage.getItem('pb_current_tenant');\n // `pb_last_workspace` deliberately survives logout (like pb_last_account),\n // so a returning owner resumes into the business they were last in rather\n // than an arbitrary first workspace — and the \"Welcome back\" card names it.\n let currentWorkspace = resolveActiveWorkspace(workspaces, true);\n if (!currentWorkspace && signupTenantSlug) {\n const signupTenant = await fetchTenant(signupTenantSlug);\n if (signupTenant) {\n currentWorkspace = { tenant: signupTenant, role: 'owner' };\n workspaces.push(currentWorkspace);\n }\n }\n\n // Get organizationId from response, or from first tenant\n const userOrgId =\n organizationId ||\n tenants?.[0]?.organizationId ||\n currentWorkspace?.tenant?.organizationId ||\n null;\n\n // Save auth data\n localStorage.setItem('pb_account_id', account.id);\n localStorage.setItem('pb_user', JSON.stringify(account));\n localStorage.setItem('userEmail', account.email);\n persistWorkspaceList(workspaces);\n if (userOrgId) {\n localStorage.setItem('organizationId', userOrgId);\n }\n persistActiveWorkspace(currentWorkspace);\n\n // Recognition hint: a small, non-sensitive record of the last account to\n // sign in on this device. Unlike the session keys above it deliberately\n // survives logout, so /login can greet a returning owner by name. It holds\n // no token — the emailed code is still the only proof of identity.\n try {\n localStorage.setItem(\n 'pb_last_account',\n JSON.stringify({\n email: account.email,\n name: account.name || account.email.split('@')[0],\n avatarUrl: account.avatarUrl || undefined,\n businessName:\n currentWorkspace?.tenant.businessName ||\n tenants?.[0]?.name ||\n undefined,\n method,\n connection: method === 'connection' ? connection : undefined,\n }),\n );\n } catch {\n // storage full / disabled — recognition is a convenience, never a gate\n }\n\n setUser({\n id: account.id,\n email: account.email,\n name: account.name || account.email.split('@')[0],\n avatarUrl: account.avatarUrl || undefined,\n phone: account.phone ?? null,\n emailVerified: account.emailVerified ?? false,\n mfaEnabled: account.mfaEnabled ?? false,\n organizationId: userOrgId ?? '',\n workspaces,\n currentWorkspace,\n });\n };\n\n const login = async (email: string, password: string) => {\n setLoading(true);\n try {\n // Call real login API\n const res = await fetch(`${getApiUrl()}/accounts/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password }),\n credentials: 'include', // Required to receive and send cookies\n });\n\n if (!res.ok) {\n const error = await res\n .json()\n .catch(() => ({ message: 'Login failed' }));\n throw new Error(error.message || 'Invalid email or password');\n }\n\n const data = await res.json();\n await establishSession(data);\n } finally {\n setLoading(false);\n }\n };\n\n // The Google door. The callback page already exchanged the OAuth code for a\n // session payload; here we just hydrate from it, same as email login.\n const loginWithGoogle = async (payload: AuthSessionPayload) => {\n setLoading(true);\n try {\n await establishSession(payload, 'google');\n } finally {\n setLoading(false);\n }\n };\n\n // The passwordless door. Verify already exchanged the emailed code for a\n // session payload; hydrate from it identically.\n const loginWithCode = async (\n payload: AuthSessionPayload,\n method: SignInMethod = 'email',\n connection?: string,\n ) => {\n setLoading(true);\n try {\n // The door is passed through so a passkey sign-in is REMEMBERED as one.\n // Without it the recognition card would greet a passkey user and then\n // email them a code — the exact mismatch the Google branch exists to\n // avoid, just with a different door.\n await establishSession(payload, method, connection);\n } finally {\n setLoading(false);\n }\n };\n\n const logout = async () => {\n resetPostHogIdentity();\n // The key list moved to `lib/end-session` so the invite screen can end a\n // session too, without a second copy of it drifting from this one.\n await endSession();\n setUser(null);\n };\n\n const switchWorkspace = useCallback(\n async (tenantSlug: string) => {\n if (!user) return;\n\n const workspace = user.workspaces.find(\n (w) => w.tenant.slug === tenantSlug,\n );\n if (workspace) {\n persistActiveWorkspace(workspace);\n try {\n const prev = JSON.parse(\n localStorage.getItem('pb_last_account') || '{}',\n );\n if (prev.email) {\n localStorage.setItem(\n 'pb_last_account',\n JSON.stringify({\n ...prev,\n businessName: workspace.tenant.businessName,\n }),\n );\n }\n } catch {\n // recognition hint is a convenience, never a gate\n }\n setUser((prev) =>\n prev ? { ...prev, currentWorkspace: workspace } : null,\n );\n }\n },\n [user],\n );\n\n const createWorkspace = useCallback(\n async (input: CreateWorkspaceInput): Promise<Tenant> => {\n const {\n businessName,\n templateId,\n currency,\n intents,\n isSolo,\n category,\n salesChannel,\n address,\n phone,\n country,\n logoFile,\n } = input;\n\n const slug =\n input.slug ||\n businessName\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n\n // organizationId is optional — server resolves it from account membership\n // when omitted; cache it for later calls.\n let organizationId = user?.organizationId || '';\n if (!organizationId) {\n const orgs = await accountsApi.getMyOrganizations();\n if (!orgs || orgs.length === 0) {\n throw new Error('No organization found. Please sign up first.');\n }\n organizationId = orgs[0].id;\n localStorage.setItem('organizationId', organizationId);\n setUser((prev) => (prev ? { ...prev, organizationId } : null));\n }\n\n // 1. Provision — the single business-creation call in the app.\n const result = await apiFetch<{ tenant: Tenant }>(\n '/onboarding/provision',\n {\n method: 'POST',\n body: JSON.stringify({\n organizationId,\n businessName,\n slug,\n // Only sent when the merchant actually chose a look. Omitted, the\n // API derives it from `intents` against the templates table it\n // owns; named, an unknown id is rejected rather than replaced.\n ...(templateId && { templateId }),\n ...(category && { category }),\n ...(intents?.length && { intents }),\n ...(isSolo != null && { isSolo }),\n ...(currency && { currency }),\n // phone is part of the provision contract — the usecase stores it\n // canonically on tenant.phone AND settings.phone, so send it here\n // rather than patching settings after (which would land it in the\n // wrong place and nothing would read it).\n ...(phone?.trim() && { phone: phone.trim() }),\n }),\n },\n );\n\n let tenant = result.tenant;\n\n // Make the new tenant the active one BEFORE the logo upload: the media\n // proxy tags the upload with `x-tenant-slug` read from stored tenant, so\n // it must point at this fresh tenant for the file to land in its namespace.\n persistActiveWorkspace({ tenant, role: 'owner' });\n\n // 2a. Upload the logo, if one was picked. The media endpoint needs the\n // tenant to exist, so this only runs post-provision. Non-fatal: a\n // failed upload must never fail business creation.\n let logoUrl: string | undefined;\n if (logoFile) {\n try {\n const uploaded = await uploadImage(logoFile);\n logoUrl = uploaded.url;\n } catch {\n // non-fatal — the merchant can add a logo later from the editor\n }\n }\n\n // 2b. Persist fields NOT in the provision contract onto settings (server\n // deep-merges). These are set here on a fresh tenant, so a shallow set\n // is safe. `logo` mirrors the editor's brand shape ({ url }), from which\n // businessLogo is synthesized. Refinements, never gates — a failure\n const settingsPatch: Record<string, unknown> = {};\n if (salesChannel) settingsPatch.salesChannel = salesChannel;\n if (intents?.length) settingsPatch.selectedIntents = intents;\n if (country) settingsPatch.country = country;\n if (address?.trim()) settingsPatch.contact = { address: address.trim() };\n if (logoUrl) settingsPatch.logo = { url: logoUrl };\n if (Object.keys(settingsPatch).length > 0) {\n try {\n await tenantApi.updateSettings(slug, settingsPatch);\n // Reflect what we just wrote onto the in-memory tenant so a soft-nav\n // dashboard reads fresh settings without a round-trip. (We merge our\n // known patch rather than the API's return, whose Tenant shape differs\n // from auth-context's.)\n tenant = {\n ...tenant,\n businessLogo: logoUrl ?? tenant.businessLogo,\n settings: { ...(tenant.settings ?? {}), ...settingsPatch },\n };\n } catch {\n // non-fatal — these refine, they don't gate\n }\n }\n\n // 3. Register in context + make active, so the dashboard renders it\n // immediately instead of bouncing back to onboarding.\n const workspace: Workspace = { tenant, role: 'owner' };\n const updatedWorkspaces = [...(user?.workspaces || []), workspace];\n persistWorkspaceList(updatedWorkspaces);\n setUser((prev) =>\n prev\n ? {\n ...prev,\n workspaces: updatedWorkspaces,\n currentWorkspace: workspace,\n }\n : null,\n );\n persistActiveWorkspace(workspace);\n\n return tenant;\n },\n [user],\n );\n\n const duplicateWorkspace = useCallback(\n async (tenantId: string, businessName?: string): Promise<Tenant> => {\n const result = await apiFetch<{ tenant: Tenant }>(\n `/onboarding/${tenantId}/duplicate`,\n {\n method: 'POST',\n body: JSON.stringify({ businessName }),\n },\n );\n\n const tenant = result.tenant;\n const workspace: Workspace = { tenant, role: 'owner' };\n const updatedWorkspaces = [...(user?.workspaces || []), workspace];\n persistWorkspaceList(updatedWorkspaces);\n setUser((prev) =>\n prev\n ? {\n ...prev,\n workspaces: updatedWorkspaces,\n currentWorkspace: workspace,\n }\n : null,\n );\n persistActiveWorkspace(workspace);\n return tenant;\n },\n [user],\n );\n\n const deleteWorkspace = useCallback(\n (tenantSlug: string) => {\n // Immediately remove the deleted workspace from in-memory state\n // so no component re-renders with a stale tenant reference\n const remaining = (user?.workspaces || []).filter(\n (w) => w.tenant.slug !== tenantSlug,\n );\n const next = remaining[0] || null;\n\n // Update localStorage to reflect the new workspace selection\n persistActiveWorkspace(next);\n if (next) {\n persistWorkspaceList(remaining);\n } else {\n localStorage.removeItem('workspaces');\n localStorage.removeItem('pb_workspaces_cache');\n }\n\n setUser((prev) =>\n prev\n ? {\n ...prev,\n workspaces: remaining,\n currentWorkspace: next,\n }\n : null,\n );\n },\n [user?.workspaces],\n );\n\n const refreshUser = useCallback(async () => {\n if (!user) return;\n\n try {\n // Re-fetch account from API to get latest data (e.g. emailVerified)\n let userData: Record<string, unknown> | null = null;\n {\n try {\n const freshAccount = await apiFetch<Record<string, unknown>>(\n '/accounts/me',\n );\n if (freshAccount) {\n userData = freshAccount;\n // Update localStorage with fresh data\n localStorage.setItem('pb_user', JSON.stringify(freshAccount));\n }\n } catch (err) {\n /**\n * Two very different failures were being treated as one.\n *\n * The server being unreachable is temporary, and falling back to the\n * cached account is right: the merchant keeps working.\n *\n * The server answering \"this account does not exist\" is not\n * temporary. Swallowing that left a dead session rendering as a\n * signed-in one, reading a cached copy of a user the API has never\n * heard of. Nothing surfaced until a write went deep enough to check\n * — provisioning a business then failed with \"You do not have access\n * to this organization\", which is true, unactionable, and describes\n * the wrong problem.\n */\n const status = (err as { status?: number })?.status;\n if (status === 401 || status === 403 || status === 404) {\n clearStoredAuth();\n if (typeof window !== 'undefined') window.location.href = '/login';\n return;\n }\n // Unreachable, not refused: keep going on what we have.\n const pbUser = localStorage.getItem('pb_user');\n if (pbUser) userData = JSON.parse(pbUser);\n }\n }\n\n if (!userData) return;\n\n // Reload workspaces from API\n const result = await loadWorkspaces();\n const workspaces = result.workspaces;\n const currentWorkspace = resolveActiveWorkspace(\n workspaces,\n result.fromApi,\n );\n\n if (currentWorkspace) persistActiveWorkspace(currentWorkspace);\n\n // Get organizationId from workspace if not stored\n const storedOrgId = localStorage.getItem('organizationId');\n const orgId =\n storedOrgId ||\n currentWorkspace?.tenant?.organizationId ||\n user.organizationId;\n\n setUser((prev) =>\n prev\n ? {\n ...prev,\n name: (userData?.name as string) || prev.name,\n email: (userData?.email as string) || prev.email,\n avatarUrl: (userData?.avatarUrl as string) || prev.avatarUrl,\n // Absent from an older API response: keep what we had.\n phone:\n userData && 'phone' in userData\n ? ((userData.phone as string | null) ?? null)\n : prev.phone,\n emailVerified:\n (userData?.emailVerified as boolean) ?? prev.emailVerified,\n mfaEnabled: (userData?.mfaEnabled as boolean) ?? prev.mfaEnabled,\n workspaces,\n currentWorkspace,\n organizationId: orgId,\n }\n : null,\n );\n } catch {\n // Ignore errors\n }\n }, [user, loadWorkspaces]);\n\n const refreshTenant = useCallback(async () => {\n const currentSlug = user?.currentWorkspace?.tenant?.slug;\n const currentWorkspace = user?.currentWorkspace;\n const workspaces = user?.workspaces;\n\n if (!currentSlug || !currentWorkspace || !workspaces) return;\n\n const freshTenant = await fetchTenant(currentSlug);\n if (freshTenant) {\n const updatedWorkspace = { ...currentWorkspace, tenant: freshTenant };\n const updatedWorkspaces = workspaces.map((w) =>\n w.tenant.slug === freshTenant.slug ? updatedWorkspace : w,\n );\n persistActiveWorkspace(updatedWorkspace);\n setUser((prev) =>\n prev\n ? {\n ...prev,\n workspaces: updatedWorkspaces,\n currentWorkspace: updatedWorkspace,\n }\n : null,\n );\n }\n }, [user?.currentWorkspace, user?.workspaces, fetchTenant]);\n\n const retryConnection = useCallback(async () => {\n setLoading(true);\n setConnectionError(false);\n const result = await loadWorkspaces();\n const workspaces = result.workspaces;\n\n if (result.fromApi && workspaces.length > 0) {\n const currentWorkspace = resolveActiveWorkspace(workspaces, true);\n persistActiveWorkspace(currentWorkspace);\n\n setUser((prev) =>\n prev\n ? {\n ...prev,\n workspaces,\n currentWorkspace,\n }\n : null,\n );\n } else if (!result.fromApi) {\n setConnectionError(true);\n }\n setLoading(false);\n }, [loadWorkspaces]);\n\n return (\n <AuthContext.Provider\n value={{\n user,\n tenant: user?.currentWorkspace?.tenant ?? null,\n workspaces: user?.workspaces ?? [],\n loading,\n connectionError,\n retryConnection,\n login,\n loginWithGoogle,\n loginWithCode,\n logout,\n refreshTenant,\n refreshUser,\n switchWorkspace,\n createWorkspace,\n duplicateWorkspace,\n deleteWorkspace,\n }}\n >\n {children}\n </AuthContext.Provider>\n );\n}\n\nexport function useAuth() {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n}\n\n/**\n * The current business, or null when there is no provider above.\n *\n * For shared primitives, which cannot assume they are inside an AuthProvider:\n * the root layout mounts none, each section mounts its own, and `useAuth`\n * throws. A page frame that threw would take the whole screen white rather\n * than degrade, which is the failure /auth already shipped once.\n */\nexport function useOptionalTenant(): Tenant | null {\n return useContext(AuthContext)?.tenant ?? null;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ export declare function expireBrowserSession(): void;
@@ -0,0 +1,25 @@
1
+ const SESSION_STORAGE_KEYS = [
2
+ "pb_token",
3
+ "pb_account_id",
4
+ "pb_user",
5
+ "pb_workspaces_cache",
6
+ "userEmail",
7
+ "organizationId",
8
+ "workspaces",
9
+ "currentWorkspace",
10
+ "tenant",
11
+ "pb_current_tenant"
12
+ ];
13
+ function expireBrowserSession() {
14
+ if (typeof window === "undefined") return;
15
+ for (const key of SESSION_STORAGE_KEYS) {
16
+ window.localStorage.removeItem(key);
17
+ }
18
+ if (window.location.pathname !== "/login") {
19
+ window.location.assign("/login");
20
+ }
21
+ }
22
+ export {
23
+ expireBrowserSession
24
+ };
25
+ //# sourceMappingURL=auth-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth-session.ts"],"sourcesContent":["const SESSION_STORAGE_KEYS = [\n 'pb_token',\n 'pb_account_id',\n 'pb_user',\n 'pb_workspaces_cache',\n 'userEmail',\n 'organizationId',\n 'workspaces',\n 'currentWorkspace',\n 'tenant',\n 'pb_current_tenant',\n] as const;\n\nexport function expireBrowserSession(): void {\n if (typeof window === 'undefined') return;\n\n for (const key of SESSION_STORAGE_KEYS) {\n window.localStorage.removeItem(key);\n }\n if (window.location.pathname !== '/login') {\n window.location.assign('/login');\n }\n}\n"],"mappings":"AAAA,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,uBAA6B;AAC3C,MAAI,OAAO,WAAW,YAAa;AAEnC,aAAW,OAAO,sBAAsB;AACtC,WAAO,aAAa,WAAW,GAAG;AAAA,EACpC;AACA,MAAI,OAAO,SAAS,aAAa,UAAU;AACzC,WAAO,SAAS,OAAO,QAAQ;AAAA,EACjC;AACF;","names":[]}
@@ -0,0 +1,2 @@
1
+ export declare function cleanBankPhone(value: string): string;
2
+ export declare function isValidBankPhone(value: string): boolean;
@@ -0,0 +1,12 @@
1
+ const BANK_PHONE = /^(\+[1-9]\d{7,14}|0\d{10})$/;
2
+ function cleanBankPhone(value) {
3
+ return value.replace(/[\s-]/g, "");
4
+ }
5
+ function isValidBankPhone(value) {
6
+ return BANK_PHONE.test(cleanBankPhone(value));
7
+ }
8
+ export {
9
+ cleanBankPhone,
10
+ isValidBankPhone
11
+ };
12
+ //# sourceMappingURL=bank-phone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/bank-phone.ts"],"sourcesContent":["/**\n * The phone number the API wants when a bank account is added.\n *\n * Mirrors the server's rule: a Nigerian local number (08012345678) or an\n * international one (+2348012345678). Spaces and dashes are fine to type, so\n * they are stripped before checking and before sending.\n */\nconst BANK_PHONE = /^(\\+[1-9]\\d{7,14}|0\\d{10})$/;\n\nexport function cleanBankPhone(value: string): string {\n return value.replace(/[\\s-]/g, '');\n}\n\nexport function isValidBankPhone(value: string): boolean {\n return BANK_PHONE.test(cleanBankPhone(value));\n}\n"],"mappings":"AAOA,MAAM,aAAa;AAEZ,SAAS,eAAe,OAAuB;AACpD,SAAO,MAAM,QAAQ,UAAU,EAAE;AACnC;AAEO,SAAS,iBAAiB,OAAwB;AACvD,SAAO,WAAW,KAAK,eAAe,KAAK,CAAC;AAC9C;","names":[]}
@@ -0,0 +1,49 @@
1
+ import type { ProductBehaviors } from './product-types';
2
+ /**
3
+ * Behavior configuration types shared between the behavior config UI
4
+ * (`components/behaviors`) and the hooks/forms that consume it. Lives in
5
+ * `@withpotter/lib` so lower layers (hooks) can depend on it without a back-edge
6
+ * into the component layer.
7
+ */
8
+ export type BehaviorKey = keyof Omit<ProductBehaviors, 'gatedBy' | 'gatedByPlanIds' | 'reservable'>;
9
+ /**
10
+ * Template-provided label overrides for behavior UI.
11
+ * Allows templates to contextualize fields (e.g., "Duration" → "Treatment Time").
12
+ */
13
+ export interface BehaviorLabelOverrides {
14
+ sellable?: {
15
+ label?: string;
16
+ subtitle?: string;
17
+ fields?: Record<string, string>;
18
+ };
19
+ bookable?: {
20
+ label?: string;
21
+ subtitle?: string;
22
+ fields?: Record<string, string>;
23
+ };
24
+ shippable?: {
25
+ label?: string;
26
+ subtitle?: string;
27
+ fields?: Record<string, string>;
28
+ };
29
+ downloadable?: {
30
+ label?: string;
31
+ subtitle?: string;
32
+ fields?: Record<string, string>;
33
+ };
34
+ subscribable?: {
35
+ label?: string;
36
+ subtitle?: string;
37
+ fields?: Record<string, string>;
38
+ };
39
+ rentable?: {
40
+ label?: string;
41
+ subtitle?: string;
42
+ fields?: Record<string, string>;
43
+ };
44
+ ticketed?: {
45
+ label?: string;
46
+ subtitle?: string;
47
+ fields?: Record<string, string>;
48
+ };
49
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=behavior-config-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { BehaviorDefinition } from './api';
3
+ interface BehaviorContextValue {
4
+ behaviors: BehaviorDefinition[];
5
+ isLoading: boolean;
6
+ error: string | null;
7
+ getBehavior: (id: string) => BehaviorDefinition | undefined;
8
+ getBehaviorsByIds: (ids: string[]) => BehaviorDefinition[];
9
+ refetch: () => Promise<void>;
10
+ }
11
+ export declare function BehaviorProvider({ children }: {
12
+ children: React.ReactNode;
13
+ }): React.JSX.Element;
14
+ export declare function useBehaviorContext(): BehaviorContextValue;
15
+ export {};
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext, useMemo } from "react";
4
+ import { useBehaviors } from "./use-behaviors";
5
+ const BehaviorContext = createContext(null);
6
+ function BehaviorProvider({ children }) {
7
+ const { behaviors, isLoading, error, getBehavior, refetch } = useBehaviors();
8
+ const getBehaviorsByIds = useMemo(
9
+ () => (ids) => behaviors.filter((b) => ids.includes(b.id)),
10
+ [behaviors]
11
+ );
12
+ const value = useMemo(
13
+ () => ({
14
+ behaviors,
15
+ isLoading,
16
+ error,
17
+ getBehavior,
18
+ getBehaviorsByIds,
19
+ refetch
20
+ }),
21
+ [behaviors, isLoading, error, getBehavior, getBehaviorsByIds, refetch]
22
+ );
23
+ return /* @__PURE__ */ jsx(BehaviorContext.Provider, { value, children });
24
+ }
25
+ function useBehaviorContext() {
26
+ const context = useContext(BehaviorContext);
27
+ if (!context) {
28
+ throw new Error(
29
+ "useBehaviorContext must be used within a BehaviorProvider"
30
+ );
31
+ }
32
+ return context;
33
+ }
34
+ export {
35
+ BehaviorProvider,
36
+ useBehaviorContext
37
+ };
38
+ //# sourceMappingURL=behavior-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/behavior-context.tsx"],"sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport { useBehaviors } from './use-behaviors';\nimport type { BehaviorDefinition } from './api';\n\ninterface BehaviorContextValue {\n behaviors: BehaviorDefinition[];\n isLoading: boolean;\n error: string | null;\n getBehavior: (id: string) => BehaviorDefinition | undefined;\n getBehaviorsByIds: (ids: string[]) => BehaviorDefinition[];\n refetch: () => Promise<void>;\n}\n\nconst BehaviorContext = createContext<BehaviorContextValue | null>(null);\n\nexport function BehaviorProvider({ children }: { children: React.ReactNode }) {\n const { behaviors, isLoading, error, getBehavior, refetch } = useBehaviors();\n\n const getBehaviorsByIds = useMemo(\n () => (ids: string[]) => behaviors.filter((b) => ids.includes(b.id)),\n [behaviors],\n );\n\n const value = useMemo(\n () => ({\n behaviors,\n isLoading,\n error,\n getBehavior,\n getBehaviorsByIds,\n refetch,\n }),\n [behaviors, isLoading, error, getBehavior, getBehaviorsByIds, refetch],\n );\n\n return (\n <BehaviorContext.Provider value={value}>\n {children}\n </BehaviorContext.Provider>\n );\n}\n\nexport function useBehaviorContext(): BehaviorContextValue {\n const context = useContext(BehaviorContext);\n if (!context) {\n throw new Error(\n 'useBehaviorContext must be used within a BehaviorProvider',\n );\n }\n return context;\n}\n"],"mappings":";AAsCI;AApCJ,SAAgB,eAAe,YAAY,eAAe;AAC1D,SAAS,oBAAoB;AAY7B,MAAM,kBAAkB,cAA2C,IAAI;AAEhE,SAAS,iBAAiB,EAAE,SAAS,GAAkC;AAC5E,QAAM,EAAE,WAAW,WAAW,OAAO,aAAa,QAAQ,IAAI,aAAa;AAE3E,QAAM,oBAAoB;AAAA,IACxB,MAAM,CAAC,QAAkB,UAAU,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,EAAE,CAAC;AAAA,IACnE,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,WAAW,WAAW,OAAO,aAAa,mBAAmB,OAAO;AAAA,EACvE;AAEA,SACE,oBAAC,gBAAgB,UAAhB,EAAyB,OACvB,UACH;AAEJ;AAEO,SAAS,qBAA2C;AACzD,QAAM,UAAU,WAAW,eAAe;AAC1C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Behavior Fields
3
+ *
4
+ * Utilities for the industry-driven product form system.
5
+ *
6
+ * Industry profiles define ALL domain fields. The stepper handles
7
+ * pricing, booking, shipping, and other behaviors via dedicated steps.
8
+ * This module provides:
9
+ * - `getDeduplicatedFields` — strips platform-handled fields from DynamicForm
10
+ * - `FIELD_TO_BEHAVIOR_SYNC` — maps form fields to behavior config paths for save-time sync
11
+ */
12
+ import type { ContentFieldConfig } from './template-types';
13
+ /**
14
+ * Strips platform-handled fields (image, gallery) from the field list.
15
+ * These are rendered by the dedicated Media step in the product-mode stepper,
16
+ * so they must not appear in DynamicForm.
17
+ */
18
+ export declare function getDeduplicatedFields(fields: ContentFieldConfig[]): ContentFieldConfig[];
19
+ /**
20
+ * Maps industry-defined form field names to their equivalent behavior config paths.
21
+ * When a form field overlaps with a behavior config field, the save handler
22
+ * syncs the form value into the behavior config before persisting.
23
+ *
24
+ * This ensures the backend scheduling system reads correct values from
25
+ * `behaviors` JSONB even though the merchant edited them in the DynamicForm
26
+ * fieldGroup step.
27
+ */
28
+ export declare const FIELD_TO_BEHAVIOR_SYNC: Record<string, {
29
+ behavior: string;
30
+ configKey: string;
31
+ }>;
32
+ /**
33
+ * Reverse of FIELD_TO_BEHAVIOR_SYNC. At save time, values from behavior config
34
+ * panels are written back into templateValues (the `data` blob) so that
35
+ * storefronts reading `data.durationMinutes` or `data.pricingUnit` continue
36
+ * to work correctly.
37
+ */
38
+ export declare const BEHAVIOR_TO_TEMPLATE_SYNC: Record<string, {
39
+ behavior: string;
40
+ configKey: string;
41
+ }>;
@@ -0,0 +1,20 @@
1
+ const PLATFORM_MEDIA_FIELDS = /* @__PURE__ */ new Set(["image", "gallery"]);
2
+ function getDeduplicatedFields(fields) {
3
+ return fields.filter((f) => !PLATFORM_MEDIA_FIELDS.has(f.name));
4
+ }
5
+ const FIELD_TO_BEHAVIOR_SYNC = {
6
+ durationMinutes: { behavior: "bookable", configKey: "durationMinutes" },
7
+ maxGuests: { behavior: "bookable", configKey: "maxCapacity" },
8
+ maxParticipants: { behavior: "bookable", configKey: "maxCapacity" },
9
+ capacity: { behavior: "bookable", configKey: "maxCapacity" }
10
+ };
11
+ const BEHAVIOR_TO_TEMPLATE_SYNC = {
12
+ durationMinutes: { behavior: "bookable", configKey: "durationMinutes" },
13
+ pricingUnit: { behavior: "bookable", configKey: "pricingUnit" }
14
+ };
15
+ export {
16
+ BEHAVIOR_TO_TEMPLATE_SYNC,
17
+ FIELD_TO_BEHAVIOR_SYNC,
18
+ getDeduplicatedFields
19
+ };
20
+ //# sourceMappingURL=behavior-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/behavior-fields.ts"],"sourcesContent":["/**\n * Behavior Fields\n *\n * Utilities for the industry-driven product form system.\n *\n * Industry profiles define ALL domain fields. The stepper handles\n * pricing, booking, shipping, and other behaviors via dedicated steps.\n * This module provides:\n * - `getDeduplicatedFields` — strips platform-handled fields from DynamicForm\n * - `FIELD_TO_BEHAVIOR_SYNC` — maps form fields to behavior config paths for save-time sync\n */\n\nimport type { ContentFieldConfig } from './template-types';\n\n// ============================================\n// DEDUPLICATION FOR PRODUCT MODE\n// ============================================\n\n/**\n * Platform media fields — always stripped because the dedicated Media step\n * renders hero image + SortableGallery.\n */\nconst PLATFORM_MEDIA_FIELDS = new Set(['image', 'gallery']);\n\n/**\n * Strips platform-handled fields (image, gallery) from the field list.\n * These are rendered by the dedicated Media step in the product-mode stepper,\n * so they must not appear in DynamicForm.\n */\nexport function getDeduplicatedFields(\n fields: ContentFieldConfig[],\n): ContentFieldConfig[] {\n return fields.filter((f) => !PLATFORM_MEDIA_FIELDS.has(f.name));\n}\n\n// ============================================\n// FIELD-TO-BEHAVIOR SYNC MAP\n// ============================================\n\n/**\n * Maps industry-defined form field names to their equivalent behavior config paths.\n * When a form field overlaps with a behavior config field, the save handler\n * syncs the form value into the behavior config before persisting.\n *\n * This ensures the backend scheduling system reads correct values from\n * `behaviors` JSONB even though the merchant edited them in the DynamicForm\n * fieldGroup step.\n */\nexport const FIELD_TO_BEHAVIOR_SYNC: Record<\n string,\n { behavior: string; configKey: string }\n> = {\n durationMinutes: { behavior: 'bookable', configKey: 'durationMinutes' },\n maxGuests: { behavior: 'bookable', configKey: 'maxCapacity' },\n maxParticipants: { behavior: 'bookable', configKey: 'maxCapacity' },\n capacity: { behavior: 'bookable', configKey: 'maxCapacity' },\n};\n\n// ============================================\n// BEHAVIOR-TO-TEMPLATE REVERSE SYNC MAP\n// ============================================\n\n/**\n * Reverse of FIELD_TO_BEHAVIOR_SYNC. At save time, values from behavior config\n * panels are written back into templateValues (the `data` blob) so that\n * storefronts reading `data.durationMinutes` or `data.pricingUnit` continue\n * to work correctly.\n */\nexport const BEHAVIOR_TO_TEMPLATE_SYNC: Record<\n string,\n { behavior: string; configKey: string }\n> = {\n durationMinutes: { behavior: 'bookable', configKey: 'durationMinutes' },\n pricingUnit: { behavior: 'bookable', configKey: 'pricingUnit' },\n};\n"],"mappings":"AAsBA,MAAM,wBAAwB,oBAAI,IAAI,CAAC,SAAS,SAAS,CAAC;AAOnD,SAAS,sBACd,QACsB;AACtB,SAAO,OAAO,OAAO,CAAC,MAAM,CAAC,sBAAsB,IAAI,EAAE,IAAI,CAAC;AAChE;AAeO,MAAM,yBAGT;AAAA,EACF,iBAAiB,EAAE,UAAU,YAAY,WAAW,kBAAkB;AAAA,EACtE,WAAW,EAAE,UAAU,YAAY,WAAW,cAAc;AAAA,EAC5D,iBAAiB,EAAE,UAAU,YAAY,WAAW,cAAc;AAAA,EAClE,UAAU,EAAE,UAAU,YAAY,WAAW,cAAc;AAC7D;AAYO,MAAM,4BAGT;AAAA,EACF,iBAAiB,EAAE,UAAU,YAAY,WAAW,kBAAkB;AAAA,EACtE,aAAa,EAAE,UAAU,YAAY,WAAW,cAAc;AAChE;","names":[]}
@@ -0,0 +1,7 @@
1
+ export interface PasteHygieneFixture {
2
+ name: string;
3
+ html: string;
4
+ plain: string;
5
+ expected: string;
6
+ }
7
+ export declare const pasteHygieneFixtures: PasteHygieneFixture[];
@@ -0,0 +1,36 @@
1
+ const pasteHygieneFixtures = [
2
+ {
3
+ name: "google-docs html strips source classes and typography styles",
4
+ html: '<p class="gdoc-123" style="margin:0;color:#d93025;font-family:Arial;text-align:center;background-color:#fff">Hello <span class="gdoc-456" style="font-size:14pt;color:#202124">world</span></p>',
5
+ plain: "Hello world",
6
+ expected: '<p style="text-align: center">Hello <span>world</span></p>'
7
+ },
8
+ {
9
+ name: "notion html drops notion classes and font tags",
10
+ html: '<div class="notion-text" style="font-family:Inter;color:#111"><font color="#111111">Notion body</font></div>',
11
+ plain: "Notion body",
12
+ expected: "<div>Notion body</div>"
13
+ },
14
+ {
15
+ name: "word html removes office namespaces and inline color",
16
+ html: '<p class="MsoNormal" style="margin-bottom:8pt;color:windowtext;font-size:12pt"><o:p></o:p><span style="mso-fareast-font-family:Calibri;color:#000000">Word copy</span></p>',
17
+ plain: "Word copy",
18
+ expected: "<p><span>Word copy</span></p>"
19
+ },
20
+ {
21
+ name: "markdown text becomes structured html",
22
+ html: "",
23
+ plain: "# Heading\n\nIntro with **bold** copy.\n\n- First item\n- Second item\n\n> Pull quote\n\n```ts\nconst count = 1;\n```",
24
+ expected: "<h1>Heading</h1><p>Intro with <strong>bold</strong> copy.</p><ul><li>First item</li><li>Second item</li></ul><blockquote><p>Pull quote</p></blockquote><pre><code>const count = 1;</code></pre>"
25
+ },
26
+ {
27
+ name: "plain text paragraphs split on blank lines",
28
+ html: "",
29
+ plain: "First paragraph.\n\nSecond paragraph\nwith a soft break.",
30
+ expected: "<p>First paragraph.</p><p>Second paragraph<br />with a soft break.</p>"
31
+ }
32
+ ];
33
+ export {
34
+ pasteHygieneFixtures
35
+ };
36
+ //# sourceMappingURL=paste-hygiene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/blog/__fixtures__/paste-hygiene.ts"],"sourcesContent":["export interface PasteHygieneFixture {\n name: string;\n html: string;\n plain: string;\n expected: string;\n}\n\nexport const pasteHygieneFixtures: PasteHygieneFixture[] = [\n {\n name: 'google-docs html strips source classes and typography styles',\n html: '<p class=\"gdoc-123\" style=\"margin:0;color:#d93025;font-family:Arial;text-align:center;background-color:#fff\">Hello <span class=\"gdoc-456\" style=\"font-size:14pt;color:#202124\">world</span></p>',\n plain: 'Hello world',\n expected: '<p style=\"text-align: center\">Hello <span>world</span></p>',\n },\n {\n name: 'notion html drops notion classes and font tags',\n html: '<div class=\"notion-text\" style=\"font-family:Inter;color:#111\"><font color=\"#111111\">Notion body</font></div>',\n plain: 'Notion body',\n expected: '<div>Notion body</div>',\n },\n {\n name: 'word html removes office namespaces and inline color',\n html: '<p class=\"MsoNormal\" style=\"margin-bottom:8pt;color:windowtext;font-size:12pt\"><o:p></o:p><span style=\"mso-fareast-font-family:Calibri;color:#000000\">Word copy</span></p>',\n plain: 'Word copy',\n expected: '<p><span>Word copy</span></p>',\n },\n {\n name: 'markdown text becomes structured html',\n html: '',\n plain:\n '# Heading\\n\\nIntro with **bold** copy.\\n\\n- First item\\n- Second item\\n\\n> Pull quote\\n\\n```ts\\nconst count = 1;\\n```',\n expected:\n '<h1>Heading</h1><p>Intro with <strong>bold</strong> copy.</p><ul><li>First item</li><li>Second item</li></ul><blockquote><p>Pull quote</p></blockquote><pre><code>const count = 1;</code></pre>',\n },\n {\n name: 'plain text paragraphs split on blank lines',\n html: '',\n plain: 'First paragraph.\\n\\nSecond paragraph\\nwith a soft break.',\n expected:\n '<p>First paragraph.</p><p>Second paragraph<br />with a soft break.</p>',\n },\n];\n"],"mappings":"AAOO,MAAM,uBAA8C;AAAA,EACzD;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OACE;AAAA,IACF,UACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UACE;AAAA,EACJ;AACF;","names":[]}
@@ -0,0 +1,65 @@
1
+ export type TypographyLineHeight = 'tight' | 'default' | 'relaxed';
2
+ export type TypographyParagraphSpacing = 'compact' | 'default' | 'loose';
3
+ export type TypographyMeasure = 'narrow' | 'default' | 'wide';
4
+ export type ReaderTheme = 'original' | 'quiet';
5
+ export interface BlogTypographySettings {
6
+ lineHeight: TypographyLineHeight;
7
+ paragraphSpacing: TypographyParagraphSpacing;
8
+ measure: TypographyMeasure;
9
+ }
10
+ export interface BlogContentDensity {
11
+ wordCount: number;
12
+ readTime: number;
13
+ denseParagraphIndexes: number[];
14
+ needsSubheadingHint: boolean;
15
+ }
16
+ export declare const DEFAULT_BLOG_TYPOGRAPHY: BlogTypographySettings;
17
+ export declare const TYPOGRAPHY_OPTION_LABELS: {
18
+ readonly lineHeight: {
19
+ readonly tight: "Tight (1.4)";
20
+ readonly default: "Default (1.58)";
21
+ readonly relaxed: "Relaxed (1.75)";
22
+ };
23
+ readonly paragraphSpacing: {
24
+ readonly compact: "Compact (1.25em)";
25
+ readonly default: "Default (1.75em)";
26
+ readonly loose: "Loose (2.25em)";
27
+ };
28
+ readonly measure: {
29
+ readonly narrow: "Narrow (560px)";
30
+ readonly default: "Default (680px)";
31
+ readonly wide: "Wide (820px)";
32
+ };
33
+ };
34
+ export declare const READER_THEME_OPTIONS: readonly [{
35
+ readonly value: "original";
36
+ readonly label: "Original";
37
+ }, {
38
+ readonly value: "quiet";
39
+ readonly label: "Quiet";
40
+ }];
41
+ export declare const TYPOGRAPHY_VARIABLES: {
42
+ readonly lineHeight: {
43
+ readonly tight: "1.4";
44
+ readonly default: "1.58";
45
+ readonly relaxed: "1.75";
46
+ };
47
+ readonly paragraphSpacing: {
48
+ readonly compact: "1.25em";
49
+ readonly default: "1.75em";
50
+ readonly loose: "2.25em";
51
+ };
52
+ readonly measure: {
53
+ readonly narrow: "560px";
54
+ readonly default: "680px";
55
+ readonly wide: "820px";
56
+ };
57
+ };
58
+ export declare function normalizeBlogTypography(value: unknown): BlogTypographySettings;
59
+ export declare function getReadingStyleVariables(typography: BlogTypographySettings): Record<'--reading-line-height' | '--reading-paragraph-spacing' | '--reading-measure', string>;
60
+ export declare function stripHtml(value: string): string;
61
+ export declare function getWordCount(html: string): number;
62
+ export declare function estimateReadTime(html: string): number;
63
+ export declare function findDenseParagraphIndexes(html: string, maxSentences?: number): number[];
64
+ export declare function needsSubheadingHint(html: string): boolean;
65
+ export declare function analyzeBlogContent(html: string): BlogContentDensity;
@@ -0,0 +1,126 @@
1
+ const DEFAULT_BLOG_TYPOGRAPHY = {
2
+ lineHeight: "default",
3
+ paragraphSpacing: "default",
4
+ measure: "default"
5
+ };
6
+ const TYPOGRAPHY_OPTION_LABELS = {
7
+ lineHeight: {
8
+ tight: "Tight (1.4)",
9
+ default: "Default (1.58)",
10
+ relaxed: "Relaxed (1.75)"
11
+ },
12
+ paragraphSpacing: {
13
+ compact: "Compact (1.25em)",
14
+ default: "Default (1.75em)",
15
+ loose: "Loose (2.25em)"
16
+ },
17
+ measure: {
18
+ narrow: "Narrow (560px)",
19
+ default: "Default (680px)",
20
+ wide: "Wide (820px)"
21
+ }
22
+ };
23
+ const READER_THEME_OPTIONS = [
24
+ { value: "original", label: "Original" },
25
+ { value: "quiet", label: "Quiet" }
26
+ ];
27
+ const TYPOGRAPHY_VARIABLES = {
28
+ lineHeight: {
29
+ tight: "1.4",
30
+ default: "1.58",
31
+ relaxed: "1.75"
32
+ },
33
+ paragraphSpacing: {
34
+ compact: "1.25em",
35
+ default: "1.75em",
36
+ loose: "2.25em"
37
+ },
38
+ measure: {
39
+ narrow: "560px",
40
+ default: "680px",
41
+ wide: "820px"
42
+ }
43
+ };
44
+ const ENTITY_TEXT_REPLACEMENTS = {
45
+ nbsp: " ",
46
+ amp: "&",
47
+ quot: '"',
48
+ "#39": "'"
49
+ };
50
+ const SUBHEADING_HINT_WORD_THRESHOLD = 800;
51
+ function isLineHeight(value) {
52
+ return value === "tight" || value === "default" || value === "relaxed";
53
+ }
54
+ function isParagraphSpacing(value) {
55
+ return value === "compact" || value === "default" || value === "loose";
56
+ }
57
+ function isMeasure(value) {
58
+ return value === "narrow" || value === "default" || value === "wide";
59
+ }
60
+ function normalizeBlogTypography(value) {
61
+ const typography = value && typeof value === "object" ? value : {};
62
+ return {
63
+ lineHeight: isLineHeight(typography.lineHeight) ? typography.lineHeight : DEFAULT_BLOG_TYPOGRAPHY.lineHeight,
64
+ paragraphSpacing: isParagraphSpacing(typography.paragraphSpacing) ? typography.paragraphSpacing : DEFAULT_BLOG_TYPOGRAPHY.paragraphSpacing,
65
+ measure: isMeasure(typography.measure) ? typography.measure : DEFAULT_BLOG_TYPOGRAPHY.measure
66
+ };
67
+ }
68
+ function getReadingStyleVariables(typography) {
69
+ const normalized = normalizeBlogTypography(typography);
70
+ return {
71
+ "--reading-line-height": TYPOGRAPHY_VARIABLES.lineHeight[normalized.lineHeight],
72
+ "--reading-paragraph-spacing": TYPOGRAPHY_VARIABLES.paragraphSpacing[normalized.paragraphSpacing],
73
+ "--reading-measure": TYPOGRAPHY_VARIABLES.measure[normalized.measure]
74
+ };
75
+ }
76
+ function stripHtml(value) {
77
+ return value.replace(/<br\s*\/?>/gi, " ").replace(/<\/(p|div|li|blockquote|h[1-6]|pre)>/gi, " ").replace(/<[^>]*>/g, " ").replace(
78
+ /&([a-z0-9#]+);/gi,
79
+ (_match, entity) => ENTITY_TEXT_REPLACEMENTS[entity.toLowerCase()] ?? " "
80
+ ).replace(/\s+/g, " ").trim();
81
+ }
82
+ function getWordCount(html) {
83
+ const text = stripHtml(html);
84
+ return text ? text.split(" ").filter(Boolean).length : 0;
85
+ }
86
+ function estimateReadTime(html) {
87
+ return Math.max(1, Math.ceil(getWordCount(html) / 250));
88
+ }
89
+ function countSentences(text) {
90
+ const normalized = text.replace(/\s+/g, " ").trim();
91
+ if (!normalized) return 0;
92
+ const matches = normalized.match(/[^.!?]+(?:[.!?]+(?=\s|$)|$)/g);
93
+ return matches ? matches.map((sentence) => sentence.trim()).filter(Boolean).length : 0;
94
+ }
95
+ function getParagraphTexts(html) {
96
+ return Array.from(html.matchAll(/<p\b[^>]*>([\s\S]*?)<\/p>/gi)).map((match) => stripHtml(match[1] || "")).filter(Boolean);
97
+ }
98
+ function findDenseParagraphIndexes(html, maxSentences = 6) {
99
+ return getParagraphTexts(html).map((text, index) => ({ index, sentenceCount: countSentences(text) })).filter(({ sentenceCount }) => sentenceCount > maxSentences).map(({ index }) => index);
100
+ }
101
+ function needsSubheadingHint(html) {
102
+ return getWordCount(html) > SUBHEADING_HINT_WORD_THRESHOLD && !/<h[23]\b/i.test(html);
103
+ }
104
+ function analyzeBlogContent(html) {
105
+ return {
106
+ wordCount: getWordCount(html),
107
+ readTime: estimateReadTime(html),
108
+ denseParagraphIndexes: findDenseParagraphIndexes(html),
109
+ needsSubheadingHint: needsSubheadingHint(html)
110
+ };
111
+ }
112
+ export {
113
+ DEFAULT_BLOG_TYPOGRAPHY,
114
+ READER_THEME_OPTIONS,
115
+ TYPOGRAPHY_OPTION_LABELS,
116
+ TYPOGRAPHY_VARIABLES,
117
+ analyzeBlogContent,
118
+ estimateReadTime,
119
+ findDenseParagraphIndexes,
120
+ getReadingStyleVariables,
121
+ getWordCount,
122
+ needsSubheadingHint,
123
+ normalizeBlogTypography,
124
+ stripHtml
125
+ };
126
+ //# sourceMappingURL=density.js.map