@bigbinary/neeto-molecules 5.3.9-beta1 → 5.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Columns-C20zru7a.js → Columns-DrqMacTG.js} +2 -2
- package/dist/Columns-DrqMacTG.js.map +1 -0
- package/dist/cjs/{Columns-rqa7goJu.js → Columns-D5WkMJk3.js} +2 -2
- package/dist/cjs/Columns-D5WkMJk3.js.map +1 -0
- package/dist/cjs/v2/CalendarView.js +1 -1
- package/dist/cjs/v2/Columns.js +1 -1
- package/dist/cjs/v2/DynamicVariables.js +1 -1
- package/dist/cjs/v2/DynamicVariables.js.map +1 -1
- package/dist/cjs/v2/FinderModal.js +72 -144
- package/dist/cjs/v2/FinderModal.js.map +1 -1
- package/dist/cjs/v2/SubHeader.js +1 -1
- package/dist/cjs/v2/Taxonomy.js +1 -1
- package/dist/v2/CalendarView.js +1 -1
- package/dist/v2/Columns.js +1 -1
- package/dist/v2/DynamicVariables.js +1 -1
- package/dist/v2/DynamicVariables.js.map +1 -1
- package/dist/v2/FinderModal.js +76 -148
- package/dist/v2/FinderModal.js.map +1 -1
- package/dist/v2/SubHeader.js +1 -1
- package/dist/v2/Taxonomy.js +1 -1
- package/package.json +2 -2
- package/dist/Columns-C20zru7a.js.map +0 -1
- package/dist/cjs/Columns-rqa7goJu.js.map +0 -1
|
@@ -8,9 +8,9 @@ var neetoAtoms = require('@bigbinary/neeto-atoms');
|
|
|
8
8
|
var primitives = require('@bigbinary/neeto-atoms/primitives');
|
|
9
9
|
var neetoCist = require('@bigbinary/neeto-cist');
|
|
10
10
|
var useHotkeys = require('@bigbinary/neeto-hotkeys');
|
|
11
|
+
var ramda = require('ramda');
|
|
11
12
|
var reactI18next = require('react-i18next');
|
|
12
13
|
var reactRouterDom = require('react-router-dom');
|
|
13
|
-
var ramda = require('ramda');
|
|
14
14
|
var jsxRuntime = require('react/jsx-runtime');
|
|
15
15
|
var chevronUp = require('../chevron-up-Bp1HQPbw.js');
|
|
16
16
|
var chevronDown = require('../chevron-down-DF-0X6bx.js');
|
|
@@ -100,59 +100,16 @@ var filterAndHighlightContent = function filterAndHighlightContent(bodyContent,
|
|
|
100
100
|
var _excluded = ["enableAdvancedSearch", "data", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
|
|
101
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
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);
|
|
122
|
-
}
|
|
123
|
-
if (end === safeSnippet.length && safeSnippet.length > 30 && !chunk.endsWith("...")) {
|
|
124
|
-
chunk = "".concat(chunk, " ...");
|
|
125
|
-
}
|
|
126
|
-
return chunk.trim();
|
|
127
|
-
};
|
|
128
|
-
var RenderHighlight = function RenderHighlight(_ref) {
|
|
129
|
-
var text = _ref.text;
|
|
130
|
-
if (!text) return null;
|
|
131
|
-
var parts = text.split(/\[\[\[(.*?)\]\]\]/g);
|
|
132
|
-
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", {
|
|
141
|
-
children: part
|
|
142
|
-
}, index);
|
|
143
|
-
})
|
|
144
|
-
});
|
|
145
|
-
};
|
|
146
103
|
var toRelativePath = function toRelativePath(url) {
|
|
147
104
|
var _URL = new URL(url),
|
|
148
105
|
pathname = _URL.pathname,
|
|
149
106
|
search = _URL.search;
|
|
150
107
|
return "".concat(pathname).concat(search);
|
|
151
108
|
};
|
|
152
|
-
var navigateToItem = function navigateToItem(
|
|
153
|
-
var history =
|
|
154
|
-
onClose =
|
|
155
|
-
relativePath =
|
|
109
|
+
var navigateToItem = function navigateToItem(_ref) {
|
|
110
|
+
var history = _ref.history,
|
|
111
|
+
onClose = _ref.onClose,
|
|
112
|
+
relativePath = _ref.relativePath;
|
|
156
113
|
onClose === null || onClose === void 0 || onClose();
|
|
157
114
|
var currentPath = "".concat(history.location.pathname).concat(history.location.search);
|
|
158
115
|
if (currentPath !== relativePath) {
|
|
@@ -162,30 +119,34 @@ var navigateToItem = function navigateToItem(_ref2) {
|
|
|
162
119
|
var handleAnchorClick = function handleAnchorClick(event) {
|
|
163
120
|
var isModified = event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0;
|
|
164
121
|
if (isModified) {
|
|
122
|
+
// Let the browser open the href natively (new tab, new window, etc.);
|
|
123
|
+
// don't let cmdk's bubble handler also navigate the current tab.
|
|
165
124
|
event.stopPropagation();
|
|
166
125
|
return;
|
|
167
126
|
}
|
|
127
|
+
// Suppress the default browser navigation so cmdk's onSelect (fired via
|
|
128
|
+
// the bubbled click) drives the SPA push exactly once.
|
|
168
129
|
event.preventDefault();
|
|
169
130
|
};
|
|
170
|
-
var FinderModal = function FinderModal(
|
|
171
|
-
var
|
|
172
|
-
enableAdvancedSearch =
|
|
173
|
-
|
|
174
|
-
data =
|
|
175
|
-
isFetching =
|
|
176
|
-
isOpen =
|
|
177
|
-
|
|
178
|
-
searchTerm =
|
|
179
|
-
setSearchTerm =
|
|
180
|
-
onClose =
|
|
181
|
-
|
|
182
|
-
onGoToAdvanced =
|
|
183
|
-
onLoadMore =
|
|
184
|
-
|
|
185
|
-
hasMore =
|
|
186
|
-
|
|
187
|
-
isFetchingMore =
|
|
188
|
-
props = _objectWithoutProperties(
|
|
131
|
+
var FinderModal = function FinderModal(_ref2) {
|
|
132
|
+
var _ref2$enableAdvancedS = _ref2.enableAdvancedSearch,
|
|
133
|
+
enableAdvancedSearch = _ref2$enableAdvancedS === void 0 ? true : _ref2$enableAdvancedS,
|
|
134
|
+
_ref2$data = _ref2.data,
|
|
135
|
+
data = _ref2$data === void 0 ? {} : _ref2$data,
|
|
136
|
+
isFetching = _ref2.isFetching,
|
|
137
|
+
isOpen = _ref2.isOpen,
|
|
138
|
+
_ref2$searchTerm = _ref2.searchTerm,
|
|
139
|
+
searchTerm = _ref2$searchTerm === void 0 ? "" : _ref2$searchTerm,
|
|
140
|
+
setSearchTerm = _ref2.setSearchTerm,
|
|
141
|
+
onClose = _ref2.onClose,
|
|
142
|
+
_ref2$onGoToAdvanced = _ref2.onGoToAdvanced,
|
|
143
|
+
onGoToAdvanced = _ref2$onGoToAdvanced === void 0 ? neetoCist.noop : _ref2$onGoToAdvanced,
|
|
144
|
+
onLoadMore = _ref2.onLoadMore,
|
|
145
|
+
_ref2$hasMore = _ref2.hasMore,
|
|
146
|
+
hasMore = _ref2$hasMore === void 0 ? false : _ref2$hasMore,
|
|
147
|
+
_ref2$isFetchingMore = _ref2.isFetchingMore,
|
|
148
|
+
isFetchingMore = _ref2$isFetchingMore === void 0 ? false : _ref2$isFetchingMore,
|
|
149
|
+
props = _objectWithoutProperties(_ref2, _excluded);
|
|
189
150
|
var _useTranslation = reactI18next.useTranslation(),
|
|
190
151
|
t = _useTranslation.t;
|
|
191
152
|
var history = reactRouterDom.useHistory();
|
|
@@ -194,6 +155,10 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
194
155
|
sentinelEl = _useState2[0],
|
|
195
156
|
setSentinelEl = _useState2[1];
|
|
196
157
|
var onLoadMoreRef = React.useRef(onLoadMore || neetoCist.noop);
|
|
158
|
+
var categories = Object.keys(data).filter(function (key) {
|
|
159
|
+
return neetoCist.isNotEmpty(data[key]);
|
|
160
|
+
});
|
|
161
|
+
var isDataEmpty = ramda.isEmpty(categories);
|
|
197
162
|
var handleOpenChange = function handleOpenChange(open) {
|
|
198
163
|
if (!open) onClose === null || onClose === void 0 || onClose();
|
|
199
164
|
};
|
|
@@ -210,9 +175,9 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
210
175
|
return undefined;
|
|
211
176
|
}
|
|
212
177
|
var root = sentinelEl.closest(".nm-finder-modal__body");
|
|
213
|
-
var observer = new IntersectionObserver(function (
|
|
214
|
-
var
|
|
215
|
-
entry =
|
|
178
|
+
var observer = new IntersectionObserver(function (_ref3) {
|
|
179
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
180
|
+
entry = _ref4[0];
|
|
216
181
|
if (entry.isIntersecting) onLoadMoreRef.current();
|
|
217
182
|
}, {
|
|
218
183
|
root: root,
|
|
@@ -223,10 +188,6 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
223
188
|
return observer.disconnect();
|
|
224
189
|
};
|
|
225
190
|
}, [sentinelEl, isPaginationEnabled, hasMore, isFetchingMore]);
|
|
226
|
-
var flatData = React.useMemo(function () {
|
|
227
|
-
return Array.isArray(data) ? data : Object.values(data).flat();
|
|
228
|
-
}, [data]);
|
|
229
|
-
var isDataEmpty = flatData.length === 0;
|
|
230
191
|
return /*#__PURE__*/jsxRuntime.jsx(primitives.CommandDialog, _objectSpread(_objectSpread({}, props), {}, {
|
|
231
192
|
className: "nm-finder-modal !top-1/4 !max-w-[calc(100%-2rem)] sm:!max-w-xl",
|
|
232
193
|
open: isOpen,
|
|
@@ -266,76 +227,43 @@ var FinderModal = function FinderModal(_ref3) {
|
|
|
266
227
|
icon: search.Search,
|
|
267
228
|
title: t("neetoMolecules.finderModal.noDataTitle")
|
|
268
229
|
})
|
|
269
|
-
}),
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
var showSecondary = !!secondaryNode;
|
|
307
|
-
return /*#__PURE__*/jsxRuntime.jsx(primitives.CommandItem, {
|
|
308
|
-
className: "!p-0",
|
|
309
|
-
value: "".concat(item.type, "-").concat(item.id || index),
|
|
310
|
-
onSelect: function onSelect() {
|
|
311
|
-
return navigateToItem({
|
|
312
|
-
history: history,
|
|
313
|
-
onClose: onClose,
|
|
314
|
-
relativePath: relativePath
|
|
315
|
-
});
|
|
316
|
-
},
|
|
317
|
-
children: /*#__PURE__*/jsxRuntime.jsxs("a", {
|
|
318
|
-
className: "flex min-w-0 flex-1 items-center justify-between gap-3 px-3 py-2.5 no-underline outline-none",
|
|
319
|
-
href: relativePath,
|
|
320
|
-
onClick: handleAnchorClick,
|
|
321
|
-
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
322
|
-
className: "flex min-w-0 flex-1 flex-col gap-1.5",
|
|
323
|
-
children: [primaryNode && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
324
|
-
className: "text-foreground line-clamp-1 text-sm font-medium",
|
|
325
|
-
children: primaryNode
|
|
326
|
-
}), showSecondary && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
327
|
-
className: "text-muted-foreground line-clamp-1 text-xs",
|
|
328
|
-
children: secondaryNode
|
|
329
|
-
})]
|
|
330
|
-
}), item.type && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
331
|
-
className: "shrink-0",
|
|
332
|
-
children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
|
|
333
|
-
color: "gray",
|
|
334
|
-
label: neetoCist.humanize(item.type)
|
|
335
|
-
})
|
|
336
|
-
})]
|
|
337
|
-
})
|
|
338
|
-
}, "".concat(item.type, "-").concat(item.id || index));
|
|
230
|
+
}), categories.map(function (category, index) {
|
|
231
|
+
return /*#__PURE__*/jsxRuntime.jsxs(React.Fragment, {
|
|
232
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(primitives.CommandGroup, {
|
|
233
|
+
heading: neetoCist.humanize(category),
|
|
234
|
+
children: data[category].map(function (item) {
|
|
235
|
+
var name = htmlToText(item.name);
|
|
236
|
+
var body = htmlToText(item.body);
|
|
237
|
+
var filteredBody = filterAndHighlightContent(body, searchTerm);
|
|
238
|
+
var relativePath = toRelativePath(item.url);
|
|
239
|
+
return /*#__PURE__*/jsxRuntime.jsx(primitives.CommandItem, {
|
|
240
|
+
className: "!p-0",
|
|
241
|
+
value: "".concat(category, "-").concat(item.id),
|
|
242
|
+
onSelect: function onSelect() {
|
|
243
|
+
return navigateToItem({
|
|
244
|
+
history: history,
|
|
245
|
+
onClose: onClose,
|
|
246
|
+
relativePath: relativePath
|
|
247
|
+
});
|
|
248
|
+
},
|
|
249
|
+
children: /*#__PURE__*/jsxRuntime.jsxs("a", {
|
|
250
|
+
className: "flex min-w-0 flex-1 flex-col gap-1.5 px-3 py-2.5 no-underline outline-none",
|
|
251
|
+
href: relativePath,
|
|
252
|
+
onClick: handleAnchorClick,
|
|
253
|
+
children: [name && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
254
|
+
className: "text-foreground line-clamp-1 text-sm font-medium",
|
|
255
|
+
children: highlightMatch(name, searchTerm)
|
|
256
|
+
}), body && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
257
|
+
className: "text-muted-foreground line-clamp-1 text-xs",
|
|
258
|
+
children: filteredBody || body
|
|
259
|
+
})]
|
|
260
|
+
})
|
|
261
|
+
}, "".concat(category, "-").concat(item.id));
|
|
262
|
+
})
|
|
263
|
+
}), index < categories.length - 1 && /*#__PURE__*/jsxRuntime.jsx(primitives.CommandSeparator, {
|
|
264
|
+
className: "my-1"
|
|
265
|
+
})]
|
|
266
|
+
}, category);
|
|
339
267
|
}), onLoadMore && hasMore && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
340
268
|
"aria-hidden": "true",
|
|
341
269
|
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 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 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 { Fragment, useEffect, useRef, useState } from \"react\";\n\nimport { Empty, Spinner } from \"@bigbinary/neeto-atoms\";\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from \"@bigbinary/neeto-atoms/primitives\";\nimport { Search } from \"lucide-react\";\nimport { humanize, isNotEmpty, noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nimport ModalFooter from \"./Footer\";\nimport { filterAndHighlightContent, 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 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 categories = Object.keys(data).filter(key => isNotEmpty(data[key]));\n const isDataEmpty = isEmpty(categories);\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 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 {categories.map((category, index) => (\n <Fragment key={category}>\n <CommandGroup heading={humanize(category)}>\n {data[category].map(item => {\n const name = htmlToText(item.name);\n const body = htmlToText(item.body);\n const filteredBody = filterAndHighlightContent(\n body,\n searchTerm\n );\n\n const relativePath = toRelativePath(item.url);\n\n return (\n <CommandItem\n className=\"!p-0\"\n key={`${category}-${item.id}`}\n value={`${category}-${item.id}`}\n onSelect={() =>\n navigateToItem({ history, onClose, relativePath })\n }\n >\n <a\n className=\"flex min-w-0 flex-1 flex-col gap-1.5 px-3 py-2.5 no-underline outline-none\"\n href={relativePath}\n onClick={handleAnchorClick}\n >\n {name && (\n <span className=\"text-foreground line-clamp-1 text-sm font-medium\">\n {highlightMatch(name, searchTerm)}\n </span>\n )}\n {body && (\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n {filteredBody || body}\n </span>\n )}\n </a>\n </CommandItem>\n );\n })}\n </CommandGroup>\n {index < categories.length - 1 && (\n <CommandSeparator className=\"my-1\" />\n )}\n </Fragment>\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.objectOf(\n PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n url: PropTypes.string,\n body: PropTypes.string,\n name: PropTypes.string,\n })\n )\n ),\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","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","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","categories","Object","isNotEmpty","isDataEmpty","isEmpty","handleOpenChange","open","useHotkeys","mode","enabled","useEffect","current","isPaginationEnabled","Boolean","undefined","root","closest","observer","IntersectionObserver","_ref3","_ref4","entry","isIntersecting","rootMargin","observe","disconnect","CommandDialog","_objectSpread","title","onOpenChange","Command","shouldFilter","CommandInput","placeholder","value","onValueChange","Spinner","type","onClick","CommandList","CommandEmpty","Empty","description","icon","Search","category","CommandGroup","heading","humanize","item","name","body","filteredBody","CommandItem","id","onSelect","href","length","CommandSeparator","ref"],"mappings":"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"}
|
package/dist/cjs/v2/SubHeader.js
CHANGED
|
@@ -9,7 +9,7 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
|
9
9
|
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
10
10
|
var primitives = require('@bigbinary/neeto-atoms/primitives');
|
|
11
11
|
var reactI18next = require('react-i18next');
|
|
12
|
-
var Columns$1 = require('../Columns-
|
|
12
|
+
var Columns$1 = require('../Columns-D5WkMJk3.js');
|
|
13
13
|
require('@babel/runtime/helpers/toConsumableArray');
|
|
14
14
|
require('@tanstack/react-query');
|
|
15
15
|
require('@bigbinary/neeto-commons-frontend/v2/react-utils/useMutationWithInvalidation');
|
package/dist/cjs/v2/Taxonomy.js
CHANGED
|
@@ -39,7 +39,7 @@ require('@bigbinary/neeto-commons-frontend/v2/react-utils/useFuncDebounce');
|
|
|
39
39
|
require('@bigbinary/neeto-commons-frontend/v2/react-utils/useQueryParams');
|
|
40
40
|
require('@bigbinary/neeto-commons-frontend/v2/react-utils/useUpdateEffect');
|
|
41
41
|
require('../search-DoXqXFel.js');
|
|
42
|
-
require('../Columns-
|
|
42
|
+
require('../Columns-D5WkMJk3.js');
|
|
43
43
|
require('@dnd-kit/core');
|
|
44
44
|
require('@dnd-kit/modifiers');
|
|
45
45
|
require('@dnd-kit/sortable');
|
package/dist/v2/CalendarView.js
CHANGED
|
@@ -21,7 +21,7 @@ import { C as ChevronRight } from '../chevron-right-CEsVcNLw.js';
|
|
|
21
21
|
import SubHeader from './SubHeader.js';
|
|
22
22
|
import '../createLucideIcon--oLqczpc.js';
|
|
23
23
|
import '@bigbinary/neeto-atoms/primitives';
|
|
24
|
-
import '../Columns-
|
|
24
|
+
import '../Columns-DrqMacTG.js';
|
|
25
25
|
import '@babel/runtime/helpers/toConsumableArray';
|
|
26
26
|
import '@dnd-kit/core';
|
|
27
27
|
import '@dnd-kit/modifiers';
|
package/dist/v2/Columns.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as COLUMNS_ORDER_STORAGE_KEY, H as HIDDEN_COLUMNS_STORAGE_KEY, T as TABLE_CONFIGURATION_QUERY_KEY, a as default, u as useTableConfigurations } from '../Columns-
|
|
1
|
+
export { C as COLUMNS_ORDER_STORAGE_KEY, H as HIDDEN_COLUMNS_STORAGE_KEY, T as TABLE_CONFIGURATION_QUERY_KEY, a as default, u as useTableConfigurations } from '../Columns-DrqMacTG.js';
|
|
2
2
|
import '@babel/runtime/helpers/defineProperty';
|
|
3
3
|
import '@babel/runtime/helpers/objectWithoutProperties';
|
|
4
4
|
import '@babel/runtime/helpers/toConsumableArray';
|
|
@@ -138,7 +138,7 @@ var DynamicVariables = function DynamicVariables(_ref) {
|
|
|
138
138
|
className: "flex flex-wrap items-center gap-2",
|
|
139
139
|
"data-testid": joinHyphenCase("dynamic-variables-list", label),
|
|
140
140
|
children: variables.map(function (item) {
|
|
141
|
-
return /*#__PURE__*/jsx(
|
|
141
|
+
return /*#__PURE__*/jsx(DropdownMenu.MenuItem, {
|
|
142
142
|
className: "border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary cursor-pointer rounded-md border px-1.5 py-1 text-start text-sm leading-tight transition-colors select-none focus:outline-none",
|
|
143
143
|
"data-testid": joinHyphenCase("dynamic-variables-list-item", item.label),
|
|
144
144
|
onClick: function onClick() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicVariables.js","sources":["../../node_modules/lucide-react/dist/esm/icons/braces.mjs","../../src/v2/components/DynamicVariables/utils.js","../../src/v2/components/DynamicVariables/index.jsx"],"sourcesContent":["/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n];\nconst Braces = createLucideIcon(\"braces\", __iconNode);\n\nexport { __iconNode, Braces as default };\n//# sourceMappingURL=braces.mjs.map\n","import { findBy } from \"neetocist\";\nimport { prop, isEmpty, uniqBy, mergeLeft } from \"ramda\";\n\nexport const parseVariables = (variableArr = []) => {\n const uncategorized = [];\n const groupedVariables = [];\n const categorySet = new Set();\n\n variableArr.forEach(variable => {\n const { category, label, variables } = variable;\n if (category && variables) {\n const parsedVariables = variables.map(\n mergeLeft({ category, categoryLabel: label })\n );\n\n if (!categorySet.has(category)) {\n categorySet.add(category);\n groupedVariables.push({ label, variables: parsedVariables });\n } else {\n const existingGroup = findBy({ label }, groupedVariables);\n\n existingGroup.variables = uniqBy(\n prop(\"key\"),\n existingGroup.variables.concat(parsedVariables)\n );\n }\n } else {\n uncategorized.push(variable);\n }\n });\n\n if (!isEmpty(uncategorized)) {\n groupedVariables.push({\n label: !isEmpty(groupedVariables) ? \"Others\" : null,\n variables: uncategorized,\n });\n }\n\n return groupedVariables;\n};\n","import { Button, cn, DropdownMenu, Typography } from \"@bigbinary/neeto-atoms\";\nimport { Braces } from \"lucide-react\";\nimport { noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport { parseVariables } from \"./utils\";\n\nconst DynamicVariables = ({\n onVariableClick = noop,\n variables = [],\n buttonProps,\n ...dropdownProps\n}) => {\n if (isEmpty(variables)) return null;\n\n const parsedVariables = parseVariables(variables);\n\n return (\n // End-aligned with collision padding: the trigger usually sits at the\n // content's right edge (e.g. the editor's variables button), so a\n // start-aligned panel would hang past the viewport and get clipped.\n <DropdownMenu\n position=\"bottom-end\"\n customTarget={\n // The inline-flex wrapper keeps the popper anchor button-sized;\n // otherwise the trigger element can stretch with its container and\n // end-align the panel far past the visible button.\n <div className=\"inline-flex\">\n <Button\n data-testid=\"dynamic-variables-button\"\n icon={Braces}\n size=\"icon\"\n variant=\"outline\"\n {...buttonProps}\n />\n </div>\n }\n {...dropdownProps}\n dropdownProps={{\n collisionPadding: 8,\n ...dropdownProps?.dropdownProps,\n // w-max frees the popup from the content wrapper's default\n // trigger-width lock (which clips the chip grid via its\n // overflow-x-hidden). Merge it last so a consumer's className\n // (e.g. SubjectField's overflow-y-auto) augments rather than\n // clobbers the width.\n className: cn(\"w-max\", dropdownProps?.dropdownProps?.className),\n }}\n >\n {/* Groups own their label-to-chips gap; the outer column spaces the\n groups themselves (the editor's old h6-based margin rule no longer\n matches now that the label is a caption span). */}\n <div\n className=\"flex max-w-[22.5rem] min-w-64 flex-col gap-3 p-3\"\n data-testid=\"dynamic-variables-list\"\n >\n {parsedVariables.map(({ label, variables }) => (\n <div className=\"flex flex-col gap-1.5\" key={label}>\n {label && (\n <div className=\"flex flex-row items-center gap-x-2\">\n {/* Group label, not a heading: caption keeps the v1 12px;\n medium weight so the uppercase run still reads muted. */}\n <Typography\n className=\"uppercase\"\n color=\"muted\"\n variant=\"caption\"\n weight=\"medium\"\n >\n {label}\n </Typography>\n <hr className=\"border-border flex flex-grow\" />\n </div>\n )}\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={joinHyphenCase(\"dynamic-variables-list\", label)}\n >\n {variables.map(item => (\n <button\n className=\"border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary cursor-pointer rounded-md border px-1.5 py-1 text-start text-sm leading-tight transition-colors select-none focus:outline-none\"\n key={item.label}\n data-testid={joinHyphenCase(\n \"dynamic-variables-list-item\",\n item.label\n )}\n onClick={() => onVariableClick(item)}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n </DropdownMenu>\n );\n};\n\nDynamicVariables.propTypes = {\n onVariableClick: PropTypes.func,\n variables: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, key: PropTypes.string })\n ),\n};\n\nexport default DynamicVariables;\n"],"names":["parseVariables","variableArr","arguments","length","undefined","uncategorized","groupedVariables","categorySet","Set","forEach","variable","category","label","variables","parsedVariables","map","mergeLeft","categoryLabel","has","add","push","existingGroup","findBy","uniqBy","prop","concat","isEmpty","DynamicVariables","_ref","_dropdownProps$dropdo","_ref$onVariableClick","onVariableClick","noop","_ref$variables","buttonProps","dropdownProps","_objectWithoutProperties","_excluded","_jsx","DropdownMenu","_objectSpread","position","customTarget","className","children","Button","icon","Braces","size","variant","collisionPadding","cn","_ref2","_jsxs","Typography","color","weight","joinHyphenCase","item","onClick"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"DynamicVariables.js","sources":["../../node_modules/lucide-react/dist/esm/icons/braces.mjs","../../src/v2/components/DynamicVariables/utils.js","../../src/v2/components/DynamicVariables/index.jsx"],"sourcesContent":["/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n];\nconst Braces = createLucideIcon(\"braces\", __iconNode);\n\nexport { __iconNode, Braces as default };\n//# sourceMappingURL=braces.mjs.map\n","import { findBy } from \"neetocist\";\nimport { prop, isEmpty, uniqBy, mergeLeft } from \"ramda\";\n\nexport const parseVariables = (variableArr = []) => {\n const uncategorized = [];\n const groupedVariables = [];\n const categorySet = new Set();\n\n variableArr.forEach(variable => {\n const { category, label, variables } = variable;\n if (category && variables) {\n const parsedVariables = variables.map(\n mergeLeft({ category, categoryLabel: label })\n );\n\n if (!categorySet.has(category)) {\n categorySet.add(category);\n groupedVariables.push({ label, variables: parsedVariables });\n } else {\n const existingGroup = findBy({ label }, groupedVariables);\n\n existingGroup.variables = uniqBy(\n prop(\"key\"),\n existingGroup.variables.concat(parsedVariables)\n );\n }\n } else {\n uncategorized.push(variable);\n }\n });\n\n if (!isEmpty(uncategorized)) {\n groupedVariables.push({\n label: !isEmpty(groupedVariables) ? \"Others\" : null,\n variables: uncategorized,\n });\n }\n\n return groupedVariables;\n};\n","import { Button, cn, DropdownMenu, Typography } from \"@bigbinary/neeto-atoms\";\nimport { Braces } from \"lucide-react\";\nimport { noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport { parseVariables } from \"./utils\";\n\nconst DynamicVariables = ({\n onVariableClick = noop,\n variables = [],\n buttonProps,\n ...dropdownProps\n}) => {\n if (isEmpty(variables)) return null;\n\n const parsedVariables = parseVariables(variables);\n\n return (\n // End-aligned with collision padding: the trigger usually sits at the\n // content's right edge (e.g. the editor's variables button), so a\n // start-aligned panel would hang past the viewport and get clipped.\n <DropdownMenu\n position=\"bottom-end\"\n customTarget={\n // The inline-flex wrapper keeps the popper anchor button-sized;\n // otherwise the trigger element can stretch with its container and\n // end-align the panel far past the visible button.\n <div className=\"inline-flex\">\n <Button\n data-testid=\"dynamic-variables-button\"\n icon={Braces}\n size=\"icon\"\n variant=\"outline\"\n {...buttonProps}\n />\n </div>\n }\n {...dropdownProps}\n dropdownProps={{\n collisionPadding: 8,\n ...dropdownProps?.dropdownProps,\n // w-max frees the popup from the content wrapper's default\n // trigger-width lock (which clips the chip grid via its\n // overflow-x-hidden). Merge it last so a consumer's className\n // (e.g. SubjectField's overflow-y-auto) augments rather than\n // clobbers the width.\n className: cn(\"w-max\", dropdownProps?.dropdownProps?.className),\n }}\n >\n {/* Groups own their label-to-chips gap; the outer column spaces the\n groups themselves (the editor's old h6-based margin rule no longer\n matches now that the label is a caption span). */}\n <div\n className=\"flex max-w-[22.5rem] min-w-64 flex-col gap-3 p-3\"\n data-testid=\"dynamic-variables-list\"\n >\n {parsedVariables.map(({ label, variables }) => (\n <div className=\"flex flex-col gap-1.5\" key={label}>\n {label && (\n <div className=\"flex flex-row items-center gap-x-2\">\n {/* Group label, not a heading: caption keeps the v1 12px;\n medium weight so the uppercase run still reads muted. */}\n <Typography\n className=\"uppercase\"\n color=\"muted\"\n variant=\"caption\"\n weight=\"medium\"\n >\n {label}\n </Typography>\n <hr className=\"border-border flex flex-grow\" />\n </div>\n )}\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={joinHyphenCase(\"dynamic-variables-list\", label)}\n >\n {variables.map(item => (\n <DropdownMenu.MenuItem\n className=\"border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary cursor-pointer rounded-md border px-1.5 py-1 text-start text-sm leading-tight transition-colors select-none focus:outline-none\"\n key={item.label}\n data-testid={joinHyphenCase(\n \"dynamic-variables-list-item\",\n item.label\n )}\n onClick={() => onVariableClick(item)}\n >\n {item.label}\n </DropdownMenu.MenuItem>\n ))}\n </div>\n </div>\n ))}\n </div>\n </DropdownMenu>\n );\n};\n\nDynamicVariables.propTypes = {\n onVariableClick: PropTypes.func,\n variables: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, key: PropTypes.string })\n ),\n};\n\nexport default DynamicVariables;\n"],"names":["parseVariables","variableArr","arguments","length","undefined","uncategorized","groupedVariables","categorySet","Set","forEach","variable","category","label","variables","parsedVariables","map","mergeLeft","categoryLabel","has","add","push","existingGroup","findBy","uniqBy","prop","concat","isEmpty","DynamicVariables","_ref","_dropdownProps$dropdo","_ref$onVariableClick","onVariableClick","noop","_ref$variables","buttonProps","dropdownProps","_objectWithoutProperties","_excluded","_jsx","DropdownMenu","_objectSpread","position","customTarget","className","children","Button","icon","Braces","size","variant","collisionPadding","cn","_ref2","_jsxs","Typography","color","weight","joinHyphenCase","item","MenuItem","onClick"],"mappings":"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","x_google_ignoreList":[0]}
|