@cellarnode/ui 0.209.2 → 0.210.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/dist/agent/confirm-card.d.ts +9 -0
- package/dist/agent/confirm-card.d.ts.map +1 -1
- package/dist/agent/confirm-card.js +28 -2
- package/dist/agent/confirm-card.js.map +1 -1
- package/dist/agent/conversation.d.ts +10 -0
- package/dist/agent/conversation.d.ts.map +1 -1
- package/dist/agent/conversation.js +4 -4
- package/dist/agent/conversation.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/message.d.ts +4 -1
- package/dist/agent/message.d.ts.map +1 -1
- package/dist/agent/message.js +2 -2
- package/dist/agent/message.js.map +1 -1
- package/dist/agent/schema.d.ts +25 -0
- package/dist/agent/schema.d.ts.map +1 -1
- package/dist/agent/schema.js +7 -0
- package/dist/agent/schema.js.map +1 -1
- package/dist/agent/states.d.ts +24 -1
- package/dist/agent/states.d.ts.map +1 -1
- package/dist/agent/states.js +35 -6
- package/dist/agent/states.js.map +1 -1
- package/dist/components/importer-picker-modal.js +5 -5
- package/dist/components/importer-picker-modal.js.map +1 -1
- package/dist/globe/svg-globe-geo.d.ts +16 -0
- package/dist/globe/svg-globe-geo.d.ts.map +1 -0
- package/dist/globe/svg-globe-geo.js +48 -0
- package/dist/globe/svg-globe-geo.js.map +1 -0
- package/dist/globe/svg-globe-map-layer.d.ts +18 -0
- package/dist/globe/svg-globe-map-layer.d.ts.map +1 -0
- package/dist/globe/svg-globe-map-layer.js +47 -0
- package/dist/globe/svg-globe-map-layer.js.map +1 -0
- package/dist/globe/svg-globe-pin-layer.d.ts +17 -0
- package/dist/globe/svg-globe-pin-layer.d.ts.map +1 -0
- package/dist/globe/svg-globe-pin-layer.js +111 -0
- package/dist/globe/svg-globe-pin-layer.js.map +1 -0
- package/dist/globe/svg-globe-renderer.d.ts +3 -0
- package/dist/globe/svg-globe-renderer.d.ts.map +1 -0
- package/dist/globe/svg-globe-renderer.js +57 -0
- package/dist/globe/svg-globe-renderer.js.map +1 -0
- package/dist/globe/svg-globe.css +247 -0
- package/dist/globe/svg-globe.d.ts +46 -0
- package/dist/globe/svg-globe.d.ts.map +1 -0
- package/dist/globe/svg-globe.js +45 -0
- package/dist/globe/svg-globe.js.map +1 -0
- package/dist/globe/svg.d.ts +9 -0
- package/dist/globe/svg.d.ts.map +1 -0
- package/dist/globe/svg.js +6 -0
- package/dist/globe/svg.js.map +1 -0
- package/dist/globe/use-svg-globe-gestures.d.ts +21 -0
- package/dist/globe/use-svg-globe-gestures.d.ts.map +1 -0
- package/dist/globe/use-svg-globe-gestures.js +190 -0
- package/dist/globe/use-svg-globe-gestures.js.map +1 -0
- package/dist/globe/use-svg-globe-item-interactions.d.ts +20 -0
- package/dist/globe/use-svg-globe-item-interactions.d.ts.map +1 -0
- package/dist/globe/use-svg-globe-item-interactions.js +66 -0
- package/dist/globe/use-svg-globe-item-interactions.js.map +1 -0
- package/dist/globe/use-svg-globe-navigation.d.ts +17 -0
- package/dist/globe/use-svg-globe-navigation.d.ts.map +1 -0
- package/dist/globe/use-svg-globe-navigation.js +107 -0
- package/dist/globe/use-svg-globe-navigation.js.map +1 -0
- package/dist/product-editor/product-editor-surface.d.ts.map +1 -1
- package/dist/product-editor/product-editor-surface.js +5 -3
- package/dist/product-editor/product-editor-surface.js.map +1 -1
- package/dist/product-editor/tabs/product-status-tab.js +4 -4
- package/package.json +14 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { useRef, useState } from "react";
|
|
2
|
+
function itemCode(target) {
|
|
3
|
+
return target instanceof SVGElement
|
|
4
|
+
? target.closest("[data-country-code]")?.dataset.countryCode
|
|
5
|
+
: undefined;
|
|
6
|
+
}
|
|
7
|
+
export function useSvgGlobeItemInteractions({ reset, onCountryClick, }) {
|
|
8
|
+
const [hoveredCountry, setHoveredCountry] = useState(null);
|
|
9
|
+
const suppressClickRef = useRef(false);
|
|
10
|
+
const handleKeyDown = (event) => {
|
|
11
|
+
if (event.key === "Escape") {
|
|
12
|
+
reset();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (event.key !== "Enter" && event.key !== " ")
|
|
16
|
+
return;
|
|
17
|
+
const code = itemCode(event.target);
|
|
18
|
+
if (!code)
|
|
19
|
+
return;
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
onCountryClick?.(code.toUpperCase());
|
|
22
|
+
};
|
|
23
|
+
const handleClick = (event) => {
|
|
24
|
+
if (suppressClickRef.current) {
|
|
25
|
+
suppressClickRef.current = false;
|
|
26
|
+
event.preventDefault();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const code = itemCode(event.target);
|
|
30
|
+
if (code)
|
|
31
|
+
onCountryClick?.(code.toUpperCase());
|
|
32
|
+
};
|
|
33
|
+
const setPointerClickSuppressed = (suppressed) => {
|
|
34
|
+
suppressClickRef.current = suppressed;
|
|
35
|
+
if (suppressed)
|
|
36
|
+
window.setTimeout(() => (suppressClickRef.current = false), 100);
|
|
37
|
+
};
|
|
38
|
+
const updatePointerOver = (event) => {
|
|
39
|
+
setHoveredCountry(itemCode(event.target) ?? null);
|
|
40
|
+
};
|
|
41
|
+
const updatePointerOut = (event) => {
|
|
42
|
+
if (itemCode(event.target) !== itemCode(event.relatedTarget))
|
|
43
|
+
setHoveredCountry(itemCode(event.relatedTarget) ?? null);
|
|
44
|
+
};
|
|
45
|
+
const updateFocus = (event) => {
|
|
46
|
+
setHoveredCountry(itemCode(event.target) ?? null);
|
|
47
|
+
};
|
|
48
|
+
const updateBlur = (event) => {
|
|
49
|
+
if (itemCode(event.target) !== itemCode(event.relatedTarget))
|
|
50
|
+
setHoveredCountry(itemCode(event.relatedTarget) ?? null);
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
hoveredCountry,
|
|
54
|
+
setHoveredCountry,
|
|
55
|
+
setPointerClickSuppressed,
|
|
56
|
+
handlers: {
|
|
57
|
+
onKeyDown: handleKeyDown,
|
|
58
|
+
onClick: handleClick,
|
|
59
|
+
onPointerOver: updatePointerOver,
|
|
60
|
+
onPointerOut: updatePointerOut,
|
|
61
|
+
onFocus: updateFocus,
|
|
62
|
+
onBlur: updateBlur,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=use-svg-globe-item-interactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-svg-globe-item-interactions.js","sourceRoot":"","sources":["../../src/globe/use-svg-globe-item-interactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ZoomBehavior, type ZoomTransform } from "d3-zoom";
|
|
2
|
+
interface UseSvgGlobeNavigationOptions {
|
|
3
|
+
svgRef: React.RefObject<SVGSVGElement | null>;
|
|
4
|
+
selectedCountryCode: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function useSvgGlobeNavigation({ svgRef, selectedCountryCode, }: UseSvgGlobeNavigationOptions): {
|
|
7
|
+
transform: ZoomTransform;
|
|
8
|
+
rotation: [number, number];
|
|
9
|
+
setRotation: import("react").Dispatch<import("react").SetStateAction<[number, number]>>;
|
|
10
|
+
rotationRef: import("react").RefObject<[number, number]>;
|
|
11
|
+
zoomRef: import("react").RefObject<ZoomBehavior<SVGSVGElement, unknown> | null>;
|
|
12
|
+
cancelRotation: () => void;
|
|
13
|
+
reset: () => void;
|
|
14
|
+
zoomBy: (factor: number) => void;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=use-svg-globe-navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-svg-globe-navigation.d.ts","sourceRoot":"","sources":["../../src/globe/use-svg-globe-navigation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAwBpF,UAAU,4BAA4B;IACpC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC9C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,mBAAmB,GACpB,EAAE,4BAA4B;;;;;;;;qBAsFlB,MAAM;EASlB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
2
|
+
import { select } from "d3-selection";
|
|
3
|
+
import { zoom, zoomIdentity } from "d3-zoom";
|
|
4
|
+
import { countryLocation } from "./svg-globe-geo.js";
|
|
5
|
+
const SIZE = 520;
|
|
6
|
+
const INITIAL_ROTATION = [-15, -45];
|
|
7
|
+
const ZOOM_MIN = 1;
|
|
8
|
+
const ZOOM_MAX = 4;
|
|
9
|
+
const REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
|
|
10
|
+
function subscribeReducedMotion(onChange) {
|
|
11
|
+
if (typeof window.matchMedia !== "function")
|
|
12
|
+
return () => { };
|
|
13
|
+
const media = window.matchMedia(REDUCED_MOTION_QUERY);
|
|
14
|
+
media.addEventListener("change", onChange);
|
|
15
|
+
return () => media.removeEventListener("change", onChange);
|
|
16
|
+
}
|
|
17
|
+
function getReducedMotion() {
|
|
18
|
+
return typeof window.matchMedia === "function" && window.matchMedia(REDUCED_MOTION_QUERY).matches;
|
|
19
|
+
}
|
|
20
|
+
function getServerReducedMotion() {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
export function useSvgGlobeNavigation({ svgRef, selectedCountryCode, }) {
|
|
24
|
+
const zoomRef = useRef(null);
|
|
25
|
+
const rotationRef = useRef(INITIAL_ROTATION);
|
|
26
|
+
const animationRef = useRef(0);
|
|
27
|
+
const [transform, setTransform] = useState(zoomIdentity);
|
|
28
|
+
const [rotation, setRotation] = useState(INITIAL_ROTATION);
|
|
29
|
+
const reducedMotion = useSyncExternalStore(subscribeReducedMotion, getReducedMotion, getServerReducedMotion);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
const svg = svgRef.current;
|
|
32
|
+
if (!svg)
|
|
33
|
+
return;
|
|
34
|
+
const behavior = zoom()
|
|
35
|
+
.scaleExtent([ZOOM_MIN, ZOOM_MAX])
|
|
36
|
+
.extent([
|
|
37
|
+
[0, 0],
|
|
38
|
+
[SIZE, SIZE],
|
|
39
|
+
])
|
|
40
|
+
.translateExtent([
|
|
41
|
+
[-SIZE, -SIZE],
|
|
42
|
+
[SIZE * 2, SIZE * 2],
|
|
43
|
+
])
|
|
44
|
+
.filter((event) => event.type === "wheel")
|
|
45
|
+
.on("zoom", (event) => setTransform(event.transform));
|
|
46
|
+
zoomRef.current = behavior;
|
|
47
|
+
select(svg).call(behavior).on("dblclick.zoom", null);
|
|
48
|
+
return () => {
|
|
49
|
+
select(svg).on(".zoom", null);
|
|
50
|
+
zoomRef.current = null;
|
|
51
|
+
};
|
|
52
|
+
}, [svgRef]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
rotationRef.current = rotation;
|
|
55
|
+
}, [rotation]);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
cancelAnimationFrame(animationRef.current);
|
|
58
|
+
const svg = svgRef.current;
|
|
59
|
+
const behavior = zoomRef.current;
|
|
60
|
+
if (svg && behavior)
|
|
61
|
+
select(svg).call(behavior.transform, zoomIdentity);
|
|
62
|
+
const location = selectedCountryCode ? countryLocation(selectedCountryCode) : null;
|
|
63
|
+
const to = location ? [-location[0], -location[1]] : INITIAL_ROTATION;
|
|
64
|
+
const from = rotationRef.current;
|
|
65
|
+
const dx = ((to[0] - from[0] + 540) % 360) - 180;
|
|
66
|
+
if (reducedMotion || (Math.abs(dx) < 0.001 && Math.abs(to[1] - from[1]) < 0.001)) {
|
|
67
|
+
rotationRef.current = to;
|
|
68
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect, react-hooks/set-state-in-effect -- controlled selection changes must align the camera immediately for reduced-motion users
|
|
69
|
+
setRotation(to);
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
const start = performance.now();
|
|
73
|
+
const step = (time) => {
|
|
74
|
+
const progress = Math.min(1, (time - start) / 550);
|
|
75
|
+
const eased = 1 - (1 - progress) ** 3;
|
|
76
|
+
const next = [from[0] + dx * eased, from[1] + (to[1] - from[1]) * eased];
|
|
77
|
+
rotationRef.current = next;
|
|
78
|
+
setRotation(next);
|
|
79
|
+
if (progress < 1)
|
|
80
|
+
animationRef.current = requestAnimationFrame(step);
|
|
81
|
+
};
|
|
82
|
+
animationRef.current = requestAnimationFrame(step);
|
|
83
|
+
return () => cancelAnimationFrame(animationRef.current);
|
|
84
|
+
}, [reducedMotion, selectedCountryCode, svgRef]);
|
|
85
|
+
useEffect(() => () => cancelAnimationFrame(animationRef.current), []);
|
|
86
|
+
const cancelRotation = useCallback(() => {
|
|
87
|
+
cancelAnimationFrame(animationRef.current);
|
|
88
|
+
animationRef.current = 0;
|
|
89
|
+
}, []);
|
|
90
|
+
const reset = useCallback(() => {
|
|
91
|
+
cancelRotation();
|
|
92
|
+
const svg = svgRef.current;
|
|
93
|
+
const behavior = zoomRef.current;
|
|
94
|
+
if (svg && behavior)
|
|
95
|
+
select(svg).call(behavior.transform, zoomIdentity);
|
|
96
|
+
rotationRef.current = INITIAL_ROTATION;
|
|
97
|
+
setRotation(INITIAL_ROTATION);
|
|
98
|
+
}, [cancelRotation, svgRef]);
|
|
99
|
+
const zoomBy = useCallback((factor) => {
|
|
100
|
+
const svg = svgRef.current;
|
|
101
|
+
const behavior = zoomRef.current;
|
|
102
|
+
if (svg && behavior)
|
|
103
|
+
select(svg).call(behavior.scaleBy, factor, [SIZE / 2, SIZE / 2]);
|
|
104
|
+
}, [svgRef]);
|
|
105
|
+
return { transform, rotation, setRotation, rotationRef, zoomRef, cancelRotation, reset, zoomBy };
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=use-svg-globe-navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-svg-globe-navigation.js","sourceRoot":"","sources":["../../src/globe/use-svg-globe-navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-editor-surface.d.ts","sourceRoot":"","sources":["../../src/product-editor/product-editor-surface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAOlD,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,wBAAwB,EAAE,SAAS,gBAAgB,EAO/D,CAAC;AAoBF,UAAU,yBAAyB;IACjC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAC3C,QAAQ,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,IAAI,EACJ,WAAW,EACX,WAAW,EACX,aAAa,EACb,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,EACN,SAAS,GACV,EAAE,yBAAyB,
|
|
1
|
+
{"version":3,"file":"product-editor-surface.d.ts","sourceRoot":"","sources":["../../src/product-editor/product-editor-surface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAOlD,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,wBAAwB,EAAE,SAAS,gBAAgB,EAO/D,CAAC;AAoBF,UAAU,yBAAyB;IACjC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACvD,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAC3C,QAAQ,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,IAAI,EACJ,WAAW,EACX,WAAW,EACX,aAAa,EACb,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,EACN,SAAS,GACV,EAAE,yBAAyB,2CAsL3B"}
|
|
@@ -60,8 +60,10 @@ const TAB_I18N_KEYS = {
|
|
|
60
60
|
export function ProductEditorSurface({ editorProps, form, orderedTabs, renderedTab, fieldIdPrefix, isDirty, isEditorBusy, saveFailureErrors, saveFailureAlertRef, editorRootRef, tabsListRef, elabelTabRef, onFocusCapture, onTabChange, onNavigateToChemistry, onFocusInvalidField, onSave, onDiscard, }) {
|
|
61
61
|
const { mode, locale, variantId, beverageId, showBeverageFields, requireVintage = false, autoFocusVintage = false, referenceData, classifications, showComposition = false, showProductionVolume = false, imageController, attachments, certificates, awards, certificateRecords, chemistrySection, labelData, onLabelSaveStateChange, qrSection, sensorySchema, sensorySchemaLoading, status, serverError, features, t, className, } = editorProps;
|
|
62
62
|
const tr = t ?? ((_key, fallback) => fallback ?? _key);
|
|
63
|
-
return (_jsxs("div", { ref: editorRootRef, tabIndex: -1, onFocusCapture: onFocusCapture, className: cn("flex min-w-0 flex-col gap-6 outline-hidden", className), children: [_jsx(ProductEditorValidationSummary, { form: form, sensorySchema: sensorySchema, fieldIdPrefix: fieldIdPrefix, onFocusInvalidField: onFocusInvalidField, t: t }), _jsx("fieldset", { disabled: isEditorBusy, className: "contents", children: _jsx("div", { className: "min-w-0", children: _jsxs(Tabs, { value: renderedTab, onValueChange: onTabChange, children: [_jsx(TabsList, { ref: tabsListRef, className: "max-w-full snap-x justify-start overflow-x-auto overscroll-x-contain", children: orderedTabs.map((tab) => (_jsx(TabsTrigger, { value: tab, className: "snap-start", children: tr(TAB_I18N_KEYS[tab], TAB_LABELS[tab]) }, tab))) }), orderedTabs.length > 3 && (_jsxs("p", { className: "mt-2 flex items-center gap-1.5 text-xs text-muted-foreground sm:hidden", children: [_jsx(MoveHorizontal, { "aria-hidden": "true", className: "size-4 shrink-0" }), tr("productEditor.tabs.scrollHint", "Swipe to view more sections")] })), orderedTabs.includes("essentials") && (
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
return (_jsxs("div", { ref: editorRootRef, tabIndex: -1, onFocusCapture: onFocusCapture, className: cn("flex min-w-0 flex-col gap-6 outline-hidden", className), children: [_jsx(ProductEditorValidationSummary, { form: form, sensorySchema: sensorySchema, fieldIdPrefix: fieldIdPrefix, onFocusInvalidField: onFocusInvalidField, t: t }), _jsx("fieldset", { disabled: isEditorBusy, className: "contents", children: _jsx("div", { className: "min-w-0", children: _jsxs(Tabs, { value: renderedTab, onValueChange: onTabChange, children: [_jsx(TabsList, { ref: tabsListRef, className: "max-w-full snap-x justify-start overflow-x-auto overscroll-x-contain", children: orderedTabs.map((tab) => (_jsx(TabsTrigger, { value: tab, className: "snap-start", children: tr(TAB_I18N_KEYS[tab], TAB_LABELS[tab]) }, tab))) }), orderedTabs.length > 3 && (_jsxs("p", { className: "mt-2 flex items-center gap-1.5 text-xs text-muted-foreground sm:hidden", children: [_jsx(MoveHorizontal, { "aria-hidden": "true", className: "size-4 shrink-0" }), tr("productEditor.tabs.scrollHint", "Swipe to view more sections")] })), orderedTabs.includes("essentials") && (_jsxs(TabsContent, { value: "essentials", className: "mt-6", children: [_jsx("h2", { className: "sr-only", children: tr(TAB_I18N_KEYS.essentials, TAB_LABELS.essentials) }), _jsx(ProductEssentialsTab, { form: form, locale: locale, beverageId: beverageId, showBeverageFields: showBeverageFields, requireVintage: requireVintage, autoFocusVintage: autoFocusVintage && renderedTab === "essentials", referenceData: referenceData, classifications: classifications, compositionSchema: showComposition ? sensorySchema?.sections?.composition : undefined, showProductionVolume: showProductionVolume, fieldIdPrefix: fieldIdPrefix, t: t })] })), orderedTabs.includes("gallery") && (_jsxs(TabsContent, { value: "gallery", className: "mt-6", children: [_jsx("h2", { className: "sr-only", children: tr(TAB_I18N_KEYS.gallery, TAB_LABELS.gallery) }), _jsx(ProductGalleryTab, { variantId: variantId, mode: mode, imageController: imageController, t: t })] })), orderedTabs.includes("sensory") && (_jsxs(TabsContent, { value: "sensory", className: "mt-6", children: [_jsx("h2", { className: "sr-only", children: tr(TAB_I18N_KEYS.sensory, TAB_LABELS.sensory) }), _jsx(ProductSensoryTab, { form: form, sensorySchema: sensorySchema, sensorySchemaLoading: sensorySchemaLoading, fieldIdPrefix: fieldIdPrefix, t: t })] })), orderedTabs.includes("resources") && (_jsxs(TabsContent, { value: "resources", className: "mt-6", children: [_jsx("h2", { className: "sr-only", children: tr(TAB_I18N_KEYS.resources, TAB_LABELS.resources) }), _jsx(ProductResourcesTab, { form: form, variantId: variantId, mode: mode, attachments: attachments, certificates: certificates, awards: awards, certificateRecords: certificateRecords, chemistrySection: chemistrySection, features: features, t: t })] })), orderedTabs.includes("e-label") && (_jsxs(TabsContent, { value: "e-label", forceMount: true, className: "mt-6 data-[state=inactive]:hidden", children: [_jsx("h2", { className: "sr-only", children: tr(TAB_I18N_KEYS["e-label"], TAB_LABELS["e-label"]) }), _jsx(ProductElabelTab, { ref: elabelTabRef, variantId: variantId, mode: mode, labelData: labelData, onSaveStateChange: onLabelSaveStateChange, qrSection: qrSection, onNavigateToChemistry: orderedTabs.includes("resources") && chemistrySection !== undefined
|
|
64
|
+
? onNavigateToChemistry
|
|
65
|
+
: undefined, t: t })] })), orderedTabs.includes("status") && (_jsxs(TabsContent, { value: "status", className: "mt-6", children: [_jsx("h2", { className: "sr-only", children: tr(TAB_I18N_KEYS.status, TAB_LABELS.status) }), _jsx(ProductStatusTab, { status: status, features: features, isDirty: isDirty, t: t })] }))] }) }) }), _jsx(ProductEditorSaveBar, { isDirty: isDirty, isSaving: isEditorBusy, serverError: serverError && !saveFailureErrors.includes(serverError)
|
|
66
|
+
? [serverError, ...saveFailureErrors]
|
|
67
|
+
: saveFailureErrors, serverErrorRef: saveFailureAlertRef, dismissFocusRef: editorRootRef, onSave: onSave, onDiscard: onDiscard, t: t })] }));
|
|
66
68
|
}
|
|
67
69
|
//# sourceMappingURL=product-editor-surface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-editor-surface.js","sourceRoot":"","sources":["../../src/product-editor/product-editor-surface.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,MAAM,CAAC,MAAM,wBAAwB,GAAgC;IACnE,YAAY;IACZ,SAAS;IACT,SAAS;IACT,WAAW;IACX,SAAS;IACT,QAAQ;CACT,CAAC;AAEF,MAAM,UAAU,GAA+C;IAC7D,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,aAAa,GAA+C;IAChE,UAAU,EAAE,+BAA+B;IAC3C,OAAO,EAAE,4BAA4B;IACrC,OAAO,EAAE,4BAA4B;IACrC,SAAS,EAAE,8BAA8B;IACzC,SAAS,EAAE,4BAA4B;IACvC,MAAM,EAAE,2BAA2B;CACpC,CAAC;AAuBF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,WAAW,EACX,IAAI,EACJ,WAAW,EACX,WAAW,EACX,aAAa,EACb,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,EACN,SAAS,GACiB;IAC1B,MAAM,EACJ,IAAI,EACJ,MAAM,EACN,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,cAAc,GAAG,KAAK,EACtB,gBAAgB,GAAG,KAAK,EACxB,aAAa,EACb,eAAe,EACf,eAAe,GAAG,KAAK,EACvB,oBAAoB,GAAG,KAAK,EAC5B,eAAe,EACf,WAAW,EACX,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,MAAM,EACN,WAAW,EACX,QAAQ,EACR,CAAC,EACD,SAAS,GACV,GAAG,WAAW,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,QAAiB,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;IAExE,OAAO,CACL,eACE,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,CAAC,CAAC,EACZ,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,EAAE,CAAC,4CAA4C,EAAE,SAAS,CAAC,aAEtE,KAAC,8BAA8B,IAC7B,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,CAAC,EAAE,CAAC,GACJ,EACF,mBAAU,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAC,UAAU,YAMpD,cAAK,SAAS,EAAC,SAAS,YACtB,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,aAClD,KAAC,QAAQ,IACP,GAAG,EAAE,WAAW,EAChB,SAAS,EAAC,sEAAsE,YAE/E,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACxB,KAAC,WAAW,IAAW,KAAK,EAAE,GAAG,EAAE,SAAS,EAAC,YAAY,YACtD,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IADxB,GAAG,CAEP,CACf,CAAC,GACO,EACV,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,aAAG,SAAS,EAAC,wEAAwE,aACnF,KAAC,cAAc,mBAAa,MAAM,EAAC,SAAS,EAAC,iBAAiB,GAAG,EAChE,EAAE,CAAC,+BAA+B,EAAE,6BAA6B,CAAC,IACjE,CACL,EACA,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CACrC,
|
|
1
|
+
{"version":3,"file":"product-editor-surface.js","sourceRoot":"","sources":["../../src/product-editor/product-editor-surface.tsx"],"names":[],"mappings":"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"}
|
|
@@ -191,7 +191,7 @@ export function ProductStatusTab({ status, features, isDirty = false, t }) {
|
|
|
191
191
|
included: tr("variantEdit.status.matching.included", "This product is matched with opportunities."),
|
|
192
192
|
excluded: tr("variantEdit.status.matching.excluded", "Excluded products are not matched with opportunities; existing matches are hidden."),
|
|
193
193
|
error: tr("variantEdit.status.matching.error", "Could not update matching. Your change was undone."),
|
|
194
|
-
} })), matchReadiness && (_jsxs("div", { className: "rounded-xl border border-border/60 bg-card p-5", children: [_jsxs("div", { className: "mb-4 flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("
|
|
194
|
+
} })), matchReadiness && (_jsxs("div", { className: "rounded-xl border border-border/60 bg-card p-5", children: [_jsxs("div", { className: "mb-4 flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h3", { className: "text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: tr("matchReadiness.heading", "Match Readiness") }), _jsxs("span", { className: "text-sm font-medium text-foreground", children: [matchReadiness.completed, " / ", matchReadiness.total] })] }), _jsx("div", { role: "progressbar", "aria-label": tr("matchReadiness.heading", "Match Readiness"), "aria-valuenow": Math.round(matchReadiness.percent), "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuetext": tr("matchReadiness.progressValueText", `${matchReadiness.completed} of ${matchReadiness.total} fields complete`), className: "h-2 w-full overflow-hidden rounded-full bg-muted", children: _jsx("div", { className: `h-full ${matchReadiness.percent === 100 ? "bg-[var(--tone-success-solid)]" : "bg-[var(--tone-warning-fg)]"} transition-[width,background-color] duration-500`, style: { width: `${Math.round(matchReadiness.percent)}%` } }) })] }), _jsxs("div", { className: "flex flex-col gap-5", children: [matchReadiness.blockers.length > 0 && (_jsxs("div", { children: [_jsx("h4", { className: "mb-3 text-xs font-semibold uppercase tracking-[0.14em] text-[var(--tone-warning-fg)]", children: tr("matchReadiness.blockersHeading", "Required before approval") }), _jsx("ul", { className: "flex flex-col gap-2", children: matchReadiness.blockers.map((entry) => (_jsxs("li", { className: "flex flex-wrap items-center gap-x-3 gap-y-1.5 rounded-xl border border-[var(--tone-warning-border)]/40 bg-[var(--tone-warning-soft)] px-4 py-3", children: [_jsx("span", { className: "text-sm font-medium text-[var(--tone-warning-fg)]", children: tr(entry.labelKey, fieldLabel(entry.path, tr)) }), _jsx("span", { className: "inline-flex items-center rounded-full bg-[var(--tone-warning-fg)]/10 px-2.5 py-0.5 text-xs font-medium text-[var(--tone-warning-fg)]", children: readinessReasonLabel(entry.reason, tr) })] }, `blocker-${entry.path}`))) })] })), matchReadiness.recommendations.length > 0 && (_jsxs("div", { children: [_jsx("h4", { className: "mb-3 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: tr("matchReadiness.recommendationsHeading", "Recommended before matching") }), _jsx("ul", { className: "flex flex-col gap-2", children: matchReadiness.recommendations.map((entry) => (_jsxs("li", { className: "flex flex-wrap items-center gap-x-3 gap-y-1.5 rounded-xl border border-border/60 bg-muted/30 px-4 py-3", children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: tr(entry.labelKey, fieldLabel(entry.path, tr)) }), _jsx("span", { className: "inline-flex items-center rounded-full bg-muted/60 px-2.5 py-0.5 text-xs font-medium text-muted-foreground", children: readinessReasonLabel(entry.reason, tr) })] }, `rec-${entry.path}`))) })] })), matchReadiness.acknowledgementsRequired.length > 0 && (_jsxs("div", { children: [_jsx("h4", { className: "mb-3 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: tr("matchReadiness.acknowledgementsHeading", "Please confirm") }), _jsx("ul", { className: "flex flex-col gap-2", children: matchReadiness.acknowledgementsRequired.map((entry) => (_jsxs("li", { className: "flex flex-wrap items-center gap-x-3 gap-y-1.5 rounded-xl border border-border/60 bg-muted/30 px-4 py-3", children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: tr(entry.labelKey, fieldLabel(entry.path, tr)) }), _jsx("span", { className: "inline-flex items-center rounded-full bg-[var(--tone-warning-soft)] px-2.5 py-0.5 text-xs font-medium text-[var(--tone-warning-fg)]", children: readinessReasonLabel(entry.reason, tr) })] }, `ack-${entry.path}`))) })] })), matchReadiness.blockers.length === 0 &&
|
|
195
195
|
matchReadiness.canApprove &&
|
|
196
196
|
matchReadiness.recommendations.length === 0 &&
|
|
197
197
|
matchReadiness.acknowledgementsRequired.length === 0 && (_jsxs("div", { className: "flex items-center gap-2 rounded-xl border border-[var(--tone-success-border)]/30 bg-[var(--tone-success-soft)]/30 px-4 py-3 text-sm text-[var(--tone-success-fg)]", children: [_jsx(CheckCircle2, { className: "size-4 shrink-0", "aria-hidden": "true" }), _jsx("span", { children: tr("matchReadiness.allComplete", "All required fields are complete.") })] }))] })] })), features?.approvalWorkflow && isPendingReview && onApprove && (_jsx(ApprovePanel, { hasUnsavedEdits: isDirty, isApproving: isApproving ?? false, readinessBlocked: readinessBlocked, needsAcknowledgement: needsAcknowledgement, onApprove: handleApprove, flaggedFields: flaggedFields ?? null, fieldLabelOf: (p) => fieldLabel(p, tr), reasonLabelOf: (r) => reasonLabel(r, tr), confidenceLabelOf: (c) => confidenceLabel(c, tr), tr: tr })), (extractedBy || reviewedBy || reviewedAt) && (_jsx(StatusCard, { label: tr("variantEdit.status.provenance", "Provenance"), value: extractedBy
|
|
@@ -200,7 +200,7 @@ export function ProductStatusTab({ status, features, isDirty = false, t }) {
|
|
|
200
200
|
? tr("variantEdit.status.reviewedOn", reviewedAt
|
|
201
201
|
? `Approved on ${formatReviewDate(reviewedAt)}${reviewedBy ? ` by ${reviewedBy}` : ""}`
|
|
202
202
|
: `Approved by ${reviewedBy}`)
|
|
203
|
-
: undefined })), professionalSummary && (_jsxs("div", { className: "rounded-xl border border-border/60 bg-card p-4", children: [_jsx("
|
|
203
|
+
: undefined })), professionalSummary && (_jsxs("div", { className: "rounded-xl border border-border/60 bg-card p-4", children: [_jsx("h3", { className: "mb-2 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: tr("variantEdit.status.professionalSummary", "Professional summary") }), _jsx("p", { className: "text-sm text-foreground", children: professionalSummary })] })), hasCitations && (_jsxs("div", { className: "rounded-xl border border-border/60 bg-card p-4", children: [_jsx("h3", { className: "mb-2 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: tr("variantEdit.status.citations", "Citations") }), _jsx("ul", { className: "flex flex-col gap-2 text-sm", children: (citations ?? []).map((c, i) => (
|
|
204
204
|
// Citations have no stable id — composite key on url+index is the best we can do for a read-only ordered list.
|
|
205
205
|
// eslint-disable-next-line @eslint-react/no-array-index-key
|
|
206
206
|
_jsx("li", { children: c.url ? (_jsx("a", { href: c.url, target: "_blank", rel: "noopener noreferrer", className: "text-primary hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring", children: c.label || c.url })) : (_jsx("span", { className: "text-foreground", children: c.label })) }, `${c.url ?? ""}-${i}`))) })] }))] }));
|
|
@@ -221,7 +221,7 @@ function ApprovePanel({ hasUnsavedEdits, isApproving, readinessBlocked, needsAck
|
|
|
221
221
|
// Double-bezel: outer tray + inner core. Tray is neutral — carries both
|
|
222
222
|
// warning ("Needs review") and success action (green CTA + clean empty
|
|
223
223
|
// state). Tinting the tray one tone would clash two semantic hues.
|
|
224
|
-
_jsx("div", { className: "rounded-[1.5rem] bg-muted/40 p-1.5 ring-1 ring-border/50", children: _jsxs("div", { className: "rounded-[calc(1.5rem-0.375rem)] bg-card p-5", children: [_jsxs("div", { className: "flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "mb-1 text-xs font-semibold uppercase tracking-[0.14em] text-[var(--tone-warning-fg)]", children: tr("variantEdit.status.approveEyebrow", "Needs review") }), _jsx("
|
|
224
|
+
_jsx("div", { className: "rounded-[1.5rem] bg-muted/40 p-1.5 ring-1 ring-border/50", children: _jsxs("div", { className: "rounded-[calc(1.5rem-0.375rem)] bg-card p-5", children: [_jsxs("div", { className: "flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "mb-1 text-xs font-semibold uppercase tracking-[0.14em] text-[var(--tone-warning-fg)]", children: tr("variantEdit.status.approveEyebrow", "Needs review") }), _jsx("h3", { className: "text-base font-semibold text-foreground", children: tr("variantEdit.status.approveHeading", "Ready to publish?") }), _jsx("p", { className: "mt-1 max-w-prose text-sm/6 text-muted-foreground", children: tr("variantEdit.status.approveBody", "This product was auto-extracted and is awaiting your review. Approving makes it discoverable to importers.") })] }), _jsxs("div", { className: "flex shrink-0 flex-col items-stretch gap-1.5 sm:items-end", children: [_jsxs("button", { type: "button", onClick: onApprove, disabled: disabled, "aria-describedby": hasHint ? hintId : undefined, className: `group inline-flex items-center justify-center gap-3 rounded-full bg-[var(--tone-success-solid)] px-6 py-3 font-semibold text-[var(--tone-success-solid-fg)] shadow-sm hover:brightness-110 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:brightness-100 ${CTA_TRANSITION}`, children: [_jsx("span", { children: isApproving
|
|
225
225
|
? tr("variantEdit.status.approving", "Publishing…")
|
|
226
226
|
: needsAcknowledgement
|
|
227
227
|
? tr("variantEdit.status.reviewFlaggedAction", "Review flagged fields")
|
|
@@ -229,7 +229,7 @@ function ApprovePanel({ hasUnsavedEdits, isApproving, readinessBlocked, needsAck
|
|
|
229
229
|
? tr("matchReadiness.approveBlockedHint", "Complete the required fields above first.")
|
|
230
230
|
: showDirtyHint
|
|
231
231
|
? tr("variantEdit.status.approveDirtyHint", "Save your changes first")
|
|
232
|
-
: tr("matchReadiness.reviewFlaggedHint", "Review the flagged fields below, then confirm to publish.") }))] })] }), _jsxs("div", { className: "mt-5 border-t border-border/50 pt-4", children: [_jsx("
|
|
232
|
+
: tr("matchReadiness.reviewFlaggedHint", "Review the flagged fields below, then confirm to publish.") }))] })] }), _jsxs("div", { className: "mt-5 border-t border-border/50 pt-4", children: [_jsx("h4", { className: "mb-3 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: tr("variantEdit.status.flaggedHeading", "Flagged during extraction") }), !flaggedFields || flaggedFields.length === 0 ? (_jsxs("div", { className: "flex items-center gap-2 rounded-xl border border-[var(--tone-success-border)]/30 bg-[var(--tone-success-soft)]/30 px-4 py-3 text-sm text-[var(--tone-success-fg)]", children: [_jsx(CheckCircle2, { className: "size-4 shrink-0", "aria-hidden": "true" }), _jsx("span", { children: tr("variantEdit.status.flaggedEmpty", "No issues flagged during extraction.") })] })) : (_jsx("ul", { className: "flex flex-col gap-2.5", children: flaggedFields.map((field, i) => (_jsxs("li", { className: "flex flex-wrap items-center gap-x-3 gap-y-1.5 rounded-xl border border-border/60 bg-muted/30 px-4 py-3", children: [_jsx("span", { className: "text-sm font-medium text-foreground", children: fieldLabelOf(field.path) }), _jsx("span", { className: "inline-flex items-center rounded-full bg-[var(--tone-warning-soft)] px-2.5 py-0.5 text-xs font-medium text-[var(--tone-warning-fg)]", children: reasonLabelOf(field.reason) }), field.confidence && (_jsx(ConfidenceChip, { confidence: field.confidence, label: confidenceLabelOf(field.confidence) }))] }, `${field.path}-${i}`))) }))] })] }) }));
|
|
233
233
|
}
|
|
234
234
|
// ─── ConfidenceChip ───────────────────────────────────────────────────────────
|
|
235
235
|
function ConfidenceChip({ confidence, label }) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cellarnode/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.210.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"packageManager": "pnpm@10.28.2+sha512.41872f037ad22f7348e3b1debbaf7e867cfd448f2726d9cf74c08f19507c31d2c8e7a11525b983febc2df640b5438dee6023ebb1f84ed43cc2d654d2bc326264",
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
"types": "./dist/index.d.ts",
|
|
19
19
|
"sideEffects": [
|
|
20
20
|
"./src/theme/tokens.css",
|
|
21
|
+
"./src/globe/svg-globe.css",
|
|
22
|
+
"./dist/globe/svg-globe.css",
|
|
21
23
|
"./dist/offer/offer-document.print.css"
|
|
22
24
|
],
|
|
23
25
|
"exports": {
|
|
@@ -87,6 +89,11 @@
|
|
|
87
89
|
"types": "./dist/globe/index.d.ts",
|
|
88
90
|
"default": "./dist/globe/index.js"
|
|
89
91
|
},
|
|
92
|
+
"./globe/svg": {
|
|
93
|
+
"types": "./dist/globe/svg.d.ts",
|
|
94
|
+
"default": "./dist/globe/svg.js"
|
|
95
|
+
},
|
|
96
|
+
"./globe/svg.css": "./dist/globe/svg-globe.css",
|
|
90
97
|
"./animated-list": {
|
|
91
98
|
"types": "./dist/components/animated-list.d.ts",
|
|
92
99
|
"default": "./dist/components/animated-list.js"
|
|
@@ -364,6 +371,9 @@
|
|
|
364
371
|
"cmdk": "^1.1.1",
|
|
365
372
|
"country-flag-icons": "^1.6.20",
|
|
366
373
|
"country-state-city": "^3.2.1",
|
|
374
|
+
"d3-geo": "^3.1.1",
|
|
375
|
+
"d3-selection": "^3.0.0",
|
|
376
|
+
"d3-zoom": "^3.0.0",
|
|
367
377
|
"date-fns": "^4.1.0",
|
|
368
378
|
"lucide-react": "^1.7.0",
|
|
369
379
|
"qr-code-styling": "^1.9.2",
|
|
@@ -420,6 +430,9 @@
|
|
|
420
430
|
"@testing-library/jest-dom": "^6.9.1",
|
|
421
431
|
"@testing-library/react": "^16.3.2",
|
|
422
432
|
"@testing-library/user-event": "^14.6.1",
|
|
433
|
+
"@types/d3-geo": "^3.1.1",
|
|
434
|
+
"@types/d3-selection": "^3.0.12",
|
|
435
|
+
"@types/d3-zoom": "^3.0.9",
|
|
423
436
|
"@types/geojson": "^7946.0.16",
|
|
424
437
|
"@types/react": "^19.2.14",
|
|
425
438
|
"@types/react-dom": "^19.2.3",
|