@bigbinary/neeto-molecules 5.3.9-beta1 → 5.5.0-beta1
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/v2/FinderModal.js +83 -124
- package/dist/cjs/v2/FinderModal.js.map +1 -1
- package/dist/v2/FinderModal.js +81 -125
- package/dist/v2/FinderModal.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
3
5
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
6
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
5
7
|
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
@@ -67,6 +69,9 @@ var ModalFooter = function ModalFooter(_ref) {
|
|
|
67
69
|
});
|
|
68
70
|
};
|
|
69
71
|
|
|
72
|
+
var escapeRegExp = function escapeRegExp(string) {
|
|
73
|
+
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
74
|
+
};
|
|
70
75
|
var htmlToText = function htmlToText(html) {
|
|
71
76
|
if (!html) return null;
|
|
72
77
|
var tmp = document.createElement("div");
|
|
@@ -74,85 +79,58 @@ var htmlToText = function htmlToText(html) {
|
|
|
74
79
|
return tmp.textContent || tmp.innerText || "";
|
|
75
80
|
};
|
|
76
81
|
var highlightMatch = function highlightMatch(text, searchTerm) {
|
|
77
|
-
if (!searchTerm) return text;
|
|
78
|
-
var regex = new RegExp("(".concat(searchTerm, ")"), "gi");
|
|
82
|
+
if (!searchTerm || !text) return text;
|
|
83
|
+
var regex = new RegExp("(".concat(escapeRegExp(searchTerm), ")"), "gi");
|
|
79
84
|
return text.split(regex).map(function (part, index) {
|
|
80
85
|
return (part === null || part === void 0 ? void 0 : part.toLowerCase()) === searchTerm.toLowerCase() ? /*#__PURE__*/jsxRuntime.jsx("mark", {
|
|
81
86
|
className: "rounded-sm bg-yellow-200 text-yellow-900",
|
|
82
87
|
children: part
|
|
83
|
-
}, index) :
|
|
84
|
-
|
|
85
|
-
};
|
|
86
|
-
var filterAndHighlightContent = function filterAndHighlightContent(bodyContent, searchTerm) {
|
|
87
|
-
if (!searchTerm) return bodyContent;
|
|
88
|
-
if (!bodyContent) return null;
|
|
89
|
-
return bodyContent.split(/(.{1,130}(?:\s|$))/g).filter(function (line) {
|
|
90
|
-
return line.trim();
|
|
91
|
-
}).filter(function (line) {
|
|
92
|
-
return line.toLowerCase().includes(searchTerm.toLowerCase());
|
|
93
|
-
}).map(function (line, index) {
|
|
94
|
-
return /*#__PURE__*/jsxRuntime.jsxs(React.Fragment, {
|
|
95
|
-
children: [highlightMatch(line, searchTerm), /*#__PURE__*/jsxRuntime.jsx("br", {})]
|
|
88
|
+
}, index) : /*#__PURE__*/jsxRuntime.jsx(React.Fragment, {
|
|
89
|
+
children: part
|
|
96
90
|
}, index);
|
|
97
91
|
});
|
|
98
92
|
};
|
|
99
|
-
|
|
100
|
-
var
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
var getSmartSnippet = function getSmartSnippet(snippet) {
|
|
104
|
-
var maxLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;
|
|
105
|
-
if (!snippet) return "";
|
|
106
|
-
var safeSnippet = htmlToText(snippet) || "";
|
|
107
|
-
var matchStart = safeSnippet.indexOf("[[[");
|
|
108
|
-
var matchEnd = safeSnippet.indexOf("]]]");
|
|
109
|
-
if (matchStart === -1) {
|
|
110
|
-
var _chunk = safeSnippet.slice(0, maxLength);
|
|
111
|
-
return _chunk.length < safeSnippet.length ? "".concat(_chunk, "...") : _chunk;
|
|
112
|
-
}
|
|
113
|
-
var prefixLength = 15;
|
|
114
|
-
var suffixLength = 20;
|
|
115
|
-
var start = Math.max(0, matchStart - prefixLength);
|
|
116
|
-
var end = Math.min(safeSnippet.length, matchEnd + suffixLength);
|
|
117
|
-
var chunk = safeSnippet.slice(start, end);
|
|
118
|
-
if (start > 0) chunk = "... ".concat(chunk);
|
|
119
|
-
if (end < safeSnippet.length) chunk = "".concat(chunk, " ...");
|
|
120
|
-
if (start === 0 && matchStart > 5 && !chunk.startsWith("...")) {
|
|
121
|
-
chunk = "... ".concat(chunk);
|
|
93
|
+
var trimAroundMatch = function trimAroundMatch(text, maxLength) {
|
|
94
|
+
var start = text.indexOf("[[[");
|
|
95
|
+
if (start === -1) {
|
|
96
|
+
return text.length > maxLength ? "".concat(text.slice(0, maxLength), "\u2026") : text;
|
|
122
97
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return chunk.trim();
|
|
98
|
+
var from = Math.max(0, start - 24);
|
|
99
|
+
var to = Math.min(text.length, from + maxLength);
|
|
100
|
+
return [from > 0 && "… ", text.slice(from, to).trim(), to < text.length && " …"].filter(Boolean).join("");
|
|
127
101
|
};
|
|
128
|
-
var
|
|
129
|
-
var
|
|
130
|
-
|
|
131
|
-
|
|
102
|
+
var HighlightedSnippet = function HighlightedSnippet(_ref) {
|
|
103
|
+
var _htmlToText;
|
|
104
|
+
var snippet = _ref.snippet,
|
|
105
|
+
_ref$maxLength = _ref.maxLength,
|
|
106
|
+
maxLength = _ref$maxLength === void 0 ? 100 : _ref$maxLength;
|
|
107
|
+
if (!snippet) return null;
|
|
108
|
+
var text = trimAroundMatch((_htmlToText = htmlToText(snippet)) !== null && _htmlToText !== void 0 ? _htmlToText : "", maxLength);
|
|
132
109
|
return /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
133
|
-
children:
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}, index);
|
|
139
|
-
}
|
|
140
|
-
return /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
110
|
+
children: text.split(/\[\[\[(.*?)\]\]\]/).map(function (part, index) {
|
|
111
|
+
return index % 2 === 1 ? /*#__PURE__*/jsxRuntime.jsx("mark", {
|
|
112
|
+
className: "rounded-sm bg-yellow-200 px-0.5 text-yellow-900",
|
|
113
|
+
children: part
|
|
114
|
+
}, index) : /*#__PURE__*/jsxRuntime.jsx(React.Fragment, {
|
|
141
115
|
children: part
|
|
142
116
|
}, index);
|
|
143
117
|
})
|
|
144
118
|
});
|
|
145
119
|
};
|
|
120
|
+
|
|
121
|
+
var _excluded = ["enableAdvancedSearch", "data", "getTypeLabel", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
|
|
122
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
123
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
146
124
|
var toRelativePath = function toRelativePath(url) {
|
|
147
125
|
var _URL = new URL(url),
|
|
148
126
|
pathname = _URL.pathname,
|
|
149
127
|
search = _URL.search;
|
|
150
128
|
return "".concat(pathname).concat(search);
|
|
151
129
|
};
|
|
152
|
-
var navigateToItem = function navigateToItem(
|
|
153
|
-
var history =
|
|
154
|
-
onClose =
|
|
155
|
-
relativePath =
|
|
130
|
+
var navigateToItem = function navigateToItem(_ref) {
|
|
131
|
+
var history = _ref.history,
|
|
132
|
+
onClose = _ref.onClose,
|
|
133
|
+
relativePath = _ref.relativePath;
|
|
156
134
|
onClose === null || onClose === void 0 || onClose();
|
|
157
135
|
var currentPath = "".concat(history.location.pathname).concat(history.location.search);
|
|
158
136
|
if (currentPath !== relativePath) {
|
|
@@ -162,30 +140,36 @@ var navigateToItem = function navigateToItem(_ref2) {
|
|
|
162
140
|
var handleAnchorClick = function handleAnchorClick(event) {
|
|
163
141
|
var isModified = event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;
|
|
164
142
|
if (isModified) {
|
|
143
|
+
// Let the browser open the href natively (new tab, new window, etc.);
|
|
144
|
+
// don't let cmdk's bubble handler also navigate the current tab.
|
|
165
145
|
event.stopPropagation();
|
|
166
146
|
return;
|
|
167
147
|
}
|
|
148
|
+
// Suppress the default browser navigation so cmdk's onSelect (fired via
|
|
149
|
+
// the bubbled click) drives the SPA push exactly once.
|
|
168
150
|
event.preventDefault();
|
|
169
151
|
};
|
|
170
|
-
var FinderModal = function FinderModal(
|
|
171
|
-
var
|
|
172
|
-
enableAdvancedSearch =
|
|
173
|
-
|
|
174
|
-
data =
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
152
|
+
var FinderModal = function FinderModal(_ref2) {
|
|
153
|
+
var _ref2$enableAdvancedS = _ref2.enableAdvancedSearch,
|
|
154
|
+
enableAdvancedSearch = _ref2$enableAdvancedS === void 0 ? true : _ref2$enableAdvancedS,
|
|
155
|
+
_ref2$data = _ref2.data,
|
|
156
|
+
data = _ref2$data === void 0 ? [] : _ref2$data,
|
|
157
|
+
_ref2$getTypeLabel = _ref2.getTypeLabel,
|
|
158
|
+
getTypeLabel = _ref2$getTypeLabel === void 0 ? neetoCist.humanize : _ref2$getTypeLabel,
|
|
159
|
+
isFetching = _ref2.isFetching,
|
|
160
|
+
isOpen = _ref2.isOpen,
|
|
161
|
+
_ref2$searchTerm = _ref2.searchTerm,
|
|
162
|
+
searchTerm = _ref2$searchTerm === void 0 ? "" : _ref2$searchTerm,
|
|
163
|
+
setSearchTerm = _ref2.setSearchTerm,
|
|
164
|
+
onClose = _ref2.onClose,
|
|
165
|
+
_ref2$onGoToAdvanced = _ref2.onGoToAdvanced,
|
|
166
|
+
onGoToAdvanced = _ref2$onGoToAdvanced === void 0 ? neetoCist.noop : _ref2$onGoToAdvanced,
|
|
167
|
+
onLoadMore = _ref2.onLoadMore,
|
|
168
|
+
_ref2$hasMore = _ref2.hasMore,
|
|
169
|
+
hasMore = _ref2$hasMore === void 0 ? false : _ref2$hasMore,
|
|
170
|
+
_ref2$isFetchingMore = _ref2.isFetchingMore,
|
|
171
|
+
isFetchingMore = _ref2$isFetchingMore === void 0 ? false : _ref2$isFetchingMore,
|
|
172
|
+
props = _objectWithoutProperties(_ref2, _excluded);
|
|
189
173
|
var _useTranslation = reactI18next.useTranslation(),
|
|
190
174
|
t = _useTranslation.t;
|
|
191
175
|
var history = reactRouterDom.useHistory();
|
|
@@ -210,9 +194,9 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
210
194
|
return undefined;
|
|
211
195
|
}
|
|
212
196
|
var root = sentinelEl.closest(".nm-finder-modal__body");
|
|
213
|
-
var observer = new IntersectionObserver(function (
|
|
214
|
-
var
|
|
215
|
-
entry =
|
|
197
|
+
var observer = new IntersectionObserver(function (_ref3) {
|
|
198
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
199
|
+
entry = _ref4[0];
|
|
216
200
|
if (entry.isIntersecting) onLoadMoreRef.current();
|
|
217
201
|
}, {
|
|
218
202
|
root: root,
|
|
@@ -267,46 +251,14 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
267
251
|
title: t("neetoMolecules.finderModal.noDataTitle")
|
|
268
252
|
})
|
|
269
253
|
}), flatData.map(function (item, index) {
|
|
270
|
-
var
|
|
271
|
-
var backendSnippet = item.highlightedAttribute;
|
|
272
|
-
var isSnippetFromTitle = false;
|
|
273
|
-
if (backendSnippet) {
|
|
274
|
-
var cleanSnippet = backendSnippet.replace(/\[\[\[|\]\]\]|\.\.\./g, "").trim();
|
|
275
|
-
var cleanPrimary = rawTitle.trim();
|
|
276
|
-
if (cleanPrimary.includes(cleanSnippet) || cleanSnippet.includes(cleanPrimary)) {
|
|
277
|
-
isSnippetFromTitle = true;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
var primaryNode = null;
|
|
281
|
-
var secondaryNode = null;
|
|
282
|
-
if (isSnippetFromTitle) {
|
|
283
|
-
var smartTitle = getSmartSnippet(backendSnippet, 80);
|
|
284
|
-
primaryNode = /*#__PURE__*/jsxRuntime.jsx(RenderHighlight, {
|
|
285
|
-
text: smartTitle
|
|
286
|
-
});
|
|
287
|
-
if (item.description) {
|
|
288
|
-
var _htmlToText;
|
|
289
|
-
var rawDesc = (_htmlToText = htmlToText(String(item.description))) === null || _htmlToText === void 0 ? void 0 : _htmlToText.slice(0, 80);
|
|
290
|
-
secondaryNode = filterAndHighlightContent(rawDesc, searchTerm) || rawDesc;
|
|
291
|
-
}
|
|
292
|
-
} else {
|
|
293
|
-
primaryNode = highlightMatch(rawTitle, searchTerm) || rawTitle;
|
|
294
|
-
if (backendSnippet) {
|
|
295
|
-
var smartDesc = getSmartSnippet(backendSnippet, 80);
|
|
296
|
-
secondaryNode = /*#__PURE__*/jsxRuntime.jsx(RenderHighlight, {
|
|
297
|
-
text: smartDesc
|
|
298
|
-
});
|
|
299
|
-
} else if (item.description) {
|
|
300
|
-
var _htmlToText2;
|
|
301
|
-
var _rawDesc = (_htmlToText2 = htmlToText(String(item.description))) === null || _htmlToText2 === void 0 ? void 0 : _htmlToText2.slice(0, 80);
|
|
302
|
-
secondaryNode = filterAndHighlightContent(_rawDesc, searchTerm) || _rawDesc;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
254
|
+
var _item$highlight, _item$highlight2, _item$id, _item$id2, _htmlToText;
|
|
305
255
|
var relativePath = toRelativePath(item.url);
|
|
306
|
-
var
|
|
256
|
+
var isTitleHighlighted = ((_item$highlight = item.highlight) === null || _item$highlight === void 0 ? void 0 : _item$highlight.target) === "title";
|
|
257
|
+
var isDescriptionHighlighted = ((_item$highlight2 = item.highlight) === null || _item$highlight2 === void 0 ? void 0 : _item$highlight2.target) === "description";
|
|
258
|
+
var description = htmlToText(item.description);
|
|
307
259
|
return /*#__PURE__*/jsxRuntime.jsx(primitives.CommandItem, {
|
|
308
260
|
className: "!p-0",
|
|
309
|
-
value: "".concat(item.type, "-").concat(item.id
|
|
261
|
+
value: "".concat(item.type, "-").concat((_item$id2 = item.id) !== null && _item$id2 !== void 0 ? _item$id2 : index),
|
|
310
262
|
onSelect: function onSelect() {
|
|
311
263
|
return navigateToItem({
|
|
312
264
|
history: history,
|
|
@@ -320,22 +272,28 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
320
272
|
onClick: handleAnchorClick,
|
|
321
273
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
322
274
|
className: "flex min-w-0 flex-1 flex-col gap-1.5",
|
|
323
|
-
children: [
|
|
275
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
324
276
|
className: "text-foreground line-clamp-1 text-sm font-medium",
|
|
325
|
-
children:
|
|
326
|
-
|
|
277
|
+
children: isTitleHighlighted ? /*#__PURE__*/jsxRuntime.jsx(HighlightedSnippet, {
|
|
278
|
+
maxLength: 80,
|
|
279
|
+
snippet: item.highlight.snippet
|
|
280
|
+
}) : highlightMatch((_htmlToText = htmlToText(item.title)) !== null && _htmlToText !== void 0 ? _htmlToText : "", searchTerm)
|
|
281
|
+
}), (isDescriptionHighlighted || description) && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
327
282
|
className: "text-muted-foreground line-clamp-1 text-xs",
|
|
328
|
-
children:
|
|
283
|
+
children: isDescriptionHighlighted ? /*#__PURE__*/jsxRuntime.jsx(HighlightedSnippet, {
|
|
284
|
+
maxLength: 80,
|
|
285
|
+
snippet: item.highlight.snippet
|
|
286
|
+
}) : description
|
|
329
287
|
})]
|
|
330
288
|
}), item.type && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
331
289
|
className: "shrink-0",
|
|
332
290
|
children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
|
|
333
291
|
color: "gray",
|
|
334
|
-
label:
|
|
292
|
+
label: getTypeLabel(item.type)
|
|
335
293
|
})
|
|
336
294
|
})]
|
|
337
295
|
})
|
|
338
|
-
}, "".concat(item.type, "-").concat(item.id
|
|
296
|
+
}, "".concat(item.type, "-").concat((_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : index));
|
|
339
297
|
}), onLoadMore && hasMore && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
340
298
|
"aria-hidden": "true",
|
|
341
299
|
className: "h-px w-full",
|
|
@@ -355,5 +313,6 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
355
313
|
}));
|
|
356
314
|
};
|
|
357
315
|
|
|
358
|
-
|
|
316
|
+
exports.HighlightedSnippet = HighlightedSnippet;
|
|
317
|
+
exports.default = FinderModal;
|
|
359
318
|
//# sourceMappingURL=FinderModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FinderModal.js","sources":["../../../src/v2/components/FinderModal/Footer.jsx","../../../src/v2/components/FinderModal/utils.jsx","../../../src/v2/components/FinderModal/index.jsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { prop } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ModalFooter = ({ enableAdvancedSearch }) => {\n const { t } = useTranslation();\n\n const shortcuts = [\n {\n label: t(\"neetoMolecules.finderModal.advancedSearch\"),\n keys: [\"Cmd/Ctrl\", \"Return\"],\n isVisible: enableAdvancedSearch,\n },\n {\n label: t(\"neetoMolecules.common.actions.open\"),\n keys: [\"Return\"],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.move\"),\n keys: [\n <ChevronUp className=\"text-muted-foreground\" key=\"up\" size={12} />,\n <ChevronDown className=\"text-muted-foreground\" key=\"down\" size={12} />,\n ],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.close\"),\n keys: [\"Esc\"],\n isVisible: true,\n },\n ];\n\n return (\n <div className=\"border-border bg-muted/40 nm-finder-modal__footer border-t px-4 py-2.5\">\n <div className=\"text-muted-foreground flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n {keys.map((key, keyIndex) => (\n <kbd\n className=\"border-border bg-background text-foreground inline-flex h-4 min-w-4 items-center justify-center rounded border px-1 font-sans text-[10px] leading-none\"\n key={keyIndex}\n >\n {key}\n </kbd>\n ))}\n <span>{label}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport default ModalFooter;\n","import React from \"react\";\n\nexport const htmlToText = html => {\n if (!html) return null;\n\n const tmp = document.createElement(\"div\");\n tmp.innerHTML = html;\n\n return tmp.textContent || tmp.innerText || \"\";\n};\n\nexport const highlightMatch = (text, searchTerm) => {\n if (!searchTerm) return text;\n\n const regex = new RegExp(`(${searchTerm})`, \"gi\");\n\n return text.split(regex).map((part, index) =>\n part?.toLowerCase() === searchTerm.toLowerCase() ? (\n <mark className=\"rounded-sm bg-yellow-200 text-yellow-900\" key={index}>\n {part}\n </mark>\n ) : (\n part\n )\n );\n};\n\nexport const filterAndHighlightContent = (bodyContent, searchTerm) => {\n if (!searchTerm) return bodyContent;\n\n if (!bodyContent) return null;\n\n return bodyContent\n .split(/(.{1,130}(?:\\s|$))/g)\n .filter(line => line.trim())\n .filter(line => line.toLowerCase().includes(searchTerm.toLowerCase()))\n .map((line, index) => (\n <React.Fragment key={index}>\n {highlightMatch(line, searchTerm)}\n <br />\n </React.Fragment>\n ));\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { Empty, Spinner, Badge } from \"@bigbinary/neeto-atoms\";\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@bigbinary/neeto-atoms/primitives\";\nimport { Search } from \"lucide-react\";\nimport { humanize, noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nimport ModalFooter from \"./Footer\";\nimport { filterAndHighlightContent, highlightMatch, htmlToText } from \"./utils\";\n\nconst getSmartSnippet = (snippet, maxLength = 100) => {\n if (!snippet) return \"\";\n const safeSnippet = htmlToText(snippet) || \"\";\n\n const matchStart = safeSnippet.indexOf(\"[[[\");\n const matchEnd = safeSnippet.indexOf(\"]]]\");\n\n if (matchStart === -1) {\n const chunk = safeSnippet.slice(0, maxLength);\n\n return chunk.length < safeSnippet.length ? `${chunk}...` : chunk;\n }\n\n const prefixLength = 15;\n const suffixLength = 20;\n\n const start = Math.max(0, matchStart - prefixLength);\n const end = Math.min(safeSnippet.length, matchEnd + suffixLength);\n\n let chunk = safeSnippet.slice(start, end);\n\n if (start > 0) chunk = `... ${chunk}`;\n\n if (end < safeSnippet.length) chunk = `${chunk} ...`;\n\n if (start === 0 && matchStart > 5 && !chunk.startsWith(\"...\")) {\n chunk = `... ${chunk}`;\n }\n\n if (\n end === safeSnippet.length &&\n safeSnippet.length > 30 &&\n !chunk.endsWith(\"...\")\n ) {\n chunk = `${chunk} ...`;\n }\n\n return chunk.trim();\n};\n\nconst RenderHighlight = ({ text }) => {\n if (!text) return null;\n const parts = text.split(/\\[\\[\\[(.*?)\\]\\]\\]/g);\n\n return (\n <span>\n {parts.map((part, index) => {\n if (index % 2 === 1) {\n return (\n <mark\n className=\"inline-block rounded bg-yellow-100 px-1 font-bold text-gray-800\"\n key={index}\n >\n {part}\n </mark>\n );\n }\n\n return <span key={index}>{part}</span>;\n })}\n </span>\n );\n};\n\nconst toRelativePath = url => {\n const { pathname, search } = new URL(url);\n\n return `${pathname}${search}`;\n};\n\nconst navigateToItem = ({ history, onClose, relativePath }) => {\n onClose?.();\n const currentPath = `${history.location.pathname}${history.location.search}`;\n if (currentPath !== relativePath) {\n history.push(relativePath);\n }\n};\n\nconst handleAnchorClick = event => {\n const isModified =\n event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;\n if (isModified) {\n event.stopPropagation();\n\n return;\n }\n event.preventDefault();\n};\n\nconst FinderModal = ({\n enableAdvancedSearch = true,\n data = [],\n isFetching,\n isOpen,\n searchTerm = \"\",\n setSearchTerm,\n onClose,\n onGoToAdvanced = noop,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n ...props\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const [sentinelEl, setSentinelEl] = useState(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n const handleOpenChange = open => {\n if (!open) onClose?.();\n };\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n if (!sentinelEl || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinelEl.closest(\".nm-finder-modal__body\");\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) onLoadMoreRef.current();\n },\n { root, rootMargin: \"120px\" }\n );\n observer.observe(sentinelEl);\n\n return () => observer.disconnect();\n }, [sentinelEl, isPaginationEnabled, hasMore, isFetchingMore]);\n\n const flatData = useMemo(\n () => (Array.isArray(data) ? data : Object.values(data).flat()),\n [data]\n );\n\n const isDataEmpty = flatData.length === 0;\n\n return (\n <CommandDialog\n {...props}\n className=\"nm-finder-modal !top-1/4 !max-w-[calc(100%-2rem)] sm:!max-w-xl\"\n open={isOpen}\n title={t(\"neetoMolecules.common.actions.search\")}\n onOpenChange={handleOpenChange}\n >\n <Command className=\"!p-0\" shouldFilter={false}>\n <div className=\"border-border flex items-center gap-2 border-b px-3 py-2 [&_[data-slot=command-input-wrapper]]:!p-0\">\n <div className=\"min-w-0 flex-1\">\n <CommandInput\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n value={searchTerm}\n onValueChange={setSearchTerm}\n />\n </div>\n {isFetching && <Spinner size=\"small\" />}\n {enableAdvancedSearch && (\n <button\n className=\"border-border bg-background text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 shrink-0 items-center gap-2 rounded-md border px-2 text-xs whitespace-nowrap transition-colors\"\n type=\"button\"\n onClick={onGoToAdvanced}\n >\n <span>{t(\"neetoMolecules.finderModal.advancedSearch\")}</span>\n <kbd className=\"border-border bg-muted inline-flex h-4 items-center rounded border px-1 font-sans text-[10px] leading-none\">\n ⌘⏎\n </kbd>\n </button>\n )}\n </div>\n <CommandList className=\"nm-finder-modal__body max-h-[min(24rem,55vh)] min-h-[min(12rem,40vh)] p-2\">\n {isDataEmpty && !isFetching && (\n <CommandEmpty className=\"!py-8\">\n <Empty\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n icon={Search}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </CommandEmpty>\n )}\n {flatData.map((item, index) => {\n const rawTitle = htmlToText(String(item.title || \"\")) || \"\";\n const backendSnippet = item.highlightedAttribute;\n\n let isSnippetFromTitle = false;\n if (backendSnippet) {\n const cleanSnippet = backendSnippet\n .replace(/\\[\\[\\[|\\]\\]\\]|\\.\\.\\./g, \"\")\n .trim();\n const cleanPrimary = rawTitle.trim();\n if (\n cleanPrimary.includes(cleanSnippet) ||\n cleanSnippet.includes(cleanPrimary)\n ) {\n isSnippetFromTitle = true;\n }\n }\n\n let primaryNode = null;\n let secondaryNode = null;\n\n if (isSnippetFromTitle) {\n const smartTitle = getSmartSnippet(backendSnippet, 80);\n primaryNode = <RenderHighlight text={smartTitle} />;\n\n if (item.description) {\n const rawDesc = htmlToText(String(item.description))?.slice(\n 0,\n 80\n );\n\n secondaryNode =\n filterAndHighlightContent(rawDesc, searchTerm) || rawDesc;\n }\n } else {\n primaryNode = highlightMatch(rawTitle, searchTerm) || rawTitle;\n\n if (backendSnippet) {\n const smartDesc = getSmartSnippet(backendSnippet, 80);\n secondaryNode = <RenderHighlight text={smartDesc} />;\n } else if (item.description) {\n const rawDesc = htmlToText(String(item.description))?.slice(\n 0,\n 80\n );\n\n secondaryNode =\n filterAndHighlightContent(rawDesc, searchTerm) || rawDesc;\n }\n }\n\n const relativePath = toRelativePath(item.url);\n const showSecondary = !!secondaryNode;\n\n return (\n <CommandItem\n className=\"!p-0\"\n key={`${item.type}-${item.id || index}`}\n value={`${item.type}-${item.id || index}`}\n onSelect={() =>\n navigateToItem({ history, onClose, relativePath })\n }\n >\n <a\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 px-3 py-2.5 no-underline outline-none\"\n href={relativePath}\n onClick={handleAnchorClick}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n {primaryNode && (\n <span className=\"text-foreground line-clamp-1 text-sm font-medium\">\n {primaryNode}\n </span>\n )}\n {showSecondary && (\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n {secondaryNode}\n </span>\n )}\n </div>\n {item.type && (\n <div className=\"shrink-0\">\n <Badge color=\"gray\" label={humanize(item.type)} />\n </div>\n )}\n </a>\n </CommandItem>\n );\n })}\n {onLoadMore && hasMore && (\n <div\n aria-hidden=\"true\"\n className=\"h-px w-full\"\n data-testid=\"neeto-molecules-finder-modal-sentinel\"\n ref={setSentinelEl}\n />\n )}\n {isFetchingMore && (\n <div\n className=\"flex items-center justify-center py-3\"\n data-testid=\"neeto-molecules-finder-modal-loading-more\"\n >\n <Spinner size=\"small\" />\n </div>\n )}\n </CommandList>\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Command>\n </CommandDialog>\n );\n};\n\nFinderModal.propTypes = {\n enableAdvancedSearch: PropTypes.bool,\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n isFetching: PropTypes.bool,\n isOpen: PropTypes.bool,\n searchTerm: PropTypes.string,\n setSearchTerm: PropTypes.func,\n onClose: PropTypes.func,\n onGoToAdvanced: PropTypes.func,\n onLoadMore: PropTypes.func,\n hasMore: PropTypes.bool,\n isFetchingMore: PropTypes.bool,\n};\n\nexport default FinderModal;\n"],"names":["ModalFooter","_ref","enableAdvancedSearch","_useTranslation","useTranslation","t","shortcuts","label","keys","isVisible","_jsx","ChevronUp","className","size","ChevronDown","children","filter","prop","map","_ref2","index","_jsxs","key","keyIndex","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","concat","split","part","toLowerCase","filterAndHighlightContent","bodyContent","line","trim","includes","React","Fragment","getSmartSnippet","snippet","maxLength","arguments","length","undefined","safeSnippet","matchStart","indexOf","matchEnd","chunk","slice","prefixLength","suffixLength","start","Math","max","end","min","startsWith","endsWith","RenderHighlight","parts","toRelativePath","url","_URL","URL","pathname","search","navigateToItem","history","onClose","relativePath","currentPath","location","push","handleAnchorClick","event","isModified","metaKey","ctrlKey","shiftKey","button","stopPropagation","preventDefault","FinderModal","_ref3","_ref3$enableAdvancedS","_ref3$data","data","isFetching","isOpen","_ref3$searchTerm","setSearchTerm","_ref3$onGoToAdvanced","onGoToAdvanced","noop","onLoadMore","_ref3$hasMore","hasMore","_ref3$isFetchingMore","isFetchingMore","props","_objectWithoutProperties","_excluded","useHistory","_useState","useState","_useState2","_slicedToArray","sentinelEl","setSentinelEl","onLoadMoreRef","useRef","handleOpenChange","open","useHotkeys","mode","enabled","useEffect","current","isPaginationEnabled","Boolean","root","closest","observer","IntersectionObserver","_ref4","_ref5","entry","isIntersecting","rootMargin","observe","disconnect","flatData","useMemo","Array","isArray","Object","values","flat","isDataEmpty","CommandDialog","_objectSpread","title","onOpenChange","Command","shouldFilter","CommandInput","placeholder","value","onValueChange","Spinner","type","onClick","CommandList","CommandEmpty","Empty","description","icon","Search","item","rawTitle","String","backendSnippet","highlightedAttribute","isSnippetFromTitle","cleanSnippet","replace","cleanPrimary","primaryNode","secondaryNode","smartTitle","_htmlToText","rawDesc","smartDesc","_htmlToText2","showSecondary","CommandItem","id","onSelect","href","Badge","color","humanize","ref"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FinderModal.js","sources":["../../../src/v2/components/FinderModal/Footer.jsx","../../../src/v2/components/FinderModal/utils.jsx","../../../src/v2/components/FinderModal/index.jsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { prop } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ModalFooter = ({ enableAdvancedSearch }) => {\n const { t } = useTranslation();\n\n const shortcuts = [\n {\n label: t(\"neetoMolecules.finderModal.advancedSearch\"),\n keys: [\"Cmd/Ctrl\", \"Return\"],\n isVisible: enableAdvancedSearch,\n },\n {\n label: t(\"neetoMolecules.common.actions.open\"),\n keys: [\"Return\"],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.move\"),\n keys: [\n <ChevronUp className=\"text-muted-foreground\" key=\"up\" size={12} />,\n <ChevronDown className=\"text-muted-foreground\" key=\"down\" size={12} />,\n ],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.close\"),\n keys: [\"Esc\"],\n isVisible: true,\n },\n ];\n\n return (\n <div className=\"border-border bg-muted/40 nm-finder-modal__footer border-t px-4 py-2.5\">\n <div className=\"text-muted-foreground flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n {keys.map((key, keyIndex) => (\n <kbd\n className=\"border-border bg-background text-foreground inline-flex h-4 min-w-4 items-center justify-center rounded border px-1 font-sans text-[10px] leading-none\"\n key={keyIndex}\n >\n {key}\n </kbd>\n ))}\n <span>{label}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport default ModalFooter;\n","import React, { Fragment } from \"react\";\n\nconst escapeRegExp = string => string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\nconst htmlToText = html => {\n if (!html) return null;\n\n const tmp = document.createElement(\"div\");\n tmp.innerHTML = html;\n\n return tmp.textContent || tmp.innerText || \"\";\n};\n\nconst highlightMatch = (text, searchTerm) => {\n if (!searchTerm || !text) return text;\n\n const regex = new RegExp(`(${escapeRegExp(searchTerm)})`, \"gi\");\n\n return text.split(regex).map((part, index) =>\n part?.toLowerCase() === searchTerm.toLowerCase() ? (\n <mark className=\"rounded-sm bg-yellow-200 text-yellow-900\" key={index}>\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n )\n );\n};\n\nconst filterAndHighlightContent = (bodyContent, searchTerm) => {\n if (!searchTerm) return bodyContent;\n\n if (!bodyContent) return null;\n\n return bodyContent\n .split(/(.{1,130}(?:\\s|$))/g)\n .filter(line => line.trim())\n .filter(line => line.toLowerCase().includes(searchTerm.toLowerCase()))\n .map((line, index) => (\n <React.Fragment key={index}>\n {highlightMatch(line, searchTerm)}\n <br />\n </React.Fragment>\n ));\n};\n\nconst trimAroundMatch = (text, maxLength) => {\n const start = text.indexOf(\"[[[\");\n\n if (start === -1) {\n return text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;\n }\n\n const from = Math.max(0, start - 24);\n const to = Math.min(text.length, from + maxLength);\n\n return [\n from > 0 && \"… \",\n text.slice(from, to).trim(),\n to < text.length && \" …\",\n ]\n .filter(Boolean)\n .join(\"\");\n};\n\nconst HighlightedSnippet = ({ snippet, maxLength = 100 }) => {\n if (!snippet) return null;\n\n const text = trimAroundMatch(htmlToText(snippet) ?? \"\", maxLength);\n\n return (\n <span>\n {text.split(/\\[\\[\\[(.*?)\\]\\]\\]/).map((part, index) =>\n index % 2 === 1 ? (\n <mark\n className=\"rounded-sm bg-yellow-200 px-0.5 text-yellow-900\"\n key={index}\n >\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n )\n )}\n </span>\n );\n};\n\nexport {\n htmlToText,\n highlightMatch,\n filterAndHighlightContent,\n HighlightedSnippet,\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { Empty, Spinner, Badge } from \"@bigbinary/neeto-atoms\";\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@bigbinary/neeto-atoms/primitives\";\nimport { Search } from \"lucide-react\";\nimport { humanize, noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nimport ModalFooter from \"./Footer\";\nimport { HighlightedSnippet, highlightMatch, htmlToText } from \"./utils\";\n\nconst toRelativePath = url => {\n const { pathname, search } = new URL(url);\n\n return `${pathname}${search}`;\n};\n\nconst navigateToItem = ({ history, onClose, relativePath }) => {\n onClose?.();\n const currentPath = `${history.location.pathname}${history.location.search}`;\n if (currentPath !== relativePath) {\n history.push(relativePath);\n }\n};\n\nconst handleAnchorClick = event => {\n const isModified =\n event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;\n if (isModified) {\n // Let the browser open the href natively (new tab, new window, etc.);\n // don't let cmdk's bubble handler also navigate the current tab.\n event.stopPropagation();\n\n return;\n }\n // Suppress the default browser navigation so cmdk's onSelect (fired via\n // the bubbled click) drives the SPA push exactly once.\n event.preventDefault();\n};\n\nconst FinderModal = ({\n enableAdvancedSearch = true,\n data = [],\n getTypeLabel = humanize,\n isFetching,\n isOpen,\n searchTerm = \"\",\n setSearchTerm,\n onClose,\n onGoToAdvanced = noop,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n ...props\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const [sentinelEl, setSentinelEl] = useState(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n const handleOpenChange = open => {\n if (!open) onClose?.();\n };\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n if (!sentinelEl || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinelEl.closest(\".nm-finder-modal__body\");\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) onLoadMoreRef.current();\n },\n { root, rootMargin: \"120px\" }\n );\n observer.observe(sentinelEl);\n\n return () => observer.disconnect();\n }, [sentinelEl, isPaginationEnabled, hasMore, isFetchingMore]);\n\n const flatData = useMemo(\n () => (Array.isArray(data) ? data : Object.values(data).flat()),\n [data]\n );\n\n const isDataEmpty = flatData.length === 0;\n\n return (\n <CommandDialog\n {...props}\n className=\"nm-finder-modal !top-1/4 !max-w-[calc(100%-2rem)] sm:!max-w-xl\"\n open={isOpen}\n title={t(\"neetoMolecules.common.actions.search\")}\n onOpenChange={handleOpenChange}\n >\n <Command className=\"!p-0\" shouldFilter={false}>\n <div className=\"border-border flex items-center gap-2 border-b px-3 py-2 [&_[data-slot=command-input-wrapper]]:!p-0\">\n <div className=\"min-w-0 flex-1\">\n <CommandInput\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n value={searchTerm}\n onValueChange={setSearchTerm}\n />\n </div>\n {isFetching && <Spinner size=\"small\" />}\n {enableAdvancedSearch && (\n <button\n className=\"border-border bg-background text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 shrink-0 items-center gap-2 rounded-md border px-2 text-xs whitespace-nowrap transition-colors\"\n type=\"button\"\n onClick={onGoToAdvanced}\n >\n <span>{t(\"neetoMolecules.finderModal.advancedSearch\")}</span>\n <kbd className=\"border-border bg-muted inline-flex h-4 items-center rounded border px-1 font-sans text-[10px] leading-none\">\n ⌘⏎\n </kbd>\n </button>\n )}\n </div>\n <CommandList className=\"nm-finder-modal__body max-h-[min(24rem,55vh)] min-h-[min(12rem,40vh)] p-2\">\n {isDataEmpty && !isFetching && (\n <CommandEmpty className=\"!py-8\">\n <Empty\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n icon={Search}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </CommandEmpty>\n )}\n {flatData.map((item, index) => {\n const relativePath = toRelativePath(item.url);\n const isTitleHighlighted = item.highlight?.target === \"title\";\n const isDescriptionHighlighted =\n item.highlight?.target === \"description\";\n const description = htmlToText(item.description);\n\n return (\n <CommandItem\n className=\"!p-0\"\n key={`${item.type}-${item.id ?? index}`}\n value={`${item.type}-${item.id ?? index}`}\n onSelect={() =>\n navigateToItem({ history, onClose, relativePath })\n }\n >\n <a\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 px-3 py-2.5 no-underline outline-none\"\n href={relativePath}\n onClick={handleAnchorClick}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <span className=\"text-foreground line-clamp-1 text-sm font-medium\">\n {isTitleHighlighted ? (\n <HighlightedSnippet\n maxLength={80}\n snippet={item.highlight.snippet}\n />\n ) : (\n highlightMatch(htmlToText(item.title) ?? \"\", searchTerm)\n )}\n </span>\n {(isDescriptionHighlighted || description) && (\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n {isDescriptionHighlighted ? (\n <HighlightedSnippet\n maxLength={80}\n snippet={item.highlight.snippet}\n />\n ) : (\n description\n )}\n </span>\n )}\n </div>\n {item.type && (\n <div className=\"shrink-0\">\n <Badge color=\"gray\" label={getTypeLabel(item.type)} />\n </div>\n )}\n </a>\n </CommandItem>\n );\n })}\n {onLoadMore && hasMore && (\n <div\n aria-hidden=\"true\"\n className=\"h-px w-full\"\n data-testid=\"neeto-molecules-finder-modal-sentinel\"\n ref={setSentinelEl}\n />\n )}\n {isFetchingMore && (\n <div\n className=\"flex items-center justify-center py-3\"\n data-testid=\"neeto-molecules-finder-modal-loading-more\"\n >\n <Spinner size=\"small\" />\n </div>\n )}\n </CommandList>\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Command>\n </CommandDialog>\n );\n};\n\nFinderModal.propTypes = {\n enableAdvancedSearch: PropTypes.bool,\n data: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n type: PropTypes.string,\n title: PropTypes.string,\n description: PropTypes.string,\n url: PropTypes.string,\n highlight: PropTypes.shape({\n target: PropTypes.oneOf([\"title\", \"description\"]),\n snippet: PropTypes.string,\n }),\n })\n ),\n getTypeLabel: PropTypes.func,\n isFetching: PropTypes.bool,\n isOpen: PropTypes.bool,\n searchTerm: PropTypes.string,\n setSearchTerm: PropTypes.func,\n onClose: PropTypes.func,\n onGoToAdvanced: PropTypes.func,\n onLoadMore: PropTypes.func,\n hasMore: PropTypes.bool,\n isFetchingMore: PropTypes.bool,\n};\n\nexport { HighlightedSnippet };\n\nexport default FinderModal;\n"],"names":["ModalFooter","_ref","enableAdvancedSearch","_useTranslation","useTranslation","t","shortcuts","label","keys","isVisible","_jsx","ChevronUp","className","size","ChevronDown","children","filter","prop","map","_ref2","index","_jsxs","key","keyIndex","escapeRegExp","string","replace","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","concat","split","part","toLowerCase","Fragment","trimAroundMatch","maxLength","start","indexOf","length","slice","from","Math","max","to","min","trim","Boolean","join","HighlightedSnippet","_htmlToText","snippet","_ref$maxLength","toRelativePath","url","_URL","URL","pathname","search","navigateToItem","history","onClose","relativePath","currentPath","location","push","handleAnchorClick","event","isModified","metaKey","ctrlKey","shiftKey","button","stopPropagation","preventDefault","FinderModal","_ref2$enableAdvancedS","_ref2$data","data","_ref2$getTypeLabel","getTypeLabel","humanize","isFetching","isOpen","_ref2$searchTerm","setSearchTerm","_ref2$onGoToAdvanced","onGoToAdvanced","noop","onLoadMore","_ref2$hasMore","hasMore","_ref2$isFetchingMore","isFetchingMore","props","_objectWithoutProperties","_excluded","useHistory","_useState","useState","_useState2","_slicedToArray","sentinelEl","setSentinelEl","onLoadMoreRef","useRef","handleOpenChange","open","useHotkeys","mode","enabled","useEffect","current","isPaginationEnabled","undefined","root","closest","observer","IntersectionObserver","_ref3","_ref4","entry","isIntersecting","rootMargin","observe","disconnect","flatData","useMemo","Array","isArray","Object","values","flat","isDataEmpty","CommandDialog","_objectSpread","title","onOpenChange","Command","shouldFilter","CommandInput","placeholder","value","onValueChange","Spinner","type","onClick","CommandList","CommandEmpty","Empty","description","icon","Search","item","_item$highlight","_item$highlight2","_item$id","_item$id2","isTitleHighlighted","highlight","target","isDescriptionHighlighted","CommandItem","id","onSelect","href","Badge","color","ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA,IAAMA,WAAW,GAAG,SAAdA,WAAWA,CAAAC,IAAA,EAAiC;AAAA,EAAA,IAA3BC,oBAAoB,GAAAD,IAAA,CAApBC,oBAAoB;AACzC,EAAA,IAAAC,eAAA,GAAcC,2BAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAMC,SAAS,GAAG,CAChB;AACEC,IAAAA,KAAK,EAAEF,CAAC,CAAC,2CAA2C,CAAC;AACrDG,IAAAA,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC5BC,IAAAA,SAAS,EAAEP;AACb,GAAC,EACD;AACEK,IAAAA,KAAK,EAAEF,CAAC,CAAC,oCAAoC,CAAC;IAC9CG,IAAI,EAAE,CAAC,QAAQ,CAAC;AAChBC,IAAAA,SAAS,EAAE;AACb,GAAC,EACD;AACEF,IAAAA,KAAK,EAAEF,CAAC,CAAC,oCAAoC,CAAC;AAC9CG,IAAAA,IAAI,EAAE,cACJE,cAAA,CAACC,mBAAS,EAAA;AAACC,MAAAA,SAAS,EAAC,uBAAuB;AAAUC,MAAAA,IAAI,EAAE;AAAG,KAAA,EAAd,IAAgB,CAAC,eAClEH,cAAA,CAACI,uBAAW,EAAA;AAACF,MAAAA,SAAS,EAAC,uBAAuB;AAAYC,MAAAA,IAAI,EAAE;KAAG,EAAhB,MAAkB,CAAC,CACvE;AACDJ,IAAAA,SAAS,EAAE;AACb,GAAC,EACD;AACEF,IAAAA,KAAK,EAAEF,CAAC,CAAC,qCAAqC,CAAC;IAC/CG,IAAI,EAAE,CAAC,KAAK,CAAC;AACbC,IAAAA,SAAS,EAAE;AACb,GAAC,CACF;AAED,EAAA,oBACEC,cAAA,CAAA,KAAA,EAAA;AAAKE,IAAAA,SAAS,EAAC,wEAAwE;AAAAG,IAAAA,QAAA,eACrFL,cAAA,CAAA,KAAA,EAAA;AAAKE,MAAAA,SAAS,EAAC,6EAA6E;AAAAG,MAAAA,QAAA,EACzFT,SAAS,CAACU,MAAM,CAACC,UAAI,CAAC,WAAW,CAAC,CAAC,CAACC,GAAG,CAAC,UAAAC,KAAA,EAAkBC,KAAK,EAAA;AAAA,QAAA,IAApBb,KAAK,GAAAY,KAAA,CAALZ,KAAK;UAAEC,IAAI,GAAAW,KAAA,CAAJX,IAAI;AAAA,QAAA,oBACrDa,eAAA,CAAA,KAAA,EAAA;AAAKT,UAAAA,SAAS,EAAC,yBAAyB;UAAAG,QAAA,EAAA,CACrCP,IAAI,CAACU,GAAG,CAAC,UAACI,GAAG,EAAEC,QAAQ,EAAA;AAAA,YAAA,oBACtBb,cAAA,CAAA,KAAA,EAAA;AACEE,cAAAA,SAAS,EAAC,wJAAwJ;AAAAG,cAAAA,QAAA,EAGjKO;AAAG,aAAA,EAFCC,QAGF,CAAC;UAAA,CACP,CAAC,eACFb,cAAA,CAAA,MAAA,EAAA;AAAAK,YAAAA,QAAA,EAAOR;AAAK,WAAO,CAAC;AAAA,SAAA,EATwBa,KAUzC,CAAC;MAAA,CACP;KACE;AAAC,GACH,CAAC;AAEV,CAAC;;AClDD,IAAMI,YAAY,GAAG,SAAfA,YAAYA,CAAGC,MAAM,EAAA;AAAA,EAAA,OAAIA,MAAM,CAACC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;AAAA,CAAA;AAE5E,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAGC,IAAI,EAAI;AACzB,EAAA,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;AAEtB,EAAA,IAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EACzCF,GAAG,CAACG,SAAS,GAAGJ,IAAI;EAEpB,OAAOC,GAAG,CAACI,WAAW,IAAIJ,GAAG,CAACK,SAAS,IAAI,EAAE;AAC/C,CAAC;AAED,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAI,EAAEC,UAAU,EAAK;AAC3C,EAAA,IAAI,CAACA,UAAU,IAAI,CAACD,IAAI,EAAE,OAAOA,IAAI;AAErC,EAAA,IAAME,KAAK,GAAG,IAAIC,MAAM,CAAA,GAAA,CAAAC,MAAA,CAAKhB,YAAY,CAACa,UAAU,CAAC,EAAA,GAAA,CAAA,EAAK,IAAI,CAAC;AAE/D,EAAA,OAAOD,IAAI,CAACK,KAAK,CAACH,KAAK,CAAC,CAACpB,GAAG,CAAC,UAACwB,IAAI,EAAEtB,KAAK,EAAA;AAAA,IAAA,OACvC,CAAAsB,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJA,IAAI,CAAEC,WAAW,EAAE,MAAKN,UAAU,CAACM,WAAW,EAAE,gBAC9CjC,cAAA,CAAA,MAAA,EAAA;AAAME,MAAAA,SAAS,EAAC,0CAA0C;AAAAG,MAAAA,QAAA,EACvD2B;AAAI,KAAA,EADyDtB,KAE1D,CAAC,gBAEPV,cAAA,CAACkC,cAAQ,EAAA;AAAA7B,MAAAA,QAAA,EAAc2B;AAAI,KAAA,EAAZtB,KAAuB,CACvC;AAAA,EAAA,CACH,CAAC;AACH,CAAC;AAmBD,IAAMyB,eAAe,GAAG,SAAlBA,eAAeA,CAAIT,IAAI,EAAEU,SAAS,EAAK;AAC3C,EAAA,IAAMC,KAAK,GAAGX,IAAI,CAACY,OAAO,CAAC,KAAK,CAAC;AAEjC,EAAA,IAAID,KAAK,KAAK,EAAE,EAAE;AAChB,IAAA,OAAOX,IAAI,CAACa,MAAM,GAAGH,SAAS,MAAAN,MAAA,CAAMJ,IAAI,CAACc,KAAK,CAAC,CAAC,EAAEJ,SAAS,CAAC,cAAMV,IAAI;AACxE,EAAA;EAEA,IAAMe,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEN,KAAK,GAAG,EAAE,CAAC;AACpC,EAAA,IAAMO,EAAE,GAAGF,IAAI,CAACG,GAAG,CAACnB,IAAI,CAACa,MAAM,EAAEE,IAAI,GAAGL,SAAS,CAAC;AAElD,EAAA,OAAO,CACLK,IAAI,GAAG,CAAC,IAAI,IAAI,EAChBf,IAAI,CAACc,KAAK,CAACC,IAAI,EAAEG,EAAE,CAAC,CAACE,IAAI,EAAE,EAC3BF,EAAE,GAAGlB,IAAI,CAACa,MAAM,IAAI,IAAI,CACzB,CACEjC,MAAM,CAACyC,OAAO,CAAC,CACfC,IAAI,CAAC,EAAE,CAAC;AACb,CAAC;AAED,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA1D,IAAA,EAAqC;AAAA,EAAA,IAAA2D,WAAA;AAAA,EAAA,IAA/BC,OAAO,GAAA5D,IAAA,CAAP4D,OAAO;IAAAC,cAAA,GAAA7D,IAAA,CAAE6C,SAAS;AAATA,IAAAA,SAAS,GAAAgB,cAAA,KAAA,MAAA,GAAG,GAAG,GAAAA,cAAA;AACpD,EAAA,IAAI,CAACD,OAAO,EAAE,OAAO,IAAI;AAEzB,EAAA,IAAMzB,IAAI,GAAGS,eAAe,EAAAe,WAAA,GAACjC,UAAU,CAACkC,OAAO,CAAC,MAAA,IAAA,IAAAD,WAAA,KAAA,MAAA,GAAAA,WAAA,GAAI,EAAE,EAAEd,SAAS,CAAC;AAElE,EAAA,oBACEpC,cAAA,CAAA,MAAA,EAAA;AAAAK,IAAAA,QAAA,EACGqB,IAAI,CAACK,KAAK,CAAC,mBAAmB,CAAC,CAACvB,GAAG,CAAC,UAACwB,IAAI,EAAEtB,KAAK,EAAA;AAAA,MAAA,OAC/CA,KAAK,GAAG,CAAC,KAAK,CAAC,gBACbV,cAAA,CAAA,MAAA,EAAA;AACEE,QAAAA,SAAS,EAAC,iDAAiD;AAAAG,QAAAA,QAAA,EAG1D2B;AAAI,OAAA,EAFAtB,KAGD,CAAC,gBAEPV,cAAA,CAACkC,cAAQ,EAAA;AAAA7B,QAAAA,QAAA,EAAc2B;AAAI,OAAA,EAAZtB,KAAuB,CACvC;IAAA,CACH;AAAC,GACG,CAAC;AAEX;;;;;ACjEA,IAAM2C,cAAc,GAAG,SAAjBA,cAAcA,CAAGC,GAAG,EAAI;AAC5B,EAAA,IAAAC,IAAA,GAA6B,IAAIC,GAAG,CAACF,GAAG,CAAC;IAAjCG,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IAAEC,MAAM,GAAAH,IAAA,CAANG,MAAM;AAExB,EAAA,OAAA,EAAA,CAAA5B,MAAA,CAAU2B,QAAQ,CAAA,CAAA3B,MAAA,CAAG4B,MAAM,CAAA;AAC7B,CAAC;AAED,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAApE,IAAA,EAA2C;AAAA,EAAA,IAArCqE,OAAO,GAAArE,IAAA,CAAPqE,OAAO;IAAEC,OAAO,GAAAtE,IAAA,CAAPsE,OAAO;IAAEC,YAAY,GAAAvE,IAAA,CAAZuE,YAAY;AACtDD,EAAAA,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,MAAA,IAAPA,OAAO,EAAI;AACX,EAAA,IAAME,WAAW,GAAA,EAAA,CAAAjC,MAAA,CAAM8B,OAAO,CAACI,QAAQ,CAACP,QAAQ,CAAA,CAAA3B,MAAA,CAAG8B,OAAO,CAACI,QAAQ,CAACN,MAAM,CAAE;EAC5E,IAAIK,WAAW,KAAKD,YAAY,EAAE;AAChCF,IAAAA,OAAO,CAACK,IAAI,CAACH,YAAY,CAAC;AAC5B,EAAA;AACF,CAAC;AAED,IAAMI,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAGC,KAAK,EAAI;AACjC,EAAA,IAAMC,UAAU,GACdD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACG,OAAO,IAAIH,KAAK,CAACI,QAAQ,IAAIJ,KAAK,CAACK,MAAM,KAAK,CAAC;AACxE,EAAA,IAAIJ,UAAU,EAAE;AACd;AACA;IACAD,KAAK,CAACM,eAAe,EAAE;AAEvB,IAAA;AACF,EAAA;AACA;AACA;EACAN,KAAK,CAACO,cAAc,EAAE;AACxB,CAAC;AAED,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAAlE,KAAA,EAcX;AAAA,EAAA,IAAAmE,qBAAA,GAAAnE,KAAA,CAbJjB,oBAAoB;AAApBA,IAAAA,oBAAoB,GAAAoF,qBAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,qBAAA;IAAAC,UAAA,GAAApE,KAAA,CAC3BqE,IAAI;AAAJA,IAAAA,IAAI,GAAAD,UAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,UAAA;IAAAE,kBAAA,GAAAtE,KAAA,CACTuE,YAAY;AAAZA,IAAAA,YAAY,GAAAD,kBAAA,KAAA,MAAA,GAAGE,kBAAQ,GAAAF,kBAAA;IACvBG,UAAU,GAAAzE,KAAA,CAAVyE,UAAU;IACVC,MAAM,GAAA1E,KAAA,CAAN0E,MAAM;IAAAC,gBAAA,GAAA3E,KAAA,CACNkB,UAAU;AAAVA,IAAAA,UAAU,GAAAyD,gBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,gBAAA;IACfC,aAAa,GAAA5E,KAAA,CAAb4E,aAAa;IACbxB,OAAO,GAAApD,KAAA,CAAPoD,OAAO;IAAAyB,oBAAA,GAAA7E,KAAA,CACP8E,cAAc;AAAdA,IAAAA,cAAc,GAAAD,oBAAA,KAAA,MAAA,GAAGE,cAAI,GAAAF,oBAAA;IACrBG,UAAU,GAAAhF,KAAA,CAAVgF,UAAU;IAAAC,aAAA,GAAAjF,KAAA,CACVkF,OAAO;AAAPA,IAAAA,OAAO,GAAAD,aAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,aAAA;IAAAE,oBAAA,GAAAnF,KAAA,CACfoF,cAAc;AAAdA,IAAAA,cAAc,GAAAD,oBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,oBAAA;AACnBE,IAAAA,KAAK,GAAAC,wBAAA,CAAAtF,KAAA,EAAAuF,SAAA,CAAA;AAER,EAAA,IAAAvG,eAAA,GAAcC,2BAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AACT,EAAA,IAAMiE,OAAO,GAAGqC,yBAAU,EAAE;AAC5B,EAAA,IAAAC,SAAA,GAAoCC,cAAQ,CAAC,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAA3CI,IAAAA,UAAU,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,aAAa,GAAAH,UAAA,CAAA,CAAA,CAAA;AAChC,EAAA,IAAMI,aAAa,GAAGC,YAAM,CAAChB,UAAU,IAAID,cAAI,CAAC;AAEhD,EAAA,IAAMkB,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAGC,IAAI,EAAI;IAC/B,IAAI,CAACA,IAAI,EAAE9C,OAAO,aAAPA,OAAO,KAAA,MAAA,IAAPA,OAAO,EAAI;EACxB,CAAC;EAED+C,UAAU,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC,EAAErB,cAAc,EAAE;AAC1DsB,IAAAA,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAE3B,MAAM,IAAI3F;AACrB,GAAC,CAAC;AAEFuH,EAAAA,eAAS,CAAC,YAAM;AACdP,IAAAA,aAAa,CAACQ,OAAO,GAAGvB,UAAU,IAAID,cAAI;AAC5C,EAAA,CAAC,EAAE,CAACC,UAAU,CAAC,CAAC;AAEhB,EAAA,IAAMwB,mBAAmB,GAAGlE,OAAO,CAAC0C,UAAU,CAAC;AAE/CsB,EAAAA,eAAS,CAAC,YAAM;IACd,IAAI,CAACT,UAAU,IAAI,CAACW,mBAAmB,IAAI,CAACtB,OAAO,IAAIE,cAAc,EAAE;AACrE,MAAA,OAAOqB,SAAS;AAClB,IAAA;AAEA,IAAA,IAAMC,IAAI,GAAGb,UAAU,CAACc,OAAO,CAAC,wBAAwB,CAAC;AACzD,IAAA,IAAMC,QAAQ,GAAG,IAAIC,oBAAoB,CACvC,UAAAC,KAAA,EAAa;AAAA,MAAA,IAAAC,KAAA,GAAAnB,cAAA,CAAAkB,KAAA,EAAA,CAAA,CAAA;AAAXE,QAAAA,KAAK,GAAAD,KAAA,CAAA,CAAA,CAAA;MACL,IAAIC,KAAK,CAACC,cAAc,EAAElB,aAAa,CAACQ,OAAO,EAAE;AACnD,IAAA,CAAC,EACD;AAAEG,MAAAA,IAAI,EAAJA,IAAI;AAAEQ,MAAAA,UAAU,EAAE;AAAQ,KAC9B,CAAC;AACDN,IAAAA,QAAQ,CAACO,OAAO,CAACtB,UAAU,CAAC;IAE5B,OAAO,YAAA;AAAA,MAAA,OAAMe,QAAQ,CAACQ,UAAU,EAAE;AAAA,IAAA,CAAA;EACpC,CAAC,EAAE,CAACvB,UAAU,EAAEW,mBAAmB,EAAEtB,OAAO,EAAEE,cAAc,CAAC,CAAC;EAE9D,IAAMiC,QAAQ,GAAGC,aAAO,CACtB,YAAA;AAAA,IAAA,OAAOC,KAAK,CAACC,OAAO,CAACnD,IAAI,CAAC,GAAGA,IAAI,GAAGoD,MAAM,CAACC,MAAM,CAACrD,IAAI,CAAC,CAACsD,IAAI,EAAE;AAAA,EAAA,CAAC,EAC/D,CAACtD,IAAI,CACP,CAAC;AAED,EAAA,IAAMuD,WAAW,GAAGP,QAAQ,CAACvF,MAAM,KAAK,CAAC;EAEzC,oBACEvC,cAAA,CAACsI,wBAAa,EAAAC,aAAA,CAAAA,aAAA,KACRzC,KAAK,CAAA,EAAA,EAAA,EAAA;AACT5F,IAAAA,SAAS,EAAC,gEAAgE;AAC1EyG,IAAAA,IAAI,EAAExB,MAAO;AACbqD,IAAAA,KAAK,EAAE7I,CAAC,CAAC,sCAAsC,CAAE;AACjD8I,IAAAA,YAAY,EAAE/B,gBAAiB;IAAArG,QAAA,eAE/BM,eAAA,CAAC+H,kBAAO,EAAA;AAACxI,MAAAA,SAAS,EAAC,MAAM;AAACyI,MAAAA,YAAY,EAAE,KAAM;AAAAtI,MAAAA,QAAA,gBAC5CM,eAAA,CAAA,KAAA,EAAA;AAAKT,QAAAA,SAAS,EAAC,qGAAqG;AAAAG,QAAAA,QAAA,gBAClHL,cAAA,CAAA,KAAA,EAAA;AAAKE,UAAAA,SAAS,EAAC,gBAAgB;UAAAG,QAAA,eAC7BL,cAAA,CAAC4I,uBAAY,EAAA;AACXC,YAAAA,WAAW,EAAElJ,CAAC,CAAC,sCAAsC,CAAE;AACvDmJ,YAAAA,KAAK,EAAEnH,UAAW;AAClBoH,YAAAA,aAAa,EAAE1D;WAChB;AAAC,SACC,CAAC,EACLH,UAAU,iBAAIlF,cAAA,CAACgJ,kBAAO,EAAA;AAAC7I,UAAAA,IAAI,EAAC;AAAO,SAAE,CAAC,EACtCX,oBAAoB,iBACnBmB,eAAA,CAAA,QAAA,EAAA;AACET,UAAAA,SAAS,EAAC,gMAAgM;AAC1M+I,UAAAA,IAAI,EAAC,QAAQ;AACbC,UAAAA,OAAO,EAAE3D,cAAe;AAAAlF,UAAAA,QAAA,gBAExBL,cAAA,CAAA,MAAA,EAAA;YAAAK,QAAA,EAAOV,CAAC,CAAC,2CAA2C;WAAQ,CAAC,eAC7DK,cAAA,CAAA,KAAA,EAAA;AAAKE,YAAAA,SAAS,EAAC,4GAA4G;AAAAG,YAAAA,QAAA,EAAC;AAE5H,WAAK,CAAC;AAAA,SACA,CACT;AAAA,OACE,CAAC,eACNM,eAAA,CAACwI,sBAAW,EAAA;AAACjJ,QAAAA,SAAS,EAAC,2EAA2E;QAAAG,QAAA,EAAA,CAC/FgI,WAAW,IAAI,CAACnD,UAAU,iBACzBlF,cAAA,CAACoJ,uBAAY,EAAA;AAAClJ,UAAAA,SAAS,EAAC,OAAO;UAAAG,QAAA,eAC7BL,cAAA,CAACqJ,gBAAK,EAAA;AACJC,YAAAA,WAAW,EAAE3J,CAAC,CAAC,uCAAuC,CAAE;AACxD4J,YAAAA,IAAI,EAAEC,aAAO;YACbhB,KAAK,EAAE7I,CAAC,CAAC,wCAAwC;WAClD;SACW,CACf,EACAmI,QAAQ,CAACtH,GAAG,CAAC,UAACiJ,IAAI,EAAE/I,KAAK,EAAK;UAAA,IAAAgJ,eAAA,EAAAC,gBAAA,EAAAC,QAAA,EAAAC,SAAA,EAAA3G,WAAA;AAC7B,UAAA,IAAMY,YAAY,GAAGT,cAAc,CAACoG,IAAI,CAACnG,GAAG,CAAC;AAC7C,UAAA,IAAMwG,kBAAkB,GAAG,CAAA,CAAAJ,eAAA,GAAAD,IAAI,CAACM,SAAS,MAAA,IAAA,IAAAL,eAAA,KAAA,MAAA,GAAA,MAAA,GAAdA,eAAA,CAAgBM,MAAM,MAAK,OAAO;AAC7D,UAAA,IAAMC,wBAAwB,GAC5B,CAAA,CAAAN,gBAAA,GAAAF,IAAI,CAACM,SAAS,MAAA,IAAA,IAAAJ,gBAAA,KAAA,MAAA,GAAA,MAAA,GAAdA,gBAAA,CAAgBK,MAAM,MAAK,aAAa;AAC1C,UAAA,IAAMV,WAAW,GAAGrI,UAAU,CAACwI,IAAI,CAACH,WAAW,CAAC;UAEhD,oBACEtJ,cAAA,CAACkK,sBAAW,EAAA;AACVhK,YAAAA,SAAS,EAAC,MAAM;YAEhB4I,KAAK,EAAA,EAAA,CAAAhH,MAAA,CAAK2H,IAAI,CAACR,IAAI,EAAA,GAAA,CAAA,CAAAnH,MAAA,CAAA,CAAA+H,SAAA,GAAIJ,IAAI,CAACU,EAAE,MAAA,IAAA,IAAAN,SAAA,cAAAA,SAAA,GAAInJ,KAAK,CAAG;YAC1C0J,QAAQ,EAAE,SAAVA,QAAQA,GAAA;AAAA,cAAA,OACNzG,cAAc,CAAC;AAAEC,gBAAAA,OAAO,EAAPA,OAAO;AAAEC,gBAAAA,OAAO,EAAPA,OAAO;AAAEC,gBAAAA,YAAY,EAAZA;AAAa,eAAC,CAAC;YAAA,CACnD;AAAAzD,YAAAA,QAAA,eAEDM,eAAA,CAAA,GAAA,EAAA;AACET,cAAAA,SAAS,EAAC,8FAA8F;AACxGmK,cAAAA,IAAI,EAAEvG,YAAa;AACnBoF,cAAAA,OAAO,EAAEhF,iBAAkB;AAAA7D,cAAAA,QAAA,gBAE3BM,eAAA,CAAA,KAAA,EAAA;AAAKT,gBAAAA,SAAS,EAAC,sCAAsC;AAAAG,gBAAAA,QAAA,gBACnDL,cAAA,CAAA,MAAA,EAAA;AAAME,kBAAAA,SAAS,EAAC,kDAAkD;AAAAG,kBAAAA,QAAA,EAC/DyJ,kBAAkB,gBACjB9J,cAAA,CAACiD,kBAAkB,EAAA;AACjBb,oBAAAA,SAAS,EAAE,EAAG;AACde,oBAAAA,OAAO,EAAEsG,IAAI,CAACM,SAAS,CAAC5G;AAAQ,mBACjC,CAAC,GAEF1B,cAAc,EAAAyB,WAAA,GAACjC,UAAU,CAACwI,IAAI,CAACjB,KAAK,CAAC,cAAAtF,WAAA,KAAA,MAAA,GAAAA,WAAA,GAAI,EAAE,EAAEvB,UAAU;AACxD,iBACG,CAAC,EACN,CAACsI,wBAAwB,IAAIX,WAAW,kBACvCtJ,cAAA,CAAA,MAAA,EAAA;AAAME,kBAAAA,SAAS,EAAC,4CAA4C;AAAAG,kBAAAA,QAAA,EACzD4J,wBAAwB,gBACvBjK,cAAA,CAACiD,kBAAkB,EAAA;AACjBb,oBAAAA,SAAS,EAAE,EAAG;AACde,oBAAAA,OAAO,EAAEsG,IAAI,CAACM,SAAS,CAAC5G;AAAQ,mBACjC,CAAC,GAEFmG;AACD,iBACG,CACP;AAAA,eACE,CAAC,EACLG,IAAI,CAACR,IAAI,iBACRjJ,cAAA,CAAA,KAAA,EAAA;AAAKE,gBAAAA,SAAS,EAAC,UAAU;gBAAAG,QAAA,eACvBL,cAAA,CAACsK,gBAAK,EAAA;AAACC,kBAAAA,KAAK,EAAC,MAAM;AAAC1K,kBAAAA,KAAK,EAAEmF,YAAY,CAACyE,IAAI,CAACR,IAAI;iBAAI;AAAC,eACnD,CACN;aACA;WAAC,EAAA,EAAA,CAAAnH,MAAA,CAxCI2H,IAAI,CAACR,IAAI,EAAA,GAAA,CAAA,CAAAnH,MAAA,EAAA8H,QAAA,GAAIH,IAAI,CAACU,EAAE,cAAAP,QAAA,KAAA,MAAA,GAAAA,QAAA,GAAIlJ,KAAK,CAyC1B,CAAC;AAElB,QAAA,CAAC,CAAC,EACD+E,UAAU,IAAIE,OAAO,iBACpB3F,cAAA,CAAA,KAAA,EAAA;AACE,UAAA,aAAA,EAAY,MAAM;AAClBE,UAAAA,SAAS,EAAC,aAAa;AACvB,UAAA,aAAA,EAAY,uCAAuC;AACnDsK,UAAAA,GAAG,EAAEjE;AAAc,SACpB,CACF,EACAV,cAAc,iBACb7F,cAAA,CAAA,KAAA,EAAA;AACEE,UAAAA,SAAS,EAAC,uCAAuC;AACjD,UAAA,aAAA,EAAY,2CAA2C;UAAAG,QAAA,eAEvDL,cAAA,CAACgJ,kBAAO,EAAA;AAAC7I,YAAAA,IAAI,EAAC;WAAS;AAAC,SACrB,CACN;AAAA,OACU,CAAC,eACdH,cAAA,CAACV,WAAW,EAAA;AAAOE,QAAAA,oBAAoB,EAApBA;AAAoB,OAAK,CAAC;KACtC;AAAC,GAAA,CACG,CAAC;AAEpB;;;;;"}
|
package/dist/v2/FinderModal.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
3
3
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
4
|
-
import
|
|
4
|
+
import { Fragment, useState, useRef, useEffect, useMemo } from 'react';
|
|
5
5
|
import { Spinner, Empty, Badge } from '@bigbinary/neeto-atoms';
|
|
6
6
|
import { CommandDialog, Command, CommandInput, CommandList, CommandEmpty, CommandItem } from '@bigbinary/neeto-atoms/primitives';
|
|
7
7
|
import { noop, humanize } from '@bigbinary/neeto-cist';
|
|
@@ -65,6 +65,9 @@ var ModalFooter = function ModalFooter(_ref) {
|
|
|
65
65
|
});
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
+
var escapeRegExp = function escapeRegExp(string) {
|
|
69
|
+
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
70
|
+
};
|
|
68
71
|
var htmlToText = function htmlToText(html) {
|
|
69
72
|
if (!html) return null;
|
|
70
73
|
var tmp = document.createElement("div");
|
|
@@ -72,85 +75,58 @@ var htmlToText = function htmlToText(html) {
|
|
|
72
75
|
return tmp.textContent || tmp.innerText || "";
|
|
73
76
|
};
|
|
74
77
|
var highlightMatch = function highlightMatch(text, searchTerm) {
|
|
75
|
-
if (!searchTerm) return text;
|
|
76
|
-
var regex = new RegExp("(".concat(searchTerm, ")"), "gi");
|
|
78
|
+
if (!searchTerm || !text) return text;
|
|
79
|
+
var regex = new RegExp("(".concat(escapeRegExp(searchTerm), ")"), "gi");
|
|
77
80
|
return text.split(regex).map(function (part, index) {
|
|
78
81
|
return (part === null || part === void 0 ? void 0 : part.toLowerCase()) === searchTerm.toLowerCase() ? /*#__PURE__*/jsx("mark", {
|
|
79
82
|
className: "rounded-sm bg-yellow-200 text-yellow-900",
|
|
80
83
|
children: part
|
|
81
|
-
}, index) :
|
|
82
|
-
|
|
83
|
-
};
|
|
84
|
-
var filterAndHighlightContent = function filterAndHighlightContent(bodyContent, searchTerm) {
|
|
85
|
-
if (!searchTerm) return bodyContent;
|
|
86
|
-
if (!bodyContent) return null;
|
|
87
|
-
return bodyContent.split(/(.{1,130}(?:\s|$))/g).filter(function (line) {
|
|
88
|
-
return line.trim();
|
|
89
|
-
}).filter(function (line) {
|
|
90
|
-
return line.toLowerCase().includes(searchTerm.toLowerCase());
|
|
91
|
-
}).map(function (line, index) {
|
|
92
|
-
return /*#__PURE__*/jsxs(React__default.Fragment, {
|
|
93
|
-
children: [highlightMatch(line, searchTerm), /*#__PURE__*/jsx("br", {})]
|
|
84
|
+
}, index) : /*#__PURE__*/jsx(Fragment, {
|
|
85
|
+
children: part
|
|
94
86
|
}, index);
|
|
95
87
|
});
|
|
96
88
|
};
|
|
97
|
-
|
|
98
|
-
var
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
var getSmartSnippet = function getSmartSnippet(snippet) {
|
|
102
|
-
var maxLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;
|
|
103
|
-
if (!snippet) return "";
|
|
104
|
-
var safeSnippet = htmlToText(snippet) || "";
|
|
105
|
-
var matchStart = safeSnippet.indexOf("[[[");
|
|
106
|
-
var matchEnd = safeSnippet.indexOf("]]]");
|
|
107
|
-
if (matchStart === -1) {
|
|
108
|
-
var _chunk = safeSnippet.slice(0, maxLength);
|
|
109
|
-
return _chunk.length < safeSnippet.length ? "".concat(_chunk, "...") : _chunk;
|
|
110
|
-
}
|
|
111
|
-
var prefixLength = 15;
|
|
112
|
-
var suffixLength = 20;
|
|
113
|
-
var start = Math.max(0, matchStart - prefixLength);
|
|
114
|
-
var end = Math.min(safeSnippet.length, matchEnd + suffixLength);
|
|
115
|
-
var chunk = safeSnippet.slice(start, end);
|
|
116
|
-
if (start > 0) chunk = "... ".concat(chunk);
|
|
117
|
-
if (end < safeSnippet.length) chunk = "".concat(chunk, " ...");
|
|
118
|
-
if (start === 0 && matchStart > 5 && !chunk.startsWith("...")) {
|
|
119
|
-
chunk = "... ".concat(chunk);
|
|
120
|
-
}
|
|
121
|
-
if (end === safeSnippet.length && safeSnippet.length > 30 && !chunk.endsWith("...")) {
|
|
122
|
-
chunk = "".concat(chunk, " ...");
|
|
89
|
+
var trimAroundMatch = function trimAroundMatch(text, maxLength) {
|
|
90
|
+
var start = text.indexOf("[[[");
|
|
91
|
+
if (start === -1) {
|
|
92
|
+
return text.length > maxLength ? "".concat(text.slice(0, maxLength), "\u2026") : text;
|
|
123
93
|
}
|
|
124
|
-
|
|
94
|
+
var from = Math.max(0, start - 24);
|
|
95
|
+
var to = Math.min(text.length, from + maxLength);
|
|
96
|
+
return [from > 0 && "… ", text.slice(from, to).trim(), to < text.length && " …"].filter(Boolean).join("");
|
|
125
97
|
};
|
|
126
|
-
var
|
|
127
|
-
var
|
|
128
|
-
|
|
129
|
-
|
|
98
|
+
var HighlightedSnippet = function HighlightedSnippet(_ref) {
|
|
99
|
+
var _htmlToText;
|
|
100
|
+
var snippet = _ref.snippet,
|
|
101
|
+
_ref$maxLength = _ref.maxLength,
|
|
102
|
+
maxLength = _ref$maxLength === void 0 ? 100 : _ref$maxLength;
|
|
103
|
+
if (!snippet) return null;
|
|
104
|
+
var text = trimAroundMatch((_htmlToText = htmlToText(snippet)) !== null && _htmlToText !== void 0 ? _htmlToText : "", maxLength);
|
|
130
105
|
return /*#__PURE__*/jsx("span", {
|
|
131
|
-
children:
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}, index);
|
|
137
|
-
}
|
|
138
|
-
return /*#__PURE__*/jsx("span", {
|
|
106
|
+
children: text.split(/\[\[\[(.*?)\]\]\]/).map(function (part, index) {
|
|
107
|
+
return index % 2 === 1 ? /*#__PURE__*/jsx("mark", {
|
|
108
|
+
className: "rounded-sm bg-yellow-200 px-0.5 text-yellow-900",
|
|
109
|
+
children: part
|
|
110
|
+
}, index) : /*#__PURE__*/jsx(Fragment, {
|
|
139
111
|
children: part
|
|
140
112
|
}, index);
|
|
141
113
|
})
|
|
142
114
|
});
|
|
143
115
|
};
|
|
116
|
+
|
|
117
|
+
var _excluded = ["enableAdvancedSearch", "data", "getTypeLabel", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
|
|
118
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
119
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
144
120
|
var toRelativePath = function toRelativePath(url) {
|
|
145
121
|
var _URL = new URL(url),
|
|
146
122
|
pathname = _URL.pathname,
|
|
147
123
|
search = _URL.search;
|
|
148
124
|
return "".concat(pathname).concat(search);
|
|
149
125
|
};
|
|
150
|
-
var navigateToItem = function navigateToItem(
|
|
151
|
-
var history =
|
|
152
|
-
onClose =
|
|
153
|
-
relativePath =
|
|
126
|
+
var navigateToItem = function navigateToItem(_ref) {
|
|
127
|
+
var history = _ref.history,
|
|
128
|
+
onClose = _ref.onClose,
|
|
129
|
+
relativePath = _ref.relativePath;
|
|
154
130
|
onClose === null || onClose === void 0 || onClose();
|
|
155
131
|
var currentPath = "".concat(history.location.pathname).concat(history.location.search);
|
|
156
132
|
if (currentPath !== relativePath) {
|
|
@@ -160,30 +136,36 @@ var navigateToItem = function navigateToItem(_ref2) {
|
|
|
160
136
|
var handleAnchorClick = function handleAnchorClick(event) {
|
|
161
137
|
var isModified = event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;
|
|
162
138
|
if (isModified) {
|
|
139
|
+
// Let the browser open the href natively (new tab, new window, etc.);
|
|
140
|
+
// don't let cmdk's bubble handler also navigate the current tab.
|
|
163
141
|
event.stopPropagation();
|
|
164
142
|
return;
|
|
165
143
|
}
|
|
144
|
+
// Suppress the default browser navigation so cmdk's onSelect (fired via
|
|
145
|
+
// the bubbled click) drives the SPA push exactly once.
|
|
166
146
|
event.preventDefault();
|
|
167
147
|
};
|
|
168
|
-
var FinderModal = function FinderModal(
|
|
169
|
-
var
|
|
170
|
-
enableAdvancedSearch =
|
|
171
|
-
|
|
172
|
-
data =
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
148
|
+
var FinderModal = function FinderModal(_ref2) {
|
|
149
|
+
var _ref2$enableAdvancedS = _ref2.enableAdvancedSearch,
|
|
150
|
+
enableAdvancedSearch = _ref2$enableAdvancedS === void 0 ? true : _ref2$enableAdvancedS,
|
|
151
|
+
_ref2$data = _ref2.data,
|
|
152
|
+
data = _ref2$data === void 0 ? [] : _ref2$data,
|
|
153
|
+
_ref2$getTypeLabel = _ref2.getTypeLabel,
|
|
154
|
+
getTypeLabel = _ref2$getTypeLabel === void 0 ? humanize : _ref2$getTypeLabel,
|
|
155
|
+
isFetching = _ref2.isFetching,
|
|
156
|
+
isOpen = _ref2.isOpen,
|
|
157
|
+
_ref2$searchTerm = _ref2.searchTerm,
|
|
158
|
+
searchTerm = _ref2$searchTerm === void 0 ? "" : _ref2$searchTerm,
|
|
159
|
+
setSearchTerm = _ref2.setSearchTerm,
|
|
160
|
+
onClose = _ref2.onClose,
|
|
161
|
+
_ref2$onGoToAdvanced = _ref2.onGoToAdvanced,
|
|
162
|
+
onGoToAdvanced = _ref2$onGoToAdvanced === void 0 ? noop : _ref2$onGoToAdvanced,
|
|
163
|
+
onLoadMore = _ref2.onLoadMore,
|
|
164
|
+
_ref2$hasMore = _ref2.hasMore,
|
|
165
|
+
hasMore = _ref2$hasMore === void 0 ? false : _ref2$hasMore,
|
|
166
|
+
_ref2$isFetchingMore = _ref2.isFetchingMore,
|
|
167
|
+
isFetchingMore = _ref2$isFetchingMore === void 0 ? false : _ref2$isFetchingMore,
|
|
168
|
+
props = _objectWithoutProperties(_ref2, _excluded);
|
|
187
169
|
var _useTranslation = useTranslation(),
|
|
188
170
|
t = _useTranslation.t;
|
|
189
171
|
var history = useHistory();
|
|
@@ -208,9 +190,9 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
208
190
|
return undefined;
|
|
209
191
|
}
|
|
210
192
|
var root = sentinelEl.closest(".nm-finder-modal__body");
|
|
211
|
-
var observer = new IntersectionObserver(function (
|
|
212
|
-
var
|
|
213
|
-
entry =
|
|
193
|
+
var observer = new IntersectionObserver(function (_ref3) {
|
|
194
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
195
|
+
entry = _ref4[0];
|
|
214
196
|
if (entry.isIntersecting) onLoadMoreRef.current();
|
|
215
197
|
}, {
|
|
216
198
|
root: root,
|
|
@@ -265,46 +247,14 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
265
247
|
title: t("neetoMolecules.finderModal.noDataTitle")
|
|
266
248
|
})
|
|
267
249
|
}), flatData.map(function (item, index) {
|
|
268
|
-
var
|
|
269
|
-
var backendSnippet = item.highlightedAttribute;
|
|
270
|
-
var isSnippetFromTitle = false;
|
|
271
|
-
if (backendSnippet) {
|
|
272
|
-
var cleanSnippet = backendSnippet.replace(/\[\[\[|\]\]\]|\.\.\./g, "").trim();
|
|
273
|
-
var cleanPrimary = rawTitle.trim();
|
|
274
|
-
if (cleanPrimary.includes(cleanSnippet) || cleanSnippet.includes(cleanPrimary)) {
|
|
275
|
-
isSnippetFromTitle = true;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
var primaryNode = null;
|
|
279
|
-
var secondaryNode = null;
|
|
280
|
-
if (isSnippetFromTitle) {
|
|
281
|
-
var smartTitle = getSmartSnippet(backendSnippet, 80);
|
|
282
|
-
primaryNode = /*#__PURE__*/jsx(RenderHighlight, {
|
|
283
|
-
text: smartTitle
|
|
284
|
-
});
|
|
285
|
-
if (item.description) {
|
|
286
|
-
var _htmlToText;
|
|
287
|
-
var rawDesc = (_htmlToText = htmlToText(String(item.description))) === null || _htmlToText === void 0 ? void 0 : _htmlToText.slice(0, 80);
|
|
288
|
-
secondaryNode = filterAndHighlightContent(rawDesc, searchTerm) || rawDesc;
|
|
289
|
-
}
|
|
290
|
-
} else {
|
|
291
|
-
primaryNode = highlightMatch(rawTitle, searchTerm) || rawTitle;
|
|
292
|
-
if (backendSnippet) {
|
|
293
|
-
var smartDesc = getSmartSnippet(backendSnippet, 80);
|
|
294
|
-
secondaryNode = /*#__PURE__*/jsx(RenderHighlight, {
|
|
295
|
-
text: smartDesc
|
|
296
|
-
});
|
|
297
|
-
} else if (item.description) {
|
|
298
|
-
var _htmlToText2;
|
|
299
|
-
var _rawDesc = (_htmlToText2 = htmlToText(String(item.description))) === null || _htmlToText2 === void 0 ? void 0 : _htmlToText2.slice(0, 80);
|
|
300
|
-
secondaryNode = filterAndHighlightContent(_rawDesc, searchTerm) || _rawDesc;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
250
|
+
var _item$highlight, _item$highlight2, _item$id, _item$id2, _htmlToText;
|
|
303
251
|
var relativePath = toRelativePath(item.url);
|
|
304
|
-
var
|
|
252
|
+
var isTitleHighlighted = ((_item$highlight = item.highlight) === null || _item$highlight === void 0 ? void 0 : _item$highlight.target) === "title";
|
|
253
|
+
var isDescriptionHighlighted = ((_item$highlight2 = item.highlight) === null || _item$highlight2 === void 0 ? void 0 : _item$highlight2.target) === "description";
|
|
254
|
+
var description = htmlToText(item.description);
|
|
305
255
|
return /*#__PURE__*/jsx(CommandItem, {
|
|
306
256
|
className: "!p-0",
|
|
307
|
-
value: "".concat(item.type, "-").concat(item.id
|
|
257
|
+
value: "".concat(item.type, "-").concat((_item$id2 = item.id) !== null && _item$id2 !== void 0 ? _item$id2 : index),
|
|
308
258
|
onSelect: function onSelect() {
|
|
309
259
|
return navigateToItem({
|
|
310
260
|
history: history,
|
|
@@ -318,22 +268,28 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
318
268
|
onClick: handleAnchorClick,
|
|
319
269
|
children: [/*#__PURE__*/jsxs("div", {
|
|
320
270
|
className: "flex min-w-0 flex-1 flex-col gap-1.5",
|
|
321
|
-
children: [
|
|
271
|
+
children: [/*#__PURE__*/jsx("span", {
|
|
322
272
|
className: "text-foreground line-clamp-1 text-sm font-medium",
|
|
323
|
-
children:
|
|
324
|
-
|
|
273
|
+
children: isTitleHighlighted ? /*#__PURE__*/jsx(HighlightedSnippet, {
|
|
274
|
+
maxLength: 80,
|
|
275
|
+
snippet: item.highlight.snippet
|
|
276
|
+
}) : highlightMatch((_htmlToText = htmlToText(item.title)) !== null && _htmlToText !== void 0 ? _htmlToText : "", searchTerm)
|
|
277
|
+
}), (isDescriptionHighlighted || description) && /*#__PURE__*/jsx("span", {
|
|
325
278
|
className: "text-muted-foreground line-clamp-1 text-xs",
|
|
326
|
-
children:
|
|
279
|
+
children: isDescriptionHighlighted ? /*#__PURE__*/jsx(HighlightedSnippet, {
|
|
280
|
+
maxLength: 80,
|
|
281
|
+
snippet: item.highlight.snippet
|
|
282
|
+
}) : description
|
|
327
283
|
})]
|
|
328
284
|
}), item.type && /*#__PURE__*/jsx("div", {
|
|
329
285
|
className: "shrink-0",
|
|
330
286
|
children: /*#__PURE__*/jsx(Badge, {
|
|
331
287
|
color: "gray",
|
|
332
|
-
label:
|
|
288
|
+
label: getTypeLabel(item.type)
|
|
333
289
|
})
|
|
334
290
|
})]
|
|
335
291
|
})
|
|
336
|
-
}, "".concat(item.type, "-").concat(item.id
|
|
292
|
+
}, "".concat(item.type, "-").concat((_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : index));
|
|
337
293
|
}), onLoadMore && hasMore && /*#__PURE__*/jsx("div", {
|
|
338
294
|
"aria-hidden": "true",
|
|
339
295
|
className: "h-px w-full",
|
|
@@ -353,5 +309,5 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
353
309
|
}));
|
|
354
310
|
};
|
|
355
311
|
|
|
356
|
-
export { FinderModal as default };
|
|
312
|
+
export { HighlightedSnippet, FinderModal as default };
|
|
357
313
|
//# sourceMappingURL=FinderModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FinderModal.js","sources":["../../src/v2/components/FinderModal/Footer.jsx","../../src/v2/components/FinderModal/utils.jsx","../../src/v2/components/FinderModal/index.jsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { prop } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ModalFooter = ({ enableAdvancedSearch }) => {\n const { t } = useTranslation();\n\n const shortcuts = [\n {\n label: t(\"neetoMolecules.finderModal.advancedSearch\"),\n keys: [\"Cmd/Ctrl\", \"Return\"],\n isVisible: enableAdvancedSearch,\n },\n {\n label: t(\"neetoMolecules.common.actions.open\"),\n keys: [\"Return\"],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.move\"),\n keys: [\n <ChevronUp className=\"text-muted-foreground\" key=\"up\" size={12} />,\n <ChevronDown className=\"text-muted-foreground\" key=\"down\" size={12} />,\n ],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.close\"),\n keys: [\"Esc\"],\n isVisible: true,\n },\n ];\n\n return (\n <div className=\"border-border bg-muted/40 nm-finder-modal__footer border-t px-4 py-2.5\">\n <div className=\"text-muted-foreground flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n {keys.map((key, keyIndex) => (\n <kbd\n className=\"border-border bg-background text-foreground inline-flex h-4 min-w-4 items-center justify-center rounded border px-1 font-sans text-[10px] leading-none\"\n key={keyIndex}\n >\n {key}\n </kbd>\n ))}\n <span>{label}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport default ModalFooter;\n","import React from \"react\";\n\nexport const htmlToText = html => {\n if (!html) return null;\n\n const tmp = document.createElement(\"div\");\n tmp.innerHTML = html;\n\n return tmp.textContent || tmp.innerText || \"\";\n};\n\nexport const highlightMatch = (text, searchTerm) => {\n if (!searchTerm) return text;\n\n const regex = new RegExp(`(${searchTerm})`, \"gi\");\n\n return text.split(regex).map((part, index) =>\n part?.toLowerCase() === searchTerm.toLowerCase() ? (\n <mark className=\"rounded-sm bg-yellow-200 text-yellow-900\" key={index}>\n {part}\n </mark>\n ) : (\n part\n )\n );\n};\n\nexport const filterAndHighlightContent = (bodyContent, searchTerm) => {\n if (!searchTerm) return bodyContent;\n\n if (!bodyContent) return null;\n\n return bodyContent\n .split(/(.{1,130}(?:\\s|$))/g)\n .filter(line => line.trim())\n .filter(line => line.toLowerCase().includes(searchTerm.toLowerCase()))\n .map((line, index) => (\n <React.Fragment key={index}>\n {highlightMatch(line, searchTerm)}\n <br />\n </React.Fragment>\n ));\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { Empty, Spinner, Badge } from \"@bigbinary/neeto-atoms\";\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@bigbinary/neeto-atoms/primitives\";\nimport { Search } from \"lucide-react\";\nimport { humanize, noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nimport ModalFooter from \"./Footer\";\nimport { filterAndHighlightContent, highlightMatch, htmlToText } from \"./utils\";\n\nconst getSmartSnippet = (snippet, maxLength = 100) => {\n if (!snippet) return \"\";\n const safeSnippet = htmlToText(snippet) || \"\";\n\n const matchStart = safeSnippet.indexOf(\"[[[\");\n const matchEnd = safeSnippet.indexOf(\"]]]\");\n\n if (matchStart === -1) {\n const chunk = safeSnippet.slice(0, maxLength);\n\n return chunk.length < safeSnippet.length ? `${chunk}...` : chunk;\n }\n\n const prefixLength = 15;\n const suffixLength = 20;\n\n const start = Math.max(0, matchStart - prefixLength);\n const end = Math.min(safeSnippet.length, matchEnd + suffixLength);\n\n let chunk = safeSnippet.slice(start, end);\n\n if (start > 0) chunk = `... ${chunk}`;\n\n if (end < safeSnippet.length) chunk = `${chunk} ...`;\n\n if (start === 0 && matchStart > 5 && !chunk.startsWith(\"...\")) {\n chunk = `... ${chunk}`;\n }\n\n if (\n end === safeSnippet.length &&\n safeSnippet.length > 30 &&\n !chunk.endsWith(\"...\")\n ) {\n chunk = `${chunk} ...`;\n }\n\n return chunk.trim();\n};\n\nconst RenderHighlight = ({ text }) => {\n if (!text) return null;\n const parts = text.split(/\\[\\[\\[(.*?)\\]\\]\\]/g);\n\n return (\n <span>\n {parts.map((part, index) => {\n if (index % 2 === 1) {\n return (\n <mark\n className=\"inline-block rounded bg-yellow-100 px-1 font-bold text-gray-800\"\n key={index}\n >\n {part}\n </mark>\n );\n }\n\n return <span key={index}>{part}</span>;\n })}\n </span>\n );\n};\n\nconst toRelativePath = url => {\n const { pathname, search } = new URL(url);\n\n return `${pathname}${search}`;\n};\n\nconst navigateToItem = ({ history, onClose, relativePath }) => {\n onClose?.();\n const currentPath = `${history.location.pathname}${history.location.search}`;\n if (currentPath !== relativePath) {\n history.push(relativePath);\n }\n};\n\nconst handleAnchorClick = event => {\n const isModified =\n event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;\n if (isModified) {\n event.stopPropagation();\n\n return;\n }\n event.preventDefault();\n};\n\nconst FinderModal = ({\n enableAdvancedSearch = true,\n data = [],\n isFetching,\n isOpen,\n searchTerm = \"\",\n setSearchTerm,\n onClose,\n onGoToAdvanced = noop,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n ...props\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const [sentinelEl, setSentinelEl] = useState(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n const handleOpenChange = open => {\n if (!open) onClose?.();\n };\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n if (!sentinelEl || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinelEl.closest(\".nm-finder-modal__body\");\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) onLoadMoreRef.current();\n },\n { root, rootMargin: \"120px\" }\n );\n observer.observe(sentinelEl);\n\n return () => observer.disconnect();\n }, [sentinelEl, isPaginationEnabled, hasMore, isFetchingMore]);\n\n const flatData = useMemo(\n () => (Array.isArray(data) ? data : Object.values(data).flat()),\n [data]\n );\n\n const isDataEmpty = flatData.length === 0;\n\n return (\n <CommandDialog\n {...props}\n className=\"nm-finder-modal !top-1/4 !max-w-[calc(100%-2rem)] sm:!max-w-xl\"\n open={isOpen}\n title={t(\"neetoMolecules.common.actions.search\")}\n onOpenChange={handleOpenChange}\n >\n <Command className=\"!p-0\" shouldFilter={false}>\n <div className=\"border-border flex items-center gap-2 border-b px-3 py-2 [&_[data-slot=command-input-wrapper]]:!p-0\">\n <div className=\"min-w-0 flex-1\">\n <CommandInput\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n value={searchTerm}\n onValueChange={setSearchTerm}\n />\n </div>\n {isFetching && <Spinner size=\"small\" />}\n {enableAdvancedSearch && (\n <button\n className=\"border-border bg-background text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 shrink-0 items-center gap-2 rounded-md border px-2 text-xs whitespace-nowrap transition-colors\"\n type=\"button\"\n onClick={onGoToAdvanced}\n >\n <span>{t(\"neetoMolecules.finderModal.advancedSearch\")}</span>\n <kbd className=\"border-border bg-muted inline-flex h-4 items-center rounded border px-1 font-sans text-[10px] leading-none\">\n ⌘⏎\n </kbd>\n </button>\n )}\n </div>\n <CommandList className=\"nm-finder-modal__body max-h-[min(24rem,55vh)] min-h-[min(12rem,40vh)] p-2\">\n {isDataEmpty && !isFetching && (\n <CommandEmpty className=\"!py-8\">\n <Empty\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n icon={Search}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </CommandEmpty>\n )}\n {flatData.map((item, index) => {\n const rawTitle = htmlToText(String(item.title || \"\")) || \"\";\n const backendSnippet = item.highlightedAttribute;\n\n let isSnippetFromTitle = false;\n if (backendSnippet) {\n const cleanSnippet = backendSnippet\n .replace(/\\[\\[\\[|\\]\\]\\]|\\.\\.\\./g, \"\")\n .trim();\n const cleanPrimary = rawTitle.trim();\n if (\n cleanPrimary.includes(cleanSnippet) ||\n cleanSnippet.includes(cleanPrimary)\n ) {\n isSnippetFromTitle = true;\n }\n }\n\n let primaryNode = null;\n let secondaryNode = null;\n\n if (isSnippetFromTitle) {\n const smartTitle = getSmartSnippet(backendSnippet, 80);\n primaryNode = <RenderHighlight text={smartTitle} />;\n\n if (item.description) {\n const rawDesc = htmlToText(String(item.description))?.slice(\n 0,\n 80\n );\n\n secondaryNode =\n filterAndHighlightContent(rawDesc, searchTerm) || rawDesc;\n }\n } else {\n primaryNode = highlightMatch(rawTitle, searchTerm) || rawTitle;\n\n if (backendSnippet) {\n const smartDesc = getSmartSnippet(backendSnippet, 80);\n secondaryNode = <RenderHighlight text={smartDesc} />;\n } else if (item.description) {\n const rawDesc = htmlToText(String(item.description))?.slice(\n 0,\n 80\n );\n\n secondaryNode =\n filterAndHighlightContent(rawDesc, searchTerm) || rawDesc;\n }\n }\n\n const relativePath = toRelativePath(item.url);\n const showSecondary = !!secondaryNode;\n\n return (\n <CommandItem\n className=\"!p-0\"\n key={`${item.type}-${item.id || index}`}\n value={`${item.type}-${item.id || index}`}\n onSelect={() =>\n navigateToItem({ history, onClose, relativePath })\n }\n >\n <a\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 px-3 py-2.5 no-underline outline-none\"\n href={relativePath}\n onClick={handleAnchorClick}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n {primaryNode && (\n <span className=\"text-foreground line-clamp-1 text-sm font-medium\">\n {primaryNode}\n </span>\n )}\n {showSecondary && (\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n {secondaryNode}\n </span>\n )}\n </div>\n {item.type && (\n <div className=\"shrink-0\">\n <Badge color=\"gray\" label={humanize(item.type)} />\n </div>\n )}\n </a>\n </CommandItem>\n );\n })}\n {onLoadMore && hasMore && (\n <div\n aria-hidden=\"true\"\n className=\"h-px w-full\"\n data-testid=\"neeto-molecules-finder-modal-sentinel\"\n ref={setSentinelEl}\n />\n )}\n {isFetchingMore && (\n <div\n className=\"flex items-center justify-center py-3\"\n data-testid=\"neeto-molecules-finder-modal-loading-more\"\n >\n <Spinner size=\"small\" />\n </div>\n )}\n </CommandList>\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Command>\n </CommandDialog>\n );\n};\n\nFinderModal.propTypes = {\n enableAdvancedSearch: PropTypes.bool,\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n isFetching: PropTypes.bool,\n isOpen: PropTypes.bool,\n searchTerm: PropTypes.string,\n setSearchTerm: PropTypes.func,\n onClose: PropTypes.func,\n onGoToAdvanced: PropTypes.func,\n onLoadMore: PropTypes.func,\n hasMore: PropTypes.bool,\n isFetchingMore: PropTypes.bool,\n};\n\nexport default FinderModal;\n"],"names":["ModalFooter","_ref","enableAdvancedSearch","_useTranslation","useTranslation","t","shortcuts","label","keys","isVisible","_jsx","ChevronUp","className","size","ChevronDown","children","filter","prop","map","_ref2","index","_jsxs","key","keyIndex","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","concat","split","part","toLowerCase","filterAndHighlightContent","bodyContent","line","trim","includes","React","Fragment","getSmartSnippet","snippet","maxLength","arguments","length","undefined","safeSnippet","matchStart","indexOf","matchEnd","chunk","slice","prefixLength","suffixLength","start","Math","max","end","min","startsWith","endsWith","RenderHighlight","parts","toRelativePath","url","_URL","URL","pathname","search","navigateToItem","history","onClose","relativePath","currentPath","location","push","handleAnchorClick","event","isModified","metaKey","ctrlKey","shiftKey","button","stopPropagation","preventDefault","FinderModal","_ref3","_ref3$enableAdvancedS","_ref3$data","data","isFetching","isOpen","_ref3$searchTerm","setSearchTerm","_ref3$onGoToAdvanced","onGoToAdvanced","noop","onLoadMore","_ref3$hasMore","hasMore","_ref3$isFetchingMore","isFetchingMore","props","_objectWithoutProperties","_excluded","useHistory","_useState","useState","_useState2","_slicedToArray","sentinelEl","setSentinelEl","onLoadMoreRef","useRef","handleOpenChange","open","useHotkeys","mode","enabled","useEffect","current","isPaginationEnabled","Boolean","root","closest","observer","IntersectionObserver","_ref4","_ref5","entry","isIntersecting","rootMargin","observe","disconnect","flatData","useMemo","Array","isArray","Object","values","flat","isDataEmpty","CommandDialog","_objectSpread","title","onOpenChange","Command","shouldFilter","CommandInput","placeholder","value","onValueChange","Spinner","type","onClick","CommandList","CommandEmpty","Empty","description","icon","Search","item","rawTitle","String","backendSnippet","highlightedAttribute","isSnippetFromTitle","cleanSnippet","replace","cleanPrimary","primaryNode","secondaryNode","smartTitle","_htmlToText","rawDesc","smartDesc","_htmlToText2","showSecondary","CommandItem","id","onSelect","href","Badge","color","humanize","ref"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FinderModal.js","sources":["../../src/v2/components/FinderModal/Footer.jsx","../../src/v2/components/FinderModal/utils.jsx","../../src/v2/components/FinderModal/index.jsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { prop } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ModalFooter = ({ enableAdvancedSearch }) => {\n const { t } = useTranslation();\n\n const shortcuts = [\n {\n label: t(\"neetoMolecules.finderModal.advancedSearch\"),\n keys: [\"Cmd/Ctrl\", \"Return\"],\n isVisible: enableAdvancedSearch,\n },\n {\n label: t(\"neetoMolecules.common.actions.open\"),\n keys: [\"Return\"],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.move\"),\n keys: [\n <ChevronUp className=\"text-muted-foreground\" key=\"up\" size={12} />,\n <ChevronDown className=\"text-muted-foreground\" key=\"down\" size={12} />,\n ],\n isVisible: true,\n },\n {\n label: t(\"neetoMolecules.common.actions.close\"),\n keys: [\"Esc\"],\n isVisible: true,\n },\n ];\n\n return (\n <div className=\"border-border bg-muted/40 nm-finder-modal__footer border-t px-4 py-2.5\">\n <div className=\"text-muted-foreground flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n {keys.map((key, keyIndex) => (\n <kbd\n className=\"border-border bg-background text-foreground inline-flex h-4 min-w-4 items-center justify-center rounded border px-1 font-sans text-[10px] leading-none\"\n key={keyIndex}\n >\n {key}\n </kbd>\n ))}\n <span>{label}</span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport default ModalFooter;\n","import React, { Fragment } from \"react\";\n\nconst escapeRegExp = string => string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\nconst htmlToText = html => {\n if (!html) return null;\n\n const tmp = document.createElement(\"div\");\n tmp.innerHTML = html;\n\n return tmp.textContent || tmp.innerText || \"\";\n};\n\nconst highlightMatch = (text, searchTerm) => {\n if (!searchTerm || !text) return text;\n\n const regex = new RegExp(`(${escapeRegExp(searchTerm)})`, \"gi\");\n\n return text.split(regex).map((part, index) =>\n part?.toLowerCase() === searchTerm.toLowerCase() ? (\n <mark className=\"rounded-sm bg-yellow-200 text-yellow-900\" key={index}>\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n )\n );\n};\n\nconst filterAndHighlightContent = (bodyContent, searchTerm) => {\n if (!searchTerm) return bodyContent;\n\n if (!bodyContent) return null;\n\n return bodyContent\n .split(/(.{1,130}(?:\\s|$))/g)\n .filter(line => line.trim())\n .filter(line => line.toLowerCase().includes(searchTerm.toLowerCase()))\n .map((line, index) => (\n <React.Fragment key={index}>\n {highlightMatch(line, searchTerm)}\n <br />\n </React.Fragment>\n ));\n};\n\nconst trimAroundMatch = (text, maxLength) => {\n const start = text.indexOf(\"[[[\");\n\n if (start === -1) {\n return text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;\n }\n\n const from = Math.max(0, start - 24);\n const to = Math.min(text.length, from + maxLength);\n\n return [\n from > 0 && \"… \",\n text.slice(from, to).trim(),\n to < text.length && \" …\",\n ]\n .filter(Boolean)\n .join(\"\");\n};\n\nconst HighlightedSnippet = ({ snippet, maxLength = 100 }) => {\n if (!snippet) return null;\n\n const text = trimAroundMatch(htmlToText(snippet) ?? \"\", maxLength);\n\n return (\n <span>\n {text.split(/\\[\\[\\[(.*?)\\]\\]\\]/).map((part, index) =>\n index % 2 === 1 ? (\n <mark\n className=\"rounded-sm bg-yellow-200 px-0.5 text-yellow-900\"\n key={index}\n >\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n )\n )}\n </span>\n );\n};\n\nexport {\n htmlToText,\n highlightMatch,\n filterAndHighlightContent,\n HighlightedSnippet,\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { Empty, Spinner, Badge } from \"@bigbinary/neeto-atoms\";\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@bigbinary/neeto-atoms/primitives\";\nimport { Search } from \"lucide-react\";\nimport { humanize, noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nimport ModalFooter from \"./Footer\";\nimport { HighlightedSnippet, highlightMatch, htmlToText } from \"./utils\";\n\nconst toRelativePath = url => {\n const { pathname, search } = new URL(url);\n\n return `${pathname}${search}`;\n};\n\nconst navigateToItem = ({ history, onClose, relativePath }) => {\n onClose?.();\n const currentPath = `${history.location.pathname}${history.location.search}`;\n if (currentPath !== relativePath) {\n history.push(relativePath);\n }\n};\n\nconst handleAnchorClick = event => {\n const isModified =\n event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;\n if (isModified) {\n // Let the browser open the href natively (new tab, new window, etc.);\n // don't let cmdk's bubble handler also navigate the current tab.\n event.stopPropagation();\n\n return;\n }\n // Suppress the default browser navigation so cmdk's onSelect (fired via\n // the bubbled click) drives the SPA push exactly once.\n event.preventDefault();\n};\n\nconst FinderModal = ({\n enableAdvancedSearch = true,\n data = [],\n getTypeLabel = humanize,\n isFetching,\n isOpen,\n searchTerm = \"\",\n setSearchTerm,\n onClose,\n onGoToAdvanced = noop,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n ...props\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const [sentinelEl, setSentinelEl] = useState(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n const handleOpenChange = open => {\n if (!open) onClose?.();\n };\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n if (!sentinelEl || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinelEl.closest(\".nm-finder-modal__body\");\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) onLoadMoreRef.current();\n },\n { root, rootMargin: \"120px\" }\n );\n observer.observe(sentinelEl);\n\n return () => observer.disconnect();\n }, [sentinelEl, isPaginationEnabled, hasMore, isFetchingMore]);\n\n const flatData = useMemo(\n () => (Array.isArray(data) ? data : Object.values(data).flat()),\n [data]\n );\n\n const isDataEmpty = flatData.length === 0;\n\n return (\n <CommandDialog\n {...props}\n className=\"nm-finder-modal !top-1/4 !max-w-[calc(100%-2rem)] sm:!max-w-xl\"\n open={isOpen}\n title={t(\"neetoMolecules.common.actions.search\")}\n onOpenChange={handleOpenChange}\n >\n <Command className=\"!p-0\" shouldFilter={false}>\n <div className=\"border-border flex items-center gap-2 border-b px-3 py-2 [&_[data-slot=command-input-wrapper]]:!p-0\">\n <div className=\"min-w-0 flex-1\">\n <CommandInput\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n value={searchTerm}\n onValueChange={setSearchTerm}\n />\n </div>\n {isFetching && <Spinner size=\"small\" />}\n {enableAdvancedSearch && (\n <button\n className=\"border-border bg-background text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 shrink-0 items-center gap-2 rounded-md border px-2 text-xs whitespace-nowrap transition-colors\"\n type=\"button\"\n onClick={onGoToAdvanced}\n >\n <span>{t(\"neetoMolecules.finderModal.advancedSearch\")}</span>\n <kbd className=\"border-border bg-muted inline-flex h-4 items-center rounded border px-1 font-sans text-[10px] leading-none\">\n ⌘⏎\n </kbd>\n </button>\n )}\n </div>\n <CommandList className=\"nm-finder-modal__body max-h-[min(24rem,55vh)] min-h-[min(12rem,40vh)] p-2\">\n {isDataEmpty && !isFetching && (\n <CommandEmpty className=\"!py-8\">\n <Empty\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n icon={Search}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </CommandEmpty>\n )}\n {flatData.map((item, index) => {\n const relativePath = toRelativePath(item.url);\n const isTitleHighlighted = item.highlight?.target === \"title\";\n const isDescriptionHighlighted =\n item.highlight?.target === \"description\";\n const description = htmlToText(item.description);\n\n return (\n <CommandItem\n className=\"!p-0\"\n key={`${item.type}-${item.id ?? index}`}\n value={`${item.type}-${item.id ?? index}`}\n onSelect={() =>\n navigateToItem({ history, onClose, relativePath })\n }\n >\n <a\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 px-3 py-2.5 no-underline outline-none\"\n href={relativePath}\n onClick={handleAnchorClick}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <span className=\"text-foreground line-clamp-1 text-sm font-medium\">\n {isTitleHighlighted ? (\n <HighlightedSnippet\n maxLength={80}\n snippet={item.highlight.snippet}\n />\n ) : (\n highlightMatch(htmlToText(item.title) ?? \"\", searchTerm)\n )}\n </span>\n {(isDescriptionHighlighted || description) && (\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n {isDescriptionHighlighted ? (\n <HighlightedSnippet\n maxLength={80}\n snippet={item.highlight.snippet}\n />\n ) : (\n description\n )}\n </span>\n )}\n </div>\n {item.type && (\n <div className=\"shrink-0\">\n <Badge color=\"gray\" label={getTypeLabel(item.type)} />\n </div>\n )}\n </a>\n </CommandItem>\n );\n })}\n {onLoadMore && hasMore && (\n <div\n aria-hidden=\"true\"\n className=\"h-px w-full\"\n data-testid=\"neeto-molecules-finder-modal-sentinel\"\n ref={setSentinelEl}\n />\n )}\n {isFetchingMore && (\n <div\n className=\"flex items-center justify-center py-3\"\n data-testid=\"neeto-molecules-finder-modal-loading-more\"\n >\n <Spinner size=\"small\" />\n </div>\n )}\n </CommandList>\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Command>\n </CommandDialog>\n );\n};\n\nFinderModal.propTypes = {\n enableAdvancedSearch: PropTypes.bool,\n data: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n type: PropTypes.string,\n title: PropTypes.string,\n description: PropTypes.string,\n url: PropTypes.string,\n highlight: PropTypes.shape({\n target: PropTypes.oneOf([\"title\", \"description\"]),\n snippet: PropTypes.string,\n }),\n })\n ),\n getTypeLabel: PropTypes.func,\n isFetching: PropTypes.bool,\n isOpen: PropTypes.bool,\n searchTerm: PropTypes.string,\n setSearchTerm: PropTypes.func,\n onClose: PropTypes.func,\n onGoToAdvanced: PropTypes.func,\n onLoadMore: PropTypes.func,\n hasMore: PropTypes.bool,\n isFetchingMore: PropTypes.bool,\n};\n\nexport { HighlightedSnippet };\n\nexport default FinderModal;\n"],"names":["ModalFooter","_ref","enableAdvancedSearch","_useTranslation","useTranslation","t","shortcuts","label","keys","isVisible","_jsx","ChevronUp","className","size","ChevronDown","children","filter","prop","map","_ref2","index","_jsxs","key","keyIndex","escapeRegExp","string","replace","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","concat","split","part","toLowerCase","Fragment","trimAroundMatch","maxLength","start","indexOf","length","slice","from","Math","max","to","min","trim","Boolean","join","HighlightedSnippet","_htmlToText","snippet","_ref$maxLength","toRelativePath","url","_URL","URL","pathname","search","navigateToItem","history","onClose","relativePath","currentPath","location","push","handleAnchorClick","event","isModified","metaKey","ctrlKey","shiftKey","button","stopPropagation","preventDefault","FinderModal","_ref2$enableAdvancedS","_ref2$data","data","_ref2$getTypeLabel","getTypeLabel","humanize","isFetching","isOpen","_ref2$searchTerm","setSearchTerm","_ref2$onGoToAdvanced","onGoToAdvanced","noop","onLoadMore","_ref2$hasMore","hasMore","_ref2$isFetchingMore","isFetchingMore","props","_objectWithoutProperties","_excluded","useHistory","_useState","useState","_useState2","_slicedToArray","sentinelEl","setSentinelEl","onLoadMoreRef","useRef","handleOpenChange","open","useHotkeys","mode","enabled","useEffect","current","isPaginationEnabled","undefined","root","closest","observer","IntersectionObserver","_ref3","_ref4","entry","isIntersecting","rootMargin","observe","disconnect","flatData","useMemo","Array","isArray","Object","values","flat","isDataEmpty","CommandDialog","_objectSpread","title","onOpenChange","Command","shouldFilter","CommandInput","placeholder","value","onValueChange","Spinner","type","onClick","CommandList","CommandEmpty","Empty","description","icon","Search","item","_item$highlight","_item$highlight2","_item$id","_item$id2","isTitleHighlighted","highlight","target","isDescriptionHighlighted","CommandItem","id","onSelect","href","Badge","color","ref"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigbinary/neeto-molecules",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0-beta1",
|
|
4
4
|
"description": "A package of reusable molecular components for neeto products.",
|
|
5
5
|
"repository": "git@github.com:bigbinary/neeto-molecules.git",
|
|
6
6
|
"author": "Amaljith K <amaljith.k@bigbinary.com>",
|