@burdenoff/microfe-movethewheels 2026.1026.3 → 2026.1028.1

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.
@@ -110,7 +110,7 @@ function g({ deliveryJobId: o }) {
110
110
  className: "text-xs text-text-secondary mb-1",
111
111
  children: ["Signature ", g.signatureType === "typed" ? "(typed)" : "(drawn)"]
112
112
  }), g.signatureType === "drawn" ? /* @__PURE__ */ p("div", {
113
- className: "border rounded-lg p-2 inline-block bg-white",
113
+ className: "border rounded-lg p-2 inline-block bg-bg-surface",
114
114
  children: /* @__PURE__ */ p("img", {
115
115
  src: g.signatureData,
116
116
  alt: "Recipient signature",
@@ -154,7 +154,7 @@ function v({ rows: e }) {
154
154
  }) : /* @__PURE__ */ l("ul", {
155
155
  className: "space-y-2",
156
156
  children: e.map((e) => {
157
- let t = e.volumeVariance > 0, i = t ? r : n, a = t ? "text-emerald-600 dark:text-emerald-400" : "text-rose-600 dark:text-rose-400";
157
+ let t = e.volumeVariance > 0, i = t ? r : n, a = t ? "text-status-success-text" : "text-status-error-text";
158
158
  return /* @__PURE__ */ u("li", {
159
159
  className: "flex items-center justify-between text-sm",
160
160
  children: [/* @__PURE__ */ u("span", {
@@ -58,7 +58,7 @@ function S({ access: n }) {
58
58
  }),
59
59
  q && /* @__PURE__ */ p("p", {
60
60
  role: "alert",
61
- className: "mb-4 rounded-md border border-red-400 p-3",
61
+ className: "mb-4 rounded-md border border-status-error-border p-3",
62
62
  children: q
63
63
  }),
64
64
  Y && /* @__PURE__ */ p("p", {
@@ -102,7 +102,7 @@ function S({ access: n }) {
102
102
  onClick: () => {
103
103
  s.selectContainer(e.id), J(null), X(null);
104
104
  },
105
- className: `w-full rounded-md border p-3 text-left ${e.id === s.containerId ? "border-blue-500" : ""}`,
105
+ className: `w-full rounded-md border p-3 text-left ${e.id === s.containerId ? "border-action-primary-border" : ""}`,
106
106
  children: [
107
107
  /* @__PURE__ */ p("span", {
108
108
  className: "font-semibold",
@@ -233,7 +233,7 @@ function S({ access: n }) {
233
233
  type: "button",
234
234
  "aria-pressed": e.id === s.cycleId,
235
235
  disabled: G,
236
- className: `w-full rounded-md border p-3 text-left ${e.id === s.cycleId ? "border-blue-500" : ""}`,
236
+ className: `w-full rounded-md border p-3 text-left ${e.id === s.cycleId ? "border-action-primary-border" : ""}`,
237
237
  onClick: () => {
238
238
  s.selectCycle(e.id), J(null), X(null);
239
239
  },
@@ -121,69 +121,124 @@ function N() {
121
121
  title: P("movethewheels.tracking.empty.title", "Enter a tracking number"),
122
122
  description: P("movethewheels.tracking.empty.description", "Use your tracking number or order ID to see the current status of your shipment")
123
123
  }),
124
- W && /* @__PURE__ */ k("div", {
124
+ W && !U && /* @__PURE__ */ O(d, {
125
+ "data-testid": "tracking-empty-state",
126
+ children: /* @__PURE__ */ O(f, {
127
+ className: "p-6 sm:p-8",
128
+ children: /* @__PURE__ */ k("div", {
129
+ className: "flex flex-col gap-6 sm:flex-row sm:items-start",
130
+ children: [/* @__PURE__ */ O("div", {
131
+ className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
132
+ children: /* @__PURE__ */ O(n, { size: 24 })
133
+ }), /* @__PURE__ */ k("div", {
134
+ className: "min-w-0 flex-1",
135
+ children: [
136
+ /* @__PURE__ */ O("h2", {
137
+ className: "text-lg font-semibold text-text-primary",
138
+ children: P("movethewheels.tracking.emptyState.title", "No tracking updates yet")
139
+ }),
140
+ /* @__PURE__ */ O("p", {
141
+ className: "mt-1 text-sm text-text-secondary",
142
+ children: P("movethewheels.tracking.emptyState.description", "This order was found, but tracking updates will appear after the first shipment event.")
143
+ }),
144
+ /* @__PURE__ */ k("div", {
145
+ className: "mt-6 grid grid-cols-2 gap-4 sm:grid-cols-4",
146
+ children: [
147
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
148
+ className: "text-sm text-text-secondary",
149
+ children: P("movethewheels.tracking.emptyState.order", "Order")
150
+ }), /* @__PURE__ */ O("p", {
151
+ className: "font-medium",
152
+ children: W.orderNumber
153
+ })] }),
154
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
155
+ className: "text-sm text-text-secondary",
156
+ children: P("movethewheels.tracking.emptyState.status", "Status")
157
+ }), /* @__PURE__ */ O(y, {
158
+ status: W.status,
159
+ type: "order"
160
+ })] }),
161
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
162
+ className: "text-sm text-text-secondary",
163
+ children: P("movethewheels.tracking.details.trackingNumber", "Tracking Number")
164
+ }), /* @__PURE__ */ O("p", {
165
+ className: "font-mono font-medium",
166
+ children: W.trackingNumber || "—"
167
+ })] }),
168
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
169
+ className: "text-sm text-text-secondary",
170
+ children: P("movethewheels.tracking.details.items", "Items")
171
+ }), /* @__PURE__ */ k("p", {
172
+ className: "font-medium",
173
+ children: [
174
+ W.items.length,
175
+ " ",
176
+ P("movethewheels.tracking.details.itemsSuffix", "items")
177
+ ]
178
+ })] })
179
+ ]
180
+ })
181
+ ]
182
+ })]
183
+ })
184
+ })
185
+ }),
186
+ W && U && /* @__PURE__ */ k("div", {
125
187
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
126
188
  children: [/* @__PURE__ */ k("div", {
127
189
  className: "lg:col-span-2 space-y-6",
128
190
  children: [
129
- /* @__PURE__ */ k(j, { children: [
130
- /* @__PURE__ */ k("div", {
131
- className: "flex items-center justify-between mb-4",
132
- children: [/* @__PURE__ */ k("h2", {
133
- className: "flex items-center gap-2 text-base font-semibold text-text-primary",
191
+ /* @__PURE__ */ k(j, { children: [/* @__PURE__ */ k("div", {
192
+ className: "flex items-center justify-between mb-4",
193
+ children: [/* @__PURE__ */ k("h2", {
194
+ className: "flex items-center gap-2 text-base font-semibold text-text-primary",
195
+ children: [
196
+ /* @__PURE__ */ O(i, { size: 20 }),
197
+ P("movethewheels.tracking.orderLabel", "Order"),
198
+ " ",
199
+ W.orderNumber
200
+ ]
201
+ }), /* @__PURE__ */ O(y, {
202
+ status: W.status,
203
+ type: "order"
204
+ })]
205
+ }), /* @__PURE__ */ k("div", {
206
+ className: "grid grid-cols-2 md:grid-cols-4 gap-4",
207
+ children: [
208
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
209
+ className: "text-sm text-text-secondary",
210
+ children: P("movethewheels.tracking.details.trackingNumber", "Tracking Number")
211
+ }), /* @__PURE__ */ O("p", {
212
+ className: "font-mono font-medium",
213
+ children: W.trackingNumber || "—"
214
+ })] }),
215
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
216
+ className: "text-sm text-text-secondary",
217
+ children: P("movethewheels.tracking.details.estimatedDelivery", "Estimated Delivery")
218
+ }), /* @__PURE__ */ O("p", {
219
+ className: "font-medium",
220
+ children: U?.estimatedArrival ? x(U.estimatedArrival, "full") : W.scheduledDelivery ? x(W.scheduledDelivery, "full") : P("movethewheels.tracking.details.tbd", "TBD")
221
+ })] }),
222
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
223
+ className: "text-sm text-text-secondary",
224
+ children: P("movethewheels.tracking.details.items", "Items")
225
+ }), /* @__PURE__ */ k("p", {
226
+ className: "font-medium",
134
227
  children: [
135
- /* @__PURE__ */ O(i, { size: 20 }),
136
- P("movethewheels.tracking.orderLabel", "Order"),
228
+ W.items.length,
137
229
  " ",
138
- W.orderNumber
230
+ P("movethewheels.tracking.details.itemsSuffix", "items")
139
231
  ]
140
- }), /* @__PURE__ */ O(y, {
141
- status: W.status,
142
- type: "order"
143
- })]
144
- }),
145
- /* @__PURE__ */ k("div", {
146
- className: "grid grid-cols-2 md:grid-cols-4 gap-4",
147
- children: [
148
- /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
149
- className: "text-sm text-text-secondary",
150
- children: P("movethewheels.tracking.details.trackingNumber", "Tracking Number")
151
- }), /* @__PURE__ */ O("p", {
152
- className: "font-mono font-medium",
153
- children: W.trackingNumber || "—"
154
- })] }),
155
- /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
156
- className: "text-sm text-text-secondary",
157
- children: P("movethewheels.tracking.details.estimatedDelivery", "Estimated Delivery")
158
- }), /* @__PURE__ */ O("p", {
159
- className: "font-medium",
160
- children: U?.estimatedArrival ? x(U.estimatedArrival, "full") : W.scheduledDelivery ? x(W.scheduledDelivery, "full") : P("movethewheels.tracking.details.tbd", "TBD")
161
- })] }),
162
- /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
163
- className: "text-sm text-text-secondary",
164
- children: P("movethewheels.tracking.details.items", "Items")
165
- }), /* @__PURE__ */ k("p", {
166
- className: "font-medium",
167
- children: [
168
- W.items.length,
169
- " ",
170
- P("movethewheels.tracking.details.itemsSuffix", "items")
171
- ]
172
- })] }),
173
- /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
174
- className: "text-sm text-text-secondary",
175
- children: P("movethewheels.tracking.details.lastUpdated", "Last Updated")
176
- }), /* @__PURE__ */ O("p", {
177
- className: "font-medium",
178
- children: U?.lastUpdated ? x(U.lastUpdated, "relative") : P("movethewheels.tracking.details.noUpdates", "No tracking updates yet")
179
- })] })
180
- ]
181
- }),
182
- !U && /* @__PURE__ */ O("p", {
183
- className: "mt-4 rounded-card border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
184
- children: P("movethewheels.tracking.details.noUpdatesDescription", "The delivery was found, but no tracking updates have been recorded yet.")
185
- })
186
- ] }),
232
+ })] }),
233
+ /* @__PURE__ */ k("div", { children: [/* @__PURE__ */ O("p", {
234
+ className: "text-sm text-text-secondary",
235
+ children: P("movethewheels.tracking.details.lastUpdated", "Last Updated")
236
+ }), /* @__PURE__ */ O("p", {
237
+ className: "font-medium",
238
+ children: U?.lastUpdated ? x(U.lastUpdated, "relative") : P("movethewheels.tracking.details.noUpdates", "No tracking updates yet")
239
+ })] })
240
+ ]
241
+ })] }),
187
242
  /* @__PURE__ */ k(d, { children: [/* @__PURE__ */ O(p, { children: /* @__PURE__ */ k(m, {
188
243
  className: "flex items-center gap-2",
189
244
  children: [/* @__PURE__ */ O(r, { size: 18 }), P("movethewheels.tracking.routeMap.title", "Route map")]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-movethewheels",
3
- "version": "2026.1026.3",
3
+ "version": "2026.1028.1",
4
4
  "description": "Burdenoff MoveTheWheels Microfrontend - Logistics & Supply Chain Management Platform",
5
5
  "type": "module",
6
6
  "files": [
@@ -77,6 +77,7 @@
77
77
  "dependencies": {
78
78
  "@apollo/client": "^4.0.11",
79
79
  "@burdenoff/fe-libs": "2026.1017.12",
80
+ "@graphql-typed-document-node/core": "^3.2.0",
80
81
  "@react-leaflet/core": "^3.0.0",
81
82
  "@tanstack/react-query": "^5.90.16",
82
83
  "@types/leaflet": "1.9.22",
@@ -100,7 +100,7 @@ export function ProofOfDeliveryCard({ deliveryJobId }: ProofOfDeliveryCardProps)
100
100
  Signature {epod.signatureType === 'typed' ? '(typed)' : '(drawn)'}
101
101
  </p>
102
102
  {epod.signatureType === 'drawn' ? (
103
- <div className="border rounded-lg p-2 inline-block bg-white">
103
+ <div className="border rounded-lg p-2 inline-block bg-bg-surface">
104
104
  <img src={epod.signatureData} alt="Recipient signature" className="h-16" />
105
105
  </div>
106
106
  ) : (
@@ -212,8 +212,8 @@ function VarianceList({ rows }: VarianceListProps) {
212
212
  const isOvershoot = row.volumeVariance > 0;
213
213
  const Icon = isOvershoot ? TrendingUp : TrendingDown;
214
214
  const tone = isOvershoot
215
- ? 'text-emerald-600 dark:text-emerald-400'
216
- : 'text-rose-600 dark:text-rose-400';
215
+ ? 'text-status-success-text'
216
+ : 'text-status-error-text';
217
217
  return (
218
218
  <li
219
219
  key={`${row.scopeType}-${row.scopeKey}-${row.periodStart}`}
@@ -142,7 +142,7 @@ function ContainerWorkbench({ access }: { access: ReturnType<typeof useShipmentP
142
142
  actual empty return and recorded return acceptance.
143
143
  </p>
144
144
  {actionError && (
145
- <p role="alert" className="mb-4 rounded-md border border-red-400 p-3">
145
+ <p role="alert" className="mb-4 rounded-md border border-status-error-border p-3">
146
146
  {actionError}
147
147
  </p>
148
148
  )}
@@ -178,7 +178,7 @@ function ContainerWorkbench({ access }: { access: ReturnType<typeof useShipmentP
178
178
  setActionError(null);
179
179
  setNotice(null);
180
180
  }}
181
- className={`w-full rounded-md border p-3 text-left ${row.id === data.containerId ? 'border-blue-500' : ''}`}
181
+ className={`w-full rounded-md border p-3 text-left ${row.id === data.containerId ? 'border-action-primary-border' : ''}`}
182
182
  >
183
183
  <span className="font-semibold">{row.containerNumber}</span>
184
184
  <br />
@@ -269,7 +269,7 @@ function ContainerWorkbench({ access }: { access: ReturnType<typeof useShipmentP
269
269
  type="button"
270
270
  aria-pressed={row.id === data.cycleId}
271
271
  disabled={busy}
272
- className={`w-full rounded-md border p-3 text-left ${row.id === data.cycleId ? 'border-blue-500' : ''}`}
272
+ className={`w-full rounded-md border p-3 text-left ${row.id === data.cycleId ? 'border-action-primary-border' : ''}`}
273
273
  onClick={() => {
274
274
  data.selectCycle(row.id);
275
275
  setActionError(null);
@@ -181,8 +181,61 @@ export default function TrackingPage() {
181
181
  />
182
182
  )}
183
183
 
184
+ {/* Order found, but tracking has not started yet */}
185
+ {order && !tracking && (
186
+ <Card data-testid="tracking-empty-state">
187
+ <CardContent className="p-6 sm:p-8">
188
+ <div className="flex flex-col gap-6 sm:flex-row sm:items-start">
189
+ <div className="flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary">
190
+ <Clock size={24} />
191
+ </div>
192
+ <div className="min-w-0 flex-1">
193
+ <h2 className="text-lg font-semibold text-text-primary">
194
+ {t('movethewheels.tracking.emptyState.title', 'No tracking updates yet')}
195
+ </h2>
196
+ <p className="mt-1 text-sm text-text-secondary">
197
+ {t(
198
+ 'movethewheels.tracking.emptyState.description',
199
+ 'This order was found, but tracking updates will appear after the first shipment event.'
200
+ )}
201
+ </p>
202
+ <div className="mt-6 grid grid-cols-2 gap-4 sm:grid-cols-4">
203
+ <div>
204
+ <p className="text-sm text-text-secondary">
205
+ {t('movethewheels.tracking.emptyState.order', 'Order')}
206
+ </p>
207
+ <p className="font-medium">{order.orderNumber}</p>
208
+ </div>
209
+ <div>
210
+ <p className="text-sm text-text-secondary">
211
+ {t('movethewheels.tracking.emptyState.status', 'Status')}
212
+ </p>
213
+ <StatusBadge status={order.status} type="order" />
214
+ </div>
215
+ <div>
216
+ <p className="text-sm text-text-secondary">
217
+ {t('movethewheels.tracking.details.trackingNumber', 'Tracking Number')}
218
+ </p>
219
+ <p className="font-mono font-medium">{order.trackingNumber || '—'}</p>
220
+ </div>
221
+ <div>
222
+ <p className="text-sm text-text-secondary">
223
+ {t('movethewheels.tracking.details.items', 'Items')}
224
+ </p>
225
+ <p className="font-medium">
226
+ {order.items.length}{' '}
227
+ {t('movethewheels.tracking.details.itemsSuffix', 'items')}
228
+ </p>
229
+ </div>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ </CardContent>
234
+ </Card>
235
+ )}
236
+
184
237
  {/* Tracking Results */}
185
- {order && (
238
+ {order && tracking && (
186
239
  <div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
187
240
  {/* Main Tracking Info */}
188
241
  <div className="lg:col-span-2 space-y-6">
@@ -233,14 +286,6 @@ export default function TrackingPage() {
233
286
  </p>
234
287
  </div>
235
288
  </div>
236
- {!tracking && (
237
- <p className="mt-4 rounded-card border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary">
238
- {t(
239
- 'movethewheels.tracking.details.noUpdatesDescription',
240
- 'The delivery was found, but no tracking updates have been recorded yet.'
241
- )}
242
- </p>
243
- )}
244
289
  </EmphasisPanel>
245
290
 
246
291
  {/* Route Map — real origin/destination + tracking trail + live position */}