@aglyn/plugins-commerce 1.0.0-beta.284 → 1.0.0-beta.287

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 (420) hide show
  1. package/README.md +1 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/cart.js +25 -12
  4. package/src/lib/components/cart.js.map +1 -1
  5. package/src/lib/components/commerce-console-page.js +70 -13
  6. package/src/lib/components/commerce-console-page.js.map +1 -1
  7. package/src/lib/components/console/order-detail-dialog.component.js +2 -1
  8. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  9. package/src/lib/components/console/payment-methods-card.component.js +1 -1
  10. package/src/lib/components/console/payment-methods-card.component.js.map +1 -1
  11. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +5 -0
  12. package/src/lib/components/console/pos/pos-cart-panel.component.js +18 -12
  13. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -1
  14. package/src/lib/components/console/pos/pos-hardware-api.d.ts +76 -5
  15. package/src/lib/components/console/pos/pos-hardware-api.js +53 -11
  16. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -1
  17. package/src/lib/components/console/pos/pos-hardware-buyer.component.d.ts +18 -0
  18. package/src/lib/components/console/pos/pos-hardware-buyer.component.js +629 -0
  19. package/src/lib/components/console/pos/pos-hardware-buyer.component.js.map +1 -0
  20. package/src/lib/components/console/pos/pos-hardware-sale-api.d.ts +162 -0
  21. package/src/lib/components/console/pos/pos-hardware-sale-api.js +122 -0
  22. package/src/lib/components/console/pos/pos-hardware-sale-api.js.map +1 -0
  23. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.d.ts +39 -0
  24. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js +251 -0
  25. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js.map +1 -0
  26. package/src/lib/components/console/pos/use-pos-display.js +50 -0
  27. package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
  28. package/src/lib/components/console/pos-cellular-control.component.d.ts +41 -0
  29. package/src/lib/components/console/pos-cellular-control.component.js +211 -0
  30. package/src/lib/components/console/pos-cellular-control.component.js.map +1 -0
  31. package/src/lib/components/console/pos-devices-card.component.d.ts +9 -1
  32. package/src/lib/components/console/pos-devices-card.component.js +47 -15
  33. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  34. package/src/lib/components/console/pos-display/pos-display-api.d.ts +6 -0
  35. package/src/lib/components/console/pos-display/pos-display-api.js +8 -1
  36. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
  37. package/src/lib/components/console/pos-display-page.component.d.ts +13 -0
  38. package/src/lib/components/console/pos-display-page.component.js +44 -2
  39. package/src/lib/components/console/pos-display-page.component.js.map +1 -1
  40. package/src/lib/components/console/pos-hardware-card.component.d.ts +12 -4
  41. package/src/lib/components/console/pos-hardware-card.component.js +157 -36
  42. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -1
  43. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +360 -80
  44. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -1
  45. package/src/lib/components/console/pos-hardware-terms-page.component.d.ts +34 -0
  46. package/src/lib/components/console/pos-hardware-terms-page.component.js +257 -0
  47. package/src/lib/components/console/pos-hardware-terms-page.component.js.map +1 -0
  48. package/src/lib/components/console/pos-hardware-terms-sign-page.component.d.ts +27 -0
  49. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js +104 -0
  50. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js.map +1 -0
  51. package/src/lib/components/console/pos-hardware-waiting-card.component.d.ts +24 -0
  52. package/src/lib/components/console/pos-hardware-waiting-card.component.js +205 -0
  53. package/src/lib/components/console/pos-hardware-waiting-card.component.js.map +1 -0
  54. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +297 -201
  55. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -1
  56. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +3 -0
  57. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +260 -92
  58. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -1
  59. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +9 -0
  60. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +15 -6
  61. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  62. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.d.ts +25 -0
  63. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js +136 -0
  64. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js.map +1 -0
  65. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +6 -0
  66. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +48 -31
  67. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -1
  68. package/src/lib/components/console/pos-page.component.d.ts +1 -1
  69. package/src/lib/components/console/pos-page.component.js +63 -12
  70. package/src/lib/components/console/pos-page.component.js.map +1 -1
  71. package/src/lib/components/console/pos-reader-splash-setting.component.js +1 -1
  72. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -1
  73. package/src/lib/components/console/product-check-in-fields.component.d.ts +4 -2
  74. package/src/lib/components/console/product-check-in-fields.component.js +60 -14
  75. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -1
  76. package/src/lib/components/console/product-editor-dialog.component.js +44 -1
  77. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  78. package/src/lib/components/console/product-hardware-sku-field.component.d.ts +19 -0
  79. package/src/lib/components/console/product-hardware-sku-field.component.js +92 -0
  80. package/src/lib/components/console/product-hardware-sku-field.component.js.map +1 -0
  81. package/src/lib/components/console/product-kiosk-offer-field.component.d.ts +22 -0
  82. package/src/lib/components/console/product-kiosk-offer-field.component.js +94 -0
  83. package/src/lib/components/console/product-kiosk-offer-field.component.js.map +1 -0
  84. package/src/lib/components/console/product-register-fields.component.d.ts +4 -0
  85. package/src/lib/components/console/product-register-fields.component.js +31 -2
  86. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  87. package/src/lib/components/console/products-hub-card.component.js +11 -2
  88. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  89. package/src/lib/components/console/register-hardware-card.component.d.ts +11 -0
  90. package/src/lib/components/console/register-hardware-card.component.js +56 -27
  91. package/src/lib/components/console/register-hardware-card.component.js.map +1 -1
  92. package/src/lib/components/console/reservation-guests-dialog.component.d.ts +28 -0
  93. package/src/lib/components/console/reservation-guests-dialog.component.js +189 -0
  94. package/src/lib/components/console/reservation-guests-dialog.component.js.map +1 -0
  95. package/src/lib/components/console/reservations-card.component.d.ts +9 -0
  96. package/src/lib/components/console/reservations-card.component.js +158 -23
  97. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  98. package/src/lib/components/console/shippingeasy-card.component.js +1 -1
  99. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -1
  100. package/src/lib/components/console/shipstation-card.component.d.ts +1 -1
  101. package/src/lib/components/console/shipstation-card.component.js +3 -3
  102. package/src/lib/components/console/shipstation-card.component.js.map +1 -1
  103. package/src/lib/components/product-detail.d.ts +4 -0
  104. package/src/lib/components/product-detail.js +40 -5
  105. package/src/lib/components/product-detail.js.map +1 -1
  106. package/src/lib/components/product-reviews.js +28 -11
  107. package/src/lib/components/product-reviews.js.map +1 -1
  108. package/src/lib/components/reservation-widget.js +28 -5
  109. package/src/lib/components/reservation-widget.js.map +1 -1
  110. package/src/lib/components/use-day-picker.d.ts +25 -0
  111. package/src/lib/components/use-day-picker.js +57 -0
  112. package/src/lib/components/use-day-picker.js.map +1 -0
  113. package/src/lib/constants/operator-alerts.d.ts +55 -0
  114. package/src/lib/constants/operator-alerts.js +156 -1
  115. package/src/lib/constants/operator-alerts.js.map +1 -1
  116. package/src/lib/declarations.console-server.js +54 -1
  117. package/src/lib/declarations.console-server.js.map +1 -1
  118. package/src/lib/declarations.d.ts +4 -2
  119. package/src/lib/declarations.js +11 -4
  120. package/src/lib/declarations.js.map +1 -1
  121. package/src/lib/declarations.server.js +9 -0
  122. package/src/lib/declarations.server.js.map +1 -1
  123. package/src/lib/model/commerce-cart.d.ts +9 -1
  124. package/src/lib/model/commerce-cart.js +4 -3
  125. package/src/lib/model/commerce-cart.js.map +1 -1
  126. package/src/lib/model/commerce-check-in-product.d.ts +26 -0
  127. package/src/lib/model/commerce-check-in-product.js +64 -2
  128. package/src/lib/model/commerce-check-in-product.js.map +1 -1
  129. package/src/lib/model/commerce-check-in-record.d.ts +127 -0
  130. package/src/lib/model/commerce-check-in-record.js +36 -0
  131. package/src/lib/model/commerce-check-in-record.js.map +1 -0
  132. package/src/lib/model/commerce-check-in.d.ts +91 -87
  133. package/src/lib/model/commerce-check-in.js +186 -62
  134. package/src/lib/model/commerce-check-in.js.map +1 -1
  135. package/src/lib/model/commerce-kiosk-offer.d.ts +31 -0
  136. package/src/lib/model/commerce-kiosk-offer.js +35 -0
  137. package/src/lib/model/commerce-kiosk-offer.js.map +1 -0
  138. package/src/lib/model/commerce-orders.d.ts +76 -0
  139. package/src/lib/model/commerce-orders.js +6 -0
  140. package/src/lib/model/commerce-orders.js.map +1 -1
  141. package/src/lib/model/commerce-pos-day-report.d.ts +54 -1
  142. package/src/lib/model/commerce-pos-day-report.js +39 -2
  143. package/src/lib/model/commerce-pos-day-report.js.map +1 -1
  144. package/src/lib/model/commerce-pos-offline.d.ts +1 -1
  145. package/src/lib/model/commerce-pos-offline.js +6 -1
  146. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  147. package/src/lib/model/commerce-pos-ops.js +3 -2
  148. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  149. package/src/lib/model/commerce-pos.d.ts +36 -3
  150. package/src/lib/model/commerce-pos.js +14 -6
  151. package/src/lib/model/commerce-pos.js.map +1 -1
  152. package/src/lib/model/commerce-receipt.js +3 -2
  153. package/src/lib/model/commerce-receipt.js.map +1 -1
  154. package/src/lib/model/commerce-reservations.d.ts +69 -4
  155. package/src/lib/model/commerce-reservations.js +57 -5
  156. package/src/lib/model/commerce-reservations.js.map +1 -1
  157. package/src/lib/model/commerce.d.ts +66 -0
  158. package/src/lib/model/commerce.js +15 -0
  159. package/src/lib/model/commerce.js.map +1 -1
  160. package/src/lib/model/order-list-fields.d.ts +11 -0
  161. package/src/lib/model/order-list-fields.js +17 -1
  162. package/src/lib/model/order-list-fields.js.map +1 -1
  163. package/src/lib/model/own-store-tax-summary.d.ts +152 -0
  164. package/src/lib/model/own-store-tax-summary.js +288 -0
  165. package/src/lib/model/own-store-tax-summary.js.map +1 -0
  166. package/src/lib/model/plugin-permissions.d.ts +67 -0
  167. package/src/lib/model/plugin-permissions.js +224 -7
  168. package/src/lib/model/plugin-permissions.js.map +1 -1
  169. package/src/lib/model/pos-cellular.d.ts +223 -0
  170. package/src/lib/model/pos-cellular.js +293 -0
  171. package/src/lib/model/pos-cellular.js.map +1 -0
  172. package/src/lib/model/pos-hardware-in-person.d.ts +98 -0
  173. package/src/lib/model/pos-hardware-in-person.js +224 -0
  174. package/src/lib/model/pos-hardware-in-person.js.map +1 -0
  175. package/src/lib/model/pos-hardware-tax-summary.d.ts +166 -0
  176. package/src/lib/model/pos-hardware-tax-summary.js +225 -0
  177. package/src/lib/model/pos-hardware-tax-summary.js.map +1 -0
  178. package/src/lib/model/pos-hardware-terms.d.ts +74 -0
  179. package/src/lib/model/pos-hardware-terms.js +115 -0
  180. package/src/lib/model/pos-hardware-terms.js.map +1 -0
  181. package/src/lib/model/pos-hardware.d.ts +349 -7
  182. package/src/lib/model/pos-hardware.js +291 -20
  183. package/src/lib/model/pos-hardware.js.map +1 -1
  184. package/src/lib/model/product-write.d.ts +10 -0
  185. package/src/lib/model/product-write.js +4 -2
  186. package/src/lib/model/product-write.js.map +1 -1
  187. package/src/lib/plugin.js +16 -0
  188. package/src/lib/plugin.js.map +1 -1
  189. package/src/lib/server/billing-webhook.js +25 -1
  190. package/src/lib/server/billing-webhook.js.map +1 -1
  191. package/src/lib/server/cancel-order.js +7 -5
  192. package/src/lib/server/cancel-order.js.map +1 -1
  193. package/src/lib/server/cart-checkout.js +20 -8
  194. package/src/lib/server/cart-checkout.js.map +1 -1
  195. package/src/lib/server/cart.js +29 -0
  196. package/src/lib/server/cart.js.map +1 -1
  197. package/src/lib/server/checkout.js +42 -13
  198. package/src/lib/server/checkout.js.map +1 -1
  199. package/src/lib/server/collection-membership.d.ts +4 -0
  200. package/src/lib/server/collection-membership.js +5 -10
  201. package/src/lib/server/collection-membership.js.map +1 -1
  202. package/src/lib/server/commerce-site-keys.d.ts +29 -0
  203. package/src/lib/server/commerce-site-keys.js +40 -0
  204. package/src/lib/server/commerce-site-keys.js.map +1 -0
  205. package/src/lib/server/draft-order.js +8 -5
  206. package/src/lib/server/draft-order.js.map +1 -1
  207. package/src/lib/server/fulfill-order.js +7 -5
  208. package/src/lib/server/fulfill-order.js.map +1 -1
  209. package/src/lib/server/gift-cards.js +8 -5
  210. package/src/lib/server/gift-cards.js.map +1 -1
  211. package/src/lib/server/local-fulfillment-status.js +9 -6
  212. package/src/lib/server/local-fulfillment-status.js.map +1 -1
  213. package/src/lib/server/member-post.js +6 -5
  214. package/src/lib/server/member-post.js.map +1 -1
  215. package/src/lib/server/membership-admin-password.d.ts +4 -2
  216. package/src/lib/server/membership-admin-password.js +10 -8
  217. package/src/lib/server/membership-admin-password.js.map +1 -1
  218. package/src/lib/server/membership-admin-remove.d.ts +7 -5
  219. package/src/lib/server/membership-admin-remove.js +9 -9
  220. package/src/lib/server/membership-admin-remove.js.map +1 -1
  221. package/src/lib/server/order-notifications.js +5 -2
  222. package/src/lib/server/order-notifications.js.map +1 -1
  223. package/src/lib/server/order-print.js +7 -5
  224. package/src/lib/server/order-print.js.map +1 -1
  225. package/src/lib/server/order-receipt-send.js +8 -5
  226. package/src/lib/server/order-receipt-send.js.map +1 -1
  227. package/src/lib/server/orders-shipping-prepare.js +9 -6
  228. package/src/lib/server/orders-shipping-prepare.js.map +1 -1
  229. package/src/lib/server/own-store-tax-return-source.d.ts +47 -0
  230. package/src/lib/server/own-store-tax-return-source.js +312 -0
  231. package/src/lib/server/own-store-tax-return-source.js.map +1 -0
  232. package/src/lib/server/payment-methods.js +13 -9
  233. package/src/lib/server/payment-methods.js.map +1 -1
  234. package/src/lib/server/pos-auth.d.ts +37 -6
  235. package/src/lib/server/pos-auth.js +40 -15
  236. package/src/lib/server/pos-auth.js.map +1 -1
  237. package/src/lib/server/pos-cellular-billing.d.ts +81 -0
  238. package/src/lib/server/pos-cellular-billing.js +711 -0
  239. package/src/lib/server/pos-cellular-billing.js.map +1 -0
  240. package/src/lib/server/pos-cellular-notify.d.ts +47 -0
  241. package/src/lib/server/pos-cellular-notify.js +150 -0
  242. package/src/lib/server/pos-cellular-notify.js.map +1 -0
  243. package/src/lib/server/pos-cellular.d.ts +88 -0
  244. package/src/lib/server/pos-cellular.js +339 -0
  245. package/src/lib/server/pos-cellular.js.map +1 -0
  246. package/src/lib/server/pos-check-in.d.ts +5 -1
  247. package/src/lib/server/pos-check-in.js +296 -28
  248. package/src/lib/server/pos-check-in.js.map +1 -1
  249. package/src/lib/server/pos-day-report.js +29 -3
  250. package/src/lib/server/pos-day-report.js.map +1 -1
  251. package/src/lib/server/pos-display.d.ts +16 -0
  252. package/src/lib/server/pos-display.js +129 -2
  253. package/src/lib/server/pos-display.js.map +1 -1
  254. package/src/lib/server/pos-hardware-admin.d.ts +10 -1
  255. package/src/lib/server/pos-hardware-admin.js +250 -84
  256. package/src/lib/server/pos-hardware-admin.js.map +1 -1
  257. package/src/lib/server/pos-hardware-attach.d.ts +105 -0
  258. package/src/lib/server/pos-hardware-attach.js +443 -0
  259. package/src/lib/server/pos-hardware-attach.js.map +1 -0
  260. package/src/lib/server/pos-hardware-buyer-lookup.d.ts +58 -0
  261. package/src/lib/server/pos-hardware-buyer-lookup.js +180 -0
  262. package/src/lib/server/pos-hardware-buyer-lookup.js.map +1 -0
  263. package/src/lib/server/pos-hardware-buyer-record.d.ts +29 -0
  264. package/src/lib/server/pos-hardware-buyer-record.js +86 -0
  265. package/src/lib/server/pos-hardware-buyer-record.js.map +1 -0
  266. package/src/lib/server/pos-hardware-cancel.d.ts +58 -0
  267. package/src/lib/server/pos-hardware-cancel.js +147 -0
  268. package/src/lib/server/pos-hardware-cancel.js.map +1 -0
  269. package/src/lib/server/pos-hardware-closure-notices.d.ts +27 -0
  270. package/src/lib/server/pos-hardware-closure-notices.js +85 -0
  271. package/src/lib/server/pos-hardware-closure-notices.js.map +1 -0
  272. package/src/lib/server/pos-hardware-closure.d.ts +60 -0
  273. package/src/lib/server/pos-hardware-closure.js +153 -0
  274. package/src/lib/server/pos-hardware-closure.js.map +1 -0
  275. package/src/lib/server/pos-hardware-in-person.d.ts +61 -0
  276. package/src/lib/server/pos-hardware-in-person.js +236 -0
  277. package/src/lib/server/pos-hardware-in-person.js.map +1 -0
  278. package/src/lib/server/pos-hardware-notify.d.ts +40 -2
  279. package/src/lib/server/pos-hardware-notify.js +195 -14
  280. package/src/lib/server/pos-hardware-notify.js.map +1 -1
  281. package/src/lib/server/pos-hardware-readers.d.ts +115 -0
  282. package/src/lib/server/pos-hardware-readers.js +430 -0
  283. package/src/lib/server/pos-hardware-readers.js.map +1 -0
  284. package/src/lib/server/pos-hardware-returns.d.ts +116 -0
  285. package/src/lib/server/pos-hardware-returns.js +502 -0
  286. package/src/lib/server/pos-hardware-returns.js.map +1 -0
  287. package/src/lib/server/pos-hardware-sale-fields.d.ts +28 -0
  288. package/src/lib/server/pos-hardware-sale-fields.js +44 -0
  289. package/src/lib/server/pos-hardware-sale-fields.js.map +1 -0
  290. package/src/lib/server/pos-hardware-sale.d.ts +54 -0
  291. package/src/lib/server/pos-hardware-sale.js +369 -0
  292. package/src/lib/server/pos-hardware-sale.js.map +1 -0
  293. package/src/lib/server/pos-hardware-tax-return-source.d.ts +99 -0
  294. package/src/lib/server/pos-hardware-tax-return-source.js +462 -0
  295. package/src/lib/server/pos-hardware-tax-return-source.js.map +1 -0
  296. package/src/lib/server/pos-hardware-terms.d.ts +64 -0
  297. package/src/lib/server/pos-hardware-terms.js +154 -0
  298. package/src/lib/server/pos-hardware-terms.js.map +1 -0
  299. package/src/lib/server/pos-hardware-user-eraser.d.ts +3 -0
  300. package/src/lib/server/pos-hardware-user-eraser.js +31 -7
  301. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -1
  302. package/src/lib/server/pos-hardware-webhook.d.ts +5 -0
  303. package/src/lib/server/pos-hardware-webhook.js +51 -6
  304. package/src/lib/server/pos-hardware-webhook.js.map +1 -1
  305. package/src/lib/server/pos-hardware.d.ts +74 -1
  306. package/src/lib/server/pos-hardware.js +175 -10
  307. package/src/lib/server/pos-hardware.js.map +1 -1
  308. package/src/lib/server/pos-kiosk.d.ts +2 -0
  309. package/src/lib/server/pos-kiosk.js +17 -12
  310. package/src/lib/server/pos-kiosk.js.map +1 -1
  311. package/src/lib/server/pos-offline-card-order.d.ts +64 -0
  312. package/src/lib/server/pos-offline-card-order.js +102 -0
  313. package/src/lib/server/pos-offline-card-order.js.map +1 -0
  314. package/src/lib/server/pos-offline-card-reconcile.d.ts +67 -1
  315. package/src/lib/server/pos-offline-card-reconcile.js +215 -18
  316. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -1
  317. package/src/lib/server/pos-offline-sync.d.ts +39 -0
  318. package/src/lib/server/pos-offline-sync.js +190 -55
  319. package/src/lib/server/pos-offline-sync.js.map +1 -1
  320. package/src/lib/server/pos-ops-gate.d.ts +15 -4
  321. package/src/lib/server/pos-ops-gate.js +42 -9
  322. package/src/lib/server/pos-ops-gate.js.map +1 -1
  323. package/src/lib/server/pos-ops-routes.js +24 -0
  324. package/src/lib/server/pos-ops-routes.js.map +1 -1
  325. package/src/lib/server/pos-order-refund-ids.d.ts +28 -0
  326. package/src/lib/server/pos-order-refund-ids.js +31 -0
  327. package/src/lib/server/pos-order-refund-ids.js.map +1 -0
  328. package/src/lib/server/pos-order.js +52 -49
  329. package/src/lib/server/pos-order.js.map +1 -1
  330. package/src/lib/server/pos-payment.js +1 -1
  331. package/src/lib/server/pos-payment.js.map +1 -1
  332. package/src/lib/server/pos-reader-splash-admin.js +30 -32
  333. package/src/lib/server/pos-reader-splash-admin.js.map +1 -1
  334. package/src/lib/server/pos-reader-splash-images-route.d.ts +17 -0
  335. package/src/lib/server/pos-reader-splash-images-route.js +113 -0
  336. package/src/lib/server/pos-reader-splash-images-route.js.map +1 -0
  337. package/src/lib/server/pos-reader-splash-images.d.ts +51 -0
  338. package/src/lib/server/pos-reader-splash-images.js +123 -0
  339. package/src/lib/server/pos-reader-splash-images.js.map +1 -0
  340. package/src/lib/server/pos-reader-splash.d.ts +68 -1
  341. package/src/lib/server/pos-reader-splash.js +182 -11
  342. package/src/lib/server/pos-reader-splash.js.map +1 -1
  343. package/src/lib/server/pos-readers.d.ts +29 -0
  344. package/src/lib/server/pos-readers.js +134 -35
  345. package/src/lib/server/pos-readers.js.map +1 -1
  346. package/src/lib/server/pos-return.d.ts +10 -0
  347. package/src/lib/server/pos-return.js +26 -1
  348. package/src/lib/server/pos-return.js.map +1 -1
  349. package/src/lib/server/pos-sale.js +6 -1
  350. package/src/lib/server/pos-sale.js.map +1 -1
  351. package/src/lib/server/pos-shift.js +11 -0
  352. package/src/lib/server/pos-shift.js.map +1 -1
  353. package/src/lib/server/pos-staff-pin.js +25 -20
  354. package/src/lib/server/pos-staff-pin.js.map +1 -1
  355. package/src/lib/server/pos-terminal.d.ts +14 -4
  356. package/src/lib/server/pos-terminal.js +34 -38
  357. package/src/lib/server/pos-terminal.js.map +1 -1
  358. package/src/lib/server/printers.d.ts +7 -3
  359. package/src/lib/server/printers.js +18 -12
  360. package/src/lib/server/printers.js.map +1 -1
  361. package/src/lib/server/product-drafts.d.ts +11 -1
  362. package/src/lib/server/product-drafts.js +12 -8
  363. package/src/lib/server/product-drafts.js.map +1 -1
  364. package/src/lib/server/product.d.ts +15 -1
  365. package/src/lib/server/product.js +16 -3
  366. package/src/lib/server/product.js.map +1 -1
  367. package/src/lib/server/products-write.d.ts +26 -2
  368. package/src/lib/server/products-write.js +19 -7
  369. package/src/lib/server/products-write.js.map +1 -1
  370. package/src/lib/server/refund.js +34 -11
  371. package/src/lib/server/refund.js.map +1 -1
  372. package/src/lib/server/reservation-availability-query.d.ts +8 -0
  373. package/src/lib/server/reservation-availability-query.js +11 -1
  374. package/src/lib/server/reservation-availability-query.js.map +1 -1
  375. package/src/lib/server/reservation-availability.d.ts +1 -1
  376. package/src/lib/server/reservation-availability.js +7 -2
  377. package/src/lib/server/reservation-availability.js.map +1 -1
  378. package/src/lib/server/reservation-guests.d.ts +32 -0
  379. package/src/lib/server/reservation-guests.js +285 -0
  380. package/src/lib/server/reservation-guests.js.map +1 -0
  381. package/src/lib/server/reservation-walk-in.d.ts +11 -1
  382. package/src/lib/server/reservation-walk-in.js +56 -12
  383. package/src/lib/server/reservation-walk-in.js.map +1 -1
  384. package/src/lib/server/reserve.js +18 -5
  385. package/src/lib/server/reserve.js.map +1 -1
  386. package/src/lib/server/returns.js +9 -6
  387. package/src/lib/server/returns.js.map +1 -1
  388. package/src/lib/server/reviews.d.ts +22 -2
  389. package/src/lib/server/reviews.js +88 -20
  390. package/src/lib/server/reviews.js.map +1 -1
  391. package/src/lib/server/shipping-connectors.js +10 -11
  392. package/src/lib/server/shipping-connectors.js.map +1 -1
  393. package/src/lib/server/site-page-resolver.js +20 -3
  394. package/src/lib/server/site-page-resolver.js.map +1 -1
  395. package/src/lib/server/store-day.d.ts +33 -0
  396. package/src/lib/server/store-day.js +46 -0
  397. package/src/lib/server/store-day.js.map +1 -0
  398. package/src/lib/server/store-setup-ai-writer.d.ts +2 -1
  399. package/src/lib/server/store-setup-ai-writer.js +5 -6
  400. package/src/lib/server/store-setup-ai-writer.js.map +1 -1
  401. package/src/lib/server/storefront-tax.d.ts +13 -0
  402. package/src/lib/server/storefront-tax.js +8 -1
  403. package/src/lib/server/storefront-tax.js.map +1 -1
  404. package/src/lib/server/tax-return-source.d.ts +32 -3
  405. package/src/lib/server/tax-return-source.js +99 -20
  406. package/src/lib/server/tax-return-source.js.map +1 -1
  407. package/src/lib/server.js +100 -2
  408. package/src/lib/server.js.map +1 -1
  409. package/src/lib/testing/fake-firestore.js +58 -16
  410. package/src/lib/testing/fake-firestore.js.map +1 -1
  411. package/src/lib/testing/pos-ops-memory-firestore.js +18 -4
  412. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -1
  413. package/src/lib/testing/site-register-permissions.d.ts +29 -0
  414. package/src/lib/testing/site-register-permissions.js +38 -0
  415. package/src/lib/testing/site-register-permissions.js.map +1 -0
  416. package/src/lib/transfer/tracking.server.js +8 -5
  417. package/src/lib/transfer/tracking.server.js.map +1 -1
  418. package/src/lib/utils/add-to-cart.d.ts +2 -0
  419. package/src/lib/utils/add-to-cart.js +6 -3
  420. package/src/lib/utils/add-to-cart.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos-hardware-orders-staff-page.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport type { ConsoleStaffPageProps } from '@aglyn/aglyn'\nimport { pluginDocsHelp } from '@aglyn/aglyn'\nimport { resolveStaffRoleGate } from '@aglyn/aglyn/app-utils/staff-role-gate'\nimport { CardDisplay, useConfirmationContext } from '@aglyn/shared-ui-jsx'\nimport { BlockedControl } from '@aglyn/shared-ui-jsx/components/blocked-control.component'\nimport { ListPagination } from '@aglyn/shared-ui-jsx/components/list-pagination.component'\nimport { ListTable } from '@aglyn/shared-ui-jsx/components/list-table.component'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Link,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport type { GridColDef } from '@mui/x-data-grid'\nimport { useCallback, useEffect, useMemo, useState, type ReactElement } from 'react'\nimport {\n formatPosHardwareCents,\n nextPosHardwareStatus,\n POS_HARDWARE_ORDER_STATUSES,\n POS_HARDWARE_STAFF_STATUS_LABELS,\n posHardwareRefundable,\n posHardwareSku,\n type PosHardwareOrderStatus,\n} from '../../model/pos-hardware'\nimport { POS_HARDWARE_STATUS_COLOR } from './pos-hardware-card.component'\nimport {\n PosHardwareRequestError,\n staffHardwareOrderAction,\n staffHardwareOrders,\n type StaffHardwareOrderRow,\n} from './pos/pos-hardware-api'\n\nconst WRITE_ROLES = ['super', 'billing'] as const\n\nconst NOT_REFUNDABLE = 'Only an order that has not shipped can be canceled or refunded.'\nconst CLOSED = 'A canceled or refunded order can no longer change.'\n\n/** A control disabled with its reason, or passed through when there is none. */\nfunction Guarded(props: { reason?: string; children: ReactElement<{ disabled?: boolean }> }) {\n return (\n <BlockedControl blocked={Boolean(props.reason)} reason={props.reason ?? ''}>\n {props.children}\n </BlockedControl>\n )\n}\n\nconst when = (ms: number) => (ms ? new Date(ms).toLocaleString() : '—')\n\nfunction shipTo(order: StaffHardwareOrderRow): string {\n const address = order.shipping?.address\n if (!address) {\n // The buyer's account was erased: only the tax region is left (AGL-4038).\n const region = order.shipping?.taxRegion\n return region\n ? [[region.state, region.postalCode].filter(Boolean).join(' '), region.country].filter(Boolean).join('\\n')\n : '—'\n }\n return [\n order.shipping?.name,\n address.line1,\n address.line2,\n `${address.city}${address.state ? `, ${address.state}` : ''} ${address.postalCode}`,\n address.country,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n\n/**\n * Staff → Hardware orders (AGL-4038): every workspace's orders from the POS\n * hardware shop, newest first. In phase 1 a person places each one in the\n * Stripe Dashboard's Terminal hardware shop, then records Stripe's order id\n * and the tracking here and moves the order along; the merchant is emailed\n * as it ships and is delivered. Canceling or refunding returns the whole\n * payment and is offered only before the order ships.\n */\nexport function PosHardwareOrdersStaffPage(props: ConsoleStaffPageProps) {\n const { staffRole = null, staffPaths } = props\n const { data: user } = useUser()\n const { enqueueSnackbar } = useSnackbar()\n const { confirm } = useConfirmationContext()\n const [status, setStatus] = useState<PosHardwareOrderStatus | ''>('paid')\n const [orders, setOrders] = useState<StaffHardwareOrderRow[] | null>(null)\n // The cursor that opens each page: `cursors[page]` is the `after` its\n // request carries, so Previous re-reads a page rather than keeping every\n // page read so far in memory.\n const [cursors, setCursors] = useState<Array<string | null>>([null])\n const [page, setPage] = useState(0)\n const [nextPage, setNextPage] = useState<string | null>(null)\n const [pageSize, setPageSize] = useState(25)\n const [error, setError] = useState<string | null>(null)\n const [open, setOpen] = useState<StaffHardwareOrderRow | null>(null)\n const [busy, setBusy] = useState(false)\n const [form, setForm] = useState({ stripeHardwareOrderId: '', carrier: '', number: '', url: '' })\n const gate = resolveStaffRoleGate(staffRole, WRITE_ROLES)\n const uid = user?.uid ?? ''\n\n const load = useCallback(async (targetPage = 0, after: string | null = null) => {\n if (!user) return\n setError(null)\n try {\n const answer = await staffHardwareOrders(user, status, after)\n setOrders(answer.orders)\n setPage(targetPage)\n setNextPage(answer.next)\n setPageSize(answer.pageSize)\n setCursors((existing) => {\n const kept = existing.slice(0, targetPage + 1)\n return answer.next ? [...kept, answer.next] : kept\n })\n } catch (caught) {\n setOrders([])\n setError(caught instanceof PosHardwareRequestError ? caught.message : 'Hardware orders could not be read')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [uid, status])\n\n useEffect(() => {\n void load()\n }, [load])\n\n const openOrder = (order: StaffHardwareOrderRow) => {\n setOpen(order)\n setForm({\n stripeHardwareOrderId: order.stripeHardwareOrderId ?? '',\n carrier: order.tracking?.carrier ?? '',\n number: order.tracking?.number ?? '',\n url: order.tracking?.url ?? '',\n })\n }\n\n const act = async (\n body: Omit<Parameters<typeof staffHardwareOrderAction>[1], 'orgId' | 'orderId'>,\n done: string,\n ) => {\n if (!user || !open) return\n setBusy(true)\n try {\n const { order } = await staffHardwareOrderAction(user, { ...body, orgId: open.orgId, orderId: open.id })\n setOpen(order)\n enqueueSnackbar(done, { variant: 'success', persist: false })\n await load(page, cursors[page] ?? null)\n } catch (caught) {\n enqueueSnackbar(\n caught instanceof PosHardwareRequestError ? caught.message : 'The order could not be changed',\n { variant: 'warning', persist: false },\n )\n } finally {\n setBusy(false)\n }\n }\n\n const formTracking = () =>\n form.carrier.trim() && form.number.trim()\n ? { carrier: form.carrier.trim(), number: form.number.trim(), ...(form.url.trim() ? { url: form.url.trim() } : {}) }\n : undefined\n\n const save = (advance?: PosHardwareOrderStatus) => {\n const tracking = formTracking()\n void act(\n {\n action: 'update',\n stripeHardwareOrderId: form.stripeHardwareOrderId.trim() || null,\n ...(tracking ? { tracking } : {}),\n ...(advance ? { status: advance } : {}),\n },\n advance ? `Marked ${POS_HARDWARE_STAFF_STATUS_LABELS[advance].toLowerCase()}` : 'Saved',\n )\n }\n\n const returnMoney = async (action: 'cancel' | 'refund') => {\n if (!open) return\n const confirmed = await confirm({\n title: action === 'cancel' ? 'Cancel and refund this order?' : 'Refund this order?',\n description:\n `${formatPosHardwareCents(open.totalCents)} goes back to the card it was paid with. ` +\n 'Cancel the order in the Stripe Dashboard too if it was already placed there.',\n confirmationText: action === 'cancel' ? 'Cancel and refund' : 'Refund',\n confirmationButtonProps: { color: 'error' },\n })\n .then(() => true)\n .catch(() => false)\n if (confirmed) await act({ action }, action === 'cancel' ? 'Canceled and refunded' : 'Refunded')\n }\n\n const columns = useMemo<GridColDef[]>(\n () => [\n { field: 'number', headerName: 'Order', minWidth: 110 },\n {\n field: 'createdAtMs',\n headerName: 'Placed',\n type: 'number',\n minWidth: 170,\n align: 'left',\n headerAlign: 'left',\n valueFormatter: (value: number) => when(value),\n },\n {\n field: 'orgId',\n headerName: 'Workspace',\n minWidth: 160,\n renderCell: ({ row }: { row: StaffHardwareOrderRow }) => {\n const href = staffPaths?.orgDetail(row.orgId)\n return href ? (\n <Link href={href} onClick={(event) => event.stopPropagation()}>\n {row.orgId}\n </Link>\n ) : (\n row.orgId\n )\n },\n },\n {\n field: 'items',\n headerName: 'Items',\n flex: 1,\n minWidth: 200,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) =>\n row.lines.map((line) => `${line.quantity} × ${line.name}`).join(', '),\n },\n {\n field: 'totalCents',\n headerName: 'Total',\n type: 'number',\n minWidth: 100,\n valueFormatter: (value: number) => formatPosHardwareCents(value),\n },\n {\n field: 'shippingMethod',\n headerName: 'Shipping',\n minWidth: 140,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) => row.shipping?.label ?? '',\n },\n {\n field: 'status',\n headerName: 'Status',\n minWidth: 160,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) => POS_HARDWARE_STAFF_STATUS_LABELS[row.status],\n renderCell: ({ row }: { row: StaffHardwareOrderRow }) => (\n <Chip\n size=\"small\"\n color={POS_HARDWARE_STATUS_COLOR[row.status]}\n label={POS_HARDWARE_STAFF_STATUS_LABELS[row.status] + (row.livemode ? '' : ' · test')}\n />\n ),\n },\n {\n field: 'stripeHardwareOrderId',\n headerName: 'Stripe order',\n minWidth: 150,\n valueGetter: (value: string | null) => value ?? '',\n },\n {\n field: 'tracking',\n headerName: 'Tracking',\n minWidth: 160,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) => row.tracking?.number ?? '',\n },\n ],\n [staffPaths],\n )\n\n const next = open ? nextPosHardwareStatus(open.status) : null\n const closed = open ? open.status === 'canceled' || open.status === 'refunded' : true\n const refundable = open ? posHardwareRefundable(open.status) && !open.refundPending : false\n const writeReason = gate.blocked ? gate.reason : undefined\n\n return (\n <CardDisplay\n header={'Hardware orders'}\n help={pluginDocsHelp('posHardware', { anchor: '#hardware-purchase-records' })}\n subheader={'Card readers bought from the POS hardware shop'}\n HeaderProps={{\n action: (\n <TextField\n select\n size=\"small\"\n label=\"Status\"\n value={status}\n onChange={(event) => setStatus(event.target.value as PosHardwareOrderStatus | '')}\n >\n <MenuItem value=\"\">{'All'}</MenuItem>\n {POS_HARDWARE_ORDER_STATUSES.map((value) => (\n <MenuItem key={value} value={value}>\n {POS_HARDWARE_STAFF_STATUS_LABELS[value]}\n </MenuItem>\n ))}\n </TextField>\n ),\n }}\n contentGutterX\n contentGutterY\n >\n <Stack spacing={2}>\n {error ? <Alert severity=\"error\">{error}</Alert> : null}\n {orders && orders.length === 0 && !error ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {status ? `No orders are ${POS_HARDWARE_STAFF_STATUS_LABELS[status].toLowerCase()}.` : 'No hardware orders yet.'}\n </Typography>\n ) : (\n <ListTable\n rows={(orders ?? []).map((order) => ({ ...order, $id: order.id }))}\n columns={columns}\n loading={orders === null}\n hideFooter\n onOpen={(_id, row) => openOrder(row as StaffHardwareOrderRow)}\n />\n )}\n {orders && (orders.length || page > 0) ? (\n <ListPagination\n page={page}\n pageSize={pageSize}\n rowCount={orders.length}\n hasMore={Boolean(nextPage)}\n onPageChange={(target) => void load(target, cursors[target] ?? null)}\n />\n ) : null}\n </Stack>\n\n <Dialog open={Boolean(open)} onClose={() => setOpen(null)} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{open ? `Hardware order ${open.number}` : ''}</DialogTitle>\n {open ? (\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <Stack spacing={0.5} sx={{ mt: 1 }}>\n <Typography variant=\"subtitle2\">{'Order in the Stripe hardware shop'}</Typography>\n {open.lines.map((line) => (\n <Typography key={line.sku} variant=\"body2\">\n {`${line.quantity} × ${posHardwareSku(line.sku)?.stripeProductName ?? line.name}`}\n </Typography>\n ))}\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`${open.shipping?.label ?? 'Shipping'} · paid ${formatPosHardwareCents(open.totalCents)}`}\n </Typography>\n </Stack>\n <Stack spacing={0.5}>\n <Typography variant=\"subtitle2\">{'Ship to'}</Typography>\n <Typography variant=\"body2\" sx={{ whiteSpace: 'pre-line' }}>\n {shipTo(open)}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {[open.shipping?.phone, open.contactEmail].filter(Boolean).join(' · ')}\n </Typography>\n </Stack>\n <TextField\n label=\"Stripe hardware order id\"\n value={form.stripeHardwareOrderId}\n disabled={closed}\n onChange={(event) => setForm({ ...form, stripeHardwareOrderId: event.target.value })}\n />\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>\n <TextField\n label=\"Carrier\"\n value={form.carrier}\n disabled={closed}\n onChange={(event) => setForm({ ...form, carrier: event.target.value })}\n />\n <TextField\n label=\"Tracking number\"\n value={form.number}\n disabled={closed}\n onChange={(event) => setForm({ ...form, number: event.target.value })}\n sx={{ flex: 1 }}\n />\n </Stack>\n <TextField\n label=\"Tracking link (optional)\"\n helperText=\"Built from the carrier when left empty\"\n value={form.url}\n disabled={closed}\n onChange={(event) => setForm({ ...form, url: event.target.value })}\n />\n {open.refundPending ? <Alert severity=\"warning\">{'A refund is in progress.'}</Alert> : null}\n </DialogContent>\n ) : null}\n <DialogActions sx={{ flexWrap: 'wrap', gap: 1 }}>\n <Guarded reason={writeReason ?? (refundable ? undefined : NOT_REFUNDABLE)}>\n <Button color=\"error\" disabled={busy} onClick={() => void returnMoney('cancel')}>\n {'Cancel and refund'}\n </Button>\n </Guarded>\n <Guarded reason={writeReason ?? (refundable ? undefined : NOT_REFUNDABLE)}>\n <Button color=\"error\" disabled={busy} onClick={() => void returnMoney('refund')}>\n {'Refund'}\n </Button>\n </Guarded>\n <Button onClick={() => setOpen(null)}>{'Close'}</Button>\n <Guarded reason={writeReason ?? (closed ? CLOSED : undefined)}>\n <Button disabled={busy} onClick={() => save()}>\n {'Save'}\n </Button>\n </Guarded>\n {next ? (\n <Guarded\n reason={\n writeReason ??\n (next === 'shipped' && !form.number.trim() ? 'Add the tracking number first.' : undefined)\n }\n >\n <Button variant=\"contained\" disabled={busy} onClick={() => save(next)}>\n {`Mark ${POS_HARDWARE_STAFF_STATUS_LABELS[next].toLowerCase()}`}\n </Button>\n </Guarded>\n ) : null}\n </DialogActions>\n </Dialog>\n </CardDisplay>\n )\n}\nPosHardwareOrdersStaffPage.displayName = 'PosHardwareOrdersStaffPage'\n\nexport default PosHardwareOrdersStaffPage\n"],"names":["pluginDocsHelp","resolveStaffRoleGate","CardDisplay","useConfirmationContext","BlockedControl","ListPagination","ListTable","useSnackbar","useUser","Alert","Button","Chip","Dialog","DialogActions","DialogContent","DialogTitle","Link","MenuItem","Stack","TextField","Typography","useCallback","useEffect","useMemo","useState","formatPosHardwareCents","nextPosHardwareStatus","POS_HARDWARE_ORDER_STATUSES","POS_HARDWARE_STAFF_STATUS_LABELS","posHardwareRefundable","posHardwareSku","POS_HARDWARE_STATUS_COLOR","PosHardwareRequestError","staffHardwareOrderAction","staffHardwareOrders","WRITE_ROLES","NOT_REFUNDABLE","CLOSED","Guarded","props","blocked","Boolean","reason","children","when","ms","Date","toLocaleString","shipTo","order","address","shipping","region","taxRegion","state","postalCode","filter","join","country","name","line1","line2","city","PosHardwareOrdersStaffPage","open","staffRole","staffPaths","data","user","enqueueSnackbar","confirm","status","setStatus","orders","setOrders","cursors","setCursors","page","setPage","nextPage","setNextPage","pageSize","setPageSize","error","setError","setOpen","busy","setBusy","form","setForm","stripeHardwareOrderId","carrier","number","url","gate","uid","load","targetPage","after","answer","next","existing","kept","slice","caught","message","openOrder","tracking","act","body","done","orgId","orderId","id","variant","persist","formTracking","trim","undefined","save","advance","action","toLowerCase","returnMoney","confirmed","title","description","totalCents","confirmationText","confirmationButtonProps","color","then","catch","columns","field","headerName","minWidth","type","align","headerAlign","valueFormatter","value","renderCell","row","href","orgDetail","onClick","event","stopPropagation","flex","valueGetter","_value","lines","map","line","quantity","label","size","livemode","closed","refundable","refundPending","writeReason","header","help","anchor","subheader","HeaderProps","select","onChange","target","contentGutterX","contentGutterY","spacing","severity","length","rows","$id","loading","hideFooter","onOpen","_id","rowCount","hasMore","onPageChange","onClose","maxWidth","fullWidth","sx","display","flexDirection","gap","mt","sku","stripeProductName","whiteSpace","phone","contactEmail","disabled","direction","xs","sm","helperText","flexWrap","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos-hardware-orders-staff-page.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport type { ConsoleStaffPageProps } from '@aglyn/aglyn'\nimport { pluginDocsHelp } from '@aglyn/aglyn'\nimport { resolveStaffRoleGate } from '@aglyn/aglyn/app-utils/staff-role-gate'\nimport { CardDisplay, useConfirmationContext } from '@aglyn/shared-ui-jsx'\nimport { BlockedControl } from '@aglyn/shared-ui-jsx/components/blocked-control.component'\nimport { ListPagination } from '@aglyn/shared-ui-jsx/components/list-pagination.component'\nimport { ListTable } from '@aglyn/shared-ui-jsx/components/list-table.component'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport {\n Alert,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n FormControlLabel,\n FormHelperText,\n Link,\n MenuItem,\n Stack,\n Switch,\n TextField,\n Typography,\n} from '@mui/material'\nimport type { GridColDef } from '@mui/x-data-grid'\nimport { useCallback, useEffect, useMemo, useState, type ReactElement } from 'react'\nimport {\n formatPosHardwareCents,\n nextPosHardwareStatus,\n POS_HARDWARE_ORDER_STATUSES,\n POS_HARDWARE_STAFF_STATUS_LABELS,\n posHardwareRefundable,\n posHardwareSku,\n type PosHardwareOrderStatus,\n} from '../../model/pos-hardware'\nimport { POS_HARDWARE_STATUS_COLOR } from './pos-hardware-card.component'\nimport {\n PosHardwareRequestError,\n staffHardwareOrderAction,\n staffHardwareOrders,\n type StaffHardwareFilter,\n type StaffHardwareOrderRow,\n} from './pos/pos-hardware-api'\n\nconst WRITE_ROLES = ['super', 'billing'] as const\n\nconst NOT_REFUNDABLE = 'Only an order that has not shipped can be canceled or refunded.'\n\n/** Dollars typed by staff as whole cents; empty is 0, anything else unreadable is null. */\nfunction centsOf(text: string): number | null {\n const trimmed = text.trim().replace(/^\\$/, '')\n if (!trimmed) return 0\n if (!/^\\d+(\\.\\d{1,2})?$/.test(trimmed)) return null\n return Math.round(Number(trimmed) * 100)\n}\nconst CLOSED = 'A canceled or refunded order can no longer change.'\nconst REFUNDED = 'This order is refunded in full.'\n\n/** A control disabled with its reason, or passed through when there is none. */\nfunction Guarded(props: { reason?: string; children: ReactElement<{ disabled?: boolean }> }) {\n return (\n <BlockedControl blocked={Boolean(props.reason)} reason={props.reason ?? ''}>\n {props.children}\n </BlockedControl>\n )\n}\n\nconst when = (ms: number) => (ms ? new Date(ms).toLocaleString() : '—')\n\n/** How a register sale was paid, as staff read it (AGL-4038). */\nconst TENDER_LABELS: Record<string, string> = {\n cash: 'cash',\n card_present: 'card on a reader',\n card_keyed: 'typed card',\n card_link: 'payment link',\n gift_card: 'gift card',\n folio: 'room charge',\n credit: 'store credit',\n}\n\n/** Whose an in-person order is, in a line (AGL-4038). */\nfunction attachedTo(order: StaffHardwareOrderRow): string {\n const attachment = order.attachment\n if (!attachment) return '—'\n if (attachment.state === 'attached') return `Workspace ${attachment.orgId ?? order.orgId}`\n if (attachment.uid) return 'To attach: has an account, no workspace yet'\n if (attachment.email) return `To attach: invited ${attachment.email}`\n return 'To attach'\n}\n\nfunction shipTo(order: StaffHardwareOrderRow): string {\n const address = order.shipping?.address\n if (!address) {\n // The buyer's account was erased: only the tax region is left (AGL-4038).\n const region = order.shipping?.taxRegion\n return region\n ? [[region.state, region.postalCode].filter(Boolean).join(' '), region.country].filter(Boolean).join('\\n')\n : '—'\n }\n return [\n order.shipping?.name,\n address.line1,\n address.line2,\n `${address.city}${address.state ? `, ${address.state}` : ''} ${address.postalCode}`,\n address.country,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n\n/**\n * Staff → Hardware orders (AGL-4038): every workspace's orders from the POS\n * hardware shop, newest first. In phase 1 a person places each one in the\n * Stripe Dashboard's Terminal hardware shop, then records Stripe's order id\n * and the tracking here and moves the order along; the merchant is emailed\n * as it ships and is delivered. Canceling or refunding returns the whole\n * payment and is offered only before the order ships.\n */\nexport function PosHardwareOrdersStaffPage(props: ConsoleStaffPageProps) {\n const { staffRole = null, staffPaths } = props\n const { data: user } = useUser()\n const { enqueueSnackbar } = useSnackbar()\n const { confirm } = useConfirmationContext()\n const [status, setStatus] = useState<StaffHardwareFilter>('paid')\n const [orders, setOrders] = useState<StaffHardwareOrderRow[] | null>(null)\n // The cursor that opens each page: `cursors[page]` is the `after` its\n // request carries, so Previous re-reads a page rather than keeping every\n // page read so far in memory.\n const [cursors, setCursors] = useState<Array<string | null>>([null])\n const [page, setPage] = useState(0)\n const [nextPage, setNextPage] = useState<string | null>(null)\n const [pageSize, setPageSize] = useState(25)\n const [error, setError] = useState<string | null>(null)\n const [open, setOpen] = useState<StaffHardwareOrderRow | null>(null)\n const [busy, setBusy] = useState(false)\n const [form, setForm] = useState({ stripeHardwareOrderId: '', carrier: '', number: '', url: '' })\n /** The note for declining a return request, while its dialog is open. */\n const [declineNote, setDeclineNote] = useState<string | null>(null)\n /**\n * The cancel or refund being confirmed, and whether to email the buyer\n * about it (AGL-4038): on unless staff turn it off.\n */\n const [returning, setReturning] = useState<{\n action: 'cancel' | 'refund' | 'refund-return'\n notifyBuyer: boolean\n /** An online return's restocking fee, in dollars as typed (AGL-4038). */\n restockingFee?: string\n } | null>(null)\n const gate = resolveStaffRoleGate(staffRole, WRITE_ROLES)\n const uid = user?.uid ?? ''\n\n const load = useCallback(async (targetPage = 0, after: string | null = null) => {\n if (!user) return\n setError(null)\n try {\n const answer = await staffHardwareOrders(user, status, after)\n setOrders(answer.orders)\n setPage(targetPage)\n setNextPage(answer.next)\n setPageSize(answer.pageSize)\n setCursors((existing) => {\n const kept = existing.slice(0, targetPage + 1)\n return answer.next ? [...kept, answer.next] : kept\n })\n } catch (caught) {\n setOrders([])\n setError(caught instanceof PosHardwareRequestError ? caught.message : 'Hardware orders could not be read')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [uid, status])\n\n useEffect(() => {\n void load()\n }, [load])\n\n const openOrder = (order: StaffHardwareOrderRow) => {\n setOpen(order)\n setForm({\n stripeHardwareOrderId: order.stripeHardwareOrderId ?? '',\n carrier: order.tracking?.carrier ?? '',\n number: order.tracking?.number ?? '',\n url: order.tracking?.url ?? '',\n })\n }\n\n const act = async (\n body: Omit<Parameters<typeof staffHardwareOrderAction>[1], 'orgId' | 'orderId'>,\n done: string | ((answer: Awaited<ReturnType<typeof staffHardwareOrderAction>>) => string),\n ) => {\n if (!user || !open) return\n setBusy(true)\n try {\n const answer = await staffHardwareOrderAction(user, { ...body, orgId: open.orgId, orderId: open.id })\n setOpen(answer.order)\n enqueueSnackbar(typeof done === 'string' ? done : done(answer), { variant: 'success', persist: false })\n await load(page, cursors[page] ?? null)\n } catch (caught) {\n enqueueSnackbar(\n caught instanceof PosHardwareRequestError ? caught.message : 'The order could not be changed',\n { variant: 'warning', persist: false },\n )\n } finally {\n setBusy(false)\n }\n }\n\n const formTracking = () =>\n form.carrier.trim() && form.number.trim()\n ? { carrier: form.carrier.trim(), number: form.number.trim(), ...(form.url.trim() ? { url: form.url.trim() } : {}) }\n : undefined\n\n const save = (advance?: PosHardwareOrderStatus) => {\n const tracking = formTracking()\n void act(\n {\n action: 'update',\n stripeHardwareOrderId: form.stripeHardwareOrderId.trim() || null,\n ...(tracking ? { tracking } : {}),\n ...(advance ? { status: advance } : {}),\n },\n advance ? `Marked ${POS_HARDWARE_STAFF_STATUS_LABELS[advance].toLowerCase()}` : 'Saved',\n )\n }\n\n const forgetBuyer = async () => {\n if (!open) return\n const confirmed = await confirm({\n title: \"Remove the buyer's details?\",\n description:\n 'The address and account are taken off this order for good. The order, its amounts and where it was taxed stay.',\n confirmationText: 'Remove',\n confirmationButtonProps: { color: 'error' },\n })\n .then(() => true)\n .catch(() => false)\n if (confirmed) await act({ action: 'forget-buyer' }, \"Buyer's details removed\")\n }\n\n const declineReturn = async () => {\n if (!open || declineNote === null) return\n await act({ action: 'decline-return', note: declineNote.trim() }, 'Return request declined')\n setDeclineNote(null)\n }\n\n /** Opens the confirm for a cancel or a refund, emailing the buyer by default. */\n const returnMoney = (action: 'cancel' | 'refund' | 'refund-return') => {\n if (open) setReturning({ action, notifyBuyer: true, ...(action === 'refund-return' ? { restockingFee: '' } : {}) })\n }\n\n const confirmReturn = async () => {\n if (!open || !returning) return\n const { action, notifyBuyer } = returning\n const verb = action === 'cancel' && open.source !== 'in_person' ? 'Canceled and refunded' : 'Refunded'\n const restockingFeeCents = action === 'refund-return' ? centsOf(returning.restockingFee ?? '') : undefined\n if (restockingFeeCents === null) return\n await act({ action, notifyBuyer, ...(restockingFeeCents ? { restockingFeeCents } : {}) }, ({ buyerEmail }) =>\n buyerEmail === 'sent'\n ? `${verb}. The buyer was emailed.`\n : buyerEmail === 'already'\n ? `${verb}. The buyer had already been emailed.`\n : buyerEmail === 'skipped'\n ? `${verb}. The buyer has no address to email.`\n : buyerEmail === 'failed'\n ? `${verb}. The email to the buyer did not send; press again to retry it.`\n : `${verb}. The buyer was not emailed.`,\n )\n setReturning(null)\n }\n\n const columns = useMemo<GridColDef[]>(\n () => [\n { field: 'number', headerName: 'Order', minWidth: 110 },\n {\n field: 'source',\n headerName: 'Sold',\n minWidth: 110,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) =>\n row.source === 'in_person' ? (row.attachment?.state === 'pending' ? 'In person · to attach' : 'In person') : 'Online',\n },\n {\n field: 'createdAtMs',\n headerName: 'Placed',\n type: 'number',\n minWidth: 170,\n align: 'left',\n headerAlign: 'left',\n valueFormatter: (value: number) => when(value),\n },\n {\n field: 'orgId',\n headerName: 'Workspace',\n minWidth: 160,\n renderCell: ({ row }: { row: StaffHardwareOrderRow }) => {\n const href = staffPaths?.orgDetail(row.orgId)\n return href ? (\n <Link href={href} onClick={(event) => event.stopPropagation()}>\n {row.orgId}\n </Link>\n ) : (\n row.orgId\n )\n },\n },\n {\n field: 'items',\n headerName: 'Items',\n flex: 1,\n minWidth: 200,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) =>\n row.lines.map((line) => `${line.quantity} × ${line.name}`).join(', '),\n },\n {\n field: 'totalCents',\n headerName: 'Total',\n type: 'number',\n minWidth: 100,\n valueFormatter: (value: number) => formatPosHardwareCents(value),\n },\n {\n field: 'shippingMethod',\n headerName: 'Shipping',\n minWidth: 140,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) => row.shipping?.label ?? '',\n },\n {\n field: 'status',\n headerName: 'Status',\n minWidth: 160,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) => POS_HARDWARE_STAFF_STATUS_LABELS[row.status],\n renderCell: ({ row }: { row: StaffHardwareOrderRow }) => (\n <Chip\n size=\"small\"\n color={POS_HARDWARE_STATUS_COLOR[row.status]}\n label={POS_HARDWARE_STAFF_STATUS_LABELS[row.status] + (row.livemode ? '' : ' · test')}\n />\n ),\n },\n {\n field: 'stripeHardwareOrderId',\n headerName: 'Stripe order',\n minWidth: 150,\n valueGetter: (value: string | null) => value ?? '',\n },\n {\n field: 'tracking',\n headerName: 'Tracking',\n minWidth: 160,\n valueGetter: (_value: unknown, row: StaffHardwareOrderRow) => row.tracking?.number ?? '',\n },\n ],\n [staffPaths],\n )\n\n const inPerson = open?.source === 'in_person'\n const next = open ? nextPosHardwareStatus(open.status) : null\n const closed = open ? open.status === 'canceled' || open.status === 'refunded' : true\n // A reader sold in person refunds what is left of it, its own way, until\n // it is refunded in full (AGL-4038).\n const refundable = open\n ? inPerson\n ? open.status !== 'refunded' && open.status !== 'canceled' && open.refundedCents < open.totalCents\n : posHardwareRefundable(open.status) && !open.refundPending\n : false\n const returnRequested = open?.returnRequest?.state === 'requested'\n // An online order sent back after its return was requested (AGL-4038):\n // refunded as a return, the items and their tax less any restocking fee.\n const onlineReturn =\n Boolean(open) && !inPerson && returnRequested && ['shipped', 'delivered', 'registered'].includes(String(open?.status))\n const returnCents = open ? Math.max(0, open.totalCents - (open.shipping?.cents ?? 0)) : 0\n const writeReason = gate.blocked ? gate.reason : undefined\n\n return (\n <CardDisplay\n header={'Hardware orders'}\n help={pluginDocsHelp('posHardware', { anchor: '#hardware-purchase-records' })}\n subheader={'Card readers bought from the POS hardware shop'}\n HeaderProps={{\n action: (\n <TextField\n select\n size=\"small\"\n label=\"Status\"\n value={status}\n onChange={(event) => setStatus(event.target.value as StaffHardwareFilter)}\n >\n <MenuItem value=\"\">{'All'}</MenuItem>\n <MenuItem value=\"to-attach\">{'Sold in person, to attach'}</MenuItem>\n <MenuItem value=\"returns\">{'Return requested'}</MenuItem>\n {POS_HARDWARE_ORDER_STATUSES.map((value) => (\n <MenuItem key={value} value={value}>\n {POS_HARDWARE_STAFF_STATUS_LABELS[value]}\n </MenuItem>\n ))}\n </TextField>\n ),\n }}\n contentGutterX\n contentGutterY\n >\n <Stack spacing={2}>\n {error ? <Alert severity=\"error\">{error}</Alert> : null}\n {orders && orders.length === 0 && !error ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {status === 'to-attach'\n ? 'Every card reader sold in person is attached to a workspace.'\n : status === 'returns'\n ? 'No return requests are waiting.'\n : status\n ? `No orders are ${POS_HARDWARE_STAFF_STATUS_LABELS[status].toLowerCase()}.`\n : 'No hardware orders yet.'}\n </Typography>\n ) : (\n <ListTable\n rows={(orders ?? []).map((order) => ({ ...order, $id: order.id }))}\n columns={columns}\n loading={orders === null}\n hideFooter\n onOpen={(_id, row) => openOrder(row as StaffHardwareOrderRow)}\n />\n )}\n {orders && (orders.length || page > 0) ? (\n <ListPagination\n page={page}\n pageSize={pageSize}\n rowCount={orders.length}\n hasMore={Boolean(nextPage)}\n onPageChange={(target) => void load(target, cursors[target] ?? null)}\n />\n ) : null}\n </Stack>\n\n <Dialog open={Boolean(open)} onClose={() => setOpen(null)} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{open ? `Hardware order ${open.number}` : ''}</DialogTitle>\n {open ? (\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {inPerson ? (\n <Stack spacing={0.5} sx={{ mt: 1 }}>\n <Typography variant=\"subtitle2\">{'Sold in person'}</Typography>\n {open.lines.map((line) => (\n <Typography key={line.sku} variant=\"body2\">\n {`${line.quantity} × ${line.name}`}\n </Typography>\n ))}\n <Typography variant=\"body2\" color=\"text.secondary\">\n {[\n open.posSale?.number ? `Register sale #${open.posSale.number}` : 'Register sale',\n open.posSale?.kiosk ? 'at the kiosk' : null,\n open.posSale?.offline ? 'rung offline' : null,\n `paid ${formatPosHardwareCents(open.totalCents)}`,\n open.paidTo?.tenders.length\n ? `by ${open.paidTo.tenders.map((tender) => TENDER_LABELS[tender] ?? tender).join(' and ')}`\n : null,\n ]\n .filter(Boolean)\n .join(' · ')}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`Into the store's own account${open.paidTo?.stripeAccountId ? ` (${open.paidTo.stripeAccountId})` : ''}, not the platform's.`}\n </Typography>\n <Typography variant=\"body2\">{attachedTo(open)}</Typography>\n {open.attachment?.state === 'pending' ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Attach it from the selling store’s register, under To attach, with the buyer’s email, name or workspace.'}\n </Typography>\n ) : null}\n {open.refundedCents ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`Refunded ${formatPosHardwareCents(open.refundedCents)}${open.refunds.some((refund) => refund.via === 'register') ? ', partly as a return at the register' : ''}`}\n </Typography>\n ) : null}\n {open.returnRequest ? (\n <Alert severity={returnRequested ? 'warning' : 'info'}>\n {returnRequested\n ? `Return requested ${when(open.returnRequest.requestedAtMs)}: “${open.returnRequest.reason ?? ''}”. Refund it, or decline it with a note.`\n : `Return request ${open.returnRequest.state}${open.returnRequest.note ? `: ${open.returnRequest.note}` : ''}.`}\n </Alert>\n ) : null}\n {open.contactEmail ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {open.contactEmail}\n </Typography>\n ) : null}\n </Stack>\n ) : null}\n {inPerson ? null : (\n <>\n <Stack spacing={0.5} sx={{ mt: 1 }}>\n <Typography variant=\"subtitle2\">{'Order in the Stripe hardware shop'}</Typography>\n {open.lines.map((line) => (\n <Typography key={line.sku} variant=\"body2\">\n {`${line.quantity} × ${posHardwareSku(line.sku)?.stripeProductName ?? line.name}`}\n </Typography>\n ))}\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`${open.shipping?.label ?? 'Shipping'} · paid ${formatPosHardwareCents(open.totalCents)}`}\n </Typography>\n </Stack>\n <Stack spacing={0.5}>\n <Typography variant=\"subtitle2\">{'Ship to'}</Typography>\n <Typography variant=\"body2\" sx={{ whiteSpace: 'pre-line' }}>\n {shipTo(open)}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {[open.shipping?.phone, open.contactEmail].filter(Boolean).join(' · ')}\n </Typography>\n </Stack>\n <TextField\n label=\"Stripe hardware order id\"\n value={form.stripeHardwareOrderId}\n disabled={closed}\n onChange={(event) => setForm({ ...form, stripeHardwareOrderId: event.target.value })}\n />\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>\n <TextField\n label=\"Carrier\"\n value={form.carrier}\n disabled={closed}\n onChange={(event) => setForm({ ...form, carrier: event.target.value })}\n />\n <TextField\n label=\"Tracking number\"\n value={form.number}\n disabled={closed}\n onChange={(event) => setForm({ ...form, number: event.target.value })}\n sx={{ flex: 1 }}\n />\n </Stack>\n <TextField\n label=\"Tracking link (optional)\"\n helperText=\"Built from the carrier when left empty\"\n value={form.url}\n disabled={closed}\n onChange={(event) => setForm({ ...form, url: event.target.value })}\n />\n </>\n )}\n {open.refundPending ? <Alert severity=\"warning\">{'A refund is in progress.'}</Alert> : null}\n </DialogContent>\n ) : null}\n <DialogActions sx={{ flexWrap: 'wrap', gap: 1 }}>\n {returnRequested ? (\n <Guarded reason={writeReason}>\n <Button disabled={busy} onClick={() => setDeclineNote('')}>\n {'Decline return'}\n </Button>\n </Guarded>\n ) : null}\n {inPerson && (open?.contactEmail || open?.attachment?.email || open?.attachment?.uid) ? (\n <Guarded reason={writeReason}>\n <Button color=\"error\" disabled={busy} onClick={() => void forgetBuyer()}>\n {\"Remove buyer's details\"}\n </Button>\n </Guarded>\n ) : null}\n {inPerson ? null : (\n <Guarded reason={writeReason ?? (refundable ? undefined : NOT_REFUNDABLE)}>\n <Button color=\"error\" disabled={busy} onClick={() => void returnMoney('cancel')}>\n {'Cancel and refund'}\n </Button>\n </Guarded>\n )}\n {onlineReturn ? (\n <Guarded reason={writeReason ?? (open?.refundPending ? 'A refund is in progress.' : undefined)}>\n <Button color=\"error\" disabled={busy} onClick={() => void returnMoney('refund-return')}>\n {'Refund return'}\n </Button>\n </Guarded>\n ) : (\n <Guarded reason={writeReason ?? (refundable ? undefined : inPerson ? REFUNDED : NOT_REFUNDABLE)}>\n <Button color=\"error\" disabled={busy} onClick={() => void returnMoney('refund')}>\n {'Refund'}\n </Button>\n </Guarded>\n )}\n <Button onClick={() => setOpen(null)}>{'Close'}</Button>\n <Guarded reason={writeReason ?? (closed ? CLOSED : undefined)}>\n <Button disabled={busy} onClick={() => save()}>\n {'Save'}\n </Button>\n </Guarded>\n {next ? (\n <Guarded\n reason={\n writeReason ??\n (next === 'shipped' && !form.number.trim() ? 'Add the tracking number first.' : undefined)\n }\n >\n <Button variant=\"contained\" disabled={busy} onClick={() => save(next)}>\n {`Mark ${POS_HARDWARE_STAFF_STATUS_LABELS[next].toLowerCase()}`}\n </Button>\n </Guarded>\n ) : null}\n </DialogActions>\n </Dialog>\n\n {/*\n CANCEL OR REFUND, CONFIRMED (AGL-4038): what goes back and where, and\n whether to email the buyer — on by default, off sends nothing. The\n email is the same one a workspace or account closure sends, and the\n buyer gets it once whichever sends it first.\n */}\n <Dialog open={returning !== null} onClose={() => setReturning(null)} maxWidth=\"xs\" fullWidth>\n <DialogTitle>\n {returning?.action === 'cancel' && open?.source !== 'in_person' ? 'Cancel and refund this order?' : 'Refund this order?'}\n </DialogTitle>\n <DialogContent>\n <Stack spacing={2}>\n <DialogContentText>\n {returning?.action === 'refund-return' && open\n ? `${formatPosHardwareCents(Math.max(0, returnCents - (centsOf(returning.restockingFee ?? '') ?? 0)))} goes back to the card it was paid with: the items and their tax. The original shipping is not refunded, and a restocking fee Stripe charged for the return comes off.`\n : open?.source === 'in_person'\n ? `${formatPosHardwareCents(open.totalCents - open.refundedCents)} goes back to the card the register sale was paid with, from the selling store's own account. Under the hardware terms of sale the buyer sends the reader back at their cost.`\n : open\n ? `${formatPosHardwareCents(open.totalCents)} goes back to the card it was paid with. Cancel the order in the Stripe Dashboard too if it was already placed there.`\n : ''}\n </DialogContentText>\n {returning?.action === 'refund-return' ? (\n <TextField\n label=\"Restocking fee Stripe charged (optional)\"\n value={returning.restockingFee ?? ''}\n onChange={(event) =>\n setReturning((current) => (current ? { ...current, restockingFee: event.target.value } : current))\n }\n error={centsOf(returning.restockingFee ?? '') === null}\n helperText={centsOf(returning.restockingFee ?? '') === null ? 'Enter an amount like 15.00, or leave it empty.' : 'In dollars. Leave it empty when Stripe charged none.'}\n slotProps={{ htmlInput: { inputMode: 'decimal' } }}\n />\n ) : null}\n <Stack>\n <FormControlLabel\n control={\n <Switch\n checked={returning?.notifyBuyer ?? true}\n onChange={(event) =>\n setReturning((current) => (current ? { ...current, notifyBuyer: event.target.checked } : current))\n }\n />\n }\n label=\"Email the buyer\"\n />\n <FormHelperText>\n {returning?.action === 'refund-return'\n ? 'Sends the buyer the return refund email with what came back and what did not.'\n : open?.source === 'in_person'\n ? 'Sends the buyer the refund email with what came back to their card.'\n : 'Sends the buyer the canceled-and-refunded email. They get it once, even if their workspace or account later closes.'}\n </FormHelperText>\n </Stack>\n </Stack>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setReturning(null)}>{'Keep the order'}</Button>\n <Button\n color=\"error\"\n disabled={busy || (returning?.action === 'refund-return' && centsOf(returning.restockingFee ?? '') === null)}\n onClick={() => void confirmReturn()}\n >\n {returning?.action === 'cancel' && open?.source !== 'in_person'\n ? 'Cancel and refund'\n : returning?.action === 'refund-return'\n ? 'Refund return'\n : 'Refund'}\n </Button>\n </DialogActions>\n </Dialog>\n\n <Dialog open={declineNote !== null} onClose={() => setDeclineNote(null)} maxWidth=\"xs\" fullWidth>\n <DialogTitle>{'Decline this return?'}</DialogTitle>\n <DialogContent>\n <TextField\n label=\"Note for the buyer (optional)\"\n value={declineNote ?? ''}\n onChange={(event) => setDeclineNote(event.target.value)}\n multiline\n minRows={2}\n fullWidth\n sx={{ mt: 1 }}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setDeclineNote(null)}>{'Keep it open'}</Button>\n <Button color=\"error\" disabled={busy} onClick={() => void declineReturn()}>\n {'Decline'}\n </Button>\n </DialogActions>\n </Dialog>\n </CardDisplay>\n )\n}\nPosHardwareOrdersStaffPage.displayName = 'PosHardwareOrdersStaffPage'\n\nexport default PosHardwareOrdersStaffPage\n"],"names":["pluginDocsHelp","resolveStaffRoleGate","CardDisplay","useConfirmationContext","BlockedControl","ListPagination","ListTable","useSnackbar","useUser","Alert","Button","Chip","Dialog","DialogActions","DialogContent","DialogContentText","DialogTitle","FormControlLabel","FormHelperText","Link","MenuItem","Stack","Switch","TextField","Typography","useCallback","useEffect","useMemo","useState","formatPosHardwareCents","nextPosHardwareStatus","POS_HARDWARE_ORDER_STATUSES","POS_HARDWARE_STAFF_STATUS_LABELS","posHardwareRefundable","posHardwareSku","POS_HARDWARE_STATUS_COLOR","PosHardwareRequestError","staffHardwareOrderAction","staffHardwareOrders","WRITE_ROLES","NOT_REFUNDABLE","centsOf","text","trimmed","trim","replace","test","Math","round","Number","CLOSED","REFUNDED","Guarded","props","blocked","Boolean","reason","children","when","ms","Date","toLocaleString","TENDER_LABELS","cash","card_present","card_keyed","card_link","gift_card","folio","credit","attachedTo","order","attachment","state","orgId","uid","email","shipTo","address","shipping","region","taxRegion","postalCode","filter","join","country","name","line1","line2","city","PosHardwareOrdersStaffPage","open","returning","staffRole","staffPaths","data","user","enqueueSnackbar","confirm","status","setStatus","orders","setOrders","cursors","setCursors","page","setPage","nextPage","setNextPage","pageSize","setPageSize","error","setError","setOpen","busy","setBusy","form","setForm","stripeHardwareOrderId","carrier","number","url","declineNote","setDeclineNote","setReturning","gate","load","targetPage","after","answer","next","existing","kept","slice","caught","message","openOrder","tracking","act","body","done","orderId","id","variant","persist","formTracking","undefined","save","advance","action","toLowerCase","forgetBuyer","confirmed","title","description","confirmationText","confirmationButtonProps","color","then","catch","declineReturn","note","returnMoney","notifyBuyer","restockingFee","confirmReturn","verb","source","restockingFeeCents","buyerEmail","columns","field","headerName","minWidth","valueGetter","_value","row","type","align","headerAlign","valueFormatter","value","renderCell","href","orgDetail","onClick","event","stopPropagation","flex","lines","map","line","quantity","label","size","livemode","inPerson","closed","refundable","refundedCents","totalCents","refundPending","returnRequested","returnRequest","onlineReturn","includes","String","returnCents","max","cents","writeReason","header","help","anchor","subheader","HeaderProps","select","onChange","target","contentGutterX","contentGutterY","spacing","severity","length","rows","$id","loading","hideFooter","onOpen","_id","rowCount","hasMore","onPageChange","onClose","maxWidth","fullWidth","sx","display","flexDirection","gap","mt","sku","posSale","kiosk","offline","paidTo","tenders","tender","stripeAccountId","refunds","some","refund","via","requestedAtMs","contactEmail","stripeProductName","whiteSpace","phone","disabled","direction","xs","sm","helperText","flexWrap","current","slotProps","htmlInput","inputMode","control","checked","multiline","minRows","displayName"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { ConsolePublicPageProps } from '@aglyn/aglyn';
18
+ /** How long the thank-you shows before the display goes back to the register. */
19
+ export declare const POS_HARDWARE_TERMS_DONE_MS = 4000;
20
+ /** Leaves for the display's own screen; an object so a spec can watch it. */
21
+ export declare const posHardwareTermsNavigation: {
22
+ leave(path: string): void;
23
+ };
24
+ /**
25
+ * `/kiosk/commerce/hardware-terms` (AGL-4038): the terms of sale for a card
26
+ * reader sold at the platform's register, on the register's customer
27
+ * display, where the register put them through core's display seam. The
28
+ * buyer reads the summary, ticks the box and accepts before paying; the
29
+ * display then goes back to the register's own screen. The display's own
30
+ * token is the only key, and the route answers only for the sale the
31
+ * register is showing on this display.
32
+ */
33
+ export declare function PosHardwareTermsPage(_props: ConsolePublicPageProps): import("react").JSX.Element;
34
+ export default PosHardwareTermsPage;
@@ -0,0 +1,257 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ 'use client';
17
+ import { _ as _extends } from "@swc/helpers/_/_extends";
18
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
19
+ import { customerDisplayReturnPath } from "@aglyn/aglyn/plugin-manager/plugin-customer-display";
20
+ import { Alert, Box, Button, Checkbox, CircularProgress, Container, FormControlLabel, Stack, Typography } from "@mui/material";
21
+ import { useCallback, useEffect, useState } from "react";
22
+ import { POS_DISPLAY_ENDPOINT, POS_DISPLAY_TOKEN_HEADER, readStoredToken } from "./pos-display/pos-display-api.js";
23
+ /** How long the thank-you shows before the display goes back to the register. */ export const POS_HARDWARE_TERMS_DONE_MS = 4000;
24
+ /** Leaves for the display's own screen; an object so a spec can watch it. */ export const posHardwareTermsNavigation = {
25
+ leave (path) {
26
+ window.location.replace(path);
27
+ }
28
+ };
29
+ async function displayCall(body) {
30
+ const token = readStoredToken();
31
+ try {
32
+ var _ref;
33
+ const response = await fetch(POS_DISPLAY_ENDPOINT, {
34
+ method: 'POST',
35
+ headers: _extends({
36
+ 'Content-Type': 'application/json'
37
+ }, token ? {
38
+ [POS_DISPLAY_TOKEN_HEADER]: token
39
+ } : {}),
40
+ cache: 'no-store',
41
+ body: JSON.stringify(body)
42
+ });
43
+ const payload = await response.json().catch(()=>null);
44
+ return response.ok ? {
45
+ ok: true,
46
+ status: response.status,
47
+ value: payload != null ? payload : {}
48
+ } : {
49
+ ok: false,
50
+ status: response.status,
51
+ error: String((_ref = payload == null ? void 0 : payload['error']) != null ? _ref : 'Something went wrong. Try again.')
52
+ };
53
+ } catch (unused) {
54
+ return {
55
+ ok: false,
56
+ status: 0,
57
+ error: 'No connection. Try again.'
58
+ };
59
+ }
60
+ }
61
+ /**
62
+ * `/kiosk/commerce/hardware-terms` (AGL-4038): the terms of sale for a card
63
+ * reader sold at the platform's register, on the register's customer
64
+ * display, where the register put them through core's display seam. The
65
+ * buyer reads the summary, ticks the box and accepts before paying; the
66
+ * display then goes back to the register's own screen. The display's own
67
+ * token is the only key, and the route answers only for the sale the
68
+ * register is showing on this display.
69
+ */ export function PosHardwareTermsPage(_props) {
70
+ var _ref;
71
+ const [params, setParams] = useState(null);
72
+ const [terms, setTerms] = useState(null);
73
+ const [error, setError] = useState(null);
74
+ const [agreed, setAgreed] = useState(false);
75
+ const [busy, setBusy] = useState(false);
76
+ const [done, setDone] = useState(false);
77
+ useEffect(()=>{
78
+ var _get;
79
+ const search = window.location.search;
80
+ setParams({
81
+ order: (_get = new URLSearchParams(search).get('order')) != null ? _get : '',
82
+ returnTo: customerDisplayReturnPath(search)
83
+ });
84
+ }, []);
85
+ const returnTo = (_ref = params == null ? void 0 : params.returnTo) != null ? _ref : null;
86
+ const back = useCallback(()=>{
87
+ if (returnTo) posHardwareTermsNavigation.leave(returnTo);
88
+ }, [
89
+ returnTo
90
+ ]);
91
+ useEffect(()=>{
92
+ if (!(params == null ? void 0 : params.order)) return undefined;
93
+ let live = true;
94
+ void displayCall({
95
+ action: 'hardware-terms',
96
+ order: params.order
97
+ }).then((answer)=>{
98
+ var _answer_error;
99
+ if (!live) return;
100
+ if (answer.ok && answer.value) setTerms(answer.value);
101
+ else if (answer.status === 409 || answer.status === 401) back();
102
+ else setError((_answer_error = answer.error) != null ? _answer_error : 'The terms could not be shown.');
103
+ });
104
+ return ()=>{
105
+ live = false;
106
+ };
107
+ }, [
108
+ params,
109
+ back
110
+ ]);
111
+ useEffect(()=>{
112
+ if (!done) return undefined;
113
+ const timer = window.setTimeout(back, POS_HARDWARE_TERMS_DONE_MS);
114
+ return ()=>window.clearTimeout(timer);
115
+ }, [
116
+ done,
117
+ back
118
+ ]);
119
+ const accept = async ()=>{
120
+ var _answer_error;
121
+ if (!(params == null ? void 0 : params.order)) return;
122
+ setBusy(true);
123
+ const answer = await displayCall({
124
+ action: 'accept-hardware-terms',
125
+ order: params.order,
126
+ accept: true
127
+ });
128
+ setBusy(false);
129
+ if (answer.ok) setDone(true);
130
+ else if (answer.status === 409) back();
131
+ else setError((_answer_error = answer.error) != null ? _answer_error : 'That did not go through. Try again.');
132
+ };
133
+ return /*#__PURE__*/ _jsx(Box, {
134
+ sx: {
135
+ minHeight: '100dvh',
136
+ bgcolor: 'background.default',
137
+ py: {
138
+ xs: 2,
139
+ sm: 4
140
+ }
141
+ },
142
+ children: /*#__PURE__*/ _jsx(Container, {
143
+ maxWidth: "sm",
144
+ children: done ? /*#__PURE__*/ _jsxs(Stack, {
145
+ spacing: 2,
146
+ sx: {
147
+ alignItems: 'center',
148
+ textAlign: 'center',
149
+ py: 6
150
+ },
151
+ children: [
152
+ /*#__PURE__*/ _jsx(Typography, {
153
+ variant: "h5",
154
+ children: 'Thank you'
155
+ }),
156
+ /*#__PURE__*/ _jsx(Typography, {
157
+ variant: "body1",
158
+ children: 'You accepted the terms of sale. The cashier will take your payment.'
159
+ })
160
+ ]
161
+ }) : error ? /*#__PURE__*/ _jsxs(Stack, {
162
+ spacing: 2,
163
+ children: [
164
+ /*#__PURE__*/ _jsx(Alert, {
165
+ severity: "warning",
166
+ children: error
167
+ }),
168
+ returnTo ? /*#__PURE__*/ _jsx("div", {
169
+ children: /*#__PURE__*/ _jsx(Button, {
170
+ onClick: back,
171
+ children: 'Back'
172
+ })
173
+ }) : null
174
+ ]
175
+ }) : !terms ? /*#__PURE__*/ _jsx(Stack, {
176
+ sx: {
177
+ alignItems: 'center',
178
+ py: 6
179
+ },
180
+ children: /*#__PURE__*/ _jsx(CircularProgress, {
181
+ "aria-label": "Loading the terms of sale"
182
+ })
183
+ }) : /*#__PURE__*/ _jsxs(Stack, {
184
+ spacing: 2,
185
+ children: [
186
+ /*#__PURE__*/ _jsx(Typography, {
187
+ variant: "h5",
188
+ component: "h1",
189
+ children: 'Terms of sale for your card reader hardware'
190
+ }),
191
+ terms.items.length ? /*#__PURE__*/ _jsx(Typography, {
192
+ variant: "body2",
193
+ color: "text.secondary",
194
+ children: terms.items.join(' · ')
195
+ }) : null,
196
+ /*#__PURE__*/ _jsx(Typography, {
197
+ variant: "body1",
198
+ children: `This purchase is made under our Terms, Sections ${terms.sections}. In short:`
199
+ }),
200
+ /*#__PURE__*/ _jsx(Box, {
201
+ component: "ul",
202
+ sx: {
203
+ m: 0,
204
+ pl: 3,
205
+ display: 'flex',
206
+ flexDirection: 'column',
207
+ gap: 1
208
+ },
209
+ children: terms.summary.map((line)=>/*#__PURE__*/ _jsx(Typography, {
210
+ component: "li",
211
+ variant: "body2",
212
+ children: line
213
+ }, line))
214
+ }),
215
+ /*#__PURE__*/ _jsx(Typography, {
216
+ variant: "body2",
217
+ color: "text.secondary",
218
+ children: `The full Terms are at ${terms.url.replace(/^https?:\/\//, '')}.`
219
+ }),
220
+ terms.acceptance && terms.acceptance.method !== 'notice' ? /*#__PURE__*/ _jsx(Alert, {
221
+ severity: "success",
222
+ children: 'You have already accepted these terms for this purchase.'
223
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
224
+ children: [
225
+ /*#__PURE__*/ _jsx(FormControlLabel, {
226
+ control: /*#__PURE__*/ _jsx(Checkbox, {
227
+ checked: agreed,
228
+ onChange: (event)=>setAgreed(event.target.checked)
229
+ }),
230
+ label: `I have read the terms of sale (Sections ${terms.sections}) and accept them for this purchase.`
231
+ }),
232
+ /*#__PURE__*/ _jsxs(Stack, {
233
+ direction: "row",
234
+ spacing: 1,
235
+ children: [
236
+ returnTo ? /*#__PURE__*/ _jsx(Button, {
237
+ onClick: back,
238
+ children: 'Not now'
239
+ }) : null,
240
+ /*#__PURE__*/ _jsx(Button, {
241
+ variant: "contained",
242
+ disabled: !agreed || busy,
243
+ onClick: ()=>void accept(),
244
+ children: 'Accept'
245
+ })
246
+ ]
247
+ })
248
+ ]
249
+ })
250
+ ]
251
+ })
252
+ })
253
+ });
254
+ }
255
+ export default PosHardwareTermsPage;
256
+
257
+ //# sourceMappingURL=pos-hardware-terms-page.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos-hardware-terms-page.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\nimport type { ConsolePublicPageProps } from '@aglyn/aglyn'\nimport { customerDisplayReturnPath } from '@aglyn/aglyn/plugin-manager/plugin-customer-display'\nimport {\n Alert,\n Box,\n Button,\n Checkbox,\n CircularProgress,\n Container,\n FormControlLabel,\n Stack,\n Typography,\n} from '@mui/material'\nimport { useCallback, useEffect, useState } from 'react'\nimport { POS_DISPLAY_ENDPOINT, POS_DISPLAY_TOKEN_HEADER, readStoredToken } from './pos-display/pos-display-api'\n\n/** What the display is shown: the terms of sale, and the sale they are for. */\ninterface TermsAnswer {\n version: string\n sections: string\n url: string\n summary: string[]\n items: string[]\n acceptance: { method: string; atMs: number } | null\n}\n\n/** How long the thank-you shows before the display goes back to the register. */\nexport const POS_HARDWARE_TERMS_DONE_MS = 4_000\n\n/** Leaves for the display's own screen; an object so a spec can watch it. */\nexport const posHardwareTermsNavigation = {\n leave(path: string): void {\n window.location.replace(path)\n },\n}\n\nasync function displayCall<T>(body: Record<string, unknown>): Promise<{ ok: boolean; status: number; value?: T; error?: string }> {\n const token = readStoredToken()\n try {\n const response = await fetch(POS_DISPLAY_ENDPOINT, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(token ? { [POS_DISPLAY_TOKEN_HEADER]: token } : {}) },\n cache: 'no-store',\n body: JSON.stringify(body),\n })\n const payload = (await response.json().catch(() => null)) as Record<string, unknown> | null\n return response.ok\n ? { ok: true, status: response.status, value: (payload ?? {}) as T }\n : { ok: false, status: response.status, error: String(payload?.['error'] ?? 'Something went wrong. Try again.') }\n } catch {\n return { ok: false, status: 0, error: 'No connection. Try again.' }\n }\n}\n\n/**\n * `/kiosk/commerce/hardware-terms` (AGL-4038): the terms of sale for a card\n * reader sold at the platform's register, on the register's customer\n * display, where the register put them through core's display seam. The\n * buyer reads the summary, ticks the box and accepts before paying; the\n * display then goes back to the register's own screen. The display's own\n * token is the only key, and the route answers only for the sale the\n * register is showing on this display.\n */\nexport function PosHardwareTermsPage(_props: ConsolePublicPageProps) {\n const [params, setParams] = useState<{ order: string; returnTo: string | null } | null>(null)\n const [terms, setTerms] = useState<TermsAnswer | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [agreed, setAgreed] = useState(false)\n const [busy, setBusy] = useState(false)\n const [done, setDone] = useState(false)\n\n useEffect(() => {\n const search = window.location.search\n setParams({ order: new URLSearchParams(search).get('order') ?? '', returnTo: customerDisplayReturnPath(search) })\n }, [])\n const returnTo = params?.returnTo ?? null\n const back = useCallback(() => {\n if (returnTo) posHardwareTermsNavigation.leave(returnTo)\n }, [returnTo])\n\n useEffect(() => {\n if (!params?.order) return undefined\n let live = true\n void displayCall<TermsAnswer>({ action: 'hardware-terms', order: params.order }).then((answer) => {\n if (!live) return\n if (answer.ok && answer.value) setTerms(answer.value)\n // The register moved on, or this display is not the one: go back.\n else if (answer.status === 409 || answer.status === 401) back()\n else setError(answer.error ?? 'The terms could not be shown.')\n })\n return () => {\n live = false\n }\n }, [params, back])\n\n useEffect(() => {\n if (!done) return undefined\n const timer = window.setTimeout(back, POS_HARDWARE_TERMS_DONE_MS)\n return () => window.clearTimeout(timer)\n }, [done, back])\n\n const accept = async () => {\n if (!params?.order) return\n setBusy(true)\n const answer = await displayCall({ action: 'accept-hardware-terms', order: params.order, accept: true })\n setBusy(false)\n if (answer.ok) setDone(true)\n else if (answer.status === 409) back()\n else setError(answer.error ?? 'That did not go through. Try again.')\n }\n\n return (\n <Box sx={{ minHeight: '100dvh', bgcolor: 'background.default', py: { xs: 2, sm: 4 } }}>\n <Container maxWidth=\"sm\">\n {done ? (\n <Stack spacing={2} sx={{ alignItems: 'center', textAlign: 'center', py: 6 }}>\n <Typography variant=\"h5\">{'Thank you'}</Typography>\n <Typography variant=\"body1\">{'You accepted the terms of sale. The cashier will take your payment.'}</Typography>\n </Stack>\n ) : error ? (\n <Stack spacing={2}>\n <Alert severity=\"warning\">{error}</Alert>\n {returnTo ? (\n <div>\n <Button onClick={back}>{'Back'}</Button>\n </div>\n ) : null}\n </Stack>\n ) : !terms ? (\n <Stack sx={{ alignItems: 'center', py: 6 }}>\n <CircularProgress aria-label=\"Loading the terms of sale\" />\n </Stack>\n ) : (\n <Stack spacing={2}>\n <Typography variant=\"h5\" component=\"h1\">\n {'Terms of sale for your card reader hardware'}\n </Typography>\n {terms.items.length ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {terms.items.join(' · ')}\n </Typography>\n ) : null}\n <Typography variant=\"body1\">\n {`This purchase is made under our Terms, Sections ${terms.sections}. In short:`}\n </Typography>\n <Box component=\"ul\" sx={{ m: 0, pl: 3, display: 'flex', flexDirection: 'column', gap: 1 }}>\n {terms.summary.map((line) => (\n <Typography key={line} component=\"li\" variant=\"body2\">\n {line}\n </Typography>\n ))}\n </Box>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {`The full Terms are at ${terms.url.replace(/^https?:\\/\\//, '')}.`}\n </Typography>\n {terms.acceptance && terms.acceptance.method !== 'notice' ? (\n <Alert severity=\"success\">{'You have already accepted these terms for this purchase.'}</Alert>\n ) : (\n <>\n <FormControlLabel\n control={<Checkbox checked={agreed} onChange={(event) => setAgreed(event.target.checked)} />}\n label={`I have read the terms of sale (Sections ${terms.sections}) and accept them for this purchase.`}\n />\n <Stack direction=\"row\" spacing={1}>\n {returnTo ? <Button onClick={back}>{'Not now'}</Button> : null}\n <Button variant=\"contained\" disabled={!agreed || busy} onClick={() => void accept()}>\n {'Accept'}\n </Button>\n </Stack>\n </>\n )}\n </Stack>\n )}\n </Container>\n </Box>\n )\n}\n\nexport default PosHardwareTermsPage\n"],"names":["customerDisplayReturnPath","Alert","Box","Button","Checkbox","CircularProgress","Container","FormControlLabel","Stack","Typography","useCallback","useEffect","useState","POS_DISPLAY_ENDPOINT","POS_DISPLAY_TOKEN_HEADER","readStoredToken","POS_HARDWARE_TERMS_DONE_MS","posHardwareTermsNavigation","leave","path","window","location","replace","displayCall","body","token","response","fetch","method","headers","cache","JSON","stringify","payload","json","catch","ok","status","value","error","String","PosHardwareTermsPage","_props","params","setParams","terms","setTerms","setError","agreed","setAgreed","busy","setBusy","done","setDone","search","order","URLSearchParams","get","returnTo","back","undefined","live","action","then","answer","timer","setTimeout","clearTimeout","accept","sx","minHeight","bgcolor","py","xs","sm","maxWidth","spacing","alignItems","textAlign","variant","severity","div","onClick","aria-label","component","items","length","color","join","sections","m","pl","display","flexDirection","gap","summary","map","line","url","acceptance","control","checked","onChange","event","target","label","direction","disabled"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { ConsolePublicPageProps } from '@aglyn/aglyn';
18
+ /**
19
+ * `/kiosk/commerce/hardware-terms-sign` (AGL-4038): the sign that stands
20
+ * where the platform sells card readers in person, for when the buyer can't
21
+ * accept the terms of sale on a screen (Terms 4.28): which terms the sale is
22
+ * made under, where to read them, and that paying is agreeing. A public page
23
+ * with nothing on it but the published terms' address and summary, so the
24
+ * register opens it in a new tab and prints it. Only the sign prints.
25
+ */
26
+ export declare function PosHardwareTermsSignPage(_props: ConsolePublicPageProps): import("react").JSX.Element;
27
+ export default PosHardwareTermsSignPage;