@athoscommerce/snap-preact 1.7.1-beta.121 → 1.7.1-beta.129
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/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +22 -1
- package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +2 -2
- package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -1
- package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +31 -14
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -1
- package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +26 -1
- package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +1 -1
- package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -1
- package/dist/esm/components/src/components/Organisms/Chat/Chat.js +22 -5
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInspirationResultMessage.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAoB,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAyEjG,eAAO,MAAM,4BAA4B,gBAAyB,iCAAiC;;
|
|
1
|
+
{"version":3,"file":"ChatInspirationResultMessage.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAoB,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAyEjG,eAAO,MAAM,4BAA4B,gBAAyB,iCAAiC;;CAkKjG,CAAC;AAOH,MAAM,MAAM,iCAAiC,GAAG;IAC/C,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC;CACjD,GAAG,+CAA+C,GAClD,cAAc,CAAC,iCAAiC,CAAC,CAAC;AAEnD,MAAM,MAAM,+CAA+C,GAAG;IAC7D,QAAQ,EAAE,iCAAiC,CAAC;CAC5C,CAAC;AAEF,MAAM,WAAW,gCAAgC;CAKhD"}
|
|
@@ -140,10 +140,31 @@ exports.ChatInspirationResultMessage = (0, mobx_react_lite_1.observer)(function
|
|
|
140
140
|
console.warn('ChatInspirationResultMessage received message with unsupported type:', messageType, 'Expected type: inspirationResult');
|
|
141
141
|
return null;
|
|
142
142
|
}
|
|
143
|
+
// Translate a section's applied filters into the API's `searchFilters` shape,
|
|
144
|
+
// grouping multiple values under the same field into one entry.
|
|
145
|
+
var getSectionSearchFilters = function (section) {
|
|
146
|
+
var grouped = {};
|
|
147
|
+
(section.filterSummary || []).forEach(function (filter) {
|
|
148
|
+
if (!(filter === null || filter === void 0 ? void 0 : filter.field) || (filter === null || filter === void 0 ? void 0 : filter.value) == null)
|
|
149
|
+
return;
|
|
150
|
+
var entry = (grouped[filter.field] = grouped[filter.field] || { key: filter.field, options: [] });
|
|
151
|
+
var value = filter.value;
|
|
152
|
+
if (typeof value === 'object' && ('low' in value || 'high' in value)) {
|
|
153
|
+
entry.options.push({ low: value.low == null ? '*' : String(value.low), high: value.high == null ? '*' : String(value.high) });
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
entry.options.push({ key: String(value) });
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
return Object.values(grouped);
|
|
160
|
+
};
|
|
143
161
|
return inspirationSections.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsx)("div", __assign({ className: (0, classnames_1.default)('ss__chat-inspiration-result-message', className, internalClassName) }, styling, { children: (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat-inspiration-result-message__inspiration-sections'), children: inspirationSections.map(function (section, index) { return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)('ss__chat-inspiration-result-message__inspiration-sections__section'), children: [(0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat-inspiration-result-message__inspiration-sections__section__title'), children: section.clusterTitle }), (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat-inspiration-result-message__inspiration-sections__section__description'), children: section.clusterDescription }), (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat-inspiration-result-message__inspiration-sections__section__queries'), children: section.searchQueries.map(function (searchTerm, index) { return ((0, jsx_runtime_1.jsxs)("button", { type: "button", className: (0, classnames_1.default)('ss__chat-inspiration-result-message__inspiration-sections__section__queries__query'), "aria-label": "Search for \"".concat(searchTerm, "\""), onClick: function () {
|
|
144
162
|
if ((controller === null || controller === void 0 ? void 0 : controller.store.loading) || (controller === null || controller === void 0 ? void 0 : controller.store.blocked))
|
|
145
163
|
return;
|
|
146
|
-
|
|
164
|
+
var searchFilters = getSectionSearchFilters(section);
|
|
165
|
+
controller === null || controller === void 0 ? void 0 : controller.search({
|
|
166
|
+
data: __assign({ requestType: 'productSearch', searchTerm: searchTerm }, (searchFilters.length ? { searchFilters: searchFilters } : {})),
|
|
167
|
+
});
|
|
147
168
|
}, children: [(0, jsx_runtime_1.jsx)(Icon_1.Icon, __assign({}, subProps.icon, { icon: "search" })), searchTerm] }, index)); }) }), (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat-inspiration-result-message__inspiration-sections__section__products'), children: (0, jsx_runtime_1.jsx)(Slideshow_1.Slideshow, __assign({}, subProps.slideshow, { slides: section.products.map(function (product) {
|
|
148
169
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
149
170
|
var display = (product === null || product === void 0 ? void 0 : product.display) || product;
|
|
@@ -107,7 +107,7 @@ var defaultStyles = function (_a) {
|
|
|
107
107
|
});
|
|
108
108
|
};
|
|
109
109
|
function getRequestTypeLabel(chatItem) {
|
|
110
|
-
var _a, _b;
|
|
110
|
+
var _a, _b, _c;
|
|
111
111
|
var requestType = chatItem.requestType;
|
|
112
112
|
if (!requestType || requestType === 'general')
|
|
113
113
|
return undefined;
|
|
@@ -117,7 +117,7 @@ function getRequestTypeLabel(chatItem) {
|
|
|
117
117
|
case 'productComparison':
|
|
118
118
|
return 'Comparing products';
|
|
119
119
|
case 'productSearch':
|
|
120
|
-
if ((_b = (_a = chatItem.request) === null || _a === void 0 ? void 0 : _a.searchFilters) === null || _b === void 0 ? void 0 : _b.length) {
|
|
120
|
+
if (((_b = (_a = chatItem.request) === null || _a === void 0 ? void 0 : _a.searchFilters) === null || _b === void 0 ? void 0 : _b.length) && !((_c = chatItem.request) === null || _c === void 0 ? void 0 : _c.searchTerm)) {
|
|
121
121
|
return 'Filtering products';
|
|
122
122
|
}
|
|
123
123
|
return 'Searching products';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/Chat/Chat.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/Chat/Chat.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAiCrE,eAAO,MAAM,YAAY,gBAAyB,iBAAiB,KAAG,GAAG,CAAC,OAAO;;CAypD/E,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzB,GAAG,uBAAuB,GAC1B,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAEnC,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,QAAQ;CAExB"}
|
|
@@ -82,8 +82,11 @@ var __1 = require("../../..");
|
|
|
82
82
|
var ChatInspirationResultMessage_1 = require("../../Molecules/ChatInspirationResultMessage");
|
|
83
83
|
var ChatProductComparisonMessage_1 = require("../../Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage");
|
|
84
84
|
var ChatProductQueryMessage_1 = require("../../Molecules/ChatProductQueryMessage/ChatProductQueryMessage");
|
|
85
|
+
// Fallback footer copy when chat becomes disabled mid-session and store.error has
|
|
86
|
+
// been cleared (e.g. by createChat) — mirrors the controller's unavailable message.
|
|
87
|
+
var CHAT_UNAVAILABLE_MESSAGE = 'Service is temporarily unavailable. In the meantime, feel free to use the search bar above to find what you need!';
|
|
85
88
|
exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
86
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
|
|
89
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
|
|
87
90
|
var globalTheme = (0, providers_1.useTheme)();
|
|
88
91
|
var globalTreePath = (0, providers_1.useTreePath)();
|
|
89
92
|
var isMobile = (0, __1.useMediaQuery)('(max-width: 767px)');
|
|
@@ -127,6 +130,10 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
127
130
|
var avatarCharacter = avatar && avatar.length === 1 ? avatar.toUpperCase() : undefined;
|
|
128
131
|
var avatarImage = avatar && avatar.length > 1 && isValidImageUrl(avatar) ? avatar : undefined;
|
|
129
132
|
var store = controller.store;
|
|
133
|
+
// Track that the widget has been visible so a mid-session disable (status check
|
|
134
|
+
// flips chatEnabled to false) keeps it mounted with the unavailable message
|
|
135
|
+
// instead of vanishing. A disabled status at bootstrap still renders nothing.
|
|
136
|
+
var wasVisibleRef = (0, hooks_1.useRef)(false);
|
|
130
137
|
var themeDefaults = {
|
|
131
138
|
components: {},
|
|
132
139
|
};
|
|
@@ -193,26 +200,26 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
193
200
|
var chatRef = (0, hooks_1.useRef)(null);
|
|
194
201
|
// Ref for the mobile secondary panel — needed for swipe-to-dismiss measurements
|
|
195
202
|
var secondaryRef = (0, hooks_1.useRef)(null);
|
|
196
|
-
var
|
|
197
|
-
var
|
|
203
|
+
var _1 = (0, hooks_1.useState)(false), mobileProductInfoOpen = _1[0], setMobileProductInfoOpen = _1[1];
|
|
204
|
+
var _2 = (0, hooks_1.useState)(0), footerHeight = _2[0], setFooterHeight = _2[1];
|
|
198
205
|
var dropEnabled = store.features.imageSearch.enabled && !store.loading && !store.blocked && !((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.sessionLimitReached);
|
|
199
|
-
var
|
|
206
|
+
var _3 = (0, useChatFileUpload_1.useChatFileUpload)({
|
|
200
207
|
enabled: !!dropEnabled,
|
|
201
208
|
onUpload: function (files) { return controller.upload(files); },
|
|
202
|
-
}), fileInputRef =
|
|
209
|
+
}), fileInputRef = _3.fileInputRef, isDraggingFile = _3.isDraggingFile, dragHandlers = _3.dragHandlers;
|
|
203
210
|
// productQuery messages are filtered out of the main chat render (they only drive the side-chat panel),
|
|
204
211
|
// so don't auto-scroll when one is added — otherwise clicking a product in the side chat scrolls the main thread.
|
|
205
212
|
var visibleChat = (((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.chat) || []).filter(function (m) { return m.messageType !== 'productQuery'; });
|
|
206
213
|
var visibleChatLength = visibleChat.length;
|
|
207
214
|
var lastVisibleMessage = visibleChat[visibleChat.length - 1];
|
|
208
|
-
var
|
|
215
|
+
var _4 = (0, useChatOverflow_1.useChatOverflow)({
|
|
209
216
|
messagesContainerRef: messagesContainerRef,
|
|
210
217
|
headerRef: headerRef,
|
|
211
218
|
open: store.open,
|
|
212
219
|
loading: store.loading,
|
|
213
220
|
visibleChatLength: visibleChatLength,
|
|
214
221
|
lastVisibleMessage: lastVisibleMessage,
|
|
215
|
-
}), showNewMessages =
|
|
222
|
+
}), showNewMessages = _4.showNewMessages, setShowNewMessages = _4.setShowNewMessages, messagesOverflow = _4.messagesOverflow, scrollToBottom = _4.scrollToBottom, scrollToBottomIfNear = _4.scrollToBottomIfNear;
|
|
216
223
|
// Re-focus the chat input on desktop after a search completes.
|
|
217
224
|
// The input is disabled while loading, which causes the browser to drop focus.
|
|
218
225
|
// On mobile we intentionally skip this so the virtual keyboard dismisses.
|
|
@@ -525,7 +532,13 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
525
532
|
} }) }) }) }) }));
|
|
526
533
|
};
|
|
527
534
|
// TODO: if starting a new chat and it's expired, this button would then disappear
|
|
528
|
-
if (
|
|
535
|
+
if (controller.store.chatEnabled) {
|
|
536
|
+
wasVisibleRef.current = true;
|
|
537
|
+
}
|
|
538
|
+
// Hide the widget entirely when chat is disabled at bootstrap (silent disable).
|
|
539
|
+
// When chat becomes disabled mid-session, keep the widget mounted so the footer
|
|
540
|
+
// unavailable message stays visible (with the input disabled).
|
|
541
|
+
if (!controller.store.chatEnabled && !wasVisibleRef.current) {
|
|
529
542
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
|
|
530
543
|
}
|
|
531
544
|
// Dismiss the secondary panel and clear any product attachments tied to the side-chat
|
|
@@ -537,12 +550,12 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
537
550
|
setMobileProductInfoOpen(false);
|
|
538
551
|
(_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.dismissSideChat();
|
|
539
552
|
};
|
|
540
|
-
var
|
|
553
|
+
var _5 = (0, useChatGestures_1.useChatGestures)({
|
|
541
554
|
panelRef: secondaryRef,
|
|
542
555
|
shouldShowSideChat: !!shouldShowSideChat,
|
|
543
556
|
activeMessageId: activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.id,
|
|
544
557
|
onDismiss: dismissSideChat,
|
|
545
|
-
}), swipeOffset =
|
|
558
|
+
}), swipeOffset = _5.swipeOffset, swipeAnimating = _5.swipeAnimating, swipeHandlers = _5.swipeHandlers;
|
|
546
559
|
var requestType = (_f = store.currentChat) === null || _f === void 0 ? void 0 : _f.requestType;
|
|
547
560
|
var loadingVerbs = (0, hooks_1.useMemo)(function () {
|
|
548
561
|
switch (requestType) {
|
|
@@ -668,7 +681,7 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
668
681
|
}), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__messages__end", ref: messagesEndRef }), showNewMessages && messagesOverflow && ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__new-messages", onClick: function () {
|
|
669
682
|
scrollToBottom();
|
|
670
683
|
setShowNewMessages(false);
|
|
671
|
-
}, children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: "angle-down", size: "12px" }), (0, jsx_runtime_1.jsx)("span", { children: "New messages" })] }))] }), (0, jsx_runtime_1.jsx)(ChatLoadingIndicator_1.ChatLoadingIndicator, __assign({}, subProps.loadingIndicator, { loading: store.loading, verbs: loadingVerbs })), !((_w = store.currentChat) === null || _w === void 0 ? void 0 : _w.isExpired) ? ((0, jsx_runtime_1.jsxs)("div", __assign({ className: "ss__chat__content__footer", ref: footerRef }, dragHandlers, { children: [store.error && (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__error", children: store.error.message }), ((
|
|
684
|
+
}, children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: "angle-down", size: "12px" }), (0, jsx_runtime_1.jsx)("span", { children: "New messages" })] }))] }), (0, jsx_runtime_1.jsx)(ChatLoadingIndicator_1.ChatLoadingIndicator, __assign({}, subProps.loadingIndicator, { loading: store.loading, verbs: loadingVerbs })), !((_w = store.currentChat) === null || _w === void 0 ? void 0 : _w.isExpired) ? ((0, jsx_runtime_1.jsxs)("div", __assign({ className: "ss__chat__content__footer", ref: footerRef }, dragHandlers, { children: [(store.error || store.chatEnabled === false) && ((0, jsx_runtime_1.jsx)("div", { className: "ss__chat__error", children: ((_x = store.error) === null || _x === void 0 ? void 0 : _x.message) || CHAT_UNAVAILABLE_MESSAGE })), ((_y = store.currentChat) === null || _y === void 0 ? void 0 : _y.sessionLimitReached) && ((0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift', children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: "info", size: "18px", className: 'ss__chat__topic-drift__icon--info' }), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift__text', children: [(0, jsx_runtime_1.jsx)("span", { children: "Chat is currently unavailable due to high volume." }), (0, jsx_runtime_1.jsx)("span", { children: "In the meantime, feel free to use the search bar above to find what you need!" })] }), (0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__topic-drift__button', onClick: function () {
|
|
672
685
|
controller.store.createChat();
|
|
673
686
|
}, children: "New Session" })] })), store.facets && store.facets.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__actions', children: (0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__actions__wrap", children: [(0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__actions__facets-header", children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__chat__actions--title", children: "Filter by:" }), multiselectFacets && store.hasPendingFacetChanges && ((0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__actions__facets-apply ss__chat__actions__facets-apply--active', children: (0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: function () {
|
|
674
687
|
controller.search();
|
|
@@ -972,7 +985,7 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
972
985
|
var _a;
|
|
973
986
|
(_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.dismissTopicDrift();
|
|
974
987
|
}, children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: "close-thin", size: "14px", className: 'ss__chat__topic-drift__icon--close' }) })] }));
|
|
975
|
-
})(), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__input', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__input__input', children: [(0, jsx_runtime_1.jsx)("input", { type: "text", name: "ss-chat-input", disabled: store.loading || store.blocked || ((
|
|
988
|
+
})(), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__input', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__input__input', children: [(0, jsx_runtime_1.jsx)("input", { type: "text", name: "ss-chat-input", disabled: store.loading || store.blocked || ((_z = store.currentChat) === null || _z === void 0 ? void 0 : _z.sessionLimitReached) || store.chatEnabled === false, placeholder: (function () {
|
|
976
989
|
var _a, _b, _c;
|
|
977
990
|
var comparedCount = ((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.comparisons.compared.length) || 0;
|
|
978
991
|
var committedCount = ((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.comparisons.committed.length) || 0;
|
|
@@ -1000,7 +1013,7 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
1000
1013
|
if (e.keyCode === 13 && isMobile && mobileProductInfoOpen) {
|
|
1001
1014
|
setMobileProductInfoOpen(false);
|
|
1002
1015
|
}
|
|
1003
|
-
}, value: controller.store.inputValue }), store.features.imageSearch.enabled && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__upload-button', disabled: store.loading || store.blocked || ((
|
|
1016
|
+
}, value: controller.store.inputValue }), store.features.imageSearch.enabled && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__upload-button', disabled: store.loading || store.blocked || ((_0 = store.currentChat) === null || _0 === void 0 ? void 0 : _0.sessionLimitReached) || store.chatEnabled === false, onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, icon: { icon: 'image', title: 'Upload Image' } }), (0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, onChange: function (e) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1004
1017
|
return __generator(this, function (_a) {
|
|
1005
1018
|
switch (_a.label) {
|
|
1006
1019
|
case 0: return [4 /*yield*/, controller.upload(e.target.files)];
|
|
@@ -1015,7 +1028,11 @@ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
|
|
|
1015
1028
|
var _a, _b;
|
|
1016
1029
|
var hasImageAttachment = (((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.attached) || []).some(function (item) { return item.type === 'image' && !item.error; });
|
|
1017
1030
|
var messageEmpty = !controller.store.inputValue.trim();
|
|
1018
|
-
var sendDisabled = store.blocked ||
|
|
1031
|
+
var sendDisabled = store.blocked ||
|
|
1032
|
+
((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.sessionLimitReached) ||
|
|
1033
|
+
store.chatEnabled === false ||
|
|
1034
|
+
(hasImageAttachment && messageEmpty) ||
|
|
1035
|
+
messageEmpty;
|
|
1019
1036
|
return ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: "ss__chat__send-button", icon: { icon: 'send', title: 'Send Message' }, disabled: sendDisabled, onClick: function () {
|
|
1020
1037
|
if (sendDisabled)
|
|
1021
1038
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInspirationResultMessage.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAoB,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAyEjG,eAAO,MAAM,4BAA4B,gBAAyB,iCAAiC;;
|
|
1
|
+
{"version":3,"file":"ChatInspirationResultMessage.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAoB,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAyEjG,eAAO,MAAM,4BAA4B,gBAAyB,iCAAiC;;CAkKjG,CAAC;AAOH,MAAM,MAAM,iCAAiC,GAAG;IAC/C,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC;CACjD,GAAG,+CAA+C,GAClD,cAAc,CAAC,iCAAiC,CAAC,CAAC;AAEnD,MAAM,MAAM,+CAA+C,GAAG;IAC7D,QAAQ,EAAE,iCAAiC,CAAC;CAC5C,CAAC;AAEF,MAAM,WAAW,gCAAgC;CAKhD"}
|
|
@@ -132,10 +132,35 @@ export const ChatInspirationResultMessage = observer((properties) => {
|
|
|
132
132
|
console.warn('ChatInspirationResultMessage received message with unsupported type:', messageType, 'Expected type: inspirationResult');
|
|
133
133
|
return null;
|
|
134
134
|
}
|
|
135
|
+
// Translate a section's applied filters into the API's `searchFilters` shape,
|
|
136
|
+
// grouping multiple values under the same field into one entry.
|
|
137
|
+
const getSectionSearchFilters = (section) => {
|
|
138
|
+
const grouped = {};
|
|
139
|
+
(section.filterSummary || []).forEach((filter) => {
|
|
140
|
+
if (!filter?.field || filter?.value == null)
|
|
141
|
+
return;
|
|
142
|
+
const entry = (grouped[filter.field] = grouped[filter.field] || { key: filter.field, options: [] });
|
|
143
|
+
const value = filter.value;
|
|
144
|
+
if (typeof value === 'object' && ('low' in value || 'high' in value)) {
|
|
145
|
+
entry.options.push({ low: value.low == null ? '*' : String(value.low), high: value.high == null ? '*' : String(value.high) });
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
entry.options.push({ key: String(value) });
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return Object.values(grouped);
|
|
152
|
+
};
|
|
135
153
|
return inspirationSections.length ? (_jsx(CacheProvider, { children: _jsx("div", { className: classnames('ss__chat-inspiration-result-message', className, internalClassName), ...styling, children: _jsx("div", { className: classnames('ss__chat-inspiration-result-message__inspiration-sections'), children: inspirationSections.map((section, index) => (_jsxs("div", { className: classnames('ss__chat-inspiration-result-message__inspiration-sections__section'), children: [_jsx("div", { className: classnames('ss__chat-inspiration-result-message__inspiration-sections__section__title'), children: section.clusterTitle }), _jsx("div", { className: classnames('ss__chat-inspiration-result-message__inspiration-sections__section__description'), children: section.clusterDescription }), _jsx("div", { className: classnames('ss__chat-inspiration-result-message__inspiration-sections__section__queries'), children: section.searchQueries.map((searchTerm, index) => (_jsxs("button", { type: "button", className: classnames('ss__chat-inspiration-result-message__inspiration-sections__section__queries__query'), "aria-label": `Search for "${searchTerm}"`, onClick: () => {
|
|
136
154
|
if (controller?.store.loading || controller?.store.blocked)
|
|
137
155
|
return;
|
|
138
|
-
|
|
156
|
+
const searchFilters = getSectionSearchFilters(section);
|
|
157
|
+
controller?.search({
|
|
158
|
+
data: {
|
|
159
|
+
requestType: 'productSearch',
|
|
160
|
+
searchTerm,
|
|
161
|
+
...(searchFilters.length ? { searchFilters } : {}),
|
|
162
|
+
},
|
|
163
|
+
});
|
|
139
164
|
}, children: [_jsx(Icon, { ...subProps.icon, icon: "search" }), searchTerm] }, index))) }), _jsx("div", { className: classnames('ss__chat-inspiration-result-message__inspiration-sections__section__products'), children: _jsx(Slideshow, { ...subProps.slideshow, slides: section.products.map((product) => {
|
|
140
165
|
const display = product?.display || product;
|
|
141
166
|
return {
|
|
@@ -98,7 +98,7 @@ function getRequestTypeLabel(chatItem) {
|
|
|
98
98
|
case 'productComparison':
|
|
99
99
|
return 'Comparing products';
|
|
100
100
|
case 'productSearch':
|
|
101
|
-
if (chatItem.request?.searchFilters?.length) {
|
|
101
|
+
if (chatItem.request?.searchFilters?.length && !chatItem.request?.searchTerm) {
|
|
102
102
|
return 'Filtering products';
|
|
103
103
|
}
|
|
104
104
|
return 'Searching products';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/Chat/Chat.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/Chat/Chat.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAiCrE,eAAO,MAAM,YAAY,gBAAyB,iBAAiB,KAAG,GAAG,CAAC,OAAO;;CAypD/E,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzB,GAAG,uBAAuB,GAC1B,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAEnC,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,QAAQ;CAExB"}
|
|
@@ -20,6 +20,9 @@ import { Dropdown, FacetSlider, Icon, Overlay, useMediaQuery } from '../../..';
|
|
|
20
20
|
import { ChatInspirationResultMessage } from '../../Molecules/ChatInspirationResultMessage';
|
|
21
21
|
import { ChatProductComparisonMessage, } from '../../Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage';
|
|
22
22
|
import { ChatProductQueryMessage, } from '../../Molecules/ChatProductQueryMessage/ChatProductQueryMessage';
|
|
23
|
+
// Fallback footer copy when chat becomes disabled mid-session and store.error has
|
|
24
|
+
// been cleared (e.g. by createChat) — mirrors the controller's unavailable message.
|
|
25
|
+
const CHAT_UNAVAILABLE_MESSAGE = 'Service is temporarily unavailable. In the meantime, feel free to use the search bar above to find what you need!';
|
|
23
26
|
export const ChatOrganism = observer((properties) => {
|
|
24
27
|
const globalTheme = useTheme();
|
|
25
28
|
const globalTreePath = useTreePath();
|
|
@@ -64,6 +67,10 @@ export const ChatOrganism = observer((properties) => {
|
|
|
64
67
|
const avatarCharacter = avatar && avatar.length === 1 ? avatar.toUpperCase() : undefined;
|
|
65
68
|
const avatarImage = avatar && avatar.length > 1 && isValidImageUrl(avatar) ? avatar : undefined;
|
|
66
69
|
const { store } = controller;
|
|
70
|
+
// Track that the widget has been visible so a mid-session disable (status check
|
|
71
|
+
// flips chatEnabled to false) keeps it mounted with the unavailable message
|
|
72
|
+
// instead of vanishing. A disabled status at bootstrap still renders nothing.
|
|
73
|
+
const wasVisibleRef = useRef(false);
|
|
67
74
|
const themeDefaults = {
|
|
68
75
|
components: {},
|
|
69
76
|
};
|
|
@@ -455,7 +462,13 @@ export const ChatOrganism = observer((properties) => {
|
|
|
455
462
|
} }) }) }) }) }));
|
|
456
463
|
};
|
|
457
464
|
// TODO: if starting a new chat and it's expired, this button would then disappear
|
|
458
|
-
if (
|
|
465
|
+
if (controller.store.chatEnabled) {
|
|
466
|
+
wasVisibleRef.current = true;
|
|
467
|
+
}
|
|
468
|
+
// Hide the widget entirely when chat is disabled at bootstrap (silent disable).
|
|
469
|
+
// When chat becomes disabled mid-session, keep the widget mounted so the footer
|
|
470
|
+
// unavailable message stays visible (with the input disabled).
|
|
471
|
+
if (!controller.store.chatEnabled && !wasVisibleRef.current) {
|
|
459
472
|
return _jsx(_Fragment, {});
|
|
460
473
|
}
|
|
461
474
|
// Dismiss the secondary panel and clear any product attachments tied to the side-chat
|
|
@@ -595,7 +608,7 @@ export const ChatOrganism = observer((properties) => {
|
|
|
595
608
|
}), _jsx("div", { className: "ss__chat__messages__end", ref: messagesEndRef }), showNewMessages && messagesOverflow && (_jsxs("div", { className: "ss__chat__new-messages", onClick: () => {
|
|
596
609
|
scrollToBottom();
|
|
597
610
|
setShowNewMessages(false);
|
|
598
|
-
}, children: [_jsx(Icon, { icon: "angle-down", size: "12px" }), _jsx("span", { children: "New messages" })] }))] }), _jsx(ChatLoadingIndicator, { ...subProps.loadingIndicator, loading: store.loading, verbs: loadingVerbs }), !store.currentChat?.isExpired ? (_jsxs("div", { className: "ss__chat__content__footer", ref: footerRef, ...dragHandlers, children: [store.error && _jsx("div", { className: "ss__chat__error", children: store.error
|
|
611
|
+
}, children: [_jsx(Icon, { icon: "angle-down", size: "12px" }), _jsx("span", { children: "New messages" })] }))] }), _jsx(ChatLoadingIndicator, { ...subProps.loadingIndicator, loading: store.loading, verbs: loadingVerbs }), !store.currentChat?.isExpired ? (_jsxs("div", { className: "ss__chat__content__footer", ref: footerRef, ...dragHandlers, children: [(store.error || store.chatEnabled === false) && (_jsx("div", { className: "ss__chat__error", children: store.error?.message || CHAT_UNAVAILABLE_MESSAGE })), store.currentChat?.sessionLimitReached && (_jsxs("div", { className: 'ss__chat__topic-drift', children: [_jsx(Icon, { icon: "info", size: "18px", className: 'ss__chat__topic-drift__icon--info' }), _jsxs("div", { className: 'ss__chat__topic-drift__text', children: [_jsx("span", { children: "Chat is currently unavailable due to high volume." }), _jsx("span", { children: "In the meantime, feel free to use the search bar above to find what you need!" })] }), _jsx(Button, { className: 'ss__chat__topic-drift__button', onClick: () => {
|
|
599
612
|
controller.store.createChat();
|
|
600
613
|
}, children: "New Session" })] })), store.facets && store.facets.length > 0 && (_jsx("div", { className: 'ss__chat__actions', children: _jsxs("div", { className: "ss__chat__actions__wrap", children: [_jsxs("div", { className: "ss__chat__actions__facets-header", children: [_jsx("div", { className: "ss__chat__actions--title", children: "Filter by:" }), multiselectFacets && store.hasPendingFacetChanges && (_jsx("div", { className: 'ss__chat__actions__facets-apply ss__chat__actions__facets-apply--active', children: _jsx(Button, { onClick: () => {
|
|
601
614
|
controller.search();
|
|
@@ -890,7 +903,7 @@ export const ChatOrganism = observer((properties) => {
|
|
|
890
903
|
}, children: buttonText })), _jsx("span", { onClick: () => {
|
|
891
904
|
store.currentChat?.dismissTopicDrift();
|
|
892
905
|
}, children: _jsx(Icon, { icon: "close-thin", size: "14px", className: 'ss__chat__topic-drift__icon--close' }) })] }));
|
|
893
|
-
})(), _jsxs("div", { className: 'ss__chat__input', children: [_jsxs("div", { className: 'ss__chat__input__input', children: [_jsx("input", { type: "text", name: "ss-chat-input", disabled: store.loading || store.blocked || store.currentChat?.sessionLimitReached, placeholder: (() => {
|
|
906
|
+
})(), _jsxs("div", { className: 'ss__chat__input', children: [_jsxs("div", { className: 'ss__chat__input__input', children: [_jsx("input", { type: "text", name: "ss-chat-input", disabled: store.loading || store.blocked || store.currentChat?.sessionLimitReached || store.chatEnabled === false, placeholder: (() => {
|
|
894
907
|
const comparedCount = store.currentChat?.comparisons.compared.length || 0;
|
|
895
908
|
const committedCount = store.currentChat?.comparisons.committed.length || 0;
|
|
896
909
|
const attached = store.currentChat?.attachments.attached.filter((item) => item.state === 'attached' || item.state === 'active') || [];
|
|
@@ -917,14 +930,18 @@ export const ChatOrganism = observer((properties) => {
|
|
|
917
930
|
if (e.keyCode === 13 && isMobile && mobileProductInfoOpen) {
|
|
918
931
|
setMobileProductInfoOpen(false);
|
|
919
932
|
}
|
|
920
|
-
}, value: controller.store.inputValue }), store.features.imageSearch.enabled && (_jsxs(_Fragment, { children: [_jsx(Button, { className: 'ss__chat__upload-button', disabled: store.loading || store.blocked || store.currentChat?.sessionLimitReached, onClick: () => fileInputRef.current?.click(), icon: { icon: 'image', title: 'Upload Image' } }), _jsx("input", { ref: fileInputRef, onChange: async (e) => {
|
|
933
|
+
}, value: controller.store.inputValue }), store.features.imageSearch.enabled && (_jsxs(_Fragment, { children: [_jsx(Button, { className: 'ss__chat__upload-button', disabled: store.loading || store.blocked || store.currentChat?.sessionLimitReached || store.chatEnabled === false, onClick: () => fileInputRef.current?.click(), icon: { icon: 'image', title: 'Upload Image' } }), _jsx("input", { ref: fileInputRef, onChange: async (e) => {
|
|
921
934
|
await controller.upload(e.target.files);
|
|
922
935
|
// reset value
|
|
923
936
|
e.target.value = '';
|
|
924
937
|
}, type: "file", accept: "image/*", className: "ss__chat__input__input__file" })] }))] }), _jsx("div", { className: 'ss__chat__input__actions', children: (() => {
|
|
925
938
|
const hasImageAttachment = (store.currentChat?.attachments.attached || []).some((item) => item.type === 'image' && !item.error);
|
|
926
939
|
const messageEmpty = !controller.store.inputValue.trim();
|
|
927
|
-
const sendDisabled = store.blocked ||
|
|
940
|
+
const sendDisabled = store.blocked ||
|
|
941
|
+
store.currentChat?.sessionLimitReached ||
|
|
942
|
+
store.chatEnabled === false ||
|
|
943
|
+
(hasImageAttachment && messageEmpty) ||
|
|
944
|
+
messageEmpty;
|
|
928
945
|
return (_jsx(Button, { className: "ss__chat__send-button", icon: { icon: 'send', title: 'Send Message' }, disabled: sendDisabled, onClick: () => {
|
|
929
946
|
if (sendDisabled)
|
|
930
947
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@athoscommerce/snap-preact",
|
|
3
|
-
"version": "1.7.1-beta.
|
|
3
|
+
"version": "1.7.1-beta.129+9c5e30f08",
|
|
4
4
|
"description": "Snap Preact",
|
|
5
5
|
"main": "dist/cjs/src/index.js",
|
|
6
6
|
"module": "dist/esm/src/index.js",
|
|
@@ -26,16 +26,16 @@
|
|
|
26
26
|
"storybook": "storybook dev -c ./components/.storybook -p 6006"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@athoscommerce/snap-client": "1.7.1-beta.
|
|
30
|
-
"@athoscommerce/snap-controller": "1.7.1-beta.
|
|
31
|
-
"@athoscommerce/snap-event-manager": "1.7.1-beta.
|
|
32
|
-
"@athoscommerce/snap-logger": "1.7.1-beta.
|
|
33
|
-
"@athoscommerce/snap-platforms": "1.7.1-beta.
|
|
34
|
-
"@athoscommerce/snap-profiler": "1.7.1-beta.
|
|
35
|
-
"@athoscommerce/snap-store-mobx": "1.7.1-beta.
|
|
36
|
-
"@athoscommerce/snap-toolbox": "1.7.1-beta.
|
|
37
|
-
"@athoscommerce/snap-tracker": "1.7.1-beta.
|
|
38
|
-
"@athoscommerce/snap-url-manager": "1.7.1-beta.
|
|
29
|
+
"@athoscommerce/snap-client": "1.7.1-beta.129+9c5e30f08",
|
|
30
|
+
"@athoscommerce/snap-controller": "1.7.1-beta.129+9c5e30f08",
|
|
31
|
+
"@athoscommerce/snap-event-manager": "1.7.1-beta.129+9c5e30f08",
|
|
32
|
+
"@athoscommerce/snap-logger": "1.7.1-beta.129+9c5e30f08",
|
|
33
|
+
"@athoscommerce/snap-platforms": "1.7.1-beta.129+9c5e30f08",
|
|
34
|
+
"@athoscommerce/snap-profiler": "1.7.1-beta.129+9c5e30f08",
|
|
35
|
+
"@athoscommerce/snap-store-mobx": "1.7.1-beta.129+9c5e30f08",
|
|
36
|
+
"@athoscommerce/snap-toolbox": "1.7.1-beta.129+9c5e30f08",
|
|
37
|
+
"@athoscommerce/snap-tracker": "1.7.1-beta.129+9c5e30f08",
|
|
38
|
+
"@athoscommerce/snap-url-manager": "1.7.1-beta.129+9c5e30f08",
|
|
39
39
|
"@emotion/react": "11.13.0",
|
|
40
40
|
"classnames": "^2.3.2",
|
|
41
41
|
"colord": "^2.9.3",
|
|
@@ -103,5 +103,5 @@
|
|
|
103
103
|
"require": "./dist/cjs/toolbox/src/index.js"
|
|
104
104
|
}
|
|
105
105
|
},
|
|
106
|
-
"gitHead": "
|
|
106
|
+
"gitHead": "9c5e30f082e3506ad04035220c1d4455d7610661"
|
|
107
107
|
}
|