@bigbinary/neeto-molecules 5.3.33 → 5.3.34

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 (50) hide show
  1. package/dist/FinderModal.js +14 -1
  2. package/dist/FinderModal.js.map +1 -1
  3. package/dist/cjs/FinderModal.js +14 -1
  4. package/dist/cjs/FinderModal.js.map +1 -1
  5. package/dist/cjs/v2/FinderModal.js +137 -74
  6. package/dist/cjs/v2/FinderModal.js.map +1 -1
  7. package/dist/cjs/v2/OptionFields.js +1 -0
  8. package/dist/cjs/v2/OptionFields.js.map +1 -1
  9. package/dist/v2/FinderModal.js +138 -78
  10. package/dist/v2/FinderModal.js.map +1 -1
  11. package/dist/v2/OptionFields.js +1 -0
  12. package/dist/v2/OptionFields.js.map +1 -1
  13. package/package.json +1 -1
  14. package/src/translations/ar.json +3 -1
  15. package/src/translations/bg.json +3 -1
  16. package/src/translations/ca.json +3 -1
  17. package/src/translations/cs.json +3 -1
  18. package/src/translations/da.json +3 -1
  19. package/src/translations/de.json +3 -1
  20. package/src/translations/en.json +3 -1
  21. package/src/translations/es-MX.json +3 -1
  22. package/src/translations/es.json +3 -1
  23. package/src/translations/et.json +3 -1
  24. package/src/translations/fi.json +3 -1
  25. package/src/translations/fil.json +3 -1
  26. package/src/translations/fr.json +3 -1
  27. package/src/translations/he.json +3 -1
  28. package/src/translations/hi.json +3 -1
  29. package/src/translations/hr.json +3 -1
  30. package/src/translations/hu.json +3 -1
  31. package/src/translations/id.json +3 -1
  32. package/src/translations/it.json +3 -1
  33. package/src/translations/ja.json +3 -1
  34. package/src/translations/ko.json +3 -1
  35. package/src/translations/lv.json +3 -1
  36. package/src/translations/nl.json +3 -1
  37. package/src/translations/pl.json +3 -1
  38. package/src/translations/pt-BR.json +3 -1
  39. package/src/translations/pt.json +3 -1
  40. package/src/translations/ro.json +3 -1
  41. package/src/translations/ru.json +3 -1
  42. package/src/translations/sk.json +3 -1
  43. package/src/translations/sl.json +3 -1
  44. package/src/translations/sv.json +3 -1
  45. package/src/translations/th.json +3 -1
  46. package/src/translations/tr.json +3 -1
  47. package/src/translations/uk.json +3 -1
  48. package/src/translations/vi.json +3 -1
  49. package/src/translations/zh-CN.json +3 -1
  50. package/src/translations/zh-TW.json +3 -1
@@ -292,7 +292,7 @@ var ModalHeader = withT(function (_ref) {
292
292
  });
293
293
  });
294
294
 
295
- var _excluded = ["enableAdvancedSearch", "data", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
295
+ var _excluded = ["enableAdvancedSearch", "data", "isFetching", "isOpen", "setIsOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
296
296
  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; }
297
297
  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; }
298
298
  var FinderModal = function FinderModal(_ref) {
@@ -301,6 +301,8 @@ var FinderModal = function FinderModal(_ref) {
301
301
  data = _ref.data,
302
302
  isFetching = _ref.isFetching,
303
303
  isOpen = _ref.isOpen,
304
+ _ref$setIsOpen = _ref.setIsOpen,
305
+ setIsOpen = _ref$setIsOpen === void 0 ? noop : _ref$setIsOpen,
304
306
  searchTerm = _ref.searchTerm,
305
307
  setSearchTerm = _ref.setSearchTerm,
306
308
  onClose = _ref.onClose,
@@ -336,6 +338,17 @@ var FinderModal = function FinderModal(_ref) {
336
338
  mode: "global",
337
339
  enabled: isOpen && enableAdvancedSearch
338
340
  });
341
+ useHotkeys("mod+k", function () {
342
+ return setIsOpen(true);
343
+ }, {
344
+ mode: "global"
345
+ });
346
+ useHotkeys("esc", function () {
347
+ return setIsOpen(false);
348
+ }, {
349
+ mode: "global",
350
+ enabled: isOpen
351
+ });
339
352
  return /*#__PURE__*/jsxs(Modal, _objectSpread(_objectSpread({
340
353
  isOpen: isOpen,
341
354
  onClose: onClose,
@@ -1 +1 @@
1
- {"version":3,"file":"FinderModal.js","sources":["../src/components/FinderModal/Link.jsx","../src/components/FinderModal/utils.jsx","../src/components/FinderModal/Body.jsx","../src/components/FinderModal/Footer.jsx","../src/components/FinderModal/Header.jsx","../src/components/FinderModal/index.jsx"],"sourcesContent":["import { Link as RRDLink } from \"react-router-dom\";\n\nconst Link = ({ to, children, ...rest }) => {\n const url = new URL(to);\n url.host = \"\";\n\n return (\n <RRDLink {...rest} to={`${url.pathname}${url.search}`}>\n {children}\n </RRDLink>\n );\n};\n\nexport default Link;\n","import React from \"react\";\n\nexport const minMax = (number, max = Number.POSITIVE_INFINITY, min = 0) =>\n Math.min(max, Math.max(min, number));\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 <span className=\"neeto-molecules-finder-matched-tag\" key={index}>\n {part}\n </span>\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\nexport const flattenData = data => {\n if (!data) return [];\n\n if (Array.isArray(data)) return data;\n\n const result = [];\n Object.keys(data).forEach(key => {\n data[key].forEach(item => {\n result.push({ ...item, category: key });\n });\n });\n\n return result;\n};\n\nexport const createStylePalette = values => {\n const assignedStyles = {};\n let styleIndex = 0;\n\n return key => {\n if (assignedStyles[key]) return assignedStyles[key];\n const style = values[styleIndex];\n styleIndex = (styleIndex + 1) % values.length;\n assignedStyles[key] = style;\n\n return style;\n };\n};\n","import { useEffect, useRef } from \"react\";\n\nimport { humanize, isNotEmpty, isNotPresent, noop } from \"neetocist\";\nimport { Modal, Typography, NoData, Spinner, Tag } from \"neetoui\";\nimport { isEmpty } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Link from \"./Link\";\nimport {\n htmlToText,\n highlightMatch,\n filterAndHighlightContent,\n createStylePalette,\n} from \"./utils\";\n\nconst getStyle = createStylePalette([\n \"primary\",\n \"info\",\n \"success\",\n \"secondary\",\n \"warning\",\n]);\n\nconst ModalBody = ({\n containerRef,\n data,\n onClose,\n loading,\n searchTerm,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n}) => {\n const { t } = useTranslation();\n const sentinelRef = useRef(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinel.closest(\".neeto-molecules-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(sentinel);\n\n return () => observer.disconnect();\n }, [isPaginationEnabled, hasMore, isFetchingMore]);\n\n const categoryGroups = Object.keys(data).filter(key => isNotEmpty(data[key]));\n const isDataEmpty = isNotPresent(data) || isEmpty(categoryGroups);\n\n if (isDataEmpty && !loading) {\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body flex h-96 items-center justify-center overflow-y-auto px-3 py-5\">\n <NoData\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </Modal.Body>\n );\n }\n\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body h-96 overflow-y-auto px-3 py-4\">\n <div className=\"flex flex-col\" ref={containerRef}>\n {categoryGroups.map((category, categoryIndex) => {\n const items = data[category];\n const shouldShowCategoryDivider =\n categoryIndex < categoryGroups.length - 1;\n\n return (\n <div key={category}>\n {items.map(item => {\n const nameContent = htmlToText(item.name);\n const bodyContent = htmlToText(item.body);\n\n const filteredBodyContent = filterAndHighlightContent(\n bodyContent,\n searchTerm\n );\n\n return (\n <Link\n className=\"neeto-molecules-search-result-item hover:neeto-ui-bg-gray-100 focus:neeto-ui-bg-gray-100 neeto-ui-rounded-lg flex w-full cursor-pointer items-center gap-2 px-3 py-2.5 text-xs transition-all duration-300\"\n key={`${category}-${item.id}`}\n to={item.url}\n onClick={onClose}\n >\n <div className=\"line-clamp-1 flex flex-col gap-1\">\n <div className=\"flex\">\n {nameContent && (\n <Typography\n className=\"neeto-ui-text-black inline-block\"\n component=\"span\"\n lineHeight=\"snug\"\n weight=\"semibold\"\n >\n {highlightMatch(nameContent, searchTerm)}\n {category && (\n <Tag\n className=\"ml-2 inline-block align-middle\"\n size=\"small\"\n style={getStyle(category)}\n type=\"solid\"\n >\n {humanize(category)}\n </Tag>\n )}\n </Typography>\n )}\n </div>\n {bodyContent && (\n <Typography className=\"neeto-ui-text-gray-600 truncate text-xs\">\n {filteredBodyContent || bodyContent}\n </Typography>\n )}\n </div>\n </Link>\n );\n })}\n {shouldShowCategoryDivider && (\n <hr className=\"neeto-ui-border-gray-300 mx-3 my-3 border-t\" />\n )}\n </div>\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={sentinelRef}\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 </div>\n </Modal.Body>\n );\n};\n\nexport default ModalBody;\n","import { Down, Up } from \"neetoicons\";\nimport { Modal, Typography } from \"neetoui\";\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 <Up className=\"neeto-ui-text-gray-600\" key=\"up\" size={12} />,\n <Down className=\"neeto-ui-text-gray-600\" 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 <Modal.Footer className=\"neeto-ui-border-gray-300 neeto-molecules-finder-modal__footer border-t px-6 py-4\">\n <div className=\"neeto-ui-text-xxs flex items-center gap-4\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n <Typography\n className=\"neeto-ui-text-gray-600\"\n component=\"span\"\n style=\"nano\"\n >\n {label}\n </Typography>\n {keys.map((key, index) => (\n <Typography\n className=\"neeto-ui-bg-gray-200 neeto-ui-rounded-sm neeto-ui-text-gray-600 px-1.5 py-1\"\n component=\"span\"\n key={index}\n style=\"nano\"\n >\n {key}\n </Typography>\n ))}\n </div>\n ))}\n </div>\n </Modal.Footer>\n );\n};\n\nexport default ModalFooter;\n","import { withT } from \"neetocommons/react-utils\";\nimport { Button, Modal, Spinner } from \"neetoui\";\n\nimport Search from \"components/Search\";\n\nconst ModalHeader = withT(\n ({ t, enableAdvancedSearch, onSearch, onGoToAdvanced, loading }) => (\n <Modal.Header className=\"neeto-molecules-finder-modal__header neeto-ui-border-gray-300 border-b px-0 py-0\">\n <Search\n {...{ onSearch }}\n nakedInput\n autoComplete=\"off\"\n className=\"neeto-molecules-finder-modal__search px-6 py-3\"\n name=\"term\"\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n suffix={\n <div className=\"ms-3 flex items-center\">\n <div className=\"h-4 w-4 flex-shrink-0\">\n {loading && <Spinner size=\"small\" />}\n </div>\n {enableAdvancedSearch && (\n <Button\n className=\"ms-3 whitespace-nowrap\"\n label={t(\"neetoMolecules.finderModal.advancedSearch\")}\n size=\"small\"\n style=\"tertiary\"\n onClick={onGoToAdvanced}\n />\n )}\n </div>\n }\n />\n </Modal.Header>\n )\n);\n\nexport default ModalHeader;\n","import { useRef } from \"react\";\n\nimport { noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport { Modal } from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport ModalBody from \"./Body\";\nimport \"./finder-modal.scss\";\nimport ModalFooter from \"./Footer\";\nimport ModalHeader from \"./Header\";\nimport { minMax } from \"./utils\";\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,\n isFetchingMore,\n ...props\n}) => {\n const containerRef = useRef();\n const mutables = useRef({ focusIndex: -1 }).current;\n\n const onFocusChange = offset => {\n const container = containerRef.current;\n if (!container) return;\n\n const nodes = container.querySelectorAll(\n \"a.neeto-molecules-search-result-item\"\n );\n\n if (isEmpty(nodes)) return;\n\n mutables.focusIndex = minMax(\n mutables.focusIndex + offset,\n nodes.length - 1\n );\n\n const targetNode = nodes[mutables.focusIndex];\n if (targetNode) {\n targetNode.focus();\n }\n };\n\n useHotkeys(\n [\"up\", \"down\"],\n event => {\n event.preventDefault();\n if (event.code === \"ArrowUp\") onFocusChange(-1);\n else if (event.code === \"ArrowDown\") onFocusChange(1);\n },\n { mode: \"global\", enabled: isOpen }\n );\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n\n return (\n <Modal\n {...{ isOpen, onClose }}\n closeButton={false}\n {...props}\n backdropClassName=\"neeto-molecules-finder-modal-backdrop py-10 px-4\"\n className=\"neeto-molecules-finder-modal\"\n >\n <ModalHeader\n {...{ enableAdvancedSearch, onGoToAdvanced }}\n loading={isFetching}\n onSearch={setSearchTerm}\n />\n <ModalBody\n {...{\n containerRef,\n data,\n hasMore,\n isFetchingMore,\n onClose,\n onLoadMore,\n searchTerm,\n }}\n loading={isFetching}\n />\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Modal>\n );\n};\n\nFinderModal.propTypes = {\n /*\n Boolean to indicate decide whether to show advanced search button or not\n */\n enableAdvancedSearch: PropTypes.bool,\n /*\n Data to be displayed in the modal\n */\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 /*\n Boolean to indicate whether data is being fetched or not\n */\n isFetching: PropTypes.bool,\n /*\n Boolean to indicate whether modal is open or not\n */\n isOpen: PropTypes.bool,\n /*\n Term used for search\n */\n searchTerm: PropTypes.string,\n /*\n Function to set search term\n */\n setSearchTerm: PropTypes.func,\n /*\n Function to close the modal\n */\n onClose: PropTypes.func,\n /*\n Function to execute when user clicks on advanced search button\n */\n onGoToAdvanced: PropTypes.func,\n /*\n Function called when the user scrolls near the bottom of the results.\n When provided together with hasMore, enables scroll-based pagination.\n */\n onLoadMore: PropTypes.func,\n /*\n Boolean indicating whether more pages are available to fetch\n */\n hasMore: PropTypes.bool,\n /*\n Boolean indicating whether the next page is currently being fetched\n */\n isFetchingMore: PropTypes.bool,\n};\n\nexport default FinderModal;\n"],"names":["Link","_ref","to","children","rest","_objectWithoutProperties","_excluded","url","URL","host","_jsx","RRDLink","_objectSpread","concat","pathname","search","minMax","number","max","arguments","length","undefined","Number","POSITIVE_INFINITY","min","Math","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","split","map","part","index","toLowerCase","className","filterAndHighlightContent","bodyContent","filter","line","trim","includes","_jsxs","React","Fragment","createStylePalette","values","assignedStyles","styleIndex","key","style","getStyle","ModalBody","containerRef","data","onClose","loading","onLoadMore","_ref$hasMore","hasMore","_ref$isFetchingMore","isFetchingMore","_useTranslation","useTranslation","t","sentinelRef","useRef","onLoadMoreRef","noop","useEffect","current","isPaginationEnabled","Boolean","sentinel","root","closest","observer","IntersectionObserver","_ref2","_ref3","_slicedToArray","entry","isIntersecting","rootMargin","observe","disconnect","categoryGroups","Object","keys","isNotEmpty","isDataEmpty","isNotPresent","isEmpty","Modal","Body","NoData","description","title","ref","category","categoryIndex","items","shouldShowCategoryDivider","item","nameContent","name","body","filteredBodyContent","onClick","Typography","component","lineHeight","weight","Tag","size","type","humanize","id","Spinner","ModalFooter","enableAdvancedSearch","shortcuts","label","isVisible","Up","Down","Footer","prop","ModalHeader","withT","onSearch","onGoToAdvanced","Header","Search","nakedInput","autoComplete","placeholder","suffix","Button","FinderModal","_ref$enableAdvancedSe","isFetching","isOpen","setSearchTerm","_ref$onGoToAdvanced","props","mutables","focusIndex","onFocusChange","offset","container","nodes","querySelectorAll","targetNode","focus","useHotkeys","event","preventDefault","code","mode","enabled","closeButton","backdropClassName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,IAAI,GAAG,SAAPA,IAAIA,CAAAC,IAAA,EAAkC;AAAA,EAAA,IAA5BC,EAAE,GAAAD,IAAA,CAAFC,EAAE;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;AAAKC,IAAAA,IAAI,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA;AACnC,EAAA,IAAMC,GAAG,GAAG,IAAIC,GAAG,CAACN,EAAE,CAAC;EACvBK,GAAG,CAACE,IAAI,GAAG,EAAE;EAEb,oBACEC,GAAA,CAACC,MAAO,EAAAC,eAAA,CAAAA,eAAA,KAAKR,IAAI,CAAA,EAAA,EAAA,EAAA;AAAEF,IAAAA,EAAE,EAAA,EAAA,CAAAW,MAAA,CAAKN,GAAG,CAACO,QAAQ,CAAA,CAAAD,MAAA,CAAGN,GAAG,CAACQ,MAAM,CAAG;AAAAZ,IAAAA,QAAA,EACnDA;AAAQ,GAAA,CACF,CAAC;AAEd,CAAC;;ACTM,IAAMa,MAAM,GAAG,SAATA,MAAMA,CAAIC,MAAM,EAAA;AAAA,EAAA,IAAEC,GAAG,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAGG,MAAM,CAACC,iBAAiB;AAAA,EAAA,IAAEC,GAAG,GAAAL,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC;AAAA,EAAA,OACpEM,IAAI,CAACD,GAAG,CAACN,GAAG,EAAEO,IAAI,CAACP,GAAG,CAACM,GAAG,EAAEP,MAAM,CAAC,CAAC;AAAA,CAAA;AAE/B,IAAMS,UAAU,GAAG,SAAbA,UAAUA,CAAGC,IAAI,EAAI;AAChC,EAAA,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;AAEtB,EAAA,IAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EACzCF,GAAG,CAACG,SAAS,GAAGJ,IAAI;EAEpB,OAAOC,GAAG,CAACI,WAAW,IAAIJ,GAAG,CAACK,SAAS,IAAI,EAAE;AAC/C,CAAC;AAEM,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAI,EAAEC,UAAU,EAAK;AAClD,EAAA,IAAI,CAACA,UAAU,EAAE,OAAOD,IAAI;EAE5B,IAAME,KAAK,GAAG,IAAIC,MAAM,CAAA,GAAA,CAAAzB,MAAA,CAAKuB,UAAU,EAAA,GAAA,CAAA,EAAK,IAAI,CAAC;AAEjD,EAAA,OAAOD,IAAI,CAACI,KAAK,CAACF,KAAK,CAAC,CAACG,GAAG,CAAC,UAACC,IAAI,EAAEC,KAAK,EAAA;AAAA,IAAA,OACvC,CAAAD,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJA,IAAI,CAAEE,WAAW,EAAE,MAAKP,UAAU,CAACO,WAAW,EAAE,gBAC9CjC,GAAA,CAAA,MAAA,EAAA;AAAMkC,MAAAA,SAAS,EAAC,oCAAoC;AAAAzC,MAAAA,QAAA,EACjDsC;KAAI,EADmDC,KAEpD,CAAC,GAEPD,IACD;AAAA,EAAA,CACH,CAAC;AACH,CAAC;AAEM,IAAMI,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAIC,WAAW,EAAEV,UAAU,EAAK;AACpE,EAAA,IAAI,CAACA,UAAU,EAAE,OAAOU,WAAW;AAEnC,EAAA,IAAI,CAACA,WAAW,EAAE,OAAO,IAAI;EAE7B,OAAOA,WAAW,CACfP,KAAK,CAAC,qBAAqB,CAAC,CAC5BQ,MAAM,CAAC,UAAAC,IAAI,EAAA;AAAA,IAAA,OAAIA,IAAI,CAACC,IAAI,EAAE;AAAA,EAAA,CAAA,CAAC,CAC3BF,MAAM,CAAC,UAAAC,IAAI,EAAA;AAAA,IAAA,OAAIA,IAAI,CAACL,WAAW,EAAE,CAACO,QAAQ,CAACd,UAAU,CAACO,WAAW,EAAE,CAAC;AAAA,EAAA,CAAA,CAAC,CACrEH,GAAG,CAAC,UAACQ,IAAI,EAAEN,KAAK,EAAA;AAAA,IAAA,oBACfS,IAAA,CAACC,cAAK,CAACC,QAAQ,EAAA;MAAAlD,QAAA,EAAA,CACZ+B,cAAc,CAACc,IAAI,EAAEZ,UAAU,CAAC,eACjC1B,GAAA,CAAA,IAAA,EAAA,EAAK,CAAC;AAAA,KAAA,EAFagC,KAGL,CAAC;AAAA,EAAA,CAClB,CAAC;AACN,CAAC;AAiBM,IAAMY,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAGC,MAAM,EAAI;EAC1C,IAAMC,cAAc,GAAG,EAAE;EACzB,IAAIC,UAAU,GAAG,CAAC;EAElB,OAAO,UAAAC,GAAG,EAAI;IACZ,IAAIF,cAAc,CAACE,GAAG,CAAC,EAAE,OAAOF,cAAc,CAACE,GAAG,CAAC;AACnD,IAAA,IAAMC,KAAK,GAAGJ,MAAM,CAACE,UAAU,CAAC;IAChCA,UAAU,GAAG,CAACA,UAAU,GAAG,CAAC,IAAIF,MAAM,CAACnC,MAAM;AAC7CoC,IAAAA,cAAc,CAACE,GAAG,CAAC,GAAGC,KAAK;AAE3B,IAAA,OAAOA,KAAK;EACd,CAAC;AACH,CAAC;;AC3DD,IAAMC,QAAQ,GAAGN,kBAAkB,CAAC,CAClC,SAAS,EACT,MAAM,EACN,SAAS,EACT,WAAW,EACX,SAAS,CACV,CAAC;AAEF,IAAMO,SAAS,GAAG,SAAZA,SAASA,CAAA5D,IAAA,EAST;AAAA,EAAA,IARJ6D,YAAY,GAAA7D,IAAA,CAAZ6D,YAAY;IACZC,IAAI,GAAA9D,IAAA,CAAJ8D,IAAI;IACJC,OAAO,GAAA/D,IAAA,CAAP+D,OAAO;IACPC,OAAO,GAAAhE,IAAA,CAAPgE,OAAO;IACP7B,UAAU,GAAAnC,IAAA,CAAVmC,UAAU;IACV8B,UAAU,GAAAjE,IAAA,CAAViE,UAAU;IAAAC,YAAA,GAAAlE,IAAA,CACVmE,OAAO;AAAPA,IAAAA,OAAO,GAAAD,YAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,YAAA;IAAAE,mBAAA,GAAApE,IAAA,CACfqE,cAAc;AAAdA,IAAAA,cAAc,GAAAD,mBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,mBAAA;AAEtB,EAAA,IAAAE,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AACT,EAAA,IAAMC,WAAW,GAAGC,MAAM,CAAC,IAAI,CAAC;AAChC,EAAA,IAAMC,aAAa,GAAGD,MAAM,CAACT,UAAU,IAAIW,IAAI,CAAC;AAEhDC,EAAAA,SAAS,CAAC,YAAM;AACdF,IAAAA,aAAa,CAACG,OAAO,GAAGb,UAAU,IAAIW,IAAI;AAC5C,EAAA,CAAC,EAAE,CAACX,UAAU,CAAC,CAAC;AAEhB,EAAA,IAAMc,mBAAmB,GAAGC,OAAO,CAACf,UAAU,CAAC;AAE/CY,EAAAA,SAAS,CAAC,YAAM;AACd,IAAA,IAAMI,QAAQ,GAAGR,WAAW,CAACK,OAAO;IACpC,IAAI,CAACG,QAAQ,IAAI,CAACF,mBAAmB,IAAI,CAACZ,OAAO,IAAIE,cAAc,EAAE;AACnE,MAAA,OAAOjD,SAAS;AAClB,IAAA;AAEA,IAAA,IAAM8D,IAAI,GAAGD,QAAQ,CAACE,OAAO,CAAC,qCAAqC,CAAC;AACpE,IAAA,IAAMC,QAAQ,GAAG,IAAIC,oBAAoB,CACvC,UAAAC,KAAA,EAAa;AAAA,MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,KAAA,EAAA,CAAA,CAAA;AAAXG,QAAAA,KAAK,GAAAF,KAAA,CAAA,CAAA,CAAA;MACL,IAAIE,KAAK,CAACC,cAAc,EAAEf,aAAa,CAACG,OAAO,EAAE;AACnD,IAAA,CAAC,EACD;AAAEI,MAAAA,IAAI,EAAJA,IAAI;AAAES,MAAAA,UAAU,EAAE;AAAQ,KAC9B,CAAC;AACDP,IAAAA,QAAQ,CAACQ,OAAO,CAACX,QAAQ,CAAC;IAE1B,OAAO,YAAA;AAAA,MAAA,OAAMG,QAAQ,CAACS,UAAU,EAAE;AAAA,IAAA,CAAA;EACpC,CAAC,EAAE,CAACd,mBAAmB,EAAEZ,OAAO,EAAEE,cAAc,CAAC,CAAC;AAElD,EAAA,IAAMyB,cAAc,GAAGC,MAAM,CAACC,IAAI,CAAClC,IAAI,CAAC,CAAChB,MAAM,CAAC,UAAAW,GAAG,EAAA;AAAA,IAAA,OAAIwC,UAAU,CAACnC,IAAI,CAACL,GAAG,CAAC,CAAC;EAAA,CAAA,CAAC;EAC7E,IAAMyC,WAAW,GAAGC,YAAY,CAACrC,IAAI,CAAC,IAAIsC,OAAO,CAACN,cAAc,CAAC;AAEjE,EAAA,IAAII,WAAW,IAAI,CAAClC,OAAO,EAAE;AAC3B,IAAA,oBACEvD,GAAA,CAAC4F,KAAK,CAACC,IAAI,EAAA;AAAC3D,MAAAA,SAAS,EAAC,oGAAoG;MAAAzC,QAAA,eACxHO,GAAA,CAAC8F,MAAM,EAAA;AACLC,QAAAA,WAAW,EAAEhC,CAAC,CAAC,uCAAuC,CAAE;QACxDiC,KAAK,EAAEjC,CAAC,CAAC,wCAAwC;OAClD;AAAC,KACQ,CAAC;AAEjB,EAAA;AAEA,EAAA,oBACE/D,GAAA,CAAC4F,KAAK,CAACC,IAAI,EAAA;AAAC3D,IAAAA,SAAS,EAAC,mEAAmE;AAAAzC,IAAAA,QAAA,eACvFgD,IAAA,CAAA,KAAA,EAAA;AAAKP,MAAAA,SAAS,EAAC,eAAe;AAAC+D,MAAAA,GAAG,EAAE7C,YAAa;MAAA3D,QAAA,EAAA,CAC9C4F,cAAc,CAACvD,GAAG,CAAC,UAACoE,QAAQ,EAAEC,aAAa,EAAK;AAC/C,QAAA,IAAMC,KAAK,GAAG/C,IAAI,CAAC6C,QAAQ,CAAC;QAC5B,IAAMG,yBAAyB,GAC7BF,aAAa,GAAGd,cAAc,CAAC3E,MAAM,GAAG,CAAC;AAE3C,QAAA,oBACE+B,IAAA,CAAA,KAAA,EAAA;AAAAhD,UAAAA,QAAA,GACG2G,KAAK,CAACtE,GAAG,CAAC,UAAAwE,IAAI,EAAI;AACjB,YAAA,IAAMC,WAAW,GAAGvF,UAAU,CAACsF,IAAI,CAACE,IAAI,CAAC;AACzC,YAAA,IAAMpE,WAAW,GAAGpB,UAAU,CAACsF,IAAI,CAACG,IAAI,CAAC;AAEzC,YAAA,IAAMC,mBAAmB,GAAGvE,yBAAyB,CACnDC,WAAW,EACXV,UACF,CAAC;YAED,oBACE1B,GAAA,CAACV,IAAI,EAAA;AACH4C,cAAAA,SAAS,EAAC,4MAA4M;cAEtN1C,EAAE,EAAE8G,IAAI,CAACzG,GAAI;AACb8G,cAAAA,OAAO,EAAErD,OAAQ;AAAA7D,cAAAA,QAAA,eAEjBgD,IAAA,CAAA,KAAA,EAAA;AAAKP,gBAAAA,SAAS,EAAC,kCAAkC;AAAAzC,gBAAAA,QAAA,gBAC/CO,GAAA,CAAA,KAAA,EAAA;AAAKkC,kBAAAA,SAAS,EAAC,MAAM;AAAAzC,kBAAAA,QAAA,EAClB8G,WAAW,iBACV9D,IAAA,CAACmE,UAAU,EAAA;AACT1E,oBAAAA,SAAS,EAAC,kCAAkC;AAC5C2E,oBAAAA,SAAS,EAAC,MAAM;AAChBC,oBAAAA,UAAU,EAAC,MAAM;AACjBC,oBAAAA,MAAM,EAAC,UAAU;AAAAtH,oBAAAA,QAAA,EAAA,CAEhB+B,cAAc,CAAC+E,WAAW,EAAE7E,UAAU,CAAC,EACvCwE,QAAQ,iBACPlG,GAAA,CAACgH,GAAG,EAAA;AACF9E,sBAAAA,SAAS,EAAC,gCAAgC;AAC1C+E,sBAAAA,IAAI,EAAC,OAAO;AACZhE,sBAAAA,KAAK,EAAEC,QAAQ,CAACgD,QAAQ,CAAE;AAC1BgB,sBAAAA,IAAI,EAAC,OAAO;sBAAAzH,QAAA,EAEX0H,QAAQ,CAACjB,QAAQ;AAAC,qBAChB,CACN;mBACS;AACb,iBACE,CAAC,EACL9D,WAAW,iBACVpC,GAAA,CAAC4G,UAAU,EAAA;AAAC1E,kBAAAA,SAAS,EAAC,yCAAyC;kBAAAzC,QAAA,EAC5DiH,mBAAmB,IAAItE;AAAW,iBACzB,CACb;eACE;aAAC,EAAA,EAAA,CAAAjC,MAAA,CAhCE+F,QAAQ,EAAA,GAAA,CAAA,CAAA/F,MAAA,CAAImG,IAAI,CAACc,EAAE,CAiCvB,CAAC;AAEX,UAAA,CAAC,CAAC,EACDf,yBAAyB,iBACxBrG,GAAA,CAAA,IAAA,EAAA;AAAIkC,YAAAA,SAAS,EAAC;AAA6C,WAAE,CAC9D;AAAA,SAAA,EAnDOgE,QAoDL,CAAC;AAEV,MAAA,CAAC,CAAC,EACD1C,UAAU,IAAIE,OAAO,iBACpB1D,GAAA,CAAA,KAAA,EAAA;AACE,QAAA,aAAA,EAAY,MAAM;AAClBkC,QAAAA,SAAS,EAAC,aAAa;AACvB,QAAA,aAAA,EAAY,uCAAuC;AACnD+D,QAAAA,GAAG,EAAEjC;AAAY,OAClB,CACF,EACAJ,cAAc,iBACb5D,GAAA,CAAA,KAAA,EAAA;AACEkC,QAAAA,SAAS,EAAC,uCAAuC;AACjD,QAAA,aAAA,EAAY,2CAA2C;QAAAzC,QAAA,eAEvDO,GAAA,CAACqH,OAAO,EAAA;AAACJ,UAAAA,IAAI,EAAC;SAAS;AAAC,OACrB,CACN;KACE;AAAC,GACI,CAAC;AAEjB,CAAC;;;;;ACzJD,IAAMK,WAAW,GAAG,SAAdA,WAAWA,CAAA/H,IAAA,EAAiC;AAAA,EAAA,IAA3BgI,oBAAoB,GAAAhI,IAAA,CAApBgI,oBAAoB;AACzC,EAAA,IAAA1D,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAMyD,SAAS,GAAG,CAChB;AACEC,IAAAA,KAAK,EAAE1D,CAAC,CAAC,2CAA2C,CAAC;AACrDwB,IAAAA,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC5BmC,IAAAA,SAAS,EAAEH;AACb,GAAC,EACD;AACEE,IAAAA,KAAK,EAAE1D,CAAC,CAAC,oCAAoC,CAAC;IAC9CwB,IAAI,EAAE,CAAC,QAAQ,CAAC;AAChBmC,IAAAA,SAAS,EAAE;AACb,GAAC,EACD;AACED,IAAAA,KAAK,EAAE1D,CAAC,CAAC,oCAAoC,CAAC;AAC9CwB,IAAAA,IAAI,EAAE,cACJvF,GAAA,CAAC2H,EAAE,EAAA;AAACzF,MAAAA,SAAS,EAAC,wBAAwB;AAAU+E,MAAAA,IAAI,EAAE;AAAG,KAAA,EAAd,IAAgB,CAAC,eAC5DjH,GAAA,CAAC4H,IAAI,EAAA;AAAC1F,MAAAA,SAAS,EAAC,wBAAwB;AAAY+E,MAAAA,IAAI,EAAE;KAAG,EAAhB,MAAkB,CAAC,CACjE;AACDS,IAAAA,SAAS,EAAE;AACb,GAAC,EACD;AACED,IAAAA,KAAK,EAAE1D,CAAC,CAAC,qCAAqC,CAAC;IAC/CwB,IAAI,EAAE,CAAC,KAAK,CAAC;AACbmC,IAAAA,SAAS,EAAE;AACb,GAAC,CACF;AAED,EAAA,oBACE1H,GAAA,CAAC4F,KAAK,CAACiC,MAAM,EAAA;AAAC3F,IAAAA,SAAS,EAAC,kFAAkF;AAAAzC,IAAAA,QAAA,eACxGO,GAAA,CAAA,KAAA,EAAA;AAAKkC,MAAAA,SAAS,EAAC,2CAA2C;AAAAzC,MAAAA,QAAA,EACvD+H,SAAS,CAACnF,MAAM,CAACyF,IAAI,CAAC,WAAW,CAAC,CAAC,CAAChG,GAAG,CAAC,UAAA+C,KAAA,EAAkB7C,KAAK,EAAA;AAAA,QAAA,IAApByF,KAAK,GAAA5C,KAAA,CAAL4C,KAAK;UAAElC,IAAI,GAAAV,KAAA,CAAJU,IAAI;AAAA,QAAA,oBACrD9C,IAAA,CAAA,KAAA,EAAA;AAAKP,UAAAA,SAAS,EAAC,yBAAyB;UAAAzC,QAAA,EAAA,cACtCO,GAAA,CAAC4G,UAAU,EAAA;AACT1E,YAAAA,SAAS,EAAC,wBAAwB;AAClC2E,YAAAA,SAAS,EAAC,MAAM;AAChB5D,YAAAA,KAAK,EAAC,MAAM;AAAAxD,YAAAA,QAAA,EAEXgI;WACS,CAAC,EACZlC,IAAI,CAACzD,GAAG,CAAC,UAACkB,GAAG,EAAEhB,KAAK,EAAA;YAAA,oBACnBhC,GAAA,CAAC4G,UAAU,EAAA;AACT1E,cAAAA,SAAS,EAAC,6EAA6E;AACvF2E,cAAAA,SAAS,EAAC,MAAM;AAEhB5D,cAAAA,KAAK,EAAC,MAAM;AAAAxD,cAAAA,QAAA,EAEXuD;AAAG,aAAA,EAHChB,KAIK,CAAC;AAAA,UAAA,CACd,CAAC;AAAA,SAAA,EAjB0CA,KAkBzC,CAAC;MAAA,CACP;KACE;AAAC,GACM,CAAC;AAEnB,CAAC;;ACxDD,IAAM+F,WAAW,GAAGC,KAAK,CACvB,UAAAzI,IAAA,EAAA;AAAA,EAAA,IAAGwE,CAAC,GAAAxE,IAAA,CAADwE,CAAC;IAAEwD,oBAAoB,GAAAhI,IAAA,CAApBgI,oBAAoB;IAAEU,QAAQ,GAAA1I,IAAA,CAAR0I,QAAQ;IAAEC,cAAc,GAAA3I,IAAA,CAAd2I,cAAc;IAAE3E,OAAO,GAAAhE,IAAA,CAAPgE,OAAO;AAAA,EAAA,oBAC3DvD,GAAA,CAAC4F,KAAK,CAACuC,MAAM,EAAA;AAACjG,IAAAA,SAAS,EAAC,kFAAkF;IAAAzC,QAAA,eACxGO,GAAA,CAACoI,MAAM,EAAA;AACCH,MAAAA,QAAQ,EAARA,QAAQ;MACdI,UAAU,EAAA,IAAA;AACVC,MAAAA,YAAY,EAAC,KAAK;AAClBpG,MAAAA,SAAS,EAAC,gDAAgD;AAC1DsE,MAAAA,IAAI,EAAC,MAAM;AACX+B,MAAAA,WAAW,EAAExE,CAAC,CAAC,sCAAsC,CAAE;AACvDyE,MAAAA,MAAM,eACJ/F,IAAA,CAAA,KAAA,EAAA;AAAKP,QAAAA,SAAS,EAAC,wBAAwB;AAAAzC,QAAAA,QAAA,gBACrCO,GAAA,CAAA,KAAA,EAAA;AAAKkC,UAAAA,SAAS,EAAC,uBAAuB;AAAAzC,UAAAA,QAAA,EACnC8D,OAAO,iBAAIvD,GAAA,CAACqH,OAAO,EAAA;AAACJ,YAAAA,IAAI,EAAC;WAAS;AAAC,SACjC,CAAC,EACLM,oBAAoB,iBACnBvH,GAAA,CAACyI,MAAM,EAAA;AACLvG,UAAAA,SAAS,EAAC,wBAAwB;AAClCuF,UAAAA,KAAK,EAAE1D,CAAC,CAAC,2CAA2C,CAAE;AACtDkD,UAAAA,IAAI,EAAC,OAAO;AACZhE,UAAAA,KAAK,EAAC,UAAU;AAChB0D,UAAAA,OAAO,EAAEuB;AAAe,SACzB,CACF;OACE;KAER;AAAC,GACU,CAAC;AAAA,CAEnB,CAAC;;;;;ACpBD,IAAMQ,WAAW,GAAG,SAAdA,WAAWA,CAAAnJ,IAAA,EAaX;AAAA,EAAA,IAAAoJ,qBAAA,GAAApJ,IAAA,CAZJgI,oBAAoB;AAApBA,IAAAA,oBAAoB,GAAAoB,qBAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,qBAAA;IAC3BtF,IAAI,GAAA9D,IAAA,CAAJ8D,IAAI;IACJuF,UAAU,GAAArJ,IAAA,CAAVqJ,UAAU;IACVC,MAAM,GAAAtJ,IAAA,CAANsJ,MAAM;IACNnH,UAAU,GAAAnC,IAAA,CAAVmC,UAAU;IACVoH,aAAa,GAAAvJ,IAAA,CAAbuJ,aAAa;IACbxF,OAAO,GAAA/D,IAAA,CAAP+D,OAAO;IAAAyF,mBAAA,GAAAxJ,IAAA,CACP2I,cAAc;AAAdA,IAAAA,cAAc,GAAAa,mBAAA,KAAA,MAAA,GAAG5E,IAAI,GAAA4E,mBAAA;IACrBvF,UAAU,GAAAjE,IAAA,CAAViE,UAAU;IACVE,OAAO,GAAAnE,IAAA,CAAPmE,OAAO;IACPE,cAAc,GAAArE,IAAA,CAAdqE,cAAc;AACXoF,IAAAA,KAAK,GAAArJ,wBAAA,CAAAJ,IAAA,EAAAK,SAAA,CAAA;AAER,EAAA,IAAMwD,YAAY,GAAGa,MAAM,EAAE;EAC7B,IAAMgF,QAAQ,GAAGhF,MAAM,CAAC;AAAEiF,IAAAA,UAAU,EAAE;GAAI,CAAC,CAAC7E,OAAO;AAEnD,EAAA,IAAM8E,aAAa,GAAG,SAAhBA,aAAaA,CAAGC,MAAM,EAAI;AAC9B,IAAA,IAAMC,SAAS,GAAGjG,YAAY,CAACiB,OAAO;IACtC,IAAI,CAACgF,SAAS,EAAE;AAEhB,IAAA,IAAMC,KAAK,GAAGD,SAAS,CAACE,gBAAgB,CACtC,sCACF,CAAC;AAED,IAAA,IAAI5D,OAAO,CAAC2D,KAAK,CAAC,EAAE;AAEpBL,IAAAA,QAAQ,CAACC,UAAU,GAAG5I,MAAM,CAC1B2I,QAAQ,CAACC,UAAU,GAAGE,MAAM,EAC5BE,KAAK,CAAC5I,MAAM,GAAG,CACjB,CAAC;AAED,IAAA,IAAM8I,UAAU,GAAGF,KAAK,CAACL,QAAQ,CAACC,UAAU,CAAC;AAC7C,IAAA,IAAIM,UAAU,EAAE;MACdA,UAAU,CAACC,KAAK,EAAE;AACpB,IAAA;EACF,CAAC;EAEDC,UAAU,CACR,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,UAAAC,KAAK,EAAI;IACPA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAID,KAAK,CAACE,IAAI,KAAK,SAAS,EAAEV,aAAa,CAAC,EAAE,CAAC,CAAC,KAC3C,IAAIQ,KAAK,CAACE,IAAI,KAAK,WAAW,EAAEV,aAAa,CAAC,CAAC,CAAC;AACvD,EAAA,CAAC,EACD;AAAEW,IAAAA,IAAI,EAAE,QAAQ;AAAEC,IAAAA,OAAO,EAAElB;AAAO,GACpC,CAAC;EAEDa,UAAU,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC,EAAExB,cAAc,EAAE;AAC1D4B,IAAAA,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAElB,MAAM,IAAItB;AACrB,GAAC,CAAC;AAEF,EAAA,oBACE9E,IAAA,CAACmD,KAAK,EAAA1F,aAAA,CAAAA,aAAA,CAAA;AACE2I,IAAAA,MAAM,EAANA,MAAM;AAAEvF,IAAAA,OAAO,EAAPA,OAAO;AACrB0G,IAAAA,WAAW,EAAE;AAAM,GAAA,EACfhB,KAAK,CAAA,EAAA,EAAA,EAAA;AACTiB,IAAAA,iBAAiB,EAAC,kDAAkD;AACpE/H,IAAAA,SAAS,EAAC,8BAA8B;IAAAzC,QAAA,EAAA,cAExCO,GAAA,CAAC+H,WAAW,EAAA;AACJR,MAAAA,oBAAoB,EAApBA,oBAAoB;AAAEW,MAAAA,cAAc,EAAdA,cAAc;AAC1C3E,MAAAA,OAAO,EAAEqF,UAAW;AACpBX,MAAAA,QAAQ,EAAEa;AAAc,KACzB,CAAC,eACF9I,GAAA,CAACmD,SAAS,EAAA;AAENC,MAAAA,YAAY,EAAZA,YAAY;AACZC,MAAAA,IAAI,EAAJA,IAAI;AACJK,MAAAA,OAAO,EAAPA,OAAO;AACPE,MAAAA,cAAc,EAAdA,cAAc;AACdN,MAAAA,OAAO,EAAPA,OAAO;AACPE,MAAAA,UAAU,EAAVA,UAAU;AACV9B,MAAAA,UAAU,EAAVA,UAAU;AAEZ6B,MAAAA,OAAO,EAAEqF;AAAW,KACrB,CAAC,eACF5I,GAAA,CAACsH,WAAW,EAAA;AAAOC,MAAAA,oBAAoB,EAApBA;AAAoB,KAAK,CAAC;AAAA,GAAA,CACxC,CAAC;AAEZ;;;;"}
1
+ {"version":3,"file":"FinderModal.js","sources":["../src/components/FinderModal/Link.jsx","../src/components/FinderModal/utils.jsx","../src/components/FinderModal/Body.jsx","../src/components/FinderModal/Footer.jsx","../src/components/FinderModal/Header.jsx","../src/components/FinderModal/index.jsx"],"sourcesContent":["import { Link as RRDLink } from \"react-router-dom\";\n\nconst Link = ({ to, children, ...rest }) => {\n const url = new URL(to);\n url.host = \"\";\n\n return (\n <RRDLink {...rest} to={`${url.pathname}${url.search}`}>\n {children}\n </RRDLink>\n );\n};\n\nexport default Link;\n","import React from \"react\";\n\nexport const minMax = (number, max = Number.POSITIVE_INFINITY, min = 0) =>\n Math.min(max, Math.max(min, number));\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 <span className=\"neeto-molecules-finder-matched-tag\" key={index}>\n {part}\n </span>\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\nexport const flattenData = data => {\n if (!data) return [];\n\n if (Array.isArray(data)) return data;\n\n const result = [];\n Object.keys(data).forEach(key => {\n data[key].forEach(item => {\n result.push({ ...item, category: key });\n });\n });\n\n return result;\n};\n\nexport const createStylePalette = values => {\n const assignedStyles = {};\n let styleIndex = 0;\n\n return key => {\n if (assignedStyles[key]) return assignedStyles[key];\n const style = values[styleIndex];\n styleIndex = (styleIndex + 1) % values.length;\n assignedStyles[key] = style;\n\n return style;\n };\n};\n","import { useEffect, useRef } from \"react\";\n\nimport { humanize, isNotEmpty, isNotPresent, noop } from \"neetocist\";\nimport { Modal, Typography, NoData, Spinner, Tag } from \"neetoui\";\nimport { isEmpty } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Link from \"./Link\";\nimport {\n htmlToText,\n highlightMatch,\n filterAndHighlightContent,\n createStylePalette,\n} from \"./utils\";\n\nconst getStyle = createStylePalette([\n \"primary\",\n \"info\",\n \"success\",\n \"secondary\",\n \"warning\",\n]);\n\nconst ModalBody = ({\n containerRef,\n data,\n onClose,\n loading,\n searchTerm,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n}) => {\n const { t } = useTranslation();\n const sentinelRef = useRef(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinel.closest(\".neeto-molecules-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(sentinel);\n\n return () => observer.disconnect();\n }, [isPaginationEnabled, hasMore, isFetchingMore]);\n\n const categoryGroups = Object.keys(data).filter(key => isNotEmpty(data[key]));\n const isDataEmpty = isNotPresent(data) || isEmpty(categoryGroups);\n\n if (isDataEmpty && !loading) {\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body flex h-96 items-center justify-center overflow-y-auto px-3 py-5\">\n <NoData\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </Modal.Body>\n );\n }\n\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body h-96 overflow-y-auto px-3 py-4\">\n <div className=\"flex flex-col\" ref={containerRef}>\n {categoryGroups.map((category, categoryIndex) => {\n const items = data[category];\n const shouldShowCategoryDivider =\n categoryIndex < categoryGroups.length - 1;\n\n return (\n <div key={category}>\n {items.map(item => {\n const nameContent = htmlToText(item.name);\n const bodyContent = htmlToText(item.body);\n\n const filteredBodyContent = filterAndHighlightContent(\n bodyContent,\n searchTerm\n );\n\n return (\n <Link\n className=\"neeto-molecules-search-result-item hover:neeto-ui-bg-gray-100 focus:neeto-ui-bg-gray-100 neeto-ui-rounded-lg flex w-full cursor-pointer items-center gap-2 px-3 py-2.5 text-xs transition-all duration-300\"\n key={`${category}-${item.id}`}\n to={item.url}\n onClick={onClose}\n >\n <div className=\"line-clamp-1 flex flex-col gap-1\">\n <div className=\"flex\">\n {nameContent && (\n <Typography\n className=\"neeto-ui-text-black inline-block\"\n component=\"span\"\n lineHeight=\"snug\"\n weight=\"semibold\"\n >\n {highlightMatch(nameContent, searchTerm)}\n {category && (\n <Tag\n className=\"ml-2 inline-block align-middle\"\n size=\"small\"\n style={getStyle(category)}\n type=\"solid\"\n >\n {humanize(category)}\n </Tag>\n )}\n </Typography>\n )}\n </div>\n {bodyContent && (\n <Typography className=\"neeto-ui-text-gray-600 truncate text-xs\">\n {filteredBodyContent || bodyContent}\n </Typography>\n )}\n </div>\n </Link>\n );\n })}\n {shouldShowCategoryDivider && (\n <hr className=\"neeto-ui-border-gray-300 mx-3 my-3 border-t\" />\n )}\n </div>\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={sentinelRef}\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 </div>\n </Modal.Body>\n );\n};\n\nexport default ModalBody;\n","import { Down, Up } from \"neetoicons\";\nimport { Modal, Typography } from \"neetoui\";\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 <Up className=\"neeto-ui-text-gray-600\" key=\"up\" size={12} />,\n <Down className=\"neeto-ui-text-gray-600\" 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 <Modal.Footer className=\"neeto-ui-border-gray-300 neeto-molecules-finder-modal__footer border-t px-6 py-4\">\n <div className=\"neeto-ui-text-xxs flex items-center gap-4\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n <Typography\n className=\"neeto-ui-text-gray-600\"\n component=\"span\"\n style=\"nano\"\n >\n {label}\n </Typography>\n {keys.map((key, index) => (\n <Typography\n className=\"neeto-ui-bg-gray-200 neeto-ui-rounded-sm neeto-ui-text-gray-600 px-1.5 py-1\"\n component=\"span\"\n key={index}\n style=\"nano\"\n >\n {key}\n </Typography>\n ))}\n </div>\n ))}\n </div>\n </Modal.Footer>\n );\n};\n\nexport default ModalFooter;\n","import { withT } from \"neetocommons/react-utils\";\nimport { Button, Modal, Spinner } from \"neetoui\";\n\nimport Search from \"components/Search\";\n\nconst ModalHeader = withT(\n ({ t, enableAdvancedSearch, onSearch, onGoToAdvanced, loading }) => (\n <Modal.Header className=\"neeto-molecules-finder-modal__header neeto-ui-border-gray-300 border-b px-0 py-0\">\n <Search\n {...{ onSearch }}\n nakedInput\n autoComplete=\"off\"\n className=\"neeto-molecules-finder-modal__search px-6 py-3\"\n name=\"term\"\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n suffix={\n <div className=\"ms-3 flex items-center\">\n <div className=\"h-4 w-4 flex-shrink-0\">\n {loading && <Spinner size=\"small\" />}\n </div>\n {enableAdvancedSearch && (\n <Button\n className=\"ms-3 whitespace-nowrap\"\n label={t(\"neetoMolecules.finderModal.advancedSearch\")}\n size=\"small\"\n style=\"tertiary\"\n onClick={onGoToAdvanced}\n />\n )}\n </div>\n }\n />\n </Modal.Header>\n )\n);\n\nexport default ModalHeader;\n","import { useRef } from \"react\";\n\nimport { noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport { Modal } from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport ModalBody from \"./Body\";\nimport \"./finder-modal.scss\";\nimport ModalFooter from \"./Footer\";\nimport ModalHeader from \"./Header\";\nimport { minMax } from \"./utils\";\n\nconst FinderModal = ({\n enableAdvancedSearch = true,\n data,\n isFetching,\n isOpen,\n setIsOpen = noop,\n searchTerm,\n setSearchTerm,\n onClose,\n onGoToAdvanced = noop,\n onLoadMore,\n hasMore,\n isFetchingMore,\n ...props\n}) => {\n const containerRef = useRef();\n const mutables = useRef({ focusIndex: -1 }).current;\n\n const onFocusChange = offset => {\n const container = containerRef.current;\n if (!container) return;\n\n const nodes = container.querySelectorAll(\n \"a.neeto-molecules-search-result-item\"\n );\n\n if (isEmpty(nodes)) return;\n\n mutables.focusIndex = minMax(\n mutables.focusIndex + offset,\n nodes.length - 1\n );\n\n const targetNode = nodes[mutables.focusIndex];\n if (targetNode) {\n targetNode.focus();\n }\n };\n\n useHotkeys(\n [\"up\", \"down\"],\n event => {\n event.preventDefault();\n if (event.code === \"ArrowUp\") onFocusChange(-1);\n else if (event.code === \"ArrowDown\") onFocusChange(1);\n },\n { mode: \"global\", enabled: isOpen }\n );\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n useHotkeys(\"mod+k\", () => setIsOpen(true), { mode: \"global\" });\n useHotkeys(\"esc\", () => setIsOpen(false), {\n mode: \"global\",\n enabled: isOpen,\n });\n\n return (\n <Modal\n {...{ isOpen, onClose }}\n closeButton={false}\n {...props}\n backdropClassName=\"neeto-molecules-finder-modal-backdrop py-10 px-4\"\n className=\"neeto-molecules-finder-modal\"\n >\n <ModalHeader\n {...{ enableAdvancedSearch, onGoToAdvanced }}\n loading={isFetching}\n onSearch={setSearchTerm}\n />\n <ModalBody\n {...{\n containerRef,\n data,\n hasMore,\n isFetchingMore,\n onClose,\n onLoadMore,\n searchTerm,\n }}\n loading={isFetching}\n />\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Modal>\n );\n};\n\nFinderModal.propTypes = {\n /*\n Boolean to indicate decide whether to show advanced search button or not\n */\n enableAdvancedSearch: PropTypes.bool,\n /*\n Data to be displayed in the modal\n */\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 /*\n Boolean to indicate whether data is being fetched or not\n */\n isFetching: PropTypes.bool,\n /*\n Boolean to indicate whether modal is open or not\n */\n isOpen: PropTypes.bool,\n /*\n Term used for search\n */\n searchTerm: PropTypes.string,\n /*\n Function to set search term\n */\n setSearchTerm: PropTypes.func,\n /*\n Function to close the modal\n */\n onClose: PropTypes.func,\n /*\n Function to execute when user clicks on advanced search button\n */\n onGoToAdvanced: PropTypes.func,\n /*\n Function called when the user scrolls near the bottom of the results.\n When provided together with hasMore, enables scroll-based pagination.\n */\n onLoadMore: PropTypes.func,\n /*\n Boolean indicating whether more pages are available to fetch\n */\n hasMore: PropTypes.bool,\n /*\n Boolean indicating whether the next page is currently being fetched\n */\n isFetchingMore: PropTypes.bool,\n};\n\nexport default FinderModal;\n"],"names":["Link","_ref","to","children","rest","_objectWithoutProperties","_excluded","url","URL","host","_jsx","RRDLink","_objectSpread","concat","pathname","search","minMax","number","max","arguments","length","undefined","Number","POSITIVE_INFINITY","min","Math","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","split","map","part","index","toLowerCase","className","filterAndHighlightContent","bodyContent","filter","line","trim","includes","_jsxs","React","Fragment","createStylePalette","values","assignedStyles","styleIndex","key","style","getStyle","ModalBody","containerRef","data","onClose","loading","onLoadMore","_ref$hasMore","hasMore","_ref$isFetchingMore","isFetchingMore","_useTranslation","useTranslation","t","sentinelRef","useRef","onLoadMoreRef","noop","useEffect","current","isPaginationEnabled","Boolean","sentinel","root","closest","observer","IntersectionObserver","_ref2","_ref3","_slicedToArray","entry","isIntersecting","rootMargin","observe","disconnect","categoryGroups","Object","keys","isNotEmpty","isDataEmpty","isNotPresent","isEmpty","Modal","Body","NoData","description","title","ref","category","categoryIndex","items","shouldShowCategoryDivider","item","nameContent","name","body","filteredBodyContent","onClick","Typography","component","lineHeight","weight","Tag","size","type","humanize","id","Spinner","ModalFooter","enableAdvancedSearch","shortcuts","label","isVisible","Up","Down","Footer","prop","ModalHeader","withT","onSearch","onGoToAdvanced","Header","Search","nakedInput","autoComplete","placeholder","suffix","Button","FinderModal","_ref$enableAdvancedSe","isFetching","isOpen","_ref$setIsOpen","setIsOpen","setSearchTerm","_ref$onGoToAdvanced","props","mutables","focusIndex","onFocusChange","offset","container","nodes","querySelectorAll","targetNode","focus","useHotkeys","event","preventDefault","code","mode","enabled","closeButton","backdropClassName"],"mappings":"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"}
@@ -294,7 +294,7 @@ var ModalHeader = reactUtils.withT(function (_ref) {
294
294
  });
295
295
  });
296
296
 
297
- var _excluded = ["enableAdvancedSearch", "data", "isFetching", "isOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
297
+ var _excluded = ["enableAdvancedSearch", "data", "isFetching", "isOpen", "setIsOpen", "searchTerm", "setSearchTerm", "onClose", "onGoToAdvanced", "onLoadMore", "hasMore", "isFetchingMore"];
298
298
  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; }
299
299
  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; }
300
300
  var FinderModal = function FinderModal(_ref) {
@@ -303,6 +303,8 @@ var FinderModal = function FinderModal(_ref) {
303
303
  data = _ref.data,
304
304
  isFetching = _ref.isFetching,
305
305
  isOpen = _ref.isOpen,
306
+ _ref$setIsOpen = _ref.setIsOpen,
307
+ setIsOpen = _ref$setIsOpen === void 0 ? neetoCist.noop : _ref$setIsOpen,
306
308
  searchTerm = _ref.searchTerm,
307
309
  setSearchTerm = _ref.setSearchTerm,
308
310
  onClose = _ref.onClose,
@@ -338,6 +340,17 @@ var FinderModal = function FinderModal(_ref) {
338
340
  mode: "global",
339
341
  enabled: isOpen && enableAdvancedSearch
340
342
  });
343
+ useHotkeys("mod+k", function () {
344
+ return setIsOpen(true);
345
+ }, {
346
+ mode: "global"
347
+ });
348
+ useHotkeys("esc", function () {
349
+ return setIsOpen(false);
350
+ }, {
351
+ mode: "global",
352
+ enabled: isOpen
353
+ });
341
354
  return /*#__PURE__*/jsxRuntime.jsxs(Modal, _objectSpread(_objectSpread({
342
355
  isOpen: isOpen,
343
356
  onClose: onClose,
@@ -1 +1 @@
1
- {"version":3,"file":"FinderModal.js","sources":["../../src/components/FinderModal/Link.jsx","../../src/components/FinderModal/utils.jsx","../../src/components/FinderModal/Body.jsx","../../src/components/FinderModal/Footer.jsx","../../src/components/FinderModal/Header.jsx","../../src/components/FinderModal/index.jsx"],"sourcesContent":["import { Link as RRDLink } from \"react-router-dom\";\n\nconst Link = ({ to, children, ...rest }) => {\n const url = new URL(to);\n url.host = \"\";\n\n return (\n <RRDLink {...rest} to={`${url.pathname}${url.search}`}>\n {children}\n </RRDLink>\n );\n};\n\nexport default Link;\n","import React from \"react\";\n\nexport const minMax = (number, max = Number.POSITIVE_INFINITY, min = 0) =>\n Math.min(max, Math.max(min, number));\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 <span className=\"neeto-molecules-finder-matched-tag\" key={index}>\n {part}\n </span>\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\nexport const flattenData = data => {\n if (!data) return [];\n\n if (Array.isArray(data)) return data;\n\n const result = [];\n Object.keys(data).forEach(key => {\n data[key].forEach(item => {\n result.push({ ...item, category: key });\n });\n });\n\n return result;\n};\n\nexport const createStylePalette = values => {\n const assignedStyles = {};\n let styleIndex = 0;\n\n return key => {\n if (assignedStyles[key]) return assignedStyles[key];\n const style = values[styleIndex];\n styleIndex = (styleIndex + 1) % values.length;\n assignedStyles[key] = style;\n\n return style;\n };\n};\n","import { useEffect, useRef } from \"react\";\n\nimport { humanize, isNotEmpty, isNotPresent, noop } from \"neetocist\";\nimport { Modal, Typography, NoData, Spinner, Tag } from \"neetoui\";\nimport { isEmpty } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Link from \"./Link\";\nimport {\n htmlToText,\n highlightMatch,\n filterAndHighlightContent,\n createStylePalette,\n} from \"./utils\";\n\nconst getStyle = createStylePalette([\n \"primary\",\n \"info\",\n \"success\",\n \"secondary\",\n \"warning\",\n]);\n\nconst ModalBody = ({\n containerRef,\n data,\n onClose,\n loading,\n searchTerm,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n}) => {\n const { t } = useTranslation();\n const sentinelRef = useRef(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinel.closest(\".neeto-molecules-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(sentinel);\n\n return () => observer.disconnect();\n }, [isPaginationEnabled, hasMore, isFetchingMore]);\n\n const categoryGroups = Object.keys(data).filter(key => isNotEmpty(data[key]));\n const isDataEmpty = isNotPresent(data) || isEmpty(categoryGroups);\n\n if (isDataEmpty && !loading) {\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body flex h-96 items-center justify-center overflow-y-auto px-3 py-5\">\n <NoData\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </Modal.Body>\n );\n }\n\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body h-96 overflow-y-auto px-3 py-4\">\n <div className=\"flex flex-col\" ref={containerRef}>\n {categoryGroups.map((category, categoryIndex) => {\n const items = data[category];\n const shouldShowCategoryDivider =\n categoryIndex < categoryGroups.length - 1;\n\n return (\n <div key={category}>\n {items.map(item => {\n const nameContent = htmlToText(item.name);\n const bodyContent = htmlToText(item.body);\n\n const filteredBodyContent = filterAndHighlightContent(\n bodyContent,\n searchTerm\n );\n\n return (\n <Link\n className=\"neeto-molecules-search-result-item hover:neeto-ui-bg-gray-100 focus:neeto-ui-bg-gray-100 neeto-ui-rounded-lg flex w-full cursor-pointer items-center gap-2 px-3 py-2.5 text-xs transition-all duration-300\"\n key={`${category}-${item.id}`}\n to={item.url}\n onClick={onClose}\n >\n <div className=\"line-clamp-1 flex flex-col gap-1\">\n <div className=\"flex\">\n {nameContent && (\n <Typography\n className=\"neeto-ui-text-black inline-block\"\n component=\"span\"\n lineHeight=\"snug\"\n weight=\"semibold\"\n >\n {highlightMatch(nameContent, searchTerm)}\n {category && (\n <Tag\n className=\"ml-2 inline-block align-middle\"\n size=\"small\"\n style={getStyle(category)}\n type=\"solid\"\n >\n {humanize(category)}\n </Tag>\n )}\n </Typography>\n )}\n </div>\n {bodyContent && (\n <Typography className=\"neeto-ui-text-gray-600 truncate text-xs\">\n {filteredBodyContent || bodyContent}\n </Typography>\n )}\n </div>\n </Link>\n );\n })}\n {shouldShowCategoryDivider && (\n <hr className=\"neeto-ui-border-gray-300 mx-3 my-3 border-t\" />\n )}\n </div>\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={sentinelRef}\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 </div>\n </Modal.Body>\n );\n};\n\nexport default ModalBody;\n","import { Down, Up } from \"neetoicons\";\nimport { Modal, Typography } from \"neetoui\";\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 <Up className=\"neeto-ui-text-gray-600\" key=\"up\" size={12} />,\n <Down className=\"neeto-ui-text-gray-600\" 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 <Modal.Footer className=\"neeto-ui-border-gray-300 neeto-molecules-finder-modal__footer border-t px-6 py-4\">\n <div className=\"neeto-ui-text-xxs flex items-center gap-4\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n <Typography\n className=\"neeto-ui-text-gray-600\"\n component=\"span\"\n style=\"nano\"\n >\n {label}\n </Typography>\n {keys.map((key, index) => (\n <Typography\n className=\"neeto-ui-bg-gray-200 neeto-ui-rounded-sm neeto-ui-text-gray-600 px-1.5 py-1\"\n component=\"span\"\n key={index}\n style=\"nano\"\n >\n {key}\n </Typography>\n ))}\n </div>\n ))}\n </div>\n </Modal.Footer>\n );\n};\n\nexport default ModalFooter;\n","import { withT } from \"neetocommons/react-utils\";\nimport { Button, Modal, Spinner } from \"neetoui\";\n\nimport Search from \"components/Search\";\n\nconst ModalHeader = withT(\n ({ t, enableAdvancedSearch, onSearch, onGoToAdvanced, loading }) => (\n <Modal.Header className=\"neeto-molecules-finder-modal__header neeto-ui-border-gray-300 border-b px-0 py-0\">\n <Search\n {...{ onSearch }}\n nakedInput\n autoComplete=\"off\"\n className=\"neeto-molecules-finder-modal__search px-6 py-3\"\n name=\"term\"\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n suffix={\n <div className=\"ms-3 flex items-center\">\n <div className=\"h-4 w-4 flex-shrink-0\">\n {loading && <Spinner size=\"small\" />}\n </div>\n {enableAdvancedSearch && (\n <Button\n className=\"ms-3 whitespace-nowrap\"\n label={t(\"neetoMolecules.finderModal.advancedSearch\")}\n size=\"small\"\n style=\"tertiary\"\n onClick={onGoToAdvanced}\n />\n )}\n </div>\n }\n />\n </Modal.Header>\n )\n);\n\nexport default ModalHeader;\n","import { useRef } from \"react\";\n\nimport { noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport { Modal } from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport ModalBody from \"./Body\";\nimport \"./finder-modal.scss\";\nimport ModalFooter from \"./Footer\";\nimport ModalHeader from \"./Header\";\nimport { minMax } from \"./utils\";\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,\n isFetchingMore,\n ...props\n}) => {\n const containerRef = useRef();\n const mutables = useRef({ focusIndex: -1 }).current;\n\n const onFocusChange = offset => {\n const container = containerRef.current;\n if (!container) return;\n\n const nodes = container.querySelectorAll(\n \"a.neeto-molecules-search-result-item\"\n );\n\n if (isEmpty(nodes)) return;\n\n mutables.focusIndex = minMax(\n mutables.focusIndex + offset,\n nodes.length - 1\n );\n\n const targetNode = nodes[mutables.focusIndex];\n if (targetNode) {\n targetNode.focus();\n }\n };\n\n useHotkeys(\n [\"up\", \"down\"],\n event => {\n event.preventDefault();\n if (event.code === \"ArrowUp\") onFocusChange(-1);\n else if (event.code === \"ArrowDown\") onFocusChange(1);\n },\n { mode: \"global\", enabled: isOpen }\n );\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n\n return (\n <Modal\n {...{ isOpen, onClose }}\n closeButton={false}\n {...props}\n backdropClassName=\"neeto-molecules-finder-modal-backdrop py-10 px-4\"\n className=\"neeto-molecules-finder-modal\"\n >\n <ModalHeader\n {...{ enableAdvancedSearch, onGoToAdvanced }}\n loading={isFetching}\n onSearch={setSearchTerm}\n />\n <ModalBody\n {...{\n containerRef,\n data,\n hasMore,\n isFetchingMore,\n onClose,\n onLoadMore,\n searchTerm,\n }}\n loading={isFetching}\n />\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Modal>\n );\n};\n\nFinderModal.propTypes = {\n /*\n Boolean to indicate decide whether to show advanced search button or not\n */\n enableAdvancedSearch: PropTypes.bool,\n /*\n Data to be displayed in the modal\n */\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 /*\n Boolean to indicate whether data is being fetched or not\n */\n isFetching: PropTypes.bool,\n /*\n Boolean to indicate whether modal is open or not\n */\n isOpen: PropTypes.bool,\n /*\n Term used for search\n */\n searchTerm: PropTypes.string,\n /*\n Function to set search term\n */\n setSearchTerm: PropTypes.func,\n /*\n Function to close the modal\n */\n onClose: PropTypes.func,\n /*\n Function to execute when user clicks on advanced search button\n */\n onGoToAdvanced: PropTypes.func,\n /*\n Function called when the user scrolls near the bottom of the results.\n When provided together with hasMore, enables scroll-based pagination.\n */\n onLoadMore: PropTypes.func,\n /*\n Boolean indicating whether more pages are available to fetch\n */\n hasMore: PropTypes.bool,\n /*\n Boolean indicating whether the next page is currently being fetched\n */\n isFetchingMore: PropTypes.bool,\n};\n\nexport default FinderModal;\n"],"names":["Link","_ref","to","children","rest","_objectWithoutProperties","_excluded","url","URL","host","_jsx","RRDLink","_objectSpread","concat","pathname","search","minMax","number","max","arguments","length","undefined","Number","POSITIVE_INFINITY","min","Math","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","split","map","part","index","toLowerCase","className","filterAndHighlightContent","bodyContent","filter","line","trim","includes","_jsxs","React","Fragment","createStylePalette","values","assignedStyles","styleIndex","key","style","getStyle","ModalBody","containerRef","data","onClose","loading","onLoadMore","_ref$hasMore","hasMore","_ref$isFetchingMore","isFetchingMore","_useTranslation","useTranslation","t","sentinelRef","useRef","onLoadMoreRef","noop","useEffect","current","isPaginationEnabled","Boolean","sentinel","root","closest","observer","IntersectionObserver","_ref2","_ref3","_slicedToArray","entry","isIntersecting","rootMargin","observe","disconnect","categoryGroups","Object","keys","isNotEmpty","isDataEmpty","isNotPresent","isEmpty","Modal","Body","NoData","description","title","ref","category","categoryIndex","items","shouldShowCategoryDivider","item","nameContent","name","body","filteredBodyContent","onClick","Typography","component","lineHeight","weight","Tag","size","type","humanize","id","Spinner","ModalFooter","enableAdvancedSearch","shortcuts","label","isVisible","Up","Down","Footer","prop","ModalHeader","withT","onSearch","onGoToAdvanced","Header","Search","nakedInput","autoComplete","placeholder","suffix","Button","FinderModal","_ref$enableAdvancedSe","isFetching","isOpen","setSearchTerm","_ref$onGoToAdvanced","props","mutables","focusIndex","onFocusChange","offset","container","nodes","querySelectorAll","targetNode","focus","useHotkeys","event","preventDefault","code","mode","enabled","closeButton","backdropClassName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,IAAI,GAAG,SAAPA,IAAIA,CAAAC,IAAA,EAAkC;AAAA,EAAA,IAA5BC,EAAE,GAAAD,IAAA,CAAFC,EAAE;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;AAAKC,IAAAA,IAAI,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,WAAA,CAAA;AACnC,EAAA,IAAMC,GAAG,GAAG,IAAIC,GAAG,CAACN,EAAE,CAAC;EACvBK,GAAG,CAACE,IAAI,GAAG,EAAE;EAEb,oBACEC,cAAA,CAACC,mBAAO,EAAAC,eAAA,CAAAA,eAAA,KAAKR,IAAI,CAAA,EAAA,EAAA,EAAA;AAAEF,IAAAA,EAAE,EAAA,EAAA,CAAAW,MAAA,CAAKN,GAAG,CAACO,QAAQ,CAAA,CAAAD,MAAA,CAAGN,GAAG,CAACQ,MAAM,CAAG;AAAAZ,IAAAA,QAAA,EACnDA;AAAQ,GAAA,CACF,CAAC;AAEd,CAAC;;ACTM,IAAMa,MAAM,GAAG,SAATA,MAAMA,CAAIC,MAAM,EAAA;AAAA,EAAA,IAAEC,GAAG,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAGG,MAAM,CAACC,iBAAiB;AAAA,EAAA,IAAEC,GAAG,GAAAL,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC;AAAA,EAAA,OACpEM,IAAI,CAACD,GAAG,CAACN,GAAG,EAAEO,IAAI,CAACP,GAAG,CAACM,GAAG,EAAEP,MAAM,CAAC,CAAC;AAAA,CAAA;AAE/B,IAAMS,UAAU,GAAG,SAAbA,UAAUA,CAAGC,IAAI,EAAI;AAChC,EAAA,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;AAEtB,EAAA,IAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EACzCF,GAAG,CAACG,SAAS,GAAGJ,IAAI;EAEpB,OAAOC,GAAG,CAACI,WAAW,IAAIJ,GAAG,CAACK,SAAS,IAAI,EAAE;AAC/C,CAAC;AAEM,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAI,EAAEC,UAAU,EAAK;AAClD,EAAA,IAAI,CAACA,UAAU,EAAE,OAAOD,IAAI;EAE5B,IAAME,KAAK,GAAG,IAAIC,MAAM,CAAA,GAAA,CAAAzB,MAAA,CAAKuB,UAAU,EAAA,GAAA,CAAA,EAAK,IAAI,CAAC;AAEjD,EAAA,OAAOD,IAAI,CAACI,KAAK,CAACF,KAAK,CAAC,CAACG,GAAG,CAAC,UAACC,IAAI,EAAEC,KAAK,EAAA;AAAA,IAAA,OACvC,CAAAD,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJA,IAAI,CAAEE,WAAW,EAAE,MAAKP,UAAU,CAACO,WAAW,EAAE,gBAC9CjC,cAAA,CAAA,MAAA,EAAA;AAAMkC,MAAAA,SAAS,EAAC,oCAAoC;AAAAzC,MAAAA,QAAA,EACjDsC;KAAI,EADmDC,KAEpD,CAAC,GAEPD,IACD;AAAA,EAAA,CACH,CAAC;AACH,CAAC;AAEM,IAAMI,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAIC,WAAW,EAAEV,UAAU,EAAK;AACpE,EAAA,IAAI,CAACA,UAAU,EAAE,OAAOU,WAAW;AAEnC,EAAA,IAAI,CAACA,WAAW,EAAE,OAAO,IAAI;EAE7B,OAAOA,WAAW,CACfP,KAAK,CAAC,qBAAqB,CAAC,CAC5BQ,MAAM,CAAC,UAAAC,IAAI,EAAA;AAAA,IAAA,OAAIA,IAAI,CAACC,IAAI,EAAE;AAAA,EAAA,CAAA,CAAC,CAC3BF,MAAM,CAAC,UAAAC,IAAI,EAAA;AAAA,IAAA,OAAIA,IAAI,CAACL,WAAW,EAAE,CAACO,QAAQ,CAACd,UAAU,CAACO,WAAW,EAAE,CAAC;AAAA,EAAA,CAAA,CAAC,CACrEH,GAAG,CAAC,UAACQ,IAAI,EAAEN,KAAK,EAAA;AAAA,IAAA,oBACfS,eAAA,CAACC,KAAK,CAACC,QAAQ,EAAA;MAAAlD,QAAA,EAAA,CACZ+B,cAAc,CAACc,IAAI,EAAEZ,UAAU,CAAC,eACjC1B,cAAA,CAAA,IAAA,EAAA,EAAK,CAAC;AAAA,KAAA,EAFagC,KAGL,CAAC;AAAA,EAAA,CAClB,CAAC;AACN,CAAC;AAiBM,IAAMY,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAGC,MAAM,EAAI;EAC1C,IAAMC,cAAc,GAAG,EAAE;EACzB,IAAIC,UAAU,GAAG,CAAC;EAElB,OAAO,UAAAC,GAAG,EAAI;IACZ,IAAIF,cAAc,CAACE,GAAG,CAAC,EAAE,OAAOF,cAAc,CAACE,GAAG,CAAC;AACnD,IAAA,IAAMC,KAAK,GAAGJ,MAAM,CAACE,UAAU,CAAC;IAChCA,UAAU,GAAG,CAACA,UAAU,GAAG,CAAC,IAAIF,MAAM,CAACnC,MAAM;AAC7CoC,IAAAA,cAAc,CAACE,GAAG,CAAC,GAAGC,KAAK;AAE3B,IAAA,OAAOA,KAAK;EACd,CAAC;AACH,CAAC;;AC3DD,IAAMC,QAAQ,GAAGN,kBAAkB,CAAC,CAClC,SAAS,EACT,MAAM,EACN,SAAS,EACT,WAAW,EACX,SAAS,CACV,CAAC;AAEF,IAAMO,SAAS,GAAG,SAAZA,SAASA,CAAA5D,IAAA,EAST;AAAA,EAAA,IARJ6D,YAAY,GAAA7D,IAAA,CAAZ6D,YAAY;IACZC,IAAI,GAAA9D,IAAA,CAAJ8D,IAAI;IACJC,OAAO,GAAA/D,IAAA,CAAP+D,OAAO;IACPC,OAAO,GAAAhE,IAAA,CAAPgE,OAAO;IACP7B,UAAU,GAAAnC,IAAA,CAAVmC,UAAU;IACV8B,UAAU,GAAAjE,IAAA,CAAViE,UAAU;IAAAC,YAAA,GAAAlE,IAAA,CACVmE,OAAO;AAAPA,IAAAA,OAAO,GAAAD,YAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,YAAA;IAAAE,mBAAA,GAAApE,IAAA,CACfqE,cAAc;AAAdA,IAAAA,cAAc,GAAAD,mBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,mBAAA;AAEtB,EAAA,IAAAE,eAAA,GAAcC,2BAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AACT,EAAA,IAAMC,WAAW,GAAGC,YAAM,CAAC,IAAI,CAAC;AAChC,EAAA,IAAMC,aAAa,GAAGD,YAAM,CAACT,UAAU,IAAIW,cAAI,CAAC;AAEhDC,EAAAA,eAAS,CAAC,YAAM;AACdF,IAAAA,aAAa,CAACG,OAAO,GAAGb,UAAU,IAAIW,cAAI;AAC5C,EAAA,CAAC,EAAE,CAACX,UAAU,CAAC,CAAC;AAEhB,EAAA,IAAMc,mBAAmB,GAAGC,OAAO,CAACf,UAAU,CAAC;AAE/CY,EAAAA,eAAS,CAAC,YAAM;AACd,IAAA,IAAMI,QAAQ,GAAGR,WAAW,CAACK,OAAO;IACpC,IAAI,CAACG,QAAQ,IAAI,CAACF,mBAAmB,IAAI,CAACZ,OAAO,IAAIE,cAAc,EAAE;AACnE,MAAA,OAAOjD,SAAS;AAClB,IAAA;AAEA,IAAA,IAAM8D,IAAI,GAAGD,QAAQ,CAACE,OAAO,CAAC,qCAAqC,CAAC;AACpE,IAAA,IAAMC,QAAQ,GAAG,IAAIC,oBAAoB,CACvC,UAAAC,KAAA,EAAa;AAAA,MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,KAAA,EAAA,CAAA,CAAA;AAAXG,QAAAA,KAAK,GAAAF,KAAA,CAAA,CAAA,CAAA;MACL,IAAIE,KAAK,CAACC,cAAc,EAAEf,aAAa,CAACG,OAAO,EAAE;AACnD,IAAA,CAAC,EACD;AAAEI,MAAAA,IAAI,EAAJA,IAAI;AAAES,MAAAA,UAAU,EAAE;AAAQ,KAC9B,CAAC;AACDP,IAAAA,QAAQ,CAACQ,OAAO,CAACX,QAAQ,CAAC;IAE1B,OAAO,YAAA;AAAA,MAAA,OAAMG,QAAQ,CAACS,UAAU,EAAE;AAAA,IAAA,CAAA;EACpC,CAAC,EAAE,CAACd,mBAAmB,EAAEZ,OAAO,EAAEE,cAAc,CAAC,CAAC;AAElD,EAAA,IAAMyB,cAAc,GAAGC,MAAM,CAACC,IAAI,CAAClC,IAAI,CAAC,CAAChB,MAAM,CAAC,UAAAW,GAAG,EAAA;AAAA,IAAA,OAAIwC,oBAAU,CAACnC,IAAI,CAACL,GAAG,CAAC,CAAC;EAAA,CAAA,CAAC;EAC7E,IAAMyC,WAAW,GAAGC,sBAAY,CAACrC,IAAI,CAAC,IAAIsC,aAAO,CAACN,cAAc,CAAC;AAEjE,EAAA,IAAII,WAAW,IAAI,CAAClC,OAAO,EAAE;AAC3B,IAAA,oBACEvD,cAAA,CAAC4F,KAAK,CAACC,IAAI,EAAA;AAAC3D,MAAAA,SAAS,EAAC,oGAAoG;MAAAzC,QAAA,eACxHO,cAAA,CAAC8F,MAAM,EAAA;AACLC,QAAAA,WAAW,EAAEhC,CAAC,CAAC,uCAAuC,CAAE;QACxDiC,KAAK,EAAEjC,CAAC,CAAC,wCAAwC;OAClD;AAAC,KACQ,CAAC;AAEjB,EAAA;AAEA,EAAA,oBACE/D,cAAA,CAAC4F,KAAK,CAACC,IAAI,EAAA;AAAC3D,IAAAA,SAAS,EAAC,mEAAmE;AAAAzC,IAAAA,QAAA,eACvFgD,eAAA,CAAA,KAAA,EAAA;AAAKP,MAAAA,SAAS,EAAC,eAAe;AAAC+D,MAAAA,GAAG,EAAE7C,YAAa;MAAA3D,QAAA,EAAA,CAC9C4F,cAAc,CAACvD,GAAG,CAAC,UAACoE,QAAQ,EAAEC,aAAa,EAAK;AAC/C,QAAA,IAAMC,KAAK,GAAG/C,IAAI,CAAC6C,QAAQ,CAAC;QAC5B,IAAMG,yBAAyB,GAC7BF,aAAa,GAAGd,cAAc,CAAC3E,MAAM,GAAG,CAAC;AAE3C,QAAA,oBACE+B,eAAA,CAAA,KAAA,EAAA;AAAAhD,UAAAA,QAAA,GACG2G,KAAK,CAACtE,GAAG,CAAC,UAAAwE,IAAI,EAAI;AACjB,YAAA,IAAMC,WAAW,GAAGvF,UAAU,CAACsF,IAAI,CAACE,IAAI,CAAC;AACzC,YAAA,IAAMpE,WAAW,GAAGpB,UAAU,CAACsF,IAAI,CAACG,IAAI,CAAC;AAEzC,YAAA,IAAMC,mBAAmB,GAAGvE,yBAAyB,CACnDC,WAAW,EACXV,UACF,CAAC;YAED,oBACE1B,cAAA,CAACV,IAAI,EAAA;AACH4C,cAAAA,SAAS,EAAC,4MAA4M;cAEtN1C,EAAE,EAAE8G,IAAI,CAACzG,GAAI;AACb8G,cAAAA,OAAO,EAAErD,OAAQ;AAAA7D,cAAAA,QAAA,eAEjBgD,eAAA,CAAA,KAAA,EAAA;AAAKP,gBAAAA,SAAS,EAAC,kCAAkC;AAAAzC,gBAAAA,QAAA,gBAC/CO,cAAA,CAAA,KAAA,EAAA;AAAKkC,kBAAAA,SAAS,EAAC,MAAM;AAAAzC,kBAAAA,QAAA,EAClB8G,WAAW,iBACV9D,eAAA,CAACmE,UAAU,EAAA;AACT1E,oBAAAA,SAAS,EAAC,kCAAkC;AAC5C2E,oBAAAA,SAAS,EAAC,MAAM;AAChBC,oBAAAA,UAAU,EAAC,MAAM;AACjBC,oBAAAA,MAAM,EAAC,UAAU;AAAAtH,oBAAAA,QAAA,EAAA,CAEhB+B,cAAc,CAAC+E,WAAW,EAAE7E,UAAU,CAAC,EACvCwE,QAAQ,iBACPlG,cAAA,CAACgH,GAAG,EAAA;AACF9E,sBAAAA,SAAS,EAAC,gCAAgC;AAC1C+E,sBAAAA,IAAI,EAAC,OAAO;AACZhE,sBAAAA,KAAK,EAAEC,QAAQ,CAACgD,QAAQ,CAAE;AAC1BgB,sBAAAA,IAAI,EAAC,OAAO;sBAAAzH,QAAA,EAEX0H,kBAAQ,CAACjB,QAAQ;AAAC,qBAChB,CACN;mBACS;AACb,iBACE,CAAC,EACL9D,WAAW,iBACVpC,cAAA,CAAC4G,UAAU,EAAA;AAAC1E,kBAAAA,SAAS,EAAC,yCAAyC;kBAAAzC,QAAA,EAC5DiH,mBAAmB,IAAItE;AAAW,iBACzB,CACb;eACE;aAAC,EAAA,EAAA,CAAAjC,MAAA,CAhCE+F,QAAQ,EAAA,GAAA,CAAA,CAAA/F,MAAA,CAAImG,IAAI,CAACc,EAAE,CAiCvB,CAAC;AAEX,UAAA,CAAC,CAAC,EACDf,yBAAyB,iBACxBrG,cAAA,CAAA,IAAA,EAAA;AAAIkC,YAAAA,SAAS,EAAC;AAA6C,WAAE,CAC9D;AAAA,SAAA,EAnDOgE,QAoDL,CAAC;AAEV,MAAA,CAAC,CAAC,EACD1C,UAAU,IAAIE,OAAO,iBACpB1D,cAAA,CAAA,KAAA,EAAA;AACE,QAAA,aAAA,EAAY,MAAM;AAClBkC,QAAAA,SAAS,EAAC,aAAa;AACvB,QAAA,aAAA,EAAY,uCAAuC;AACnD+D,QAAAA,GAAG,EAAEjC;AAAY,OAClB,CACF,EACAJ,cAAc,iBACb5D,cAAA,CAAA,KAAA,EAAA;AACEkC,QAAAA,SAAS,EAAC,uCAAuC;AACjD,QAAA,aAAA,EAAY,2CAA2C;QAAAzC,QAAA,eAEvDO,cAAA,CAACqH,OAAO,EAAA;AAACJ,UAAAA,IAAI,EAAC;SAAS;AAAC,OACrB,CACN;KACE;AAAC,GACI,CAAC;AAEjB,CAAC;;;;;ACzJD,IAAMK,WAAW,GAAG,SAAdA,WAAWA,CAAA/H,IAAA,EAAiC;AAAA,EAAA,IAA3BgI,oBAAoB,GAAAhI,IAAA,CAApBgI,oBAAoB;AACzC,EAAA,IAAA1D,eAAA,GAAcC,2BAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAMyD,SAAS,GAAG,CAChB;AACEC,IAAAA,KAAK,EAAE1D,CAAC,CAAC,2CAA2C,CAAC;AACrDwB,IAAAA,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC5BmC,IAAAA,SAAS,EAAEH;AACb,GAAC,EACD;AACEE,IAAAA,KAAK,EAAE1D,CAAC,CAAC,oCAAoC,CAAC;IAC9CwB,IAAI,EAAE,CAAC,QAAQ,CAAC;AAChBmC,IAAAA,SAAS,EAAE;AACb,GAAC,EACD;AACED,IAAAA,KAAK,EAAE1D,CAAC,CAAC,oCAAoC,CAAC;AAC9CwB,IAAAA,IAAI,EAAE,cACJvF,cAAA,CAAC2H,EAAE,EAAA;AAACzF,MAAAA,SAAS,EAAC,wBAAwB;AAAU+E,MAAAA,IAAI,EAAE;AAAG,KAAA,EAAd,IAAgB,CAAC,eAC5DjH,cAAA,CAAC4H,IAAI,EAAA;AAAC1F,MAAAA,SAAS,EAAC,wBAAwB;AAAY+E,MAAAA,IAAI,EAAE;KAAG,EAAhB,MAAkB,CAAC,CACjE;AACDS,IAAAA,SAAS,EAAE;AACb,GAAC,EACD;AACED,IAAAA,KAAK,EAAE1D,CAAC,CAAC,qCAAqC,CAAC;IAC/CwB,IAAI,EAAE,CAAC,KAAK,CAAC;AACbmC,IAAAA,SAAS,EAAE;AACb,GAAC,CACF;AAED,EAAA,oBACE1H,cAAA,CAAC4F,KAAK,CAACiC,MAAM,EAAA;AAAC3F,IAAAA,SAAS,EAAC,kFAAkF;AAAAzC,IAAAA,QAAA,eACxGO,cAAA,CAAA,KAAA,EAAA;AAAKkC,MAAAA,SAAS,EAAC,2CAA2C;AAAAzC,MAAAA,QAAA,EACvD+H,SAAS,CAACnF,MAAM,CAACyF,UAAI,CAAC,WAAW,CAAC,CAAC,CAAChG,GAAG,CAAC,UAAA+C,KAAA,EAAkB7C,KAAK,EAAA;AAAA,QAAA,IAApByF,KAAK,GAAA5C,KAAA,CAAL4C,KAAK;UAAElC,IAAI,GAAAV,KAAA,CAAJU,IAAI;AAAA,QAAA,oBACrD9C,eAAA,CAAA,KAAA,EAAA;AAAKP,UAAAA,SAAS,EAAC,yBAAyB;UAAAzC,QAAA,EAAA,cACtCO,cAAA,CAAC4G,UAAU,EAAA;AACT1E,YAAAA,SAAS,EAAC,wBAAwB;AAClC2E,YAAAA,SAAS,EAAC,MAAM;AAChB5D,YAAAA,KAAK,EAAC,MAAM;AAAAxD,YAAAA,QAAA,EAEXgI;WACS,CAAC,EACZlC,IAAI,CAACzD,GAAG,CAAC,UAACkB,GAAG,EAAEhB,KAAK,EAAA;YAAA,oBACnBhC,cAAA,CAAC4G,UAAU,EAAA;AACT1E,cAAAA,SAAS,EAAC,6EAA6E;AACvF2E,cAAAA,SAAS,EAAC,MAAM;AAEhB5D,cAAAA,KAAK,EAAC,MAAM;AAAAxD,cAAAA,QAAA,EAEXuD;AAAG,aAAA,EAHChB,KAIK,CAAC;AAAA,UAAA,CACd,CAAC;AAAA,SAAA,EAjB0CA,KAkBzC,CAAC;MAAA,CACP;KACE;AAAC,GACM,CAAC;AAEnB,CAAC;;ACxDD,IAAM+F,WAAW,GAAGC,gBAAK,CACvB,UAAAzI,IAAA,EAAA;AAAA,EAAA,IAAGwE,CAAC,GAAAxE,IAAA,CAADwE,CAAC;IAAEwD,oBAAoB,GAAAhI,IAAA,CAApBgI,oBAAoB;IAAEU,QAAQ,GAAA1I,IAAA,CAAR0I,QAAQ;IAAEC,cAAc,GAAA3I,IAAA,CAAd2I,cAAc;IAAE3E,OAAO,GAAAhE,IAAA,CAAPgE,OAAO;AAAA,EAAA,oBAC3DvD,cAAA,CAAC4F,KAAK,CAACuC,MAAM,EAAA;AAACjG,IAAAA,SAAS,EAAC,kFAAkF;IAAAzC,QAAA,eACxGO,cAAA,CAACoI,MAAM,EAAA;AACCH,MAAAA,QAAQ,EAARA,QAAQ;MACdI,UAAU,EAAA,IAAA;AACVC,MAAAA,YAAY,EAAC,KAAK;AAClBpG,MAAAA,SAAS,EAAC,gDAAgD;AAC1DsE,MAAAA,IAAI,EAAC,MAAM;AACX+B,MAAAA,WAAW,EAAExE,CAAC,CAAC,sCAAsC,CAAE;AACvDyE,MAAAA,MAAM,eACJ/F,eAAA,CAAA,KAAA,EAAA;AAAKP,QAAAA,SAAS,EAAC,wBAAwB;AAAAzC,QAAAA,QAAA,gBACrCO,cAAA,CAAA,KAAA,EAAA;AAAKkC,UAAAA,SAAS,EAAC,uBAAuB;AAAAzC,UAAAA,QAAA,EACnC8D,OAAO,iBAAIvD,cAAA,CAACqH,OAAO,EAAA;AAACJ,YAAAA,IAAI,EAAC;WAAS;AAAC,SACjC,CAAC,EACLM,oBAAoB,iBACnBvH,cAAA,CAACyI,MAAM,EAAA;AACLvG,UAAAA,SAAS,EAAC,wBAAwB;AAClCuF,UAAAA,KAAK,EAAE1D,CAAC,CAAC,2CAA2C,CAAE;AACtDkD,UAAAA,IAAI,EAAC,OAAO;AACZhE,UAAAA,KAAK,EAAC,UAAU;AAChB0D,UAAAA,OAAO,EAAEuB;AAAe,SACzB,CACF;OACE;KAER;AAAC,GACU,CAAC;AAAA,CAEnB,CAAC;;;;;ACpBD,IAAMQ,WAAW,GAAG,SAAdA,WAAWA,CAAAnJ,IAAA,EAaX;AAAA,EAAA,IAAAoJ,qBAAA,GAAApJ,IAAA,CAZJgI,oBAAoB;AAApBA,IAAAA,oBAAoB,GAAAoB,qBAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,qBAAA;IAC3BtF,IAAI,GAAA9D,IAAA,CAAJ8D,IAAI;IACJuF,UAAU,GAAArJ,IAAA,CAAVqJ,UAAU;IACVC,MAAM,GAAAtJ,IAAA,CAANsJ,MAAM;IACNnH,UAAU,GAAAnC,IAAA,CAAVmC,UAAU;IACVoH,aAAa,GAAAvJ,IAAA,CAAbuJ,aAAa;IACbxF,OAAO,GAAA/D,IAAA,CAAP+D,OAAO;IAAAyF,mBAAA,GAAAxJ,IAAA,CACP2I,cAAc;AAAdA,IAAAA,cAAc,GAAAa,mBAAA,KAAA,MAAA,GAAG5E,cAAI,GAAA4E,mBAAA;IACrBvF,UAAU,GAAAjE,IAAA,CAAViE,UAAU;IACVE,OAAO,GAAAnE,IAAA,CAAPmE,OAAO;IACPE,cAAc,GAAArE,IAAA,CAAdqE,cAAc;AACXoF,IAAAA,KAAK,GAAArJ,wBAAA,CAAAJ,IAAA,EAAAK,SAAA,CAAA;AAER,EAAA,IAAMwD,YAAY,GAAGa,YAAM,EAAE;EAC7B,IAAMgF,QAAQ,GAAGhF,YAAM,CAAC;AAAEiF,IAAAA,UAAU,EAAE;GAAI,CAAC,CAAC7E,OAAO;AAEnD,EAAA,IAAM8E,aAAa,GAAG,SAAhBA,aAAaA,CAAGC,MAAM,EAAI;AAC9B,IAAA,IAAMC,SAAS,GAAGjG,YAAY,CAACiB,OAAO;IACtC,IAAI,CAACgF,SAAS,EAAE;AAEhB,IAAA,IAAMC,KAAK,GAAGD,SAAS,CAACE,gBAAgB,CACtC,sCACF,CAAC;AAED,IAAA,IAAI5D,aAAO,CAAC2D,KAAK,CAAC,EAAE;AAEpBL,IAAAA,QAAQ,CAACC,UAAU,GAAG5I,MAAM,CAC1B2I,QAAQ,CAACC,UAAU,GAAGE,MAAM,EAC5BE,KAAK,CAAC5I,MAAM,GAAG,CACjB,CAAC;AAED,IAAA,IAAM8I,UAAU,GAAGF,KAAK,CAACL,QAAQ,CAACC,UAAU,CAAC;AAC7C,IAAA,IAAIM,UAAU,EAAE;MACdA,UAAU,CAACC,KAAK,EAAE;AACpB,IAAA;EACF,CAAC;EAEDC,UAAU,CACR,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,UAAAC,KAAK,EAAI;IACPA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAID,KAAK,CAACE,IAAI,KAAK,SAAS,EAAEV,aAAa,CAAC,EAAE,CAAC,CAAC,KAC3C,IAAIQ,KAAK,CAACE,IAAI,KAAK,WAAW,EAAEV,aAAa,CAAC,CAAC,CAAC;AACvD,EAAA,CAAC,EACD;AAAEW,IAAAA,IAAI,EAAE,QAAQ;AAAEC,IAAAA,OAAO,EAAElB;AAAO,GACpC,CAAC;EAEDa,UAAU,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC,EAAExB,cAAc,EAAE;AAC1D4B,IAAAA,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAElB,MAAM,IAAItB;AACrB,GAAC,CAAC;AAEF,EAAA,oBACE9E,eAAA,CAACmD,KAAK,EAAA1F,aAAA,CAAAA,aAAA,CAAA;AACE2I,IAAAA,MAAM,EAANA,MAAM;AAAEvF,IAAAA,OAAO,EAAPA,OAAO;AACrB0G,IAAAA,WAAW,EAAE;AAAM,GAAA,EACfhB,KAAK,CAAA,EAAA,EAAA,EAAA;AACTiB,IAAAA,iBAAiB,EAAC,kDAAkD;AACpE/H,IAAAA,SAAS,EAAC,8BAA8B;IAAAzC,QAAA,EAAA,cAExCO,cAAA,CAAC+H,WAAW,EAAA;AACJR,MAAAA,oBAAoB,EAApBA,oBAAoB;AAAEW,MAAAA,cAAc,EAAdA,cAAc;AAC1C3E,MAAAA,OAAO,EAAEqF,UAAW;AACpBX,MAAAA,QAAQ,EAAEa;AAAc,KACzB,CAAC,eACF9I,cAAA,CAACmD,SAAS,EAAA;AAENC,MAAAA,YAAY,EAAZA,YAAY;AACZC,MAAAA,IAAI,EAAJA,IAAI;AACJK,MAAAA,OAAO,EAAPA,OAAO;AACPE,MAAAA,cAAc,EAAdA,cAAc;AACdN,MAAAA,OAAO,EAAPA,OAAO;AACPE,MAAAA,UAAU,EAAVA,UAAU;AACV9B,MAAAA,UAAU,EAAVA,UAAU;AAEZ6B,MAAAA,OAAO,EAAEqF;AAAW,KACrB,CAAC,eACF5I,cAAA,CAACsH,WAAW,EAAA;AAAOC,MAAAA,oBAAoB,EAApBA;AAAoB,KAAK,CAAC;AAAA,GAAA,CACxC,CAAC;AAEZ;;;;"}
1
+ {"version":3,"file":"FinderModal.js","sources":["../../src/components/FinderModal/Link.jsx","../../src/components/FinderModal/utils.jsx","../../src/components/FinderModal/Body.jsx","../../src/components/FinderModal/Footer.jsx","../../src/components/FinderModal/Header.jsx","../../src/components/FinderModal/index.jsx"],"sourcesContent":["import { Link as RRDLink } from \"react-router-dom\";\n\nconst Link = ({ to, children, ...rest }) => {\n const url = new URL(to);\n url.host = \"\";\n\n return (\n <RRDLink {...rest} to={`${url.pathname}${url.search}`}>\n {children}\n </RRDLink>\n );\n};\n\nexport default Link;\n","import React from \"react\";\n\nexport const minMax = (number, max = Number.POSITIVE_INFINITY, min = 0) =>\n Math.min(max, Math.max(min, number));\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 <span className=\"neeto-molecules-finder-matched-tag\" key={index}>\n {part}\n </span>\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\nexport const flattenData = data => {\n if (!data) return [];\n\n if (Array.isArray(data)) return data;\n\n const result = [];\n Object.keys(data).forEach(key => {\n data[key].forEach(item => {\n result.push({ ...item, category: key });\n });\n });\n\n return result;\n};\n\nexport const createStylePalette = values => {\n const assignedStyles = {};\n let styleIndex = 0;\n\n return key => {\n if (assignedStyles[key]) return assignedStyles[key];\n const style = values[styleIndex];\n styleIndex = (styleIndex + 1) % values.length;\n assignedStyles[key] = style;\n\n return style;\n };\n};\n","import { useEffect, useRef } from \"react\";\n\nimport { humanize, isNotEmpty, isNotPresent, noop } from \"neetocist\";\nimport { Modal, Typography, NoData, Spinner, Tag } from \"neetoui\";\nimport { isEmpty } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Link from \"./Link\";\nimport {\n htmlToText,\n highlightMatch,\n filterAndHighlightContent,\n createStylePalette,\n} from \"./utils\";\n\nconst getStyle = createStylePalette([\n \"primary\",\n \"info\",\n \"success\",\n \"secondary\",\n \"warning\",\n]);\n\nconst ModalBody = ({\n containerRef,\n data,\n onClose,\n loading,\n searchTerm,\n onLoadMore,\n hasMore = false,\n isFetchingMore = false,\n}) => {\n const { t } = useTranslation();\n const sentinelRef = useRef(null);\n const onLoadMoreRef = useRef(onLoadMore || noop);\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore || noop;\n }, [onLoadMore]);\n\n const isPaginationEnabled = Boolean(onLoadMore);\n\n useEffect(() => {\n const sentinel = sentinelRef.current;\n if (!sentinel || !isPaginationEnabled || !hasMore || isFetchingMore) {\n return undefined;\n }\n\n const root = sentinel.closest(\".neeto-molecules-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(sentinel);\n\n return () => observer.disconnect();\n }, [isPaginationEnabled, hasMore, isFetchingMore]);\n\n const categoryGroups = Object.keys(data).filter(key => isNotEmpty(data[key]));\n const isDataEmpty = isNotPresent(data) || isEmpty(categoryGroups);\n\n if (isDataEmpty && !loading) {\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body flex h-96 items-center justify-center overflow-y-auto px-3 py-5\">\n <NoData\n description={t(\"neetoMolecules.finderModal.noDataDesc\")}\n title={t(\"neetoMolecules.finderModal.noDataTitle\")}\n />\n </Modal.Body>\n );\n }\n\n return (\n <Modal.Body className=\"neeto-molecules-finder-modal__body h-96 overflow-y-auto px-3 py-4\">\n <div className=\"flex flex-col\" ref={containerRef}>\n {categoryGroups.map((category, categoryIndex) => {\n const items = data[category];\n const shouldShowCategoryDivider =\n categoryIndex < categoryGroups.length - 1;\n\n return (\n <div key={category}>\n {items.map(item => {\n const nameContent = htmlToText(item.name);\n const bodyContent = htmlToText(item.body);\n\n const filteredBodyContent = filterAndHighlightContent(\n bodyContent,\n searchTerm\n );\n\n return (\n <Link\n className=\"neeto-molecules-search-result-item hover:neeto-ui-bg-gray-100 focus:neeto-ui-bg-gray-100 neeto-ui-rounded-lg flex w-full cursor-pointer items-center gap-2 px-3 py-2.5 text-xs transition-all duration-300\"\n key={`${category}-${item.id}`}\n to={item.url}\n onClick={onClose}\n >\n <div className=\"line-clamp-1 flex flex-col gap-1\">\n <div className=\"flex\">\n {nameContent && (\n <Typography\n className=\"neeto-ui-text-black inline-block\"\n component=\"span\"\n lineHeight=\"snug\"\n weight=\"semibold\"\n >\n {highlightMatch(nameContent, searchTerm)}\n {category && (\n <Tag\n className=\"ml-2 inline-block align-middle\"\n size=\"small\"\n style={getStyle(category)}\n type=\"solid\"\n >\n {humanize(category)}\n </Tag>\n )}\n </Typography>\n )}\n </div>\n {bodyContent && (\n <Typography className=\"neeto-ui-text-gray-600 truncate text-xs\">\n {filteredBodyContent || bodyContent}\n </Typography>\n )}\n </div>\n </Link>\n );\n })}\n {shouldShowCategoryDivider && (\n <hr className=\"neeto-ui-border-gray-300 mx-3 my-3 border-t\" />\n )}\n </div>\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={sentinelRef}\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 </div>\n </Modal.Body>\n );\n};\n\nexport default ModalBody;\n","import { Down, Up } from \"neetoicons\";\nimport { Modal, Typography } from \"neetoui\";\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 <Up className=\"neeto-ui-text-gray-600\" key=\"up\" size={12} />,\n <Down className=\"neeto-ui-text-gray-600\" 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 <Modal.Footer className=\"neeto-ui-border-gray-300 neeto-molecules-finder-modal__footer border-t px-6 py-4\">\n <div className=\"neeto-ui-text-xxs flex items-center gap-4\">\n {shortcuts.filter(prop(\"isVisible\")).map(({ label, keys }, index) => (\n <div className=\"flex items-center gap-1\" key={index}>\n <Typography\n className=\"neeto-ui-text-gray-600\"\n component=\"span\"\n style=\"nano\"\n >\n {label}\n </Typography>\n {keys.map((key, index) => (\n <Typography\n className=\"neeto-ui-bg-gray-200 neeto-ui-rounded-sm neeto-ui-text-gray-600 px-1.5 py-1\"\n component=\"span\"\n key={index}\n style=\"nano\"\n >\n {key}\n </Typography>\n ))}\n </div>\n ))}\n </div>\n </Modal.Footer>\n );\n};\n\nexport default ModalFooter;\n","import { withT } from \"neetocommons/react-utils\";\nimport { Button, Modal, Spinner } from \"neetoui\";\n\nimport Search from \"components/Search\";\n\nconst ModalHeader = withT(\n ({ t, enableAdvancedSearch, onSearch, onGoToAdvanced, loading }) => (\n <Modal.Header className=\"neeto-molecules-finder-modal__header neeto-ui-border-gray-300 border-b px-0 py-0\">\n <Search\n {...{ onSearch }}\n nakedInput\n autoComplete=\"off\"\n className=\"neeto-molecules-finder-modal__search px-6 py-3\"\n name=\"term\"\n placeholder={t(\"neetoMolecules.common.actions.search\")}\n suffix={\n <div className=\"ms-3 flex items-center\">\n <div className=\"h-4 w-4 flex-shrink-0\">\n {loading && <Spinner size=\"small\" />}\n </div>\n {enableAdvancedSearch && (\n <Button\n className=\"ms-3 whitespace-nowrap\"\n label={t(\"neetoMolecules.finderModal.advancedSearch\")}\n size=\"small\"\n style=\"tertiary\"\n onClick={onGoToAdvanced}\n />\n )}\n </div>\n }\n />\n </Modal.Header>\n )\n);\n\nexport default ModalHeader;\n","import { useRef } from \"react\";\n\nimport { noop } from \"neetocist\";\nimport useHotkeys from \"neetohotkeys\";\nimport { Modal } from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport ModalBody from \"./Body\";\nimport \"./finder-modal.scss\";\nimport ModalFooter from \"./Footer\";\nimport ModalHeader from \"./Header\";\nimport { minMax } from \"./utils\";\n\nconst FinderModal = ({\n enableAdvancedSearch = true,\n data,\n isFetching,\n isOpen,\n setIsOpen = noop,\n searchTerm,\n setSearchTerm,\n onClose,\n onGoToAdvanced = noop,\n onLoadMore,\n hasMore,\n isFetchingMore,\n ...props\n}) => {\n const containerRef = useRef();\n const mutables = useRef({ focusIndex: -1 }).current;\n\n const onFocusChange = offset => {\n const container = containerRef.current;\n if (!container) return;\n\n const nodes = container.querySelectorAll(\n \"a.neeto-molecules-search-result-item\"\n );\n\n if (isEmpty(nodes)) return;\n\n mutables.focusIndex = minMax(\n mutables.focusIndex + offset,\n nodes.length - 1\n );\n\n const targetNode = nodes[mutables.focusIndex];\n if (targetNode) {\n targetNode.focus();\n }\n };\n\n useHotkeys(\n [\"up\", \"down\"],\n event => {\n event.preventDefault();\n if (event.code === \"ArrowUp\") onFocusChange(-1);\n else if (event.code === \"ArrowDown\") onFocusChange(1);\n },\n { mode: \"global\", enabled: isOpen }\n );\n\n useHotkeys([\"ctrl+enter\", \"command+enter\"], onGoToAdvanced, {\n mode: \"global\",\n enabled: isOpen && enableAdvancedSearch,\n });\n useHotkeys(\"mod+k\", () => setIsOpen(true), { mode: \"global\" });\n useHotkeys(\"esc\", () => setIsOpen(false), {\n mode: \"global\",\n enabled: isOpen,\n });\n\n return (\n <Modal\n {...{ isOpen, onClose }}\n closeButton={false}\n {...props}\n backdropClassName=\"neeto-molecules-finder-modal-backdrop py-10 px-4\"\n className=\"neeto-molecules-finder-modal\"\n >\n <ModalHeader\n {...{ enableAdvancedSearch, onGoToAdvanced }}\n loading={isFetching}\n onSearch={setSearchTerm}\n />\n <ModalBody\n {...{\n containerRef,\n data,\n hasMore,\n isFetchingMore,\n onClose,\n onLoadMore,\n searchTerm,\n }}\n loading={isFetching}\n />\n <ModalFooter {...{ enableAdvancedSearch }} />\n </Modal>\n );\n};\n\nFinderModal.propTypes = {\n /*\n Boolean to indicate decide whether to show advanced search button or not\n */\n enableAdvancedSearch: PropTypes.bool,\n /*\n Data to be displayed in the modal\n */\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 /*\n Boolean to indicate whether data is being fetched or not\n */\n isFetching: PropTypes.bool,\n /*\n Boolean to indicate whether modal is open or not\n */\n isOpen: PropTypes.bool,\n /*\n Term used for search\n */\n searchTerm: PropTypes.string,\n /*\n Function to set search term\n */\n setSearchTerm: PropTypes.func,\n /*\n Function to close the modal\n */\n onClose: PropTypes.func,\n /*\n Function to execute when user clicks on advanced search button\n */\n onGoToAdvanced: PropTypes.func,\n /*\n Function called when the user scrolls near the bottom of the results.\n When provided together with hasMore, enables scroll-based pagination.\n */\n onLoadMore: PropTypes.func,\n /*\n Boolean indicating whether more pages are available to fetch\n */\n hasMore: PropTypes.bool,\n /*\n Boolean indicating whether the next page is currently being fetched\n */\n isFetchingMore: PropTypes.bool,\n};\n\nexport default FinderModal;\n"],"names":["Link","_ref","to","children","rest","_objectWithoutProperties","_excluded","url","URL","host","_jsx","RRDLink","_objectSpread","concat","pathname","search","minMax","number","max","arguments","length","undefined","Number","POSITIVE_INFINITY","min","Math","htmlToText","html","tmp","document","createElement","innerHTML","textContent","innerText","highlightMatch","text","searchTerm","regex","RegExp","split","map","part","index","toLowerCase","className","filterAndHighlightContent","bodyContent","filter","line","trim","includes","_jsxs","React","Fragment","createStylePalette","values","assignedStyles","styleIndex","key","style","getStyle","ModalBody","containerRef","data","onClose","loading","onLoadMore","_ref$hasMore","hasMore","_ref$isFetchingMore","isFetchingMore","_useTranslation","useTranslation","t","sentinelRef","useRef","onLoadMoreRef","noop","useEffect","current","isPaginationEnabled","Boolean","sentinel","root","closest","observer","IntersectionObserver","_ref2","_ref3","_slicedToArray","entry","isIntersecting","rootMargin","observe","disconnect","categoryGroups","Object","keys","isNotEmpty","isDataEmpty","isNotPresent","isEmpty","Modal","Body","NoData","description","title","ref","category","categoryIndex","items","shouldShowCategoryDivider","item","nameContent","name","body","filteredBodyContent","onClick","Typography","component","lineHeight","weight","Tag","size","type","humanize","id","Spinner","ModalFooter","enableAdvancedSearch","shortcuts","label","isVisible","Up","Down","Footer","prop","ModalHeader","withT","onSearch","onGoToAdvanced","Header","Search","nakedInput","autoComplete","placeholder","suffix","Button","FinderModal","_ref$enableAdvancedSe","isFetching","isOpen","_ref$setIsOpen","setIsOpen","setSearchTerm","_ref$onGoToAdvanced","props","mutables","focusIndex","onFocusChange","offset","container","nodes","querySelectorAll","targetNode","focus","useHotkeys","event","preventDefault","code","mode","enabled","closeButton","backdropClassName"],"mappings":"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"}