@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.
@@ -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) : part;
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 _excluded = ["enableAdvancedSearch", "data", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
101
- 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; }
102
- 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; }
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
- if (end === safeSnippet.length && safeSnippet.length > 30 && !chunk.endsWith("...")) {
124
- chunk = "".concat(chunk, " ...");
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 RenderHighlight = function RenderHighlight(_ref) {
129
- var text = _ref.text;
130
- if (!text) return null;
131
- var parts = text.split(/\[\[\[(.*?)\]\]\]/g);
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: parts.map(function (part, index) {
134
- if (index % 2 === 1) {
135
- return /*#__PURE__*/jsxRuntime.jsx("mark", {
136
- className: "inline-block rounded bg-yellow-100 px-1 font-bold text-gray-800",
137
- children: part
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(_ref2) {
153
- var history = _ref2.history,
154
- onClose = _ref2.onClose,
155
- relativePath = _ref2.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(_ref3) {
171
- var _ref3$enableAdvancedS = _ref3.enableAdvancedSearch,
172
- enableAdvancedSearch = _ref3$enableAdvancedS === void 0 ? true : _ref3$enableAdvancedS,
173
- _ref3$data = _ref3.data,
174
- data = _ref3$data === void 0 ? [] : _ref3$data,
175
- isFetching = _ref3.isFetching,
176
- isOpen = _ref3.isOpen,
177
- _ref3$searchTerm = _ref3.searchTerm,
178
- searchTerm = _ref3$searchTerm === void 0 ? "" : _ref3$searchTerm,
179
- setSearchTerm = _ref3.setSearchTerm,
180
- onClose = _ref3.onClose,
181
- _ref3$onGoToAdvanced = _ref3.onGoToAdvanced,
182
- onGoToAdvanced = _ref3$onGoToAdvanced === void 0 ? neetoCist.noop : _ref3$onGoToAdvanced,
183
- onLoadMore = _ref3.onLoadMore,
184
- _ref3$hasMore = _ref3.hasMore,
185
- hasMore = _ref3$hasMore === void 0 ? false : _ref3$hasMore,
186
- _ref3$isFetchingMore = _ref3.isFetchingMore,
187
- isFetchingMore = _ref3$isFetchingMore === void 0 ? false : _ref3$isFetchingMore,
188
- props = _objectWithoutProperties(_ref3, _excluded);
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 (_ref4) {
214
- var _ref5 = _slicedToArray(_ref4, 1),
215
- entry = _ref5[0];
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 rawTitle = htmlToText(String(item.title || "")) || "";
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 showSecondary = !!secondaryNode;
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 || index),
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: [primaryNode && /*#__PURE__*/jsxRuntime.jsx("span", {
275
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
324
276
  className: "text-foreground line-clamp-1 text-sm font-medium",
325
- children: primaryNode
326
- }), showSecondary && /*#__PURE__*/jsxRuntime.jsx("span", {
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: secondaryNode
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: neetoCist.humanize(item.type)
292
+ label: getTypeLabel(item.type)
335
293
  })
336
294
  })]
337
295
  })
338
- }, "".concat(item.type, "-").concat(item.id || index));
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
- module.exports = FinderModal;
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":"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"}
@@ -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 React__default, { useState, useRef, useEffect, useMemo } from 'react';
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) : part;
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 _excluded = ["enableAdvancedSearch", "data", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
99
- 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; }
100
- 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; }
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
- return chunk.trim();
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 RenderHighlight = function RenderHighlight(_ref) {
127
- var text = _ref.text;
128
- if (!text) return null;
129
- var parts = text.split(/\[\[\[(.*?)\]\]\]/g);
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: parts.map(function (part, index) {
132
- if (index % 2 === 1) {
133
- return /*#__PURE__*/jsx("mark", {
134
- className: "inline-block rounded bg-yellow-100 px-1 font-bold text-gray-800",
135
- children: part
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(_ref2) {
151
- var history = _ref2.history,
152
- onClose = _ref2.onClose,
153
- relativePath = _ref2.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(_ref3) {
169
- var _ref3$enableAdvancedS = _ref3.enableAdvancedSearch,
170
- enableAdvancedSearch = _ref3$enableAdvancedS === void 0 ? true : _ref3$enableAdvancedS,
171
- _ref3$data = _ref3.data,
172
- data = _ref3$data === void 0 ? [] : _ref3$data,
173
- isFetching = _ref3.isFetching,
174
- isOpen = _ref3.isOpen,
175
- _ref3$searchTerm = _ref3.searchTerm,
176
- searchTerm = _ref3$searchTerm === void 0 ? "" : _ref3$searchTerm,
177
- setSearchTerm = _ref3.setSearchTerm,
178
- onClose = _ref3.onClose,
179
- _ref3$onGoToAdvanced = _ref3.onGoToAdvanced,
180
- onGoToAdvanced = _ref3$onGoToAdvanced === void 0 ? noop : _ref3$onGoToAdvanced,
181
- onLoadMore = _ref3.onLoadMore,
182
- _ref3$hasMore = _ref3.hasMore,
183
- hasMore = _ref3$hasMore === void 0 ? false : _ref3$hasMore,
184
- _ref3$isFetchingMore = _ref3.isFetchingMore,
185
- isFetchingMore = _ref3$isFetchingMore === void 0 ? false : _ref3$isFetchingMore,
186
- props = _objectWithoutProperties(_ref3, _excluded);
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 (_ref4) {
212
- var _ref5 = _slicedToArray(_ref4, 1),
213
- entry = _ref5[0];
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 rawTitle = htmlToText(String(item.title || "")) || "";
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 showSecondary = !!secondaryNode;
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 || index),
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: [primaryNode && /*#__PURE__*/jsx("span", {
271
+ children: [/*#__PURE__*/jsx("span", {
322
272
  className: "text-foreground line-clamp-1 text-sm font-medium",
323
- children: primaryNode
324
- }), showSecondary && /*#__PURE__*/jsx("span", {
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: secondaryNode
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: humanize(item.type)
288
+ label: getTypeLabel(item.type)
333
289
  })
334
290
  })]
335
291
  })
336
- }, "".concat(item.type, "-").concat(item.id || index));
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.9-beta1",
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>",