@j3m-quantum/ui 1.8.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/dist/index.cjs +386 -177
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +145 -14
- package/dist/index.d.ts +145 -14
- package/dist/index.js +381 -178
- package/dist/index.js.map +1 -1
- package/dist/styles/index.css +2 -0
- package/package.json +15 -2
package/dist/index.js
CHANGED
|
@@ -39,6 +39,7 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
|
39
39
|
import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
|
|
40
40
|
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
41
41
|
import * as ResizablePrimitive from 'react-resizable-panels';
|
|
42
|
+
import { MapContainer, TileLayer, Marker, Popup, Tooltip, ZoomControl } from 'react-leaflet';
|
|
42
43
|
import { useReactTable, getPaginationRowModel, getFilteredRowModel, getSortedRowModel, getCoreRowModel, flexRender } from '@tanstack/react-table';
|
|
43
44
|
export { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table';
|
|
44
45
|
import { addDays, isToday, subMonths, subYears, subWeeks, subDays, addMonths, addYears, addWeeks, format, startOfWeek, endOfWeek, startOfMonth, endOfMonth, startOfYear, endOfYear, isSameMonth, isSameWeek, isSameDay, isSameYear, isWithinInterval, parseISO, differenceInMinutes, eachDayOfInterval, differenceInDays, startOfDay, setMinutes, setHours, eachHourOfInterval, endOfDay, getHours, getMinutes, addMinutes, areIntervalsOverlapping } from 'date-fns';
|
|
@@ -5839,6 +5840,89 @@ var SectionFooter = React27.forwardRef(
|
|
|
5839
5840
|
)
|
|
5840
5841
|
);
|
|
5841
5842
|
SectionFooter.displayName = "SectionFooter";
|
|
5843
|
+
function Map2({
|
|
5844
|
+
center,
|
|
5845
|
+
zoom = 13,
|
|
5846
|
+
className,
|
|
5847
|
+
children,
|
|
5848
|
+
...props
|
|
5849
|
+
}) {
|
|
5850
|
+
return /* @__PURE__ */ jsx(
|
|
5851
|
+
MapContainer,
|
|
5852
|
+
{
|
|
5853
|
+
center,
|
|
5854
|
+
zoom,
|
|
5855
|
+
className: cn(
|
|
5856
|
+
"w-full rounded-lg border border-border overflow-hidden",
|
|
5857
|
+
"[&_.leaflet-control-zoom]:border-border",
|
|
5858
|
+
"[&_.leaflet-control-zoom]:rounded-md",
|
|
5859
|
+
"[&_.leaflet-control-zoom]:shadow-sm",
|
|
5860
|
+
"[&_.leaflet-control-zoom-in]:rounded-t-md",
|
|
5861
|
+
"[&_.leaflet-control-zoom-in]:border-b",
|
|
5862
|
+
"[&_.leaflet-control-zoom-in]:border-border",
|
|
5863
|
+
"[&_.leaflet-control-zoom-out]:rounded-b-md",
|
|
5864
|
+
"[&_.leaflet-popup-content-wrapper]:rounded-lg",
|
|
5865
|
+
"[&_.leaflet-popup-content-wrapper]:shadow-lg",
|
|
5866
|
+
"[&_.leaflet-popup-content-wrapper]:border",
|
|
5867
|
+
"[&_.leaflet-popup-content-wrapper]:border-border",
|
|
5868
|
+
className
|
|
5869
|
+
),
|
|
5870
|
+
scrollWheelZoom: true,
|
|
5871
|
+
...props,
|
|
5872
|
+
children
|
|
5873
|
+
}
|
|
5874
|
+
);
|
|
5875
|
+
}
|
|
5876
|
+
var TILE_LAYERS = {
|
|
5877
|
+
default: {
|
|
5878
|
+
url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
|
5879
|
+
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
|
5880
|
+
},
|
|
5881
|
+
dark: {
|
|
5882
|
+
url: "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png",
|
|
5883
|
+
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors © <a href="https://carto.com/attributions">CARTO</a>'
|
|
5884
|
+
},
|
|
5885
|
+
satellite: {
|
|
5886
|
+
url: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
|
|
5887
|
+
attribution: "© Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"
|
|
5888
|
+
}
|
|
5889
|
+
};
|
|
5890
|
+
function MapTileLayer({
|
|
5891
|
+
variant = "default",
|
|
5892
|
+
...props
|
|
5893
|
+
}) {
|
|
5894
|
+
const layer = TILE_LAYERS[variant];
|
|
5895
|
+
return /* @__PURE__ */ jsx(
|
|
5896
|
+
TileLayer,
|
|
5897
|
+
{
|
|
5898
|
+
url: layer.url,
|
|
5899
|
+
attribution: layer.attribution,
|
|
5900
|
+
...props
|
|
5901
|
+
}
|
|
5902
|
+
);
|
|
5903
|
+
}
|
|
5904
|
+
function MapMarker({
|
|
5905
|
+
position,
|
|
5906
|
+
children,
|
|
5907
|
+
...props
|
|
5908
|
+
}) {
|
|
5909
|
+
return /* @__PURE__ */ jsx(Marker, { position, ...props, children });
|
|
5910
|
+
}
|
|
5911
|
+
function MapPopup({
|
|
5912
|
+
children,
|
|
5913
|
+
...props
|
|
5914
|
+
}) {
|
|
5915
|
+
return /* @__PURE__ */ jsx(Popup, { ...props, children: /* @__PURE__ */ jsx("div", { className: "text-sm", children }) });
|
|
5916
|
+
}
|
|
5917
|
+
function MapTooltip({
|
|
5918
|
+
children,
|
|
5919
|
+
...props
|
|
5920
|
+
}) {
|
|
5921
|
+
return /* @__PURE__ */ jsx(Tooltip, { ...props, children });
|
|
5922
|
+
}
|
|
5923
|
+
function MapZoomControl(props) {
|
|
5924
|
+
return /* @__PURE__ */ jsx(ZoomControl, { ...props });
|
|
5925
|
+
}
|
|
5842
5926
|
function DataTableColumnHeader({
|
|
5843
5927
|
column,
|
|
5844
5928
|
title,
|
|
@@ -9285,36 +9369,41 @@ function getLeftStrokeStyles(state, hasRisk, isHovered) {
|
|
|
9285
9369
|
stroke: "border-l-[3px] border-l-red-500",
|
|
9286
9370
|
content: "text-foreground",
|
|
9287
9371
|
progressBg: "bg-red-500",
|
|
9288
|
-
iconColor: "text-red-600 dark:text-red-400"
|
|
9372
|
+
iconColor: "text-red-600 dark:text-red-400",
|
|
9373
|
+
cardBg: "bg-background"
|
|
9289
9374
|
};
|
|
9290
9375
|
}
|
|
9291
9376
|
switch (state) {
|
|
9292
9377
|
case "sent":
|
|
9293
9378
|
return {
|
|
9294
|
-
stroke: "border-l-[3px] border-l-green-500/
|
|
9295
|
-
content: "text-muted-foreground/
|
|
9296
|
-
progressBg: "bg-green-500",
|
|
9297
|
-
iconColor: "text-green-600 dark:text-green-400"
|
|
9379
|
+
stroke: "border-l-[3px] border-l-green-500/40",
|
|
9380
|
+
content: "text-muted-foreground/50",
|
|
9381
|
+
progressBg: "bg-green-500/50",
|
|
9382
|
+
iconColor: "text-green-600/50 dark:text-green-400/50",
|
|
9383
|
+
cardBg: "bg-muted/30"
|
|
9298
9384
|
};
|
|
9299
9385
|
case "ready":
|
|
9300
9386
|
return {
|
|
9301
9387
|
stroke: "border-l-[3px] border-l-green-500",
|
|
9302
9388
|
content: "text-foreground",
|
|
9303
9389
|
progressBg: "bg-green-500",
|
|
9304
|
-
iconColor: "text-green-600 dark:text-green-400"
|
|
9390
|
+
iconColor: "text-green-600 dark:text-green-400",
|
|
9391
|
+
cardBg: "bg-background"
|
|
9305
9392
|
};
|
|
9306
9393
|
default:
|
|
9307
9394
|
return {
|
|
9308
9395
|
stroke: isHovered ? "border-l-[3px] border-l-primary/50" : "border-l-[3px] border-l-border",
|
|
9309
9396
|
content: "text-foreground",
|
|
9310
9397
|
progressBg: "bg-primary",
|
|
9311
|
-
iconColor: "text-muted-foreground"
|
|
9398
|
+
iconColor: "text-muted-foreground",
|
|
9399
|
+
cardBg: "bg-background"
|
|
9312
9400
|
};
|
|
9313
9401
|
}
|
|
9314
9402
|
}
|
|
9315
9403
|
function DeliveryBadge({
|
|
9316
9404
|
delivery,
|
|
9317
9405
|
onClick,
|
|
9406
|
+
onCommentClick,
|
|
9318
9407
|
className
|
|
9319
9408
|
}) {
|
|
9320
9409
|
const [isHovered, setIsHovered] = React27.useState(false);
|
|
@@ -9377,70 +9466,125 @@ function DeliveryBadge({
|
|
|
9377
9466
|
onClick?.();
|
|
9378
9467
|
}
|
|
9379
9468
|
};
|
|
9469
|
+
const handleCommentClick = (e) => {
|
|
9470
|
+
e.stopPropagation();
|
|
9471
|
+
onCommentClick?.();
|
|
9472
|
+
};
|
|
9473
|
+
const amountColorClass = React27.useMemo(() => {
|
|
9474
|
+
if (visualState === "sent") {
|
|
9475
|
+
return "text-muted-foreground/40";
|
|
9476
|
+
}
|
|
9477
|
+
if (delivery.isReadyToUnload) {
|
|
9478
|
+
return "text-green-600 dark:text-green-400";
|
|
9479
|
+
}
|
|
9480
|
+
if (delivery.hasProductionRisk) {
|
|
9481
|
+
return "text-red-600 dark:text-red-400";
|
|
9482
|
+
}
|
|
9483
|
+
return "text-muted-foreground";
|
|
9484
|
+
}, [visualState, delivery.isReadyToUnload, delivery.hasProductionRisk]);
|
|
9380
9485
|
return /* @__PURE__ */ jsxs(
|
|
9381
|
-
"
|
|
9486
|
+
"div",
|
|
9382
9487
|
{
|
|
9383
|
-
type: "button",
|
|
9384
|
-
onClick: handleClick,
|
|
9385
|
-
onKeyDown: handleKeyDown,
|
|
9386
|
-
onMouseEnter: () => setIsHovered(true),
|
|
9387
|
-
onMouseLeave: () => setIsHovered(false),
|
|
9388
9488
|
className: cn(
|
|
9389
|
-
// Position relative for comment
|
|
9489
|
+
// Position relative for comment button
|
|
9390
9490
|
"relative",
|
|
9391
9491
|
// Full-width in cell, 90° corners
|
|
9392
9492
|
"w-full rounded-none",
|
|
9393
9493
|
// Sizing using Quantum tokens:
|
|
9394
|
-
// - h-[
|
|
9395
|
-
// -
|
|
9396
|
-
// -
|
|
9397
|
-
|
|
9398
|
-
|
|
9399
|
-
|
|
9400
|
-
|
|
9401
|
-
"
|
|
9494
|
+
// - min-h-[100px] card min-height
|
|
9495
|
+
// - pt-4 pb-3 = vertical padding (j3m.spacing.m / j3m.spacing.s)
|
|
9496
|
+
// - pl-4 = left padding (j3m.spacing.m)
|
|
9497
|
+
// - pr-2 = minimal right padding (progress bar extends further)
|
|
9498
|
+
"min-h-[100px] pt-4 pb-3 pl-4 pr-2",
|
|
9499
|
+
// Card base: dynamic background based on state, complete border
|
|
9500
|
+
styles.cardBg,
|
|
9501
|
+
"border border-border",
|
|
9402
9502
|
// Left stroke for status
|
|
9403
9503
|
styles.stroke,
|
|
9404
|
-
// Interactive states
|
|
9405
|
-
"
|
|
9406
|
-
"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]",
|
|
9407
|
-
"active:translate-y-0 active:shadow-sm",
|
|
9408
|
-
// Focus state
|
|
9409
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1",
|
|
9410
|
-
// Greyed out for sent state
|
|
9411
|
-
visualState === "sent" && "opacity-60",
|
|
9504
|
+
// Interactive states (reduced for sent state)
|
|
9505
|
+
"transition-all duration-200 ease-out",
|
|
9506
|
+
visualState !== "sent" && "hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]",
|
|
9412
9507
|
className
|
|
9413
9508
|
),
|
|
9414
9509
|
children: [
|
|
9415
|
-
|
|
9416
|
-
|
|
9510
|
+
/* @__PURE__ */ jsx(
|
|
9511
|
+
Button,
|
|
9417
9512
|
{
|
|
9418
|
-
|
|
9419
|
-
|
|
9513
|
+
type: "button",
|
|
9514
|
+
variant: "ghost",
|
|
9515
|
+
size: "icon",
|
|
9516
|
+
className: cn(
|
|
9517
|
+
"absolute top-2 right-2",
|
|
9518
|
+
// 44px touch target for accessibility
|
|
9519
|
+
"h-11 w-11",
|
|
9520
|
+
"rounded-full",
|
|
9521
|
+
hasComments && "text-primary"
|
|
9522
|
+
),
|
|
9523
|
+
onClick: handleCommentClick,
|
|
9524
|
+
"aria-label": hasComments ? `${delivery.comments.length} comments` : "Add comment",
|
|
9525
|
+
children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
9526
|
+
/* @__PURE__ */ jsx(MessageSquare, { className: "h-5 w-5" }),
|
|
9527
|
+
hasComments && /* @__PURE__ */ jsx(
|
|
9528
|
+
"span",
|
|
9529
|
+
{
|
|
9530
|
+
className: "absolute -top-1 -right-1 h-2.5 w-2.5 rounded-full bg-primary border-2 border-background",
|
|
9531
|
+
"aria-hidden": "true"
|
|
9532
|
+
}
|
|
9533
|
+
)
|
|
9534
|
+
] })
|
|
9420
9535
|
}
|
|
9421
9536
|
),
|
|
9422
|
-
/* @__PURE__ */ jsxs(
|
|
9423
|
-
|
|
9424
|
-
|
|
9425
|
-
|
|
9426
|
-
|
|
9427
|
-
|
|
9428
|
-
|
|
9429
|
-
|
|
9430
|
-
|
|
9431
|
-
|
|
9432
|
-
"
|
|
9433
|
-
|
|
9434
|
-
|
|
9435
|
-
|
|
9436
|
-
|
|
9437
|
-
|
|
9438
|
-
|
|
9439
|
-
"
|
|
9440
|
-
|
|
9441
|
-
|
|
9442
|
-
|
|
9443
|
-
|
|
9537
|
+
/* @__PURE__ */ jsxs(
|
|
9538
|
+
"button",
|
|
9539
|
+
{
|
|
9540
|
+
type: "button",
|
|
9541
|
+
onClick: handleClick,
|
|
9542
|
+
onKeyDown: handleKeyDown,
|
|
9543
|
+
onMouseEnter: () => setIsHovered(true),
|
|
9544
|
+
onMouseLeave: () => setIsHovered(false),
|
|
9545
|
+
className: cn(
|
|
9546
|
+
// Full width, no background (inherits from parent)
|
|
9547
|
+
"w-full bg-transparent text-left",
|
|
9548
|
+
// Layout - vertical stack
|
|
9549
|
+
"flex flex-col gap-2",
|
|
9550
|
+
// Interactive states
|
|
9551
|
+
"cursor-pointer",
|
|
9552
|
+
"active:translate-y-0 active:shadow-sm",
|
|
9553
|
+
// Focus state
|
|
9554
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1"
|
|
9555
|
+
),
|
|
9556
|
+
children: [
|
|
9557
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 overflow-hidden pr-12", children: [
|
|
9558
|
+
/* @__PURE__ */ jsx("span", { className: cn("text-sm font-semibold truncate", styles.content), children: prefixTitle }),
|
|
9559
|
+
delivery.hasProductionRisk && /* @__PURE__ */ jsx(AlertTriangle, { className: "h-4 w-4 text-red-500 shrink-0" }),
|
|
9560
|
+
delivery.supplierName && /* @__PURE__ */ jsx("span", { className: cn(
|
|
9561
|
+
"text-xs truncate ml-auto",
|
|
9562
|
+
visualState === "sent" ? "text-muted-foreground/40" : "text-muted-foreground"
|
|
9563
|
+
), children: delivery.supplierName })
|
|
9564
|
+
] }),
|
|
9565
|
+
/* @__PURE__ */ jsx("div", { className: "pr-14", children: /* @__PURE__ */ jsx("div", { className: "h-2 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx(
|
|
9566
|
+
"div",
|
|
9567
|
+
{
|
|
9568
|
+
className: cn("h-full rounded-full transition-all", styles.progressBg),
|
|
9569
|
+
style: { width: `${productionProgress}%` }
|
|
9570
|
+
}
|
|
9571
|
+
) }) }),
|
|
9572
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
9573
|
+
productionDisplay && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
9574
|
+
/* @__PURE__ */ jsx(Factory, { className: cn("h-3 w-3 shrink-0", styles.iconColor) }),
|
|
9575
|
+
/* @__PURE__ */ jsx("span", { className: cn(
|
|
9576
|
+
"text-[11px] tabular-nums font-medium",
|
|
9577
|
+
amountColorClass
|
|
9578
|
+
), children: productionDisplay })
|
|
9579
|
+
] }),
|
|
9580
|
+
visualState === "sent" && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 ml-auto", children: [
|
|
9581
|
+
/* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 text-green-600/60 dark:text-green-400/60 shrink-0" }),
|
|
9582
|
+
/* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium text-muted-foreground/50 uppercase tracking-wide", children: "Sent" })
|
|
9583
|
+
] })
|
|
9584
|
+
] })
|
|
9585
|
+
]
|
|
9586
|
+
}
|
|
9587
|
+
)
|
|
9444
9588
|
]
|
|
9445
9589
|
}
|
|
9446
9590
|
);
|
|
@@ -9450,7 +9594,7 @@ function WeeklyLoadingView({
|
|
|
9450
9594
|
deliveries,
|
|
9451
9595
|
onDeliveryClick,
|
|
9452
9596
|
onWeekChange,
|
|
9453
|
-
|
|
9597
|
+
onDeliveryCommentClick,
|
|
9454
9598
|
showNavigation = true,
|
|
9455
9599
|
className
|
|
9456
9600
|
}) {
|
|
@@ -9481,20 +9625,6 @@ function WeeklyLoadingView({
|
|
|
9481
9625
|
}
|
|
9482
9626
|
return grouped;
|
|
9483
9627
|
}, [deliveries]);
|
|
9484
|
-
const commentCountByDay = React27.useMemo(() => {
|
|
9485
|
-
const counts = /* @__PURE__ */ new Map();
|
|
9486
|
-
for (let i = 1; i <= 5; i++) {
|
|
9487
|
-
counts.set(i, 0);
|
|
9488
|
-
}
|
|
9489
|
-
for (const delivery of deliveries) {
|
|
9490
|
-
const dayOfWeek = delivery.date.getDay();
|
|
9491
|
-
if (dayOfWeek >= 1 && dayOfWeek <= 5) {
|
|
9492
|
-
const current = counts.get(dayOfWeek) ?? 0;
|
|
9493
|
-
counts.set(dayOfWeek, current + delivery.comments.length);
|
|
9494
|
-
}
|
|
9495
|
-
}
|
|
9496
|
-
return counts;
|
|
9497
|
-
}, [deliveries]);
|
|
9498
9628
|
const totalDeliveries = deliveries.length;
|
|
9499
9629
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", className), children: [
|
|
9500
9630
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 border-b border-border p-4 lg:flex-row lg:items-center lg:justify-between", children: [
|
|
@@ -9559,54 +9689,27 @@ function WeeklyLoadingView({
|
|
|
9559
9689
|
] }),
|
|
9560
9690
|
/* @__PURE__ */ jsxs(ScrollArea, { className: "flex-1", children: [
|
|
9561
9691
|
/* @__PURE__ */ jsxs("div", { className: "hidden sm:block", children: [
|
|
9562
|
-
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-5 border-b border-border bg-muted/30", children: weekDays.map(({ date, dayOfWeek, isToday: dayIsToday }) =>
|
|
9563
|
-
|
|
9564
|
-
|
|
9565
|
-
|
|
9566
|
-
|
|
9567
|
-
|
|
9568
|
-
|
|
9569
|
-
|
|
9570
|
-
|
|
9571
|
-
|
|
9572
|
-
|
|
9573
|
-
|
|
9574
|
-
children:
|
|
9575
|
-
|
|
9576
|
-
|
|
9577
|
-
|
|
9578
|
-
|
|
9579
|
-
|
|
9580
|
-
|
|
9581
|
-
|
|
9582
|
-
|
|
9583
|
-
/* @__PURE__ */ jsxs(
|
|
9584
|
-
Button,
|
|
9585
|
-
{
|
|
9586
|
-
variant: "ghost",
|
|
9587
|
-
size: "icon",
|
|
9588
|
-
className: cn(
|
|
9589
|
-
"absolute top-1 right-1 h-7 w-7",
|
|
9590
|
-
dayCommentCount > 0 && "text-primary"
|
|
9591
|
-
),
|
|
9592
|
-
onClick: (e) => {
|
|
9593
|
-
e.stopPropagation();
|
|
9594
|
-
onDayCommentClick?.(dayOfWeek, date);
|
|
9595
|
-
},
|
|
9596
|
-
children: [
|
|
9597
|
-
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
9598
|
-
/* @__PURE__ */ jsx(MessageSquare, { className: "h-4 w-4" }),
|
|
9599
|
-
dayCommentCount > 0 && /* @__PURE__ */ jsx("span", { className: "absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary" })
|
|
9600
|
-
] }),
|
|
9601
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: dayCommentCount > 0 ? `${dayCommentCount} comments on ${getShortDayLabel(dayOfWeek)}` : `Add comment for ${getShortDayLabel(dayOfWeek)}` })
|
|
9602
|
-
]
|
|
9603
|
-
}
|
|
9604
|
-
)
|
|
9605
|
-
]
|
|
9606
|
-
},
|
|
9607
|
-
dayOfWeek
|
|
9608
|
-
);
|
|
9609
|
-
}) }),
|
|
9692
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-5 border-b border-border bg-muted/30", children: weekDays.map(({ date, dayOfWeek, isToday: dayIsToday }) => /* @__PURE__ */ jsxs(
|
|
9693
|
+
"div",
|
|
9694
|
+
{
|
|
9695
|
+
className: cn(
|
|
9696
|
+
// Compact padding
|
|
9697
|
+
"flex flex-col items-center justify-center py-2 px-2",
|
|
9698
|
+
dayIsToday && "bg-primary/5"
|
|
9699
|
+
),
|
|
9700
|
+
children: [
|
|
9701
|
+
/* @__PURE__ */ jsx("span", { className: cn(
|
|
9702
|
+
"text-[11px] font-semibold uppercase tracking-wide leading-none",
|
|
9703
|
+
dayIsToday ? "text-primary" : "text-muted-foreground"
|
|
9704
|
+
), children: getShortDayLabel(dayOfWeek) }),
|
|
9705
|
+
/* @__PURE__ */ jsx("span", { className: cn(
|
|
9706
|
+
"text-lg font-medium tabular-nums leading-tight mt-0.5",
|
|
9707
|
+
dayIsToday ? "text-primary" : "text-foreground"
|
|
9708
|
+
), children: date.getDate() })
|
|
9709
|
+
]
|
|
9710
|
+
},
|
|
9711
|
+
dayOfWeek
|
|
9712
|
+
)) }),
|
|
9610
9713
|
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-5", children: weekDays.map(({ dayOfWeek, isToday: dayIsToday }) => {
|
|
9611
9714
|
const dayDeliveries = deliveriesByDay.get(dayOfWeek) ?? [];
|
|
9612
9715
|
return /* @__PURE__ */ jsx(
|
|
@@ -9621,7 +9724,8 @@ function WeeklyLoadingView({
|
|
|
9621
9724
|
DeliveryBadge,
|
|
9622
9725
|
{
|
|
9623
9726
|
delivery,
|
|
9624
|
-
onClick: () => onDeliveryClick?.(delivery)
|
|
9727
|
+
onClick: () => onDeliveryClick?.(delivery),
|
|
9728
|
+
onCommentClick: () => onDeliveryCommentClick?.(delivery)
|
|
9625
9729
|
},
|
|
9626
9730
|
delivery.id
|
|
9627
9731
|
)) : /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-6 text-sm text-muted-foreground/40", children: "\u2014" }) })
|
|
@@ -9632,7 +9736,6 @@ function WeeklyLoadingView({
|
|
|
9632
9736
|
] }),
|
|
9633
9737
|
/* @__PURE__ */ jsx("div", { className: "sm:hidden divide-y divide-border", children: weekDays.map(({ date, dayOfWeek, isToday: dayIsToday }) => {
|
|
9634
9738
|
const dayDeliveries = deliveriesByDay.get(dayOfWeek) ?? [];
|
|
9635
|
-
const dayCommentCount = commentCountByDay.get(dayOfWeek) ?? 0;
|
|
9636
9739
|
return /* @__PURE__ */ jsxs(
|
|
9637
9740
|
"div",
|
|
9638
9741
|
{
|
|
@@ -9641,52 +9744,31 @@ function WeeklyLoadingView({
|
|
|
9641
9744
|
),
|
|
9642
9745
|
children: [
|
|
9643
9746
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2", children: [
|
|
9644
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-
|
|
9645
|
-
/* @__PURE__ */
|
|
9646
|
-
|
|
9647
|
-
|
|
9648
|
-
|
|
9649
|
-
|
|
9650
|
-
|
|
9651
|
-
|
|
9652
|
-
|
|
9653
|
-
|
|
9654
|
-
] }),
|
|
9655
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
9656
|
-
/* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
|
|
9657
|
-
dayDeliveries.length,
|
|
9658
|
-
" ",
|
|
9659
|
-
dayDeliveries.length === 1 ? "delivery" : "deliveries"
|
|
9747
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
9748
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center min-w-[40px]", children: [
|
|
9749
|
+
/* @__PURE__ */ jsx("span", { className: cn(
|
|
9750
|
+
"text-[11px] font-semibold uppercase tracking-wide leading-none",
|
|
9751
|
+
dayIsToday ? "text-primary" : "text-muted-foreground"
|
|
9752
|
+
), children: getShortDayLabel(dayOfWeek) }),
|
|
9753
|
+
/* @__PURE__ */ jsx("span", { className: cn(
|
|
9754
|
+
"text-lg font-medium tabular-nums leading-tight mt-0.5",
|
|
9755
|
+
dayIsToday ? "text-primary" : "text-foreground"
|
|
9756
|
+
), children: date.getDate() })
|
|
9660
9757
|
] }),
|
|
9661
|
-
/* @__PURE__ */
|
|
9662
|
-
|
|
9663
|
-
|
|
9664
|
-
|
|
9665
|
-
|
|
9666
|
-
|
|
9667
|
-
"h-7 w-7",
|
|
9668
|
-
dayCommentCount > 0 && "text-primary"
|
|
9669
|
-
),
|
|
9670
|
-
onClick: (e) => {
|
|
9671
|
-
e.stopPropagation();
|
|
9672
|
-
onDayCommentClick?.(dayOfWeek, date);
|
|
9673
|
-
},
|
|
9674
|
-
children: [
|
|
9675
|
-
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
9676
|
-
/* @__PURE__ */ jsx(MessageSquare, { className: "h-4 w-4" }),
|
|
9677
|
-
dayCommentCount > 0 && /* @__PURE__ */ jsx("span", { className: "absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary" })
|
|
9678
|
-
] }),
|
|
9679
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Comments" })
|
|
9680
|
-
]
|
|
9681
|
-
}
|
|
9682
|
-
)
|
|
9758
|
+
dayIsToday && /* @__PURE__ */ jsx("span", { className: "text-xs text-primary font-medium bg-primary/10 px-2 py-0.5 rounded", children: "Today" })
|
|
9759
|
+
] }),
|
|
9760
|
+
/* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
|
|
9761
|
+
dayDeliveries.length,
|
|
9762
|
+
" ",
|
|
9763
|
+
dayDeliveries.length === 1 ? "delivery" : "deliveries"
|
|
9683
9764
|
] })
|
|
9684
9765
|
] }),
|
|
9685
9766
|
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3 p-3 pt-0", children: dayDeliveries.length > 0 ? dayDeliveries.map((delivery) => /* @__PURE__ */ jsx(
|
|
9686
9767
|
DeliveryBadge,
|
|
9687
9768
|
{
|
|
9688
9769
|
delivery,
|
|
9689
|
-
onClick: () => onDeliveryClick?.(delivery)
|
|
9770
|
+
onClick: () => onDeliveryClick?.(delivery),
|
|
9771
|
+
onCommentClick: () => onDeliveryCommentClick?.(delivery)
|
|
9690
9772
|
},
|
|
9691
9773
|
delivery.id
|
|
9692
9774
|
)) : /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground/40 py-4 text-center", children: "\u2014" }) })
|
|
@@ -9796,7 +9878,7 @@ function AddCommentDialog({
|
|
|
9796
9878
|
}, [open]);
|
|
9797
9879
|
return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-md", children: [
|
|
9798
9880
|
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
9799
|
-
/* @__PURE__ */ jsx(DialogTitle, { children: "Add pre-
|
|
9881
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: "Add pre-loading note" }),
|
|
9800
9882
|
/* @__PURE__ */ jsxs(DialogDescription, { children: [
|
|
9801
9883
|
"Add a note for ",
|
|
9802
9884
|
/* @__PURE__ */ jsx("strong", { children: delivery.label }),
|
|
@@ -9812,7 +9894,7 @@ function AddCommentDialog({
|
|
|
9812
9894
|
Textarea,
|
|
9813
9895
|
{
|
|
9814
9896
|
id: "comment-text",
|
|
9815
|
-
placeholder: "Add a note before
|
|
9897
|
+
placeholder: "Add a note before loading...",
|
|
9816
9898
|
value: commentText,
|
|
9817
9899
|
onChange: (e) => setCommentText(e.target.value),
|
|
9818
9900
|
onKeyDown: handleKeyDown,
|
|
@@ -9867,7 +9949,7 @@ function CommentsSection({
|
|
|
9867
9949
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
9868
9950
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
9869
9951
|
/* @__PURE__ */ jsx(MessageSquare, { className: "h-4 w-4 text-muted-foreground" }),
|
|
9870
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: "Notes before
|
|
9952
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: "Notes before loading" }),
|
|
9871
9953
|
comments.length > 0 && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-[10px] h-5", children: comments.length })
|
|
9872
9954
|
] }),
|
|
9873
9955
|
/* @__PURE__ */ jsxs(
|
|
@@ -9902,7 +9984,7 @@ function CommentsSection({
|
|
|
9902
9984
|
] }),
|
|
9903
9985
|
/* @__PURE__ */ jsx("p", { className: "text-sm", children: comment.text })
|
|
9904
9986
|
] }, comment.id)) })
|
|
9905
|
-
] }) : /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed p-4 text-center text-sm text-muted-foreground", children: "No pre-
|
|
9987
|
+
] }) : /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed p-4 text-center text-sm text-muted-foreground", children: "No pre-loading notes yet. Add notes before confirming the load." })
|
|
9906
9988
|
] }),
|
|
9907
9989
|
/* @__PURE__ */ jsx(
|
|
9908
9990
|
AddCommentDialog,
|
|
@@ -9965,7 +10047,7 @@ function DeliveryDetailPage({
|
|
|
9965
10047
|
const addons = delivery.elements.filter((e) => e.status === "addon");
|
|
9966
10048
|
return { loaded, missing, moved, addons };
|
|
9967
10049
|
}, [delivery.elements]);
|
|
9968
|
-
const
|
|
10050
|
+
const preLoadingComments = delivery.comments.filter((c) => c.context === "pre_unloading");
|
|
9969
10051
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-full", children: [
|
|
9970
10052
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 px-4 py-3 border-b bg-background sticky top-0 z-10", children: /* @__PURE__ */ jsxs(
|
|
9971
10053
|
Button,
|
|
@@ -10014,7 +10096,7 @@ function DeliveryDetailPage({
|
|
|
10014
10096
|
{
|
|
10015
10097
|
variant: "outline",
|
|
10016
10098
|
className: "bg-green-100 dark:bg-green-900/50 border-green-300 dark:border-green-700 text-green-700 dark:text-green-300",
|
|
10017
|
-
children: "Ready to
|
|
10099
|
+
children: "Ready to load"
|
|
10018
10100
|
}
|
|
10019
10101
|
)
|
|
10020
10102
|
] })
|
|
@@ -10105,13 +10187,13 @@ function DeliveryDetailPage({
|
|
|
10105
10187
|
] })
|
|
10106
10188
|
] })
|
|
10107
10189
|
] }),
|
|
10108
|
-
|
|
10190
|
+
(elementsByStatus.loaded.length > 0 || elementsByStatus.missing.length > 0 || elementsByStatus.moved.length > 0) && /* @__PURE__ */ jsxs("section", { className: "space-y-3", children: [
|
|
10109
10191
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
10110
10192
|
/* @__PURE__ */ jsx(Package, { className: "h-4 w-4 text-muted-foreground" }),
|
|
10111
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: "
|
|
10193
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: "What should be packed" }),
|
|
10112
10194
|
/* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground ml-auto", children: [
|
|
10113
|
-
|
|
10114
|
-
"
|
|
10195
|
+
elementsByStatus.loaded.length + elementsByStatus.missing.length + elementsByStatus.moved.length,
|
|
10196
|
+
" items"
|
|
10115
10197
|
] })
|
|
10116
10198
|
] }),
|
|
10117
10199
|
/* @__PURE__ */ jsx("div", { className: "rounded-lg border overflow-hidden", children: /* @__PURE__ */ jsxs(Table, { children: [
|
|
@@ -10122,7 +10204,7 @@ function DeliveryDetailPage({
|
|
|
10122
10204
|
/* @__PURE__ */ jsx(TableHead, { className: "font-semibold text-right", children: "Size (m\xB2)" }),
|
|
10123
10205
|
/* @__PURE__ */ jsx(TableHead, { className: "font-semibold text-center", children: "Status" })
|
|
10124
10206
|
] }) }),
|
|
10125
|
-
/* @__PURE__ */ jsx(TableBody, { children:
|
|
10207
|
+
/* @__PURE__ */ jsx(TableBody, { children: [...elementsByStatus.loaded, ...elementsByStatus.missing, ...elementsByStatus.moved].map((element) => /* @__PURE__ */ jsxs(
|
|
10126
10208
|
TableRow,
|
|
10127
10209
|
{
|
|
10128
10210
|
className: getElementRowBg(element.status),
|
|
@@ -10150,10 +10232,6 @@ function DeliveryDetailPage({
|
|
|
10150
10232
|
element.status === "moved" && element.actualDeliveryLabel && /* @__PURE__ */ jsxs("span", { className: "text-[9px] text-blue-600 dark:text-blue-400", children: [
|
|
10151
10233
|
"\u2192 ",
|
|
10152
10234
|
element.actualDeliveryLabel
|
|
10153
|
-
] }),
|
|
10154
|
-
element.status === "addon" && element.originalDeliveryLabel && /* @__PURE__ */ jsxs("span", { className: "text-[9px] text-purple-600 dark:text-purple-400", children: [
|
|
10155
|
-
"from ",
|
|
10156
|
-
element.originalDeliveryLabel
|
|
10157
10235
|
] })
|
|
10158
10236
|
] }) })
|
|
10159
10237
|
]
|
|
@@ -10162,10 +10240,48 @@ function DeliveryDetailPage({
|
|
|
10162
10240
|
)) })
|
|
10163
10241
|
] }) })
|
|
10164
10242
|
] }),
|
|
10243
|
+
elementsByStatus.addons.length > 0 && /* @__PURE__ */ jsxs("section", { className: "space-y-3", children: [
|
|
10244
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
10245
|
+
/* @__PURE__ */ jsx(Plus, { className: "h-4 w-4 text-purple-600 dark:text-purple-400" }),
|
|
10246
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: "Extra items (moved to this delivery)" }),
|
|
10247
|
+
/* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground ml-auto", children: [
|
|
10248
|
+
elementsByStatus.addons.length,
|
|
10249
|
+
" items"
|
|
10250
|
+
] })
|
|
10251
|
+
] }),
|
|
10252
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "These items were originally planned for other deliveries but have been moved to this one." }),
|
|
10253
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-lg border border-purple-200 dark:border-purple-800 overflow-hidden", children: /* @__PURE__ */ jsxs(Table, { children: [
|
|
10254
|
+
/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { className: "bg-purple-50/50 dark:bg-purple-950/30 hover:bg-purple-50/50 dark:hover:bg-purple-950/30", children: [
|
|
10255
|
+
/* @__PURE__ */ jsx(TableHead, { className: "font-semibold", children: "Prefix" }),
|
|
10256
|
+
/* @__PURE__ */ jsx(TableHead, { className: "font-semibold", children: "Type" }),
|
|
10257
|
+
/* @__PURE__ */ jsx(TableHead, { className: "font-semibold text-right", children: "Weight" }),
|
|
10258
|
+
/* @__PURE__ */ jsx(TableHead, { className: "font-semibold text-right", children: "Size (m\xB2)" }),
|
|
10259
|
+
/* @__PURE__ */ jsx(TableHead, { className: "font-semibold", children: "Moved from" })
|
|
10260
|
+
] }) }),
|
|
10261
|
+
/* @__PURE__ */ jsx(TableBody, { children: elementsByStatus.addons.map((element) => /* @__PURE__ */ jsxs(
|
|
10262
|
+
TableRow,
|
|
10263
|
+
{
|
|
10264
|
+
className: "bg-purple-50/30 dark:bg-purple-950/10",
|
|
10265
|
+
children: [
|
|
10266
|
+
/* @__PURE__ */ jsx(TableCell, { className: "font-medium", children: element.prefix }),
|
|
10267
|
+
/* @__PURE__ */ jsx(TableCell, { children: element.type }),
|
|
10268
|
+
/* @__PURE__ */ jsx(TableCell, { className: "text-right tabular-nums", children: element.weight ? /* @__PURE__ */ jsxs("span", { children: [
|
|
10269
|
+
element.weight,
|
|
10270
|
+
" ",
|
|
10271
|
+
element.weightUnit || "kg"
|
|
10272
|
+
] }) : "\u2014" }),
|
|
10273
|
+
/* @__PURE__ */ jsx(TableCell, { className: "text-right tabular-nums", children: element.sizeSqm ?? "\u2014" }),
|
|
10274
|
+
/* @__PURE__ */ jsx(TableCell, { children: element.originalDeliveryLabel ? /* @__PURE__ */ jsx("span", { className: "text-sm text-purple-600 dark:text-purple-400", children: element.originalDeliveryLabel }) : /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "\u2014" }) })
|
|
10275
|
+
]
|
|
10276
|
+
},
|
|
10277
|
+
element.id
|
|
10278
|
+
)) })
|
|
10279
|
+
] }) })
|
|
10280
|
+
] }),
|
|
10165
10281
|
/* @__PURE__ */ jsx(
|
|
10166
10282
|
CommentsSection,
|
|
10167
10283
|
{
|
|
10168
|
-
comments:
|
|
10284
|
+
comments: preLoadingComments,
|
|
10169
10285
|
delivery,
|
|
10170
10286
|
weekId: week.weekKey,
|
|
10171
10287
|
onAddComment
|
|
@@ -10202,6 +10318,9 @@ function SupplierWeeklyLoading({
|
|
|
10202
10318
|
}) {
|
|
10203
10319
|
const [selectedDelivery, setSelectedDelivery] = React27.useState(null);
|
|
10204
10320
|
const [sheetOpen, setSheetOpen] = React27.useState(false);
|
|
10321
|
+
const [commentDelivery, setCommentDelivery] = React27.useState(null);
|
|
10322
|
+
const [commentDialogOpen, setCommentDialogOpen] = React27.useState(false);
|
|
10323
|
+
const [commentText, setCommentText] = React27.useState("");
|
|
10205
10324
|
const handleDeliveryClick = (delivery) => {
|
|
10206
10325
|
setSelectedDelivery(delivery);
|
|
10207
10326
|
setSheetOpen(true);
|
|
@@ -10212,6 +10331,38 @@ function SupplierWeeklyLoading({
|
|
|
10212
10331
|
setTimeout(() => setSelectedDelivery(null), 200);
|
|
10213
10332
|
onBack?.();
|
|
10214
10333
|
};
|
|
10334
|
+
const handleDeliveryCommentClick = (delivery) => {
|
|
10335
|
+
setCommentDelivery(delivery);
|
|
10336
|
+
setCommentDialogOpen(true);
|
|
10337
|
+
};
|
|
10338
|
+
const handleCommentDialogClose = () => {
|
|
10339
|
+
setCommentDialogOpen(false);
|
|
10340
|
+
setCommentText("");
|
|
10341
|
+
setTimeout(() => setCommentDelivery(null), 200);
|
|
10342
|
+
};
|
|
10343
|
+
const handleCommentSubmit = () => {
|
|
10344
|
+
if (commentText.trim() && commentDelivery && onAddComment) {
|
|
10345
|
+
onAddComment({
|
|
10346
|
+
author: "Current User",
|
|
10347
|
+
// Would come from auth context in real app
|
|
10348
|
+
text: commentText.trim(),
|
|
10349
|
+
context: "pre_unloading",
|
|
10350
|
+
weekId: week.weekKey,
|
|
10351
|
+
deliveryId: commentDelivery.id,
|
|
10352
|
+
supplierId: commentDelivery.supplierId,
|
|
10353
|
+
supplierName: commentDelivery.supplierName,
|
|
10354
|
+
prefixId: commentDelivery.prefixScope,
|
|
10355
|
+
prefixName: commentDelivery.prefixScope
|
|
10356
|
+
});
|
|
10357
|
+
handleCommentDialogClose();
|
|
10358
|
+
}
|
|
10359
|
+
};
|
|
10360
|
+
const handleCommentKeyDown = (e) => {
|
|
10361
|
+
if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
|
|
10362
|
+
e.preventDefault();
|
|
10363
|
+
handleCommentSubmit();
|
|
10364
|
+
}
|
|
10365
|
+
};
|
|
10215
10366
|
const Wrapper = bordered ? Card : "div";
|
|
10216
10367
|
const Content14 = bordered ? CardContent : "div";
|
|
10217
10368
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -10230,6 +10381,7 @@ function SupplierWeeklyLoading({
|
|
|
10230
10381
|
week,
|
|
10231
10382
|
deliveries,
|
|
10232
10383
|
onDeliveryClick: handleDeliveryClick,
|
|
10384
|
+
onDeliveryCommentClick: handleDeliveryCommentClick,
|
|
10233
10385
|
onWeekChange,
|
|
10234
10386
|
showNavigation
|
|
10235
10387
|
}
|
|
@@ -10258,7 +10410,58 @@ function SupplierWeeklyLoading({
|
|
|
10258
10410
|
)
|
|
10259
10411
|
]
|
|
10260
10412
|
}
|
|
10261
|
-
) })
|
|
10413
|
+
) }),
|
|
10414
|
+
/* @__PURE__ */ jsx(Dialog, { open: commentDialogOpen, onOpenChange: (open) => !open && handleCommentDialogClose(), children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-md", children: [
|
|
10415
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
10416
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: "Add pre-loading note" }),
|
|
10417
|
+
/* @__PURE__ */ jsxs(DialogDescription, { children: [
|
|
10418
|
+
"Add a note for ",
|
|
10419
|
+
/* @__PURE__ */ jsx("strong", { children: commentDelivery?.label }),
|
|
10420
|
+
" (",
|
|
10421
|
+
commentDelivery?.supplierName,
|
|
10422
|
+
commentDelivery?.prefixScope && ` \u2022 ${commentDelivery.prefixScope}`,
|
|
10423
|
+
")."
|
|
10424
|
+
] })
|
|
10425
|
+
] }),
|
|
10426
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-4 py-2", children: /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
10427
|
+
/* @__PURE__ */ jsx(Label2, { htmlFor: "card-comment-text", className: "text-sm font-medium", children: "Note" }),
|
|
10428
|
+
/* @__PURE__ */ jsx(
|
|
10429
|
+
Textarea,
|
|
10430
|
+
{
|
|
10431
|
+
id: "card-comment-text",
|
|
10432
|
+
placeholder: "Add a note before loading...",
|
|
10433
|
+
value: commentText,
|
|
10434
|
+
onChange: (e) => setCommentText(e.target.value),
|
|
10435
|
+
onKeyDown: handleCommentKeyDown,
|
|
10436
|
+
className: "min-h-[120px] text-base resize-none",
|
|
10437
|
+
autoFocus: true
|
|
10438
|
+
}
|
|
10439
|
+
),
|
|
10440
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "\u2318+Enter to save" })
|
|
10441
|
+
] }) }),
|
|
10442
|
+
/* @__PURE__ */ jsxs(DialogFooter, { className: "gap-2 sm:gap-0", children: [
|
|
10443
|
+
/* @__PURE__ */ jsx(
|
|
10444
|
+
Button,
|
|
10445
|
+
{
|
|
10446
|
+
variant: "ghost",
|
|
10447
|
+
onClick: handleCommentDialogClose,
|
|
10448
|
+
children: "Cancel"
|
|
10449
|
+
}
|
|
10450
|
+
),
|
|
10451
|
+
/* @__PURE__ */ jsxs(
|
|
10452
|
+
Button,
|
|
10453
|
+
{
|
|
10454
|
+
onClick: handleCommentSubmit,
|
|
10455
|
+
disabled: !commentText.trim(),
|
|
10456
|
+
className: "gap-1.5",
|
|
10457
|
+
children: [
|
|
10458
|
+
/* @__PURE__ */ jsx(Send, { className: "h-4 w-4" }),
|
|
10459
|
+
"Save note"
|
|
10460
|
+
]
|
|
10461
|
+
}
|
|
10462
|
+
)
|
|
10463
|
+
] })
|
|
10464
|
+
] }) })
|
|
10262
10465
|
] });
|
|
10263
10466
|
}
|
|
10264
10467
|
function getStatusBadgeVariant3(status) {
|
|
@@ -13495,6 +13698,6 @@ function CalendarView({
|
|
|
13495
13698
|
}
|
|
13496
13699
|
}
|
|
13497
13700
|
|
|
13498
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AgendaView, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, BADGE_VARIANT_LABELS, Badge, BigCalendar, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarContext, CalendarDayButton, CalendarHeader, CalendarHeaderCompact, CalendarSettingsButton, CalendarSettingsContent, CalendarSettingsDialog, CalibrationTable, CalibrationWeekCell, CalibrationWeekHeader, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChangeBadgeVariantInput, ChangeVisibleHoursInput, ChangeWorkingHoursInput, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CircularProgress, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommentButton, CommentDialog, CommentPopover, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_VISIBLE_HOURS, DEFAULT_WORKING_HOURS, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, DateBadge, DayView, DeliveryBadge, DeliveryCard, DeliveryDetailPage, DeliveryIndicator, DeliveryIndicators, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DragContext, DragProvider, DraggableEvent, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DroppableZone, EVENT_COLORS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, EventBadge, EventCalendarProvider, EventDialog, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Item6 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label2 as Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MonthView, MoreEvents, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavMain, NavProjects, NavSecondary, NavUser, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NetBadge, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PlanningTable, PlanningTableToolbar, PlanningWeekCommentPopover, PlayerCanvas, PlayerCanvasActionButton, PlayerCanvasControls, PlayerCanvasDivider, PlayerCanvasInfo, PlayerCanvasLabel, PlayerCanvasPlayButton, PlayerCanvasProgress, PlayerCanvasSkipButton, PlayerCanvasTitle, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, QuickAddEvent, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RowHeaderCell, ScrollArea, ScrollBar, SearchForm, SearchTrigger, Section, SectionContent, SectionDescription, SectionFooter, SectionHeader, SectionTitle, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SiteHeader, Skeleton, Slider, Spinner, SubmitCalibrationBar, SupplierCell, SupplierWeeklyLoading, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeSwitch, TimeIndicator, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolBarCanvas, ToolBarCanvasButton, ToolBarCanvasDivider, ToolBarCanvasGroup, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserAvatarsDropdown, VIEW_LABELS, WeekCell, WeekDetailDialog, WeekHeader, WeekView, WeeklyLoadingView, YearView, badgeVariants, buttonGroupVariants, buttonVariants, calculateCalibrationCells, calculateDropDates, calculateMonthEventPositions, canSubmitCalibration, cardVariants, createDefaultEvent, deliveryIndicatorVariants, extractPrefixes, formatCalibrationUnit, formatDateRange2 as formatDateRange, formatProductionUnit, formatTime, generateColumns, generateEventId, generateLoadingWeek, generateLocationOptions, generateWeekColumns, generateWeeks, getCalendarCells, getCommentLocationLabel, getCurrentEvents, getDayHours, getDayLabel, getDeliveryVisualState, getElementShipmentStatus, getEventBlockStyle, getEventDuration, getEventDurationMinutes, getEventsCount, getEventsForDate, getEventsInRange, getHeaderLabel, getISOWeek, getLoadingDeliveryStatusLabel, getLoadingElementStatusLabel, getLoadingISOWeek, getLoadingWeekKey, getMonthCellEvents, getMonthDays, getShipmentStatusLabel, getShortDayLabel, getSupplierColumn, getTimeHeight, getTimePosition, getViewDateRange, getVisibleHours, getWeekDayNames, getWeekDays, getWeekKey, getYearMonths, groupDeliveriesByDay, groupDeliveriesByPrefixAndDay, groupEvents, isMultiDayEvent, isWorkingHour, navigateDate, navigationMenuTriggerStyle, playerCanvasPlayButtonVariants, playerCanvasSkipButtonVariants, rangeText, sectionVariants, snapToInterval, sortEvents, splitEventsByDuration, toggleVariants, toolBarCanvasButtonVariants, useDrag, useDraggable, useDroppable, useEventCalendar, useEventsInRange, useFilteredEvents, useFormField, useIsMobile, useSearchShortcut, useSidebar };
|
|
13701
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AgendaView, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, BADGE_VARIANT_LABELS, Badge, BigCalendar, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarContext, CalendarDayButton, CalendarHeader, CalendarHeaderCompact, CalendarSettingsButton, CalendarSettingsContent, CalendarSettingsDialog, CalibrationTable, CalibrationWeekCell, CalibrationWeekHeader, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChangeBadgeVariantInput, ChangeVisibleHoursInput, ChangeWorkingHoursInput, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CircularProgress, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommentButton, CommentDialog, CommentPopover, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_VISIBLE_HOURS, DEFAULT_WORKING_HOURS, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, DateBadge, DayView, DeliveryBadge, DeliveryCard, DeliveryDetailPage, DeliveryIndicator, DeliveryIndicators, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DragContext, DragProvider, DraggableEvent, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DroppableZone, EVENT_COLORS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, EventBadge, EventCalendarProvider, EventDialog, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Item6 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label2 as Label, Map2 as Map, MapMarker, MapPopup, MapTileLayer, MapTooltip, MapZoomControl, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MonthView, MoreEvents, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavMain, NavProjects, NavSecondary, NavUser, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NetBadge, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PlanningTable, PlanningTableToolbar, PlanningWeekCommentPopover, PlayerCanvas, PlayerCanvasActionButton, PlayerCanvasControls, PlayerCanvasDivider, PlayerCanvasInfo, PlayerCanvasLabel, PlayerCanvasPlayButton, PlayerCanvasProgress, PlayerCanvasSkipButton, PlayerCanvasTitle, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, QuickAddEvent, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RowHeaderCell, ScrollArea, ScrollBar, SearchForm, SearchTrigger, Section, SectionContent, SectionDescription, SectionFooter, SectionHeader, SectionTitle, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SiteHeader, Skeleton, Slider, Spinner, SubmitCalibrationBar, SupplierCell, SupplierWeeklyLoading, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeSwitch, TimeIndicator, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolBarCanvas, ToolBarCanvasButton, ToolBarCanvasDivider, ToolBarCanvasGroup, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserAvatarsDropdown, VIEW_LABELS, WeekCell, WeekDetailDialog, WeekHeader, WeekView, WeeklyLoadingView, YearView, badgeVariants, buttonGroupVariants, buttonVariants, calculateCalibrationCells, calculateDropDates, calculateMonthEventPositions, canSubmitCalibration, cardVariants, createDefaultEvent, deliveryIndicatorVariants, extractPrefixes, formatCalibrationUnit, formatDateRange2 as formatDateRange, formatProductionUnit, formatTime, generateColumns, generateEventId, generateLoadingWeek, generateLocationOptions, generateWeekColumns, generateWeeks, getCalendarCells, getCommentLocationLabel, getCurrentEvents, getDayHours, getDayLabel, getDeliveryVisualState, getElementShipmentStatus, getEventBlockStyle, getEventDuration, getEventDurationMinutes, getEventsCount, getEventsForDate, getEventsInRange, getHeaderLabel, getISOWeek, getLoadingDeliveryStatusLabel, getLoadingElementStatusLabel, getLoadingISOWeek, getLoadingWeekKey, getMonthCellEvents, getMonthDays, getShipmentStatusLabel, getShortDayLabel, getSupplierColumn, getTimeHeight, getTimePosition, getViewDateRange, getVisibleHours, getWeekDayNames, getWeekDays, getWeekKey, getYearMonths, groupDeliveriesByDay, groupDeliveriesByPrefixAndDay, groupEvents, isMultiDayEvent, isWorkingHour, navigateDate, navigationMenuTriggerStyle, playerCanvasPlayButtonVariants, playerCanvasSkipButtonVariants, rangeText, sectionVariants, snapToInterval, sortEvents, splitEventsByDuration, toggleVariants, toolBarCanvasButtonVariants, useDrag, useDraggable, useDroppable, useEventCalendar, useEventsInRange, useFilteredEvents, useFormField, useIsMobile, useSearchShortcut, useSidebar };
|
|
13499
13702
|
//# sourceMappingURL=index.js.map
|
|
13500
13703
|
//# sourceMappingURL=index.js.map
|