@aglyn/plugins-commerce 1.0.0-beta.278 → 1.0.0-beta.283

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 (212) hide show
  1. package/package.json +17 -14
  2. package/src/lib/components/commerce-console-page.js +33 -1
  3. package/src/lib/components/commerce-console-page.js.map +1 -1
  4. package/src/lib/components/console/payments-settings-card.component.js +1 -1
  5. package/src/lib/components/console/payments-settings-card.component.js.map +1 -1
  6. package/src/lib/components/console/pos/pos-hardware-api.d.ts +122 -0
  7. package/src/lib/components/console/pos/pos-hardware-api.js +90 -0
  8. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -0
  9. package/src/lib/components/console/pos/pos-reader-splash-api.d.ts +58 -0
  10. package/src/lib/components/console/pos/pos-reader-splash-api.js +101 -0
  11. package/src/lib/components/console/pos/pos-reader-splash-api.js.map +1 -0
  12. package/src/lib/components/console/pos-devices-card.component.js +5 -0
  13. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  14. package/src/lib/components/console/pos-hardware-card.component.d.ts +26 -0
  15. package/src/lib/components/console/pos-hardware-card.component.js +456 -0
  16. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -0
  17. package/src/lib/components/console/pos-hardware-orders-staff-page.component.d.ts +14 -0
  18. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +519 -0
  19. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -0
  20. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.d.ts +27 -0
  21. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +444 -0
  22. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -0
  23. package/src/lib/components/console/pos-ops/pos-check-in-zone.component.d.ts +9 -0
  24. package/src/lib/components/console/pos-ops/pos-check-in-zone.component.js +37 -0
  25. package/src/lib/components/console/pos-ops/pos-check-in-zone.component.js.map +1 -0
  26. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +24 -0
  27. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +346 -0
  28. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -0
  29. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +5 -1
  30. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +83 -4
  31. package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -1
  32. package/src/lib/components/console/pos-ops/pos-day-totals-card.component.d.ts +35 -0
  33. package/src/lib/components/console/pos-ops/pos-day-totals-card.component.js +546 -0
  34. package/src/lib/components/console/pos-ops/pos-day-totals-card.component.js.map +1 -0
  35. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +2 -1
  36. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +20 -1
  37. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  38. package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +1 -1
  39. package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -1
  40. package/src/lib/components/console/pos-page.component.js +6 -3
  41. package/src/lib/components/console/pos-page.component.js.map +1 -1
  42. package/src/lib/components/console/pos-reader-splash-setting.component.d.ts +22 -0
  43. package/src/lib/components/console/pos-reader-splash-setting.component.js +275 -0
  44. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -0
  45. package/src/lib/components/console/pos-reader-splash-staff-page.component.d.ts +14 -0
  46. package/src/lib/components/console/pos-reader-splash-staff-page.component.js +301 -0
  47. package/src/lib/components/console/pos-reader-splash-staff-page.component.js.map +1 -0
  48. package/src/lib/components/console/pos-zones.d.ts +37 -3
  49. package/src/lib/components/console/pos-zones.js +11 -1
  50. package/src/lib/components/console/pos-zones.js.map +1 -1
  51. package/src/lib/components/console/product-check-in-fields.component.d.ts +20 -0
  52. package/src/lib/components/console/product-check-in-fields.component.js +172 -0
  53. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -0
  54. package/src/lib/components/console/product-editor-dialog.component.js +48 -9
  55. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  56. package/src/lib/components/console/product-register-fields.component.d.ts +12 -0
  57. package/src/lib/components/console/product-register-fields.component.js +39 -1
  58. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  59. package/src/lib/components/console/products-hub-card.component.js +21 -6
  60. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  61. package/src/lib/components/console/reservations-card.component.js +239 -70
  62. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  63. package/src/lib/components/reservation-widget.js +16 -0
  64. package/src/lib/components/reservation-widget.js.map +1 -1
  65. package/src/lib/constants/operator-alerts.d.ts +6 -0
  66. package/src/lib/constants/operator-alerts.js +20 -1
  67. package/src/lib/constants/operator-alerts.js.map +1 -1
  68. package/src/lib/declarations.console-server.js +7 -0
  69. package/src/lib/declarations.console-server.js.map +1 -1
  70. package/src/lib/declarations.d.ts +26 -0
  71. package/src/lib/declarations.js +34 -0
  72. package/src/lib/declarations.js.map +1 -0
  73. package/src/lib/model/commerce-check-in-product.d.ts +37 -0
  74. package/src/lib/model/commerce-check-in-product.js +49 -0
  75. package/src/lib/model/commerce-check-in-product.js.map +1 -0
  76. package/src/lib/model/commerce-check-in.d.ts +187 -0
  77. package/src/lib/model/commerce-check-in.js +468 -0
  78. package/src/lib/model/commerce-check-in.js.map +1 -0
  79. package/src/lib/model/commerce-pos-day-report.d.ts +209 -0
  80. package/src/lib/model/commerce-pos-day-report.js +572 -0
  81. package/src/lib/model/commerce-pos-day-report.js.map +1 -0
  82. package/src/lib/model/commerce-pos-offline.d.ts +65 -3
  83. package/src/lib/model/commerce-pos-offline.js +104 -7
  84. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  85. package/src/lib/model/commerce-pos-ops.d.ts +3 -0
  86. package/src/lib/model/commerce-pos-ops.js +1 -0
  87. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  88. package/src/lib/model/commerce-pos.d.ts +43 -3
  89. package/src/lib/model/commerce-pos.js +73 -5
  90. package/src/lib/model/commerce-pos.js.map +1 -1
  91. package/src/lib/model/commerce-reservations.d.ts +73 -7
  92. package/src/lib/model/commerce-reservations.js +90 -10
  93. package/src/lib/model/commerce-reservations.js.map +1 -1
  94. package/src/lib/model/commerce.d.ts +40 -0
  95. package/src/lib/model/commerce.js +22 -4
  96. package/src/lib/model/commerce.js.map +1 -1
  97. package/src/lib/model/index.d.ts +1 -0
  98. package/src/lib/model/index.js +1 -0
  99. package/src/lib/model/index.js.map +1 -1
  100. package/src/lib/model/plugin-permissions.d.ts +1 -1
  101. package/src/lib/model/plugin-permissions.js +2 -1
  102. package/src/lib/model/plugin-permissions.js.map +1 -1
  103. package/src/lib/model/pos-hardware.d.ts +288 -0
  104. package/src/lib/model/pos-hardware.js +499 -0
  105. package/src/lib/model/pos-hardware.js.map +1 -0
  106. package/src/lib/model/pos-offline-card-limits.d.ts +20 -0
  107. package/src/lib/model/pos-offline-card-limits.js +28 -0
  108. package/src/lib/model/pos-offline-card-limits.js.map +1 -0
  109. package/src/lib/model/pos-reader-splash.d.ts +114 -0
  110. package/src/lib/model/pos-reader-splash.js +141 -0
  111. package/src/lib/model/pos-reader-splash.js.map +1 -0
  112. package/src/lib/model/product-write.d.ts +6 -0
  113. package/src/lib/plugin-config.d.ts +10 -0
  114. package/src/lib/plugin-config.js +40 -0
  115. package/src/lib/plugin-config.js.map +1 -1
  116. package/src/lib/plugin.js +28 -0
  117. package/src/lib/plugin.js.map +1 -1
  118. package/src/lib/server/cart-checkout.js +3 -1
  119. package/src/lib/server/cart-checkout.js.map +1 -1
  120. package/src/lib/server/cart.js +12 -1
  121. package/src/lib/server/cart.js.map +1 -1
  122. package/src/lib/server/catalog.js +49 -12
  123. package/src/lib/server/catalog.js.map +1 -1
  124. package/src/lib/server/checkout-extras.js +1 -1
  125. package/src/lib/server/checkout-extras.js.map +1 -1
  126. package/src/lib/server/checkout.js +7 -0
  127. package/src/lib/server/checkout.js.map +1 -1
  128. package/src/lib/server/person-eraser.d.ts +8 -1
  129. package/src/lib/server/person-eraser.js +23 -1
  130. package/src/lib/server/person-eraser.js.map +1 -1
  131. package/src/lib/server/pos-check-in.d.ts +49 -0
  132. package/src/lib/server/pos-check-in.js +652 -0
  133. package/src/lib/server/pos-check-in.js.map +1 -0
  134. package/src/lib/server/pos-day-report.d.ts +46 -0
  135. package/src/lib/server/pos-day-report.js +299 -0
  136. package/src/lib/server/pos-day-report.js.map +1 -0
  137. package/src/lib/server/pos-hardware-admin.d.ts +50 -0
  138. package/src/lib/server/pos-hardware-admin.js +366 -0
  139. package/src/lib/server/pos-hardware-admin.js.map +1 -0
  140. package/src/lib/server/pos-hardware-notify.d.ts +27 -0
  141. package/src/lib/server/pos-hardware-notify.js +142 -0
  142. package/src/lib/server/pos-hardware-notify.js.map +1 -0
  143. package/src/lib/server/pos-hardware-user-eraser.d.ts +26 -0
  144. package/src/lib/server/pos-hardware-user-eraser.js +67 -0
  145. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -0
  146. package/src/lib/server/pos-hardware-webhook.d.ts +31 -0
  147. package/src/lib/server/pos-hardware-webhook.js +176 -0
  148. package/src/lib/server/pos-hardware-webhook.js.map +1 -0
  149. package/src/lib/server/pos-hardware.d.ts +58 -0
  150. package/src/lib/server/pos-hardware.js +234 -0
  151. package/src/lib/server/pos-hardware.js.map +1 -0
  152. package/src/lib/server/pos-offline-card-reconcile.d.ts +38 -0
  153. package/src/lib/server/pos-offline-card-reconcile.js +58 -0
  154. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -0
  155. package/src/lib/server/pos-offline-sync.d.ts +32 -0
  156. package/src/lib/server/pos-offline-sync.js +191 -15
  157. package/src/lib/server/pos-offline-sync.js.map +1 -1
  158. package/src/lib/server/pos-ops-routes.d.ts +4 -2
  159. package/src/lib/server/pos-ops-routes.js +14 -2
  160. package/src/lib/server/pos-ops-routes.js.map +1 -1
  161. package/src/lib/server/pos-order.js +39 -51
  162. package/src/lib/server/pos-order.js.map +1 -1
  163. package/src/lib/server/pos-payment.js +8 -4
  164. package/src/lib/server/pos-payment.js.map +1 -1
  165. package/src/lib/server/pos-reader-splash-admin.d.ts +36 -0
  166. package/src/lib/server/pos-reader-splash-admin.js +295 -0
  167. package/src/lib/server/pos-reader-splash-admin.js.map +1 -0
  168. package/src/lib/server/pos-reader-splash-render.d.ts +40 -0
  169. package/src/lib/server/pos-reader-splash-render.js +138 -0
  170. package/src/lib/server/pos-reader-splash-render.js.map +1 -0
  171. package/src/lib/server/pos-reader-splash-server.d.ts +32 -0
  172. package/src/lib/server/pos-reader-splash-server.js +32 -0
  173. package/src/lib/server/pos-reader-splash-server.js.map +1 -0
  174. package/src/lib/server/pos-reader-splash.d.ts +105 -0
  175. package/src/lib/server/pos-reader-splash.js +548 -0
  176. package/src/lib/server/pos-reader-splash.js.map +1 -0
  177. package/src/lib/server/pos-sale.d.ts +2 -1
  178. package/src/lib/server/pos-sale.js +3 -1
  179. package/src/lib/server/pos-sale.js.map +1 -1
  180. package/src/lib/server/pos-terminal.d.ts +67 -4
  181. package/src/lib/server/pos-terminal.js +239 -32
  182. package/src/lib/server/pos-terminal.js.map +1 -1
  183. package/src/lib/server/process-restock.js +4 -0
  184. package/src/lib/server/process-restock.js.map +1 -1
  185. package/src/lib/server/product-card.js +2 -2
  186. package/src/lib/server/product-card.js.map +1 -1
  187. package/src/lib/server/product-catalog.d.ts +2 -0
  188. package/src/lib/server/product-catalog.js +11 -4
  189. package/src/lib/server/product-catalog.js.map +1 -1
  190. package/src/lib/server/product.js +3 -1
  191. package/src/lib/server/product.js.map +1 -1
  192. package/src/lib/server/related.js +8 -1
  193. package/src/lib/server/related.js.map +1 -1
  194. package/src/lib/server/reservation-availability-query.d.ts +35 -0
  195. package/src/lib/server/reservation-availability-query.js +34 -0
  196. package/src/lib/server/reservation-availability-query.js.map +1 -0
  197. package/src/lib/server/reservation-availability.d.ts +21 -0
  198. package/src/lib/server/reservation-availability.js +64 -10
  199. package/src/lib/server/reservation-availability.js.map +1 -1
  200. package/src/lib/server/reservation-walk-in.d.ts +28 -0
  201. package/src/lib/server/reservation-walk-in.js +166 -0
  202. package/src/lib/server/reservation-walk-in.js.map +1 -0
  203. package/src/lib/server/reserve.js +13 -10
  204. package/src/lib/server/reserve.js.map +1 -1
  205. package/src/lib/server/reviews.js +3 -1
  206. package/src/lib/server/reviews.js.map +1 -1
  207. package/src/lib/server/site-page-resolver.js +5 -2
  208. package/src/lib/server/site-page-resolver.js.map +1 -1
  209. package/src/lib/server.js +26 -0
  210. package/src/lib/server.js.map +1 -1
  211. package/src/lib/testing/fake-firestore.js +72 -0
  212. package/src/lib/testing/fake-firestore.js.map +1 -1
@@ -0,0 +1,444 @@
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 { Alert, Box, Button, Chip, Dialog, DialogActions, DialogContent, DialogTitle, Divider, List, ListItem, ListItemButton, ListItemText, MenuItem, Stack, TextField, Typography } from "@mui/material";
20
+ import { useUser } from "@aglyn/tenant-feature-instance";
21
+ import { useCallback, useEffect, useRef, useState } from "react";
22
+ import { alreadyCheckedInLabel, checkInItemLabel, checkInTimeLabel, CHECK_IN_WRISTBAND_COLORS, CHECK_IN_WRISTBAND_MAX, describeWristband } from "../../../model/commerce-check-in.js";
23
+ import { POS_TOUCH_PX } from "../pos/pos-product-grid.component.js";
24
+ import { callPosOps, newPosAttemptKey } from "./pos-ops-api.js";
25
+ import { PosCheckInZone } from "./pos-check-in-zone.component.js";
26
+ /** How long typing pauses before the register asks. */ const SEARCH_DEBOUNCE_MS = 250;
27
+ /**
28
+ * Check-in at the window (AGL-4043): look the customer up by name, email,
29
+ * phone or order number, see each person their passes, camping and stays
30
+ * cover today, and check each in with an optional wristband number and
31
+ * color. One already checked in says when and by whom, with an undo.
32
+ */ export function PosCheckInDialog(props) {
33
+ var _ref;
34
+ const { open, hostId, registerId, cashierAssertion, initialCustomer, onClose } = props;
35
+ const { data: user } = useUser();
36
+ const [text, setText] = useState('');
37
+ const [customers, setCustomers] = useState([]);
38
+ const [searched, setSearched] = useState(false);
39
+ const [day, setDay] = useState(null);
40
+ const [customer, setCustomer] = useState(null);
41
+ const [rows, setRows] = useState([]);
42
+ const [drafts, setDrafts] = useState({});
43
+ const [busy, setBusy] = useState(false);
44
+ const [error, setError] = useState('');
45
+ const [notice, setNotice] = useState('');
46
+ const latest = useRef(0);
47
+ const reset = useCallback(()=>{
48
+ setText('');
49
+ setCustomers([]);
50
+ setSearched(false);
51
+ setCustomer(null);
52
+ setRows([]);
53
+ setDrafts({});
54
+ setError('');
55
+ setNotice('');
56
+ }, []);
57
+ const openCustomer = useCallback(async (target)=>{
58
+ var _answer_body_error, _answer_body_timeZone, _answer_body_customer, _answer_body_checkIns;
59
+ var _answer_body_checkIns1;
60
+ if (!user) return;
61
+ setBusy(true);
62
+ setError('');
63
+ setNotice('');
64
+ const answer = await callPosOps(user, 'pos-check-in', _extends({
65
+ hostId,
66
+ action: 'customer'
67
+ }, target));
68
+ setBusy(false);
69
+ if (!answer.ok) return setError((_answer_body_error = answer.body.error) != null ? _answer_body_error : 'That customer could not be opened.');
70
+ if (answer.body.dayKey) setDay({
71
+ dayKey: answer.body.dayKey,
72
+ timeZone: (_answer_body_timeZone = answer.body.timeZone) != null ? _answer_body_timeZone : 'UTC'
73
+ });
74
+ setCustomer((_answer_body_customer = answer.body.customer) != null ? _answer_body_customer : null);
75
+ setRows((_answer_body_checkIns = answer.body.checkIns) != null ? _answer_body_checkIns : []);
76
+ setDrafts({});
77
+ if (!((_answer_body_checkIns1 = answer.body.checkIns) == null ? void 0 : _answer_body_checkIns1.length)) setNotice('Nothing to check in today for this customer.');
78
+ }, [
79
+ user,
80
+ hostId
81
+ ]);
82
+ useEffect(()=>{
83
+ if (!open) return reset();
84
+ if (initialCustomer && (initialCustomer.customerKey || initialCustomer.email || initialCustomer.contactId)) {
85
+ void openCustomer(initialCustomer);
86
+ }
87
+ // Opening is the trigger; a new target while open is not.
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ }, [
90
+ open
91
+ ]);
92
+ useEffect(()=>{
93
+ const typed = text.trim();
94
+ if (!open || typed.length < 2 || !user) {
95
+ setCustomers([]);
96
+ setSearched(false);
97
+ return;
98
+ }
99
+ const ticket = ++latest.current;
100
+ const timer = window.setTimeout(()=>{
101
+ void callPosOps(user, 'pos-check-in', {
102
+ hostId,
103
+ action: 'search',
104
+ text: typed
105
+ }).then((answer)=>{
106
+ var _answer_body_error, _answer_body_timeZone, _answer_body_customers;
107
+ if (ticket !== latest.current) return;
108
+ if (!answer.ok) return setError((_answer_body_error = answer.body.error) != null ? _answer_body_error : 'The search did not run.');
109
+ setError('');
110
+ if (answer.body.dayKey) setDay({
111
+ dayKey: answer.body.dayKey,
112
+ timeZone: (_answer_body_timeZone = answer.body.timeZone) != null ? _answer_body_timeZone : 'UTC'
113
+ });
114
+ setCustomers((_answer_body_customers = answer.body.customers) != null ? _answer_body_customers : []);
115
+ setSearched(true);
116
+ });
117
+ }, SEARCH_DEBOUNCE_MS);
118
+ return ()=>window.clearTimeout(timer);
119
+ }, [
120
+ text,
121
+ user,
122
+ hostId,
123
+ open
124
+ ]);
125
+ const merge = (changed)=>{
126
+ const byId = new Map(changed.map((row)=>[
127
+ row.id,
128
+ row
129
+ ]));
130
+ setRows((current)=>current.map((row)=>{
131
+ var _byId_get;
132
+ return (_byId_get = byId.get(row.id)) != null ? _byId_get : row;
133
+ }));
134
+ };
135
+ const checkIn = async (targets)=>{
136
+ var _answer_body_error, _answer_body_checkedIn, _answer_body_alreadyCheckedIn, _answer_body_alreadyCheckedIn1;
137
+ if (!targets.length) return;
138
+ setBusy(true);
139
+ setError('');
140
+ setNotice('');
141
+ const answer = await callPosOps(user, 'pos-check-in', _extends({
142
+ hostId,
143
+ action: 'check_in',
144
+ checkIns: targets.map((row)=>{
145
+ const draft = drafts[row.id];
146
+ return _extends({
147
+ id: row.id
148
+ }, draft && (draft.number.trim() || draft.color) ? {
149
+ wristband: {
150
+ number: draft.number.trim(),
151
+ color: draft.color
152
+ }
153
+ } : {});
154
+ })
155
+ }, registerId ? {
156
+ registerId
157
+ } : {}, cashierAssertion ? {
158
+ cashierAssertion
159
+ } : {}), {
160
+ idempotencyKey: newPosAttemptKey()
161
+ });
162
+ setBusy(false);
163
+ if (!answer.ok) return setError((_answer_body_error = answer.body.error) != null ? _answer_body_error : 'They could not be checked in.');
164
+ merge([
165
+ ...(_answer_body_checkedIn = answer.body.checkedIn) != null ? _answer_body_checkedIn : [],
166
+ ...(_answer_body_alreadyCheckedIn = answer.body.alreadyCheckedIn) != null ? _answer_body_alreadyCheckedIn : []
167
+ ]);
168
+ const already = (_answer_body_alreadyCheckedIn1 = answer.body.alreadyCheckedIn) != null ? _answer_body_alreadyCheckedIn1 : [];
169
+ if (already.length && day) setNotice(alreadyCheckedInLabel(already[0], day.timeZone));
170
+ };
171
+ const undo = async (row)=>{
172
+ var _answer_body_error;
173
+ setBusy(true);
174
+ setError('');
175
+ setNotice('');
176
+ const answer = await callPosOps(user, 'pos-check-in', _extends({
177
+ hostId,
178
+ action: 'undo',
179
+ id: row.id
180
+ }, registerId ? {
181
+ registerId
182
+ } : {}, cashierAssertion ? {
183
+ cashierAssertion
184
+ } : {}));
185
+ setBusy(false);
186
+ if (!answer.ok || !answer.body.checkIn) return setError((_answer_body_error = answer.body.error) != null ? _answer_body_error : 'The check-in could not be undone.');
187
+ merge([
188
+ answer.body.checkIn
189
+ ]);
190
+ };
191
+ const setDraft = (id, patch)=>setDrafts((current)=>_extends({}, current, {
192
+ [id]: _extends({
193
+ number: '',
194
+ color: ''
195
+ }, current[id], patch)
196
+ }));
197
+ const waiting = rows.filter((row)=>row.status === 'expected');
198
+ const dayKey = (_ref = day == null ? void 0 : day.dayKey) != null ? _ref : '';
199
+ return /*#__PURE__*/ _jsxs(Dialog, {
200
+ open: open,
201
+ onClose: onClose,
202
+ maxWidth: "sm",
203
+ fullWidth: true,
204
+ children: [
205
+ /*#__PURE__*/ _jsx(DialogTitle, {
206
+ children: customer ? customer.name || customer.email || 'Customer' : 'Check in'
207
+ }),
208
+ /*#__PURE__*/ _jsx(DialogContent, {
209
+ children: /*#__PURE__*/ _jsxs(Stack, {
210
+ spacing: 2,
211
+ sx: {
212
+ pt: 1
213
+ },
214
+ children: [
215
+ customer ? /*#__PURE__*/ _jsxs(_Fragment, {
216
+ children: [
217
+ /*#__PURE__*/ _jsxs(Stack, {
218
+ direction: "row",
219
+ spacing: 1,
220
+ useFlexGap: true,
221
+ sx: {
222
+ alignItems: 'center',
223
+ flexWrap: 'wrap'
224
+ },
225
+ children: [
226
+ customer.email ? /*#__PURE__*/ _jsx(Typography, {
227
+ variant: "body2",
228
+ color: "text.secondary",
229
+ children: customer.email
230
+ }) : null,
231
+ /*#__PURE__*/ _jsx(Chip, {
232
+ size: "small",
233
+ variant: "outlined",
234
+ color: rows.length && !waiting.length ? 'success' : 'default',
235
+ label: `${rows.filter((row)=>row.status === 'checked_in').length} of ${rows.length} checked in`
236
+ }),
237
+ dayKey ? /*#__PURE__*/ _jsx(PosCheckInZone, {
238
+ hostId: hostId,
239
+ orgId: undefined,
240
+ contactId: customer.contactId,
241
+ email: customer.email ? customer.email.toLowerCase() : null,
242
+ dayKey: dayKey,
243
+ name: customer.name,
244
+ unitsDue: rows.length,
245
+ placement: "check-in-customer"
246
+ }) : null
247
+ ]
248
+ }),
249
+ /*#__PURE__*/ _jsx(List, {
250
+ disablePadding: true,
251
+ children: rows.map((row, index)=>{
252
+ var _row_orderLabel, _ref, _ref1;
253
+ var _drafts_row_id, _drafts_row_id1;
254
+ return /*#__PURE__*/ _jsxs(Box, {
255
+ children: [
256
+ index ? /*#__PURE__*/ _jsx(Divider, {
257
+ component: "li"
258
+ }) : null,
259
+ /*#__PURE__*/ _jsx(ListItem, {
260
+ disableGutters: true,
261
+ sx: {
262
+ display: 'block',
263
+ py: 1.5
264
+ },
265
+ children: /*#__PURE__*/ _jsxs(Stack, {
266
+ spacing: 1,
267
+ children: [
268
+ /*#__PURE__*/ _jsx(ListItemText, {
269
+ primary: checkInItemLabel(row),
270
+ secondary: row.status === 'checked_in' && day ? [
271
+ `Checked in at ${checkInTimeLabel(row.checkedInAtMs, day.timeZone)}` + (row.checkedInByName ? ` by ${row.checkedInByName}` : ''),
272
+ describeWristband(row.wristband)
273
+ ].filter(Boolean).join(' · ') : (_row_orderLabel = row.orderLabel) != null ? _row_orderLabel : row.source === 'reservation' ? 'Stay' : ''
274
+ }),
275
+ row.status === 'checked_in' ? /*#__PURE__*/ _jsx(Box, {
276
+ children: /*#__PURE__*/ _jsx(Button, {
277
+ size: "small",
278
+ onClick: ()=>void undo(row),
279
+ disabled: busy,
280
+ children: 'Undo'
281
+ })
282
+ }) : /*#__PURE__*/ _jsxs(Stack, {
283
+ direction: {
284
+ xs: 'column',
285
+ sm: 'row'
286
+ },
287
+ spacing: 1,
288
+ children: [
289
+ /*#__PURE__*/ _jsx(TextField, {
290
+ size: "small",
291
+ label: "Wristband number",
292
+ value: (_ref = (_drafts_row_id = drafts[row.id]) == null ? void 0 : _drafts_row_id.number) != null ? _ref : '',
293
+ onChange: (event)=>setDraft(row.id, {
294
+ number: event.target.value
295
+ }),
296
+ slotProps: {
297
+ htmlInput: {
298
+ maxLength: CHECK_IN_WRISTBAND_MAX
299
+ }
300
+ },
301
+ sx: {
302
+ flex: 1
303
+ }
304
+ }),
305
+ /*#__PURE__*/ _jsxs(TextField, {
306
+ select: true,
307
+ size: "small",
308
+ label: "Color",
309
+ value: (_ref1 = (_drafts_row_id1 = drafts[row.id]) == null ? void 0 : _drafts_row_id1.color) != null ? _ref1 : '',
310
+ onChange: (event)=>setDraft(row.id, {
311
+ color: event.target.value
312
+ }),
313
+ sx: {
314
+ flex: 1
315
+ },
316
+ children: [
317
+ /*#__PURE__*/ _jsx(MenuItem, {
318
+ value: "",
319
+ children: 'None'
320
+ }),
321
+ CHECK_IN_WRISTBAND_COLORS.map((color)=>/*#__PURE__*/ _jsx(MenuItem, {
322
+ value: color,
323
+ children: color
324
+ }, color))
325
+ ]
326
+ }),
327
+ /*#__PURE__*/ _jsx(Button, {
328
+ variant: "contained",
329
+ onClick: ()=>void checkIn([
330
+ row
331
+ ]),
332
+ disabled: busy,
333
+ sx: {
334
+ minHeight: POS_TOUCH_PX
335
+ },
336
+ children: 'Check in'
337
+ })
338
+ ]
339
+ })
340
+ ]
341
+ })
342
+ })
343
+ ]
344
+ }, row.id);
345
+ })
346
+ })
347
+ ]
348
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
349
+ children: [
350
+ /*#__PURE__*/ _jsx(TextField, {
351
+ autoFocus: true,
352
+ label: "Find a customer",
353
+ placeholder: "Name, email, phone or order number",
354
+ value: text,
355
+ onChange: (event)=>setText(event.target.value)
356
+ }),
357
+ customers.length ? /*#__PURE__*/ _jsx(List, {
358
+ dense: true,
359
+ disablePadding: true,
360
+ children: customers.map((one)=>/*#__PURE__*/ _jsxs(ListItem, {
361
+ disablePadding: true,
362
+ children: [
363
+ /*#__PURE__*/ _jsx(ListItemButton, {
364
+ onClick: ()=>void openCustomer({
365
+ customerKey: one.customerKey
366
+ }),
367
+ children: /*#__PURE__*/ _jsx(ListItemText, {
368
+ primary: one.name || one.email || 'Customer',
369
+ secondary: [
370
+ `${one.unitsCheckedIn} of ${one.unitsDue} checked in`,
371
+ one.items.join(', '),
372
+ one.email,
373
+ one.phone
374
+ ].filter(Boolean).join(' · ')
375
+ })
376
+ }),
377
+ dayKey ? /*#__PURE__*/ _jsx(PosCheckInZone, {
378
+ hostId: hostId,
379
+ orgId: undefined,
380
+ contactId: one.contactId,
381
+ email: one.email ? one.email.toLowerCase() : null,
382
+ dayKey: dayKey,
383
+ name: one.name,
384
+ unitsDue: one.unitsDue,
385
+ placement: "check-in-row"
386
+ }) : null
387
+ ]
388
+ }, one.customerKey))
389
+ }) : searched ? /*#__PURE__*/ _jsx(Typography, {
390
+ variant: "body2",
391
+ color: "text.secondary",
392
+ children: 'Nobody with that name, email, phone or order number has anything to check in today.'
393
+ }) : /*#__PURE__*/ _jsx(Typography, {
394
+ variant: "body2",
395
+ color: "text.secondary",
396
+ children: 'Passes, camping and stays bought online or at the register show up here on the day they are for.'
397
+ })
398
+ ]
399
+ }),
400
+ notice ? /*#__PURE__*/ _jsx(Alert, {
401
+ severity: "info",
402
+ children: notice
403
+ }) : null,
404
+ error ? /*#__PURE__*/ _jsx(Alert, {
405
+ severity: "warning",
406
+ children: error
407
+ }) : null
408
+ ]
409
+ })
410
+ }),
411
+ /*#__PURE__*/ _jsxs(DialogActions, {
412
+ children: [
413
+ customer ? /*#__PURE__*/ _jsx(Button, {
414
+ onClick: ()=>{
415
+ setCustomer(null);
416
+ setRows([]);
417
+ setNotice('');
418
+ },
419
+ children: 'Back to search'
420
+ }) : null,
421
+ /*#__PURE__*/ _jsx(Box, {
422
+ sx: {
423
+ flex: 1
424
+ }
425
+ }),
426
+ /*#__PURE__*/ _jsx(Button, {
427
+ onClick: onClose,
428
+ children: 'Done'
429
+ }),
430
+ customer && waiting.length > 1 ? /*#__PURE__*/ _jsx(Button, {
431
+ variant: "contained",
432
+ disabled: busy,
433
+ onClick: ()=>void checkIn(waiting),
434
+ children: `Check in all ${waiting.length}`
435
+ }) : null
436
+ ]
437
+ })
438
+ ]
439
+ });
440
+ }
441
+ PosCheckInDialog.displayName = 'PosCheckInDialog';
442
+ export default PosCheckInDialog;
443
+
444
+ //# sourceMappingURL=pos-check-in-dialog.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos-ops/pos-check-in-dialog.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 {\n Alert,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n List,\n ListItem,\n ListItemButton,\n ListItemText,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n alreadyCheckedInLabel,\n checkInItemLabel,\n checkInTimeLabel,\n CHECK_IN_WRISTBAND_COLORS,\n CHECK_IN_WRISTBAND_MAX,\n describeWristband,\n type CheckInCustomer,\n type CheckInRow,\n} from '../../../model/commerce-check-in'\nimport { POS_TOUCH_PX } from '../pos/pos-product-grid.component'\nimport { callPosOps, newPosAttemptKey } from './pos-ops-api'\nimport { PosCheckInZone } from './pos-check-in-zone.component'\n\n/** How long typing pauses before the register asks. */\nconst SEARCH_DEBOUNCE_MS = 250\n\n/** The customer to open on, as the register's customer panel names them. */\nexport interface PosCheckInTarget {\n customerKey?: string\n email?: string | null\n contactId?: string | null\n}\n\nexport interface PosCheckInDialogProps {\n open: boolean\n hostId: string\n /** The register the dialog was opened at, so a PIN's cashier is who checks people in. */\n registerId?: string\n cashierAssertion?: string\n /** Opens straight on one customer rather than on the search. */\n initialCustomer?: PosCheckInTarget | null\n onClose: () => void\n}\n\ntype Draft = { number: string; color: string }\n\n/**\n * Check-in at the window (AGL-4043): look the customer up by name, email,\n * phone or order number, see each person their passes, camping and stays\n * cover today, and check each in with an optional wristband number and\n * color. One already checked in says when and by whom, with an undo.\n */\nexport function PosCheckInDialog(props: PosCheckInDialogProps) {\n const { open, hostId, registerId, cashierAssertion, initialCustomer, onClose } = props\n const { data: user } = useUser()\n const [text, setText] = useState('')\n const [customers, setCustomers] = useState<CheckInCustomer[]>([])\n const [searched, setSearched] = useState(false)\n const [day, setDay] = useState<{ dayKey: string; timeZone: string } | null>(null)\n const [customer, setCustomer] = useState<CheckInCustomer | null>(null)\n const [rows, setRows] = useState<CheckInRow[]>([])\n const [drafts, setDrafts] = useState<Record<string, Draft>>({})\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n const [notice, setNotice] = useState('')\n const latest = useRef(0)\n\n const reset = useCallback(() => {\n setText('')\n setCustomers([])\n setSearched(false)\n setCustomer(null)\n setRows([])\n setDrafts({})\n setError('')\n setNotice('')\n }, [])\n\n const openCustomer = useCallback(\n async (target: PosCheckInTarget) => {\n if (!user) return\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{\n dayKey?: string\n timeZone?: string\n customer?: CheckInCustomer | null\n checkIns?: CheckInRow[]\n }>(user, 'pos-check-in', { hostId, action: 'customer', ...target })\n setBusy(false)\n if (!answer.ok) return setError(answer.body.error ?? 'That customer could not be opened.')\n if (answer.body.dayKey) setDay({ dayKey: answer.body.dayKey, timeZone: answer.body.timeZone ?? 'UTC' })\n setCustomer(answer.body.customer ?? null)\n setRows(answer.body.checkIns ?? [])\n setDrafts({})\n if (!answer.body.checkIns?.length) setNotice('Nothing to check in today for this customer.')\n },\n [user, hostId],\n )\n\n useEffect(() => {\n if (!open) return reset()\n if (initialCustomer && (initialCustomer.customerKey || initialCustomer.email || initialCustomer.contactId)) {\n void openCustomer(initialCustomer)\n }\n // Opening is the trigger; a new target while open is not.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n useEffect(() => {\n const typed = text.trim()\n if (!open || typed.length < 2 || !user) {\n setCustomers([])\n setSearched(false)\n return\n }\n const ticket = ++latest.current\n const timer = window.setTimeout(() => {\n void callPosOps<{ dayKey?: string; timeZone?: string; customers?: CheckInCustomer[] }>(user, 'pos-check-in', {\n hostId,\n action: 'search',\n text: typed,\n }).then((answer) => {\n if (ticket !== latest.current) return\n if (!answer.ok) return setError(answer.body.error ?? 'The search did not run.')\n setError('')\n if (answer.body.dayKey) setDay({ dayKey: answer.body.dayKey, timeZone: answer.body.timeZone ?? 'UTC' })\n setCustomers(answer.body.customers ?? [])\n setSearched(true)\n })\n }, SEARCH_DEBOUNCE_MS)\n return () => window.clearTimeout(timer)\n }, [text, user, hostId, open])\n\n const merge = (changed: CheckInRow[]) => {\n const byId = new Map(changed.map((row) => [row.id, row]))\n setRows((current) => current.map((row) => byId.get(row.id) ?? row))\n }\n\n const checkIn = async (targets: CheckInRow[]) => {\n if (!targets.length) return\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{ checkedIn?: CheckInRow[]; alreadyCheckedIn?: CheckInRow[] }>(\n user,\n 'pos-check-in',\n {\n hostId,\n action: 'check_in',\n checkIns: targets.map((row) => {\n const draft = drafts[row.id]\n return {\n id: row.id,\n ...(draft && (draft.number.trim() || draft.color)\n ? { wristband: { number: draft.number.trim(), color: draft.color } }\n : {}),\n }\n }),\n ...(registerId ? { registerId } : {}),\n ...(cashierAssertion ? { cashierAssertion } : {}),\n },\n { idempotencyKey: newPosAttemptKey() },\n )\n setBusy(false)\n if (!answer.ok) return setError(answer.body.error ?? 'They could not be checked in.')\n merge([...(answer.body.checkedIn ?? []), ...(answer.body.alreadyCheckedIn ?? [])])\n const already = answer.body.alreadyCheckedIn ?? []\n if (already.length && day) setNotice(alreadyCheckedInLabel(already[0]!, day.timeZone))\n }\n\n const undo = async (row: CheckInRow) => {\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{ checkIn?: CheckInRow }>(user, 'pos-check-in', {\n hostId,\n action: 'undo',\n id: row.id,\n ...(registerId ? { registerId } : {}),\n ...(cashierAssertion ? { cashierAssertion } : {}),\n })\n setBusy(false)\n if (!answer.ok || !answer.body.checkIn) return setError(answer.body.error ?? 'The check-in could not be undone.')\n merge([answer.body.checkIn])\n }\n\n const setDraft = (id: string, patch: Partial<Draft>) =>\n setDrafts((current) => ({ ...current, [id]: { number: '', color: '', ...current[id], ...patch } }))\n\n const waiting = rows.filter((row) => row.status === 'expected')\n const dayKey = day?.dayKey ?? ''\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{customer ? customer.name || customer.email || 'Customer' : 'Check in'}</DialogTitle>\n <DialogContent>\n <Stack spacing={2} sx={{ pt: 1 }}>\n {customer ? (\n <>\n <Stack direction=\"row\" spacing={1} useFlexGap sx={{ alignItems: 'center', flexWrap: 'wrap' }}>\n {customer.email ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {customer.email}\n </Typography>\n ) : null}\n <Chip\n size=\"small\"\n variant=\"outlined\"\n color={rows.length && !waiting.length ? 'success' : 'default'}\n label={`${rows.filter((row) => row.status === 'checked_in').length} of ${rows.length} checked in`}\n />\n {dayKey ? (\n <PosCheckInZone\n hostId={hostId}\n orgId={undefined}\n contactId={customer.contactId}\n email={customer.email ? customer.email.toLowerCase() : null}\n dayKey={dayKey}\n name={customer.name}\n unitsDue={rows.length}\n placement=\"check-in-customer\"\n />\n ) : null}\n </Stack>\n <List disablePadding>\n {rows.map((row, index) => (\n <Box key={row.id}>\n {index ? <Divider component=\"li\" /> : null}\n <ListItem disableGutters sx={{ display: 'block', py: 1.5 }}>\n <Stack spacing={1}>\n <ListItemText\n primary={checkInItemLabel(row)}\n secondary={\n row.status === 'checked_in' && day\n ? [\n `Checked in at ${checkInTimeLabel(row.checkedInAtMs, day.timeZone)}` +\n (row.checkedInByName ? ` by ${row.checkedInByName}` : ''),\n describeWristband(row.wristband),\n ]\n .filter(Boolean)\n .join(' · ')\n : row.orderLabel ?? (row.source === 'reservation' ? 'Stay' : '')\n }\n />\n {row.status === 'checked_in' ? (\n <Box>\n <Button size=\"small\" onClick={() => void undo(row)} disabled={busy}>\n {'Undo'}\n </Button>\n </Box>\n ) : (\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1}>\n <TextField\n size=\"small\"\n label=\"Wristband number\"\n value={drafts[row.id]?.number ?? ''}\n onChange={(event) => setDraft(row.id, { number: event.target.value })}\n slotProps={{ htmlInput: { maxLength: CHECK_IN_WRISTBAND_MAX } }}\n sx={{ flex: 1 }}\n />\n <TextField\n select\n size=\"small\"\n label=\"Color\"\n value={drafts[row.id]?.color ?? ''}\n onChange={(event) => setDraft(row.id, { color: event.target.value })}\n sx={{ flex: 1 }}\n >\n <MenuItem value=\"\">{'None'}</MenuItem>\n {CHECK_IN_WRISTBAND_COLORS.map((color) => (\n <MenuItem key={color} value={color}>\n {color}\n </MenuItem>\n ))}\n </TextField>\n <Button\n variant=\"contained\"\n onClick={() => void checkIn([row])}\n disabled={busy}\n sx={{ minHeight: POS_TOUCH_PX }}\n >\n {'Check in'}\n </Button>\n </Stack>\n )}\n </Stack>\n </ListItem>\n </Box>\n ))}\n </List>\n </>\n ) : (\n <>\n <TextField\n autoFocus\n label=\"Find a customer\"\n placeholder=\"Name, email, phone or order number\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n />\n {customers.length ? (\n <List dense disablePadding>\n {customers.map((one) => (\n <ListItem key={one.customerKey} disablePadding>\n <ListItemButton onClick={() => void openCustomer({ customerKey: one.customerKey })}>\n <ListItemText\n primary={one.name || one.email || 'Customer'}\n secondary={[\n `${one.unitsCheckedIn} of ${one.unitsDue} checked in`,\n one.items.join(', '),\n one.email,\n one.phone,\n ]\n .filter(Boolean)\n .join(' · ')}\n />\n </ListItemButton>\n {dayKey ? (\n <PosCheckInZone\n hostId={hostId}\n orgId={undefined}\n contactId={one.contactId}\n email={one.email ? one.email.toLowerCase() : null}\n dayKey={dayKey}\n name={one.name}\n unitsDue={one.unitsDue}\n placement=\"check-in-row\"\n />\n ) : null}\n </ListItem>\n ))}\n </List>\n ) : searched ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Nobody with that name, email, phone or order number has anything to check in today.'}\n </Typography>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Passes, camping and stays bought online or at the register show up here on the day they are for.'}\n </Typography>\n )}\n </>\n )}\n {notice ? <Alert severity=\"info\">{notice}</Alert> : null}\n {error ? <Alert severity=\"warning\">{error}</Alert> : null}\n </Stack>\n </DialogContent>\n <DialogActions>\n {customer ? (\n <Button\n onClick={() => {\n setCustomer(null)\n setRows([])\n setNotice('')\n }}\n >\n {'Back to search'}\n </Button>\n ) : null}\n <Box sx={{ flex: 1 }} />\n <Button onClick={onClose}>{'Done'}</Button>\n {customer && waiting.length > 1 ? (\n <Button variant=\"contained\" disabled={busy} onClick={() => void checkIn(waiting)}>\n {`Check in all ${waiting.length}`}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n )\n}\n\nPosCheckInDialog.displayName = 'PosCheckInDialog'\n\nexport default PosCheckInDialog\n"],"names":["Alert","Box","Button","Chip","Dialog","DialogActions","DialogContent","DialogTitle","Divider","List","ListItem","ListItemButton","ListItemText","MenuItem","Stack","TextField","Typography","useUser","useCallback","useEffect","useRef","useState","alreadyCheckedInLabel","checkInItemLabel","checkInTimeLabel","CHECK_IN_WRISTBAND_COLORS","CHECK_IN_WRISTBAND_MAX","describeWristband","POS_TOUCH_PX","callPosOps","newPosAttemptKey","PosCheckInZone","SEARCH_DEBOUNCE_MS","PosCheckInDialog","props","open","hostId","registerId","cashierAssertion","initialCustomer","onClose","data","user","text","setText","customers","setCustomers","searched","setSearched","day","setDay","customer","setCustomer","rows","setRows","drafts","setDrafts","busy","setBusy","error","setError","notice","setNotice","latest","reset","openCustomer","target","answer","action","ok","body","dayKey","timeZone","checkIns","length","customerKey","email","contactId","typed","trim","ticket","current","timer","window","setTimeout","then","clearTimeout","merge","changed","byId","Map","map","row","id","get","checkIn","targets","draft","number","color","wristband","idempotencyKey","checkedIn","alreadyCheckedIn","already","undo","setDraft","patch","waiting","filter","status","maxWidth","fullWidth","name","spacing","sx","pt","direction","useFlexGap","alignItems","flexWrap","variant","size","label","orgId","undefined","toLowerCase","unitsDue","placement","disablePadding","index","component","disableGutters","display","py","primary","secondary","checkedInAtMs","checkedInByName","Boolean","join","orderLabel","source","onClick","disabled","xs","sm","value","onChange","event","slotProps","htmlInput","maxLength","flex","select","minHeight","autoFocus","placeholder","dense","one","unitsCheckedIn","items","phone","severity","displayName"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ConsolePosCheckInZoneProps } from '../pos-zones';
2
+ /**
3
+ * The register's check-in zone (AGL-4043), for one customer on one day:
4
+ * whatever another plugin shows there — a status, a button that starts its
5
+ * own flow — through the console shell's renderer and its gates. Outside the
6
+ * shell it draws nothing. Memoized: the check-in list redraws on every tap,
7
+ * and the shell's renderer is not.
8
+ */
9
+ export declare const PosCheckInZone: import("react").MemoExoticComponent<(props: ConsolePosCheckInZoneProps) => import("react").JSX.Element>;
@@ -0,0 +1,37 @@
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 } from "react/jsx-runtime";
19
+ import { useConsoleWidgetSlot } from "@aglyn/aglyn/app-utils/console-widget-slot-context";
20
+ import { memo } from "react";
21
+ import { POS_CHECK_IN_ZONE } from "../pos-zones.js";
22
+ /**
23
+ * The register's check-in zone (AGL-4043), for one customer on one day:
24
+ * whatever another plugin shows there — a status, a button that starts its
25
+ * own flow — through the console shell's renderer and its gates. Outside the
26
+ * shell it draws nothing. Memoized: the check-in list redraws on every tap,
27
+ * and the shell's renderer is not.
28
+ */ export const PosCheckInZone = /*#__PURE__*/ memo(function PosCheckInZone(props) {
29
+ const Renderer = useConsoleWidgetSlot();
30
+ if (!Renderer) return null;
31
+ return /*#__PURE__*/ _jsx(Renderer, _extends({
32
+ slot: POS_CHECK_IN_ZONE.id
33
+ }, props));
34
+ });
35
+ PosCheckInZone.displayName = 'PosCheckInZone';
36
+
37
+ //# sourceMappingURL=pos-check-in-zone.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos-ops/pos-check-in-zone.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 { useConsoleWidgetSlot } from '@aglyn/aglyn/app-utils/console-widget-slot-context'\nimport { memo } from 'react'\nimport { POS_CHECK_IN_ZONE, type ConsolePosCheckInZoneProps } from '../pos-zones'\n\n/**\n * The register's check-in zone (AGL-4043), for one customer on one day:\n * whatever another plugin shows there — a status, a button that starts its\n * own flow — through the console shell's renderer and its gates. Outside the\n * shell it draws nothing. Memoized: the check-in list redraws on every tap,\n * and the shell's renderer is not.\n */\nexport const PosCheckInZone = memo(function PosCheckInZone(props: ConsolePosCheckInZoneProps) {\n const Renderer = useConsoleWidgetSlot()\n if (!Renderer) return null\n return <Renderer slot={POS_CHECK_IN_ZONE.id} {...props} />\n})\n\nPosCheckInZone.displayName = 'PosCheckInZone'\n"],"names":["useConsoleWidgetSlot","memo","POS_CHECK_IN_ZONE","PosCheckInZone","props","Renderer","slot","id","displayName"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD;;;AAEA,SAASA,oBAAoB,QAAQ,qDAAoD;AACzF,SAASC,IAAI,QAAQ,QAAO;AAC5B,SAASC,iBAAiB,QAAyC,kBAAc;AAEjF;;;;;;CAMC,GACD,OAAO,MAAMC,+BAAiBF,KAAK,SAASE,eAAeC,KAAiC;IAC1F,MAAMC,WAAWL;IACjB,IAAI,CAACK,UAAU,OAAO;IACtB,qBAAO,KAACA;QAASC,MAAMJ,kBAAkBK,EAAE;OAAMH;AACnD,GAAE;AAEFD,eAAeK,WAAW,GAAG"}
@@ -0,0 +1,24 @@
1
+ import { type CheckInDayTotals, type CheckInRow } from '../../../model/commerce-check-in';
2
+ export interface PosCheckInsCardProps {
3
+ hostId: string;
4
+ /** The viewer may work the register: what the route's gate asks. */
5
+ canManagePos?: boolean;
6
+ }
7
+ interface DayList {
8
+ dayKey: string;
9
+ timeZone: string;
10
+ totals: CheckInDayTotals;
11
+ checkIns: CheckInRow[];
12
+ truncated?: boolean;
13
+ }
14
+ /** The day's list as a printable 80 mm document, like the day totals. */
15
+ export declare function posCheckInsDocument(list: DayList): string;
16
+ /**
17
+ * Today's check-ins (AGL-4043): beside the day totals, for a store with a
18
+ * register, on a plan with the point of sale.
19
+ */
20
+ export declare function PosCheckInsCard(props: PosCheckInsCardProps): import("react").JSX.Element;
21
+ export declare namespace PosCheckInsCard {
22
+ var displayName: string;
23
+ }
24
+ export default PosCheckInsCard;