@bigbinary/neeto-molecules 5.5.0-beta1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/BrowserSupport.js +116 -51
  2. package/dist/BrowserSupport.js.map +1 -1
  3. package/dist/{Columns-C20zru7a.js → Columns-CpCh1cnJ.js} +6 -4
  4. package/dist/Columns-CpCh1cnJ.js.map +1 -0
  5. package/dist/{ConfigureView-D-2SQf3j.js → ConfigureView-re6uU4Lp.js} +6 -4
  6. package/dist/ConfigureView-re6uU4Lp.js.map +1 -0
  7. package/dist/EmailForm.js +3 -1
  8. package/dist/EmailForm.js.map +1 -1
  9. package/dist/FinderModal.js +14 -1
  10. package/dist/FinderModal.js.map +1 -1
  11. package/dist/FloatingActionMenu.js +175 -55
  12. package/dist/FloatingActionMenu.js.map +1 -1
  13. package/dist/IpRestriction.js +19 -9
  14. package/dist/IpRestriction.js.map +1 -1
  15. package/dist/ProductEmbed.js +35 -23
  16. package/dist/ProductEmbed.js.map +1 -1
  17. package/dist/ShareViaLink.js +4 -4
  18. package/dist/ShareViaLink.js.map +1 -1
  19. package/dist/Sidebar.js +43 -5
  20. package/dist/Sidebar.js.map +1 -1
  21. package/dist/StickyRibbonsContainer.js +27 -18
  22. package/dist/StickyRibbonsContainer.js.map +1 -1
  23. package/dist/cjs/BrowserSupport.js +119 -51
  24. package/dist/cjs/BrowserSupport.js.map +1 -1
  25. package/dist/cjs/{Columns-rqa7goJu.js → Columns-Gcp48xQM.js} +5 -3
  26. package/dist/cjs/Columns-Gcp48xQM.js.map +1 -0
  27. package/dist/cjs/{ConfigureView-CNWEfiae.js → ConfigureView-CAdrpELW.js} +6 -4
  28. package/dist/cjs/ConfigureView-CAdrpELW.js.map +1 -0
  29. package/dist/cjs/EmailForm.js +3 -1
  30. package/dist/cjs/EmailForm.js.map +1 -1
  31. package/dist/cjs/FinderModal.js +14 -1
  32. package/dist/cjs/FinderModal.js.map +1 -1
  33. package/dist/cjs/FloatingActionMenu.js +189 -69
  34. package/dist/cjs/FloatingActionMenu.js.map +1 -1
  35. package/dist/cjs/IpRestriction.js +19 -9
  36. package/dist/cjs/IpRestriction.js.map +1 -1
  37. package/dist/cjs/ProductEmbed.js +34 -22
  38. package/dist/cjs/ProductEmbed.js.map +1 -1
  39. package/dist/cjs/ShareViaLink.js +4 -4
  40. package/dist/cjs/ShareViaLink.js.map +1 -1
  41. package/dist/cjs/Sidebar.js +43 -5
  42. package/dist/cjs/Sidebar.js.map +1 -1
  43. package/dist/cjs/StickyRibbonsContainer.js +29 -20
  44. package/dist/cjs/StickyRibbonsContainer.js.map +1 -1
  45. package/dist/cjs/mail-Di35Ay-Z.js +20 -0
  46. package/dist/cjs/mail-Di35Ay-Z.js.map +1 -0
  47. package/dist/cjs/performanceDiagnostics-CS7NTxaH.js +93 -0
  48. package/dist/cjs/performanceDiagnostics-CS7NTxaH.js.map +1 -0
  49. package/dist/cjs/{phone-number-DVlbgxBG.js → phone-number-BydWe8Mf.js} +22 -3
  50. package/dist/cjs/phone-number-BydWe8Mf.js.map +1 -0
  51. package/dist/cjs/useWhatsNewChangesCount-BVkLLk7f.js +121 -0
  52. package/dist/cjs/useWhatsNewChangesCount-BVkLLk7f.js.map +1 -0
  53. package/dist/cjs/useWhatsNewChangesCount-CyOUS5U3.js +106 -0
  54. package/dist/cjs/useWhatsNewChangesCount-CyOUS5U3.js.map +1 -0
  55. package/dist/cjs/v2/BrowserSupport.js +119 -51
  56. package/dist/cjs/v2/BrowserSupport.js.map +1 -1
  57. package/dist/cjs/v2/Builder.js +17 -13
  58. package/dist/cjs/v2/Builder.js.map +1 -1
  59. package/dist/cjs/v2/CalendarView.js +2 -2
  60. package/dist/cjs/v2/Columns.js +1 -1
  61. package/dist/cjs/v2/ConfigurePageSidebar.js +1 -1
  62. package/dist/cjs/v2/DndTable.js +1 -0
  63. package/dist/cjs/v2/DndTable.js.map +1 -1
  64. package/dist/cjs/v2/DynamicVariables.js +17 -8
  65. package/dist/cjs/v2/DynamicVariables.js.map +1 -1
  66. package/dist/cjs/v2/EmailForm.js +97 -10
  67. package/dist/cjs/v2/EmailForm.js.map +1 -1
  68. package/dist/cjs/v2/EmailPreview.js +1 -1
  69. package/dist/cjs/v2/EmailPreview.js.map +1 -1
  70. package/dist/cjs/v2/Engagements.js +10 -7
  71. package/dist/cjs/v2/Engagements.js.map +1 -1
  72. package/dist/cjs/v2/FinderModal.js +104 -72
  73. package/dist/cjs/v2/FinderModal.js.map +1 -1
  74. package/dist/cjs/v2/FloatingActionMenu.js +267 -110
  75. package/dist/cjs/v2/FloatingActionMenu.js.map +1 -1
  76. package/dist/cjs/v2/IpRestriction.js +17 -7
  77. package/dist/cjs/v2/IpRestriction.js.map +1 -1
  78. package/dist/cjs/v2/MadeWith.js +5 -3
  79. package/dist/cjs/v2/MadeWith.js.map +1 -1
  80. package/dist/cjs/v2/MoreDropdown.js +5 -2
  81. package/dist/cjs/v2/MoreDropdown.js.map +1 -1
  82. package/dist/cjs/v2/OptionFields.js +1 -0
  83. package/dist/cjs/v2/OptionFields.js.map +1 -1
  84. package/dist/cjs/v2/PhoneNumber.js +1 -1
  85. package/dist/cjs/v2/ProductEmbed.js +25 -13
  86. package/dist/cjs/v2/ProductEmbed.js.map +1 -1
  87. package/dist/cjs/v2/SessionEnvironment.js +3 -16
  88. package/dist/cjs/v2/SessionEnvironment.js.map +1 -1
  89. package/dist/cjs/v2/Sidebar.js +95 -32
  90. package/dist/cjs/v2/Sidebar.js.map +1 -1
  91. package/dist/cjs/v2/StickyRibbonsContainer.js +29 -19
  92. package/dist/cjs/v2/StickyRibbonsContainer.js.map +1 -1
  93. package/dist/cjs/v2/SubHeader.js +1 -1
  94. package/dist/cjs/v2/Taxonomy.js +1 -1
  95. package/dist/mail-CkquKByM.js +18 -0
  96. package/dist/mail-CkquKByM.js.map +1 -0
  97. package/dist/performanceDiagnostics-DJcT0dfG.js +88 -0
  98. package/dist/performanceDiagnostics-DJcT0dfG.js.map +1 -0
  99. package/dist/{phone-number-ClrmOx58.js → phone-number-n0BLV3g6.js} +24 -5
  100. package/dist/phone-number-n0BLV3g6.js.map +1 -0
  101. package/dist/useWhatsNewChangesCount-C71JkNHv.js +96 -0
  102. package/dist/useWhatsNewChangesCount-C71JkNHv.js.map +1 -0
  103. package/dist/useWhatsNewChangesCount-CQxhUCpt.js +106 -0
  104. package/dist/useWhatsNewChangesCount-CQxhUCpt.js.map +1 -0
  105. package/dist/v2/BrowserSupport.js +116 -51
  106. package/dist/v2/BrowserSupport.js.map +1 -1
  107. package/dist/v2/Builder.js +17 -13
  108. package/dist/v2/Builder.js.map +1 -1
  109. package/dist/v2/CalendarView.js +2 -2
  110. package/dist/v2/Columns.js +1 -1
  111. package/dist/v2/ConfigurePageSidebar.js +1 -1
  112. package/dist/v2/DndTable.js +1 -0
  113. package/dist/v2/DndTable.js.map +1 -1
  114. package/dist/v2/DynamicVariables.js +18 -9
  115. package/dist/v2/DynamicVariables.js.map +1 -1
  116. package/dist/v2/EmailForm.js +100 -13
  117. package/dist/v2/EmailForm.js.map +1 -1
  118. package/dist/v2/EmailPreview.js +1 -1
  119. package/dist/v2/EmailPreview.js.map +1 -1
  120. package/dist/v2/Engagements.js +10 -7
  121. package/dist/v2/Engagements.js.map +1 -1
  122. package/dist/v2/FinderModal.js +105 -73
  123. package/dist/v2/FinderModal.js.map +1 -1
  124. package/dist/v2/FloatingActionMenu.js +238 -81
  125. package/dist/v2/FloatingActionMenu.js.map +1 -1
  126. package/dist/v2/IpRestriction.js +17 -7
  127. package/dist/v2/IpRestriction.js.map +1 -1
  128. package/dist/v2/MadeWith.js +5 -3
  129. package/dist/v2/MadeWith.js.map +1 -1
  130. package/dist/v2/MoreDropdown.js +5 -2
  131. package/dist/v2/MoreDropdown.js.map +1 -1
  132. package/dist/v2/OptionFields.js +1 -0
  133. package/dist/v2/OptionFields.js.map +1 -1
  134. package/dist/v2/PhoneNumber.js +2 -2
  135. package/dist/v2/ProductEmbed.js +26 -14
  136. package/dist/v2/ProductEmbed.js.map +1 -1
  137. package/dist/v2/SessionEnvironment.js +2 -15
  138. package/dist/v2/SessionEnvironment.js.map +1 -1
  139. package/dist/v2/Sidebar.js +95 -32
  140. package/dist/v2/Sidebar.js.map +1 -1
  141. package/dist/v2/StickyRibbonsContainer.js +27 -17
  142. package/dist/v2/StickyRibbonsContainer.js.map +1 -1
  143. package/dist/v2/SubHeader.js +1 -1
  144. package/dist/v2/Taxonomy.js +1 -1
  145. package/package.json +8 -8
  146. package/src/translations/ar.json +8 -3
  147. package/src/translations/bg.json +8 -3
  148. package/src/translations/ca.json +8 -3
  149. package/src/translations/cs.json +8 -3
  150. package/src/translations/da.json +8 -3
  151. package/src/translations/de.json +8 -3
  152. package/src/translations/en.json +18 -2
  153. package/src/translations/es-MX.json +8 -3
  154. package/src/translations/es.json +8 -3
  155. package/src/translations/et.json +8 -3
  156. package/src/translations/fi.json +8 -3
  157. package/src/translations/fil.json +8 -3
  158. package/src/translations/fr.json +8 -3
  159. package/src/translations/he.json +8 -3
  160. package/src/translations/hi.json +8 -3
  161. package/src/translations/hr.json +8 -3
  162. package/src/translations/hu.json +8 -3
  163. package/src/translations/id.json +8 -3
  164. package/src/translations/it.json +8 -3
  165. package/src/translations/ja.json +8 -3
  166. package/src/translations/ko.json +8 -3
  167. package/src/translations/lv.json +984 -0
  168. package/src/translations/nl.json +8 -3
  169. package/src/translations/pl.json +8 -3
  170. package/src/translations/pt-BR.json +8 -3
  171. package/src/translations/pt.json +8 -3
  172. package/src/translations/ro.json +8 -3
  173. package/src/translations/ru.json +8 -3
  174. package/src/translations/sk.json +8 -3
  175. package/src/translations/sl.json +8 -3
  176. package/src/translations/sv.json +8 -3
  177. package/src/translations/th.json +8 -3
  178. package/src/translations/tr.json +8 -3
  179. package/src/translations/uk.json +8 -3
  180. package/src/translations/vi.json +8 -3
  181. package/src/translations/zh-CN.json +8 -3
  182. package/src/translations/zh-TW.json +8 -3
  183. package/types/BrowserSupport.d.ts +128 -39
  184. package/types/v2/EmailForm.d.ts +1 -0
  185. package/types/v2/EmailFormProvider.d.ts +3 -1
  186. package/dist/Columns-C20zru7a.js.map +0 -1
  187. package/dist/ConfigureView-D-2SQf3j.js.map +0 -1
  188. package/dist/cjs/Columns-rqa7goJu.js.map +0 -1
  189. package/dist/cjs/ConfigureView-CNWEfiae.js.map +0 -1
  190. package/dist/cjs/phone-number-DVlbgxBG.js.map +0 -1
  191. package/dist/phone-number-ClrmOx58.js.map +0 -1
@@ -3,8 +3,9 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
3
3
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
4
4
  import { Fragment, useState, useRef, useEffect, useMemo } from 'react';
5
5
  import { Spinner, Empty, Badge } from '@bigbinary/neeto-atoms';
6
- import { CommandDialog, Command, CommandInput, CommandList, CommandEmpty, CommandItem } from '@bigbinary/neeto-atoms/primitives';
6
+ import { CommandDialog, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '@bigbinary/neeto-atoms/primitives';
7
7
  import { noop, humanize } from '@bigbinary/neeto-cist';
8
+ import useDebounce from '@bigbinary/neeto-commons-frontend/v2/react-utils/useDebounce';
8
9
  import useHotkeys from '@bigbinary/neeto-hotkeys';
9
10
  import { useTranslation } from 'react-i18next';
10
11
  import { useHistory } from 'react-router-dom';
@@ -65,27 +66,12 @@ var ModalFooter = function ModalFooter(_ref) {
65
66
  });
66
67
  };
67
68
 
68
- var escapeRegExp = function escapeRegExp(string) {
69
- return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
70
- };
71
69
  var htmlToText = function htmlToText(html) {
72
70
  if (!html) return null;
73
71
  var tmp = document.createElement("div");
74
72
  tmp.innerHTML = html;
75
73
  return tmp.textContent || tmp.innerText || "";
76
74
  };
77
- var highlightMatch = function highlightMatch(text, searchTerm) {
78
- if (!searchTerm || !text) return text;
79
- var regex = new RegExp("(".concat(escapeRegExp(searchTerm), ")"), "gi");
80
- return text.split(regex).map(function (part, index) {
81
- return (part === null || part === void 0 ? void 0 : part.toLowerCase()) === searchTerm.toLowerCase() ? /*#__PURE__*/jsx("mark", {
82
- className: "rounded-sm bg-yellow-200 text-yellow-900",
83
- children: part
84
- }, index) : /*#__PURE__*/jsx(Fragment, {
85
- children: part
86
- }, index);
87
- });
88
- };
89
75
  var trimAroundMatch = function trimAroundMatch(text, maxLength) {
90
76
  var start = text.indexOf("[[[");
91
77
  if (start === -1) {
@@ -114,7 +100,7 @@ var HighlightedSnippet = function HighlightedSnippet(_ref) {
114
100
  });
115
101
  };
116
102
 
117
- var _excluded = ["enableAdvancedSearch", "data", "getTypeLabel", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
103
+ var _excluded = ["enableAdvancedSearch", "data", "getTypeLabel", "isFetching", "isOpen", "setIsOpen", "searchTerm", "setSearchTerm", "onSearchChange", "debounceWait", "tagStyle", "tagSize", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
118
104
  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
105
  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; }
120
106
  var toRelativePath = function toRelativePath(url) {
@@ -136,13 +122,9 @@ var navigateToItem = function navigateToItem(_ref) {
136
122
  var handleAnchorClick = function handleAnchorClick(event) {
137
123
  var isModified = event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;
138
124
  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.
141
125
  event.stopPropagation();
142
126
  return;
143
127
  }
144
- // Suppress the default browser navigation so cmdk's onSelect (fired via
145
- // the bubbled click) drives the SPA push exactly once.
146
128
  event.preventDefault();
147
129
  };
148
130
  var FinderModal = function FinderModal(_ref2) {
@@ -154,9 +136,18 @@ var FinderModal = function FinderModal(_ref2) {
154
136
  getTypeLabel = _ref2$getTypeLabel === void 0 ? humanize : _ref2$getTypeLabel,
155
137
  isFetching = _ref2.isFetching,
156
138
  isOpen = _ref2.isOpen,
139
+ _ref2$setIsOpen = _ref2.setIsOpen,
140
+ setIsOpen = _ref2$setIsOpen === void 0 ? noop : _ref2$setIsOpen,
157
141
  _ref2$searchTerm = _ref2.searchTerm,
158
142
  searchTerm = _ref2$searchTerm === void 0 ? "" : _ref2$searchTerm,
159
143
  setSearchTerm = _ref2.setSearchTerm,
144
+ onSearchChange = _ref2.onSearchChange,
145
+ _ref2$debounceWait = _ref2.debounceWait,
146
+ debounceWait = _ref2$debounceWait === void 0 ? 300 : _ref2$debounceWait,
147
+ _ref2$tagStyle = _ref2.tagStyle,
148
+ tagStyle = _ref2$tagStyle === void 0 ? "primary" : _ref2$tagStyle,
149
+ _ref2$tagSize = _ref2.tagSize,
150
+ tagSize = _ref2$tagSize === void 0 ? "small" : _ref2$tagSize,
160
151
  onClose = _ref2.onClose,
161
152
  _ref2$onGoToAdvanced = _ref2.onGoToAdvanced,
162
153
  onGoToAdvanced = _ref2$onGoToAdvanced === void 0 ? noop : _ref2$onGoToAdvanced,
@@ -174,13 +165,41 @@ var FinderModal = function FinderModal(_ref2) {
174
165
  sentinelEl = _useState2[0],
175
166
  setSentinelEl = _useState2[1];
176
167
  var onLoadMoreRef = useRef(onLoadMore || noop);
168
+ var _useState3 = useState(searchTerm),
169
+ _useState4 = _slicedToArray(_useState3, 2),
170
+ internalSearchTerm = _useState4[0],
171
+ setInternalSearchTerm = _useState4[1];
172
+ useEffect(function () {
173
+ if (searchTerm !== internalSearchTerm) {
174
+ setInternalSearchTerm(searchTerm);
175
+ }
176
+ }, [searchTerm]);
177
+ var debouncedSearchTerm = useDebounce(internalSearchTerm, debounceWait);
178
+ useEffect(function () {
179
+ onSearchChange === null || onSearchChange === void 0 || onSearchChange(debouncedSearchTerm);
180
+ }, [debouncedSearchTerm, onSearchChange]);
181
+ var handleSearchChange = function handleSearchChange(value) {
182
+ setInternalSearchTerm(value);
183
+ setSearchTerm === null || setSearchTerm === void 0 || setSearchTerm(value);
184
+ };
177
185
  var handleOpenChange = function handleOpenChange(open) {
178
186
  if (!open) onClose === null || onClose === void 0 || onClose();
179
187
  };
180
- useHotkeys(["ctrl+enter", "command+enter"], onGoToAdvanced, {
188
+ useHotkeys(["ctrl+enter", "mod+enter"], onGoToAdvanced, {
181
189
  mode: "global",
182
190
  enabled: isOpen && enableAdvancedSearch
183
191
  });
192
+ useHotkeys("mod+k", function () {
193
+ return setIsOpen(true);
194
+ }, {
195
+ mode: "global"
196
+ });
197
+ useHotkeys("esc", function () {
198
+ return setIsOpen(false);
199
+ }, {
200
+ mode: "global",
201
+ enabled: isOpen
202
+ });
184
203
  useEffect(function () {
185
204
  onLoadMoreRef.current = onLoadMore || noop;
186
205
  }, [onLoadMore]);
@@ -203,10 +222,58 @@ var FinderModal = function FinderModal(_ref2) {
203
222
  return observer.disconnect();
204
223
  };
205
224
  }, [sentinelEl, isPaginationEnabled, hasMore, isFetchingMore]);
206
- var flatData = useMemo(function () {
207
- return Array.isArray(data) ? data : Object.values(data).flat();
225
+ var isDataEmpty = useMemo(function () {
226
+ if (Array.isArray(data)) return data.length === 0;
227
+ return Object.values(data).every(function (items) {
228
+ return items.length === 0;
229
+ });
208
230
  }, [data]);
209
- var isDataEmpty = flatData.length === 0;
231
+ var renderItems = function renderItems(items) {
232
+ return items.map(function (item, index) {
233
+ var _item$id, _item$id2;
234
+ var relativePath = toRelativePath(item.url);
235
+ var description = htmlToText(item.description);
236
+ return /*#__PURE__*/jsx(CommandItem, {
237
+ className: "!p-0",
238
+ value: "".concat(item.type, "-").concat((_item$id2 = item.id) !== null && _item$id2 !== void 0 ? _item$id2 : index),
239
+ onSelect: function onSelect() {
240
+ return navigateToItem({
241
+ history: history,
242
+ onClose: onClose,
243
+ relativePath: relativePath
244
+ });
245
+ },
246
+ children: /*#__PURE__*/jsxs("a", {
247
+ className: "flex min-w-0 flex-1 items-center justify-between gap-3 px-3 py-2.5 no-underline outline-none",
248
+ href: relativePath,
249
+ onClick: handleAnchorClick,
250
+ children: [/*#__PURE__*/jsxs("div", {
251
+ className: "flex min-w-0 flex-1 flex-col gap-1.5",
252
+ children: [/*#__PURE__*/jsx("span", {
253
+ className: "text-foreground line-clamp-1 text-sm font-medium",
254
+ children: /*#__PURE__*/jsx(HighlightedSnippet, {
255
+ maxLength: 80,
256
+ snippet: item.title || ""
257
+ })
258
+ }), description && /*#__PURE__*/jsx("span", {
259
+ className: "text-muted-foreground line-clamp-1 text-xs",
260
+ children: /*#__PURE__*/jsx(HighlightedSnippet, {
261
+ maxLength: 80,
262
+ snippet: item.description
263
+ })
264
+ })]
265
+ }), item.type && /*#__PURE__*/jsx("div", {
266
+ className: "shrink-0",
267
+ children: /*#__PURE__*/jsx(Badge, {
268
+ color: tagStyle,
269
+ label: getTypeLabel(item.type),
270
+ size: tagSize
271
+ })
272
+ })]
273
+ })
274
+ }, "".concat(item.type, "-").concat((_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : index));
275
+ });
276
+ };
210
277
  return /*#__PURE__*/jsx(CommandDialog, _objectSpread(_objectSpread({}, props), {}, {
211
278
  className: "nm-finder-modal !top-1/4 !max-w-[calc(100%-2rem)] sm:!max-w-xl",
212
279
  open: isOpen,
@@ -221,8 +288,8 @@ var FinderModal = function FinderModal(_ref2) {
221
288
  className: "min-w-0 flex-1",
222
289
  children: /*#__PURE__*/jsx(CommandInput, {
223
290
  placeholder: t("neetoMolecules.common.actions.search"),
224
- value: searchTerm,
225
- onValueChange: setSearchTerm
291
+ value: internalSearchTerm,
292
+ onValueChange: handleSearchChange
226
293
  })
227
294
  }), isFetching && /*#__PURE__*/jsx(Spinner, {
228
295
  size: "small"
@@ -242,54 +309,19 @@ var FinderModal = function FinderModal(_ref2) {
242
309
  children: [isDataEmpty && !isFetching && /*#__PURE__*/jsx(CommandEmpty, {
243
310
  className: "!py-8",
244
311
  children: /*#__PURE__*/jsx(Empty, {
245
- description: t("neetoMolecules.finderModal.noDataDesc"),
246
312
  icon: Search,
247
- title: t("neetoMolecules.finderModal.noDataTitle")
313
+ description: internalSearchTerm ? t("neetoMolecules.finderModal.noDataDesc") : t("neetoMolecules.finderModal.startTypingDesc"),
314
+ title: internalSearchTerm ? t("neetoMolecules.finderModal.noDataTitle") : t("neetoMolecules.finderModal.startTypingTitle")
248
315
  })
249
- }), flatData.map(function (item, index) {
250
- var _item$highlight, _item$highlight2, _item$id, _item$id2, _htmlToText;
251
- var relativePath = toRelativePath(item.url);
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);
255
- return /*#__PURE__*/jsx(CommandItem, {
256
- className: "!p-0",
257
- value: "".concat(item.type, "-").concat((_item$id2 = item.id) !== null && _item$id2 !== void 0 ? _item$id2 : index),
258
- onSelect: function onSelect() {
259
- return navigateToItem({
260
- history: history,
261
- onClose: onClose,
262
- relativePath: relativePath
263
- });
264
- },
265
- children: /*#__PURE__*/jsxs("a", {
266
- className: "flex min-w-0 flex-1 items-center justify-between gap-3 px-3 py-2.5 no-underline outline-none",
267
- href: relativePath,
268
- onClick: handleAnchorClick,
269
- children: [/*#__PURE__*/jsxs("div", {
270
- className: "flex min-w-0 flex-1 flex-col gap-1.5",
271
- children: [/*#__PURE__*/jsx("span", {
272
- className: "text-foreground line-clamp-1 text-sm font-medium",
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", {
278
- className: "text-muted-foreground line-clamp-1 text-xs",
279
- children: isDescriptionHighlighted ? /*#__PURE__*/jsx(HighlightedSnippet, {
280
- maxLength: 80,
281
- snippet: item.highlight.snippet
282
- }) : description
283
- })]
284
- }), item.type && /*#__PURE__*/jsx("div", {
285
- className: "shrink-0",
286
- children: /*#__PURE__*/jsx(Badge, {
287
- color: "gray",
288
- label: getTypeLabel(item.type)
289
- })
290
- })]
291
- })
292
- }, "".concat(item.type, "-").concat((_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : index));
316
+ }), Array.isArray(data) ? renderItems(data) : Object.entries(data).map(function (_ref5) {
317
+ var _ref6 = _slicedToArray(_ref5, 2),
318
+ group = _ref6[0],
319
+ items = _ref6[1];
320
+ if (!items.length) return null;
321
+ return /*#__PURE__*/jsx(CommandGroup, {
322
+ heading: group,
323
+ children: renderItems(items)
324
+ }, group);
293
325
  }), onLoadMore && hasMore && /*#__PURE__*/jsx("div", {
294
326
  "aria-hidden": "true",
295
327
  className: "h-px w-full",
@@ -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, { 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
+ {"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 { Fragment } from \"react\";\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 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 { htmlToText, HighlightedSnippet };\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { Badge, Empty, Spinner } from \"@bigbinary/neeto-atoms\";\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@bigbinary/neeto-atoms/primitives\";\nimport { Search } from \"lucide-react\";\nimport { humanize, noop } from \"neetocist\";\nimport useDebounce from \"neetocommons/v2/react-utils/useDebounce\";\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, 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 event.stopPropagation();\n\n return;\n }\n event.preventDefault();\n};\n\nconst FinderModal = ({\n enableAdvancedSearch = true,\n data = [],\n getTypeLabel = humanize,\n isFetching,\n isOpen,\n setIsOpen = noop,\n searchTerm = \"\",\n setSearchTerm,\n onSearchChange,\n debounceWait = 300,\n tagStyle = \"primary\",\n tagSize = \"small\",\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 [internalSearchTerm, setInternalSearchTerm] = useState(searchTerm);\n\n useEffect(() => {\n if (searchTerm !== internalSearchTerm) {\n setInternalSearchTerm(searchTerm);\n }\n }, [searchTerm]);\n\n const debouncedSearchTerm = useDebounce(internalSearchTerm, debounceWait);\n\n useEffect(() => {\n onSearchChange?.(debouncedSearchTerm);\n }, [debouncedSearchTerm, onSearchChange]);\n\n const handleSearchChange = value => {\n setInternalSearchTerm(value);\n setSearchTerm?.(value);\n };\n\n const handleOpenChange = open => {\n if (!open) onClose?.();\n };\n\n useHotkeys([\"ctrl+enter\", \"mod+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n\n useHotkeys(\"mod+k\", () => setIsOpen(true), { mode: \"global\" });\n useHotkeys(\"esc\", () => setIsOpen(false), {\n mode: \"global\",\n enabled: isOpen,\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 isDataEmpty = useMemo(() => {\n if (Array.isArray(data)) return data.length === 0;\n\n return Object.values(data).every(items => items.length === 0);\n }, [data]);\n\n const renderItems = items =>\n items.map((item, index) => {\n const relativePath = toRelativePath(item.url);\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={() => navigateToItem({ history, onClose, relativePath })}\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 <HighlightedSnippet maxLength={80} snippet={item.title || \"\"} />\n </span>\n {description && (\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n <HighlightedSnippet\n maxLength={80}\n snippet={item.description}\n />\n </span>\n )}\n </div>\n {item.type && (\n <div className=\"shrink-0\">\n <Badge\n color={tagStyle}\n label={getTypeLabel(item.type)}\n size={tagSize}\n />\n </div>\n )}\n </a>\n </CommandItem>\n );\n });\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={internalSearchTerm}\n onValueChange={handleSearchChange}\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 icon={Search}\n description={\n internalSearchTerm\n ? t(\"neetoMolecules.finderModal.noDataDesc\")\n : t(\"neetoMolecules.finderModal.startTypingDesc\")\n }\n title={\n internalSearchTerm\n ? t(\"neetoMolecules.finderModal.noDataTitle\")\n : t(\"neetoMolecules.finderModal.startTypingTitle\")\n }\n />\n </CommandEmpty>\n )}\n {Array.isArray(data)\n ? renderItems(data)\n : Object.entries(data).map(([group, items]) => {\n if (!items.length) return null;\n\n return (\n <CommandGroup heading={group} key={group}>\n {renderItems(items)}\n </CommandGroup>\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 getTypeLabel: PropTypes.func,\n isFetching: PropTypes.bool,\n isOpen: PropTypes.bool,\n searchTerm: PropTypes.string,\n setSearchTerm: PropTypes.func,\n onSearchChange: PropTypes.func,\n debounceWait: PropTypes.number,\n tagStyle: PropTypes.string,\n tagSize: PropTypes.string,\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","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","trimAroundMatch","text","maxLength","start","indexOf","length","concat","slice","from","Math","max","to","min","trim","Boolean","join","HighlightedSnippet","_htmlToText","snippet","_ref$maxLength","split","part","Fragment","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$setIsOpen","setIsOpen","noop","_ref2$searchTerm","searchTerm","setSearchTerm","onSearchChange","_ref2$debounceWait","debounceWait","_ref2$tagStyle","tagStyle","_ref2$tagSize","tagSize","_ref2$onGoToAdvanced","onGoToAdvanced","onLoadMore","_ref2$hasMore","hasMore","_ref2$isFetchingMore","isFetchingMore","props","_objectWithoutProperties","_excluded","useHistory","_useState","useState","_useState2","_slicedToArray","sentinelEl","setSentinelEl","onLoadMoreRef","useRef","_useState3","_useState4","internalSearchTerm","setInternalSearchTerm","useEffect","debouncedSearchTerm","useDebounce","handleSearchChange","value","handleOpenChange","open","useHotkeys","mode","enabled","current","isPaginationEnabled","undefined","root","closest","observer","IntersectionObserver","_ref3","_ref4","entry","isIntersecting","rootMargin","observe","disconnect","isDataEmpty","useMemo","Array","isArray","Object","values","every","items","renderItems","item","_item$id","_item$id2","description","CommandItem","type","id","onSelect","href","onClick","title","Badge","color","CommandDialog","_objectSpread","onOpenChange","Command","shouldFilter","CommandInput","placeholder","onValueChange","Spinner","CommandList","CommandEmpty","Empty","icon","Search","entries","_ref5","_ref6","group","CommandGroup","heading","ref"],"mappings":"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"}