@ethisyscore/plugin-ui 1.131.1 → 1.133.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ui/Dialog.tsx","../../../src/icons/nexture/ni-archive.tsx","../../../src/icons/nexture/ni-bin-empty.tsx","../../../src/icons/nexture/ni-check.tsx","../../../src/icons/nexture/ni-chevron-down-small.tsx","../../../src/icons/nexture/ni-chevron-up-small.tsx","../../../src/icons/nexture/ni-code.tsx","../../../src/icons/nexture/ni-cross.tsx","../../../src/icons/nexture/ni-exclamation-hexagon.tsx","../../../src/icons/nexture/ni-plus.tsx","../../../src/icons/nexture/ni-refresh.tsx","../../../src/icons/nexture/ni-search.tsx","../../../src/icons/nexture/ni-settings.tsx","../../../src/icons/nexture/ni-sparkle.tsx","../../../src/icons/nexture-icons.tsx","../../../src/components/ui/DebouncedSearchInput.tsx","../../../src/components/connectors/mappingCompleteness.ts","../../../src/components/connectors/providerLabels.ts","../../../src/components/connectors/MappingCompletenessBanner.tsx","../../../src/components/shared/EmptyState.tsx","../../../src/components/connectors/ConnectorMappingView.tsx","../../../src/components/connectors/requestTemplates.ts","../../../src/components/connectors/ConnectorMappingTemplateSections.tsx","../../../src/components/connectors/ConnectorMappingTranslationEditorView.tsx","../../../src/components/connectors/mappingQueryKeys.ts"],"names":["MuiDialog","jsxs","jsx","DebouncedSearchInput","Box","Typography","IconButton","Fragment","FormControl","InputLabel","FilledInput","useState","useRef"],"mappings":"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","file":"index.js","sourcesContent":["import { Dialog as MuiDialog, type DialogProps } from \"@mui/material\";\n\n/**\n * MUI `Dialog` with the scroll-lock + focus-restore overrides plugin surfaces\n * need (AB#4808): MUI's defaults reset the page to top when a dialog opened from\n * below the fold closes. Everything else is the stock `Dialog` — this is the one\n * `components/ui` wrapper that isn't a pure re-export.\n */\nexport function Dialog(props: DialogProps) {\n return <MuiDialog disableScrollLock disableRestoreFocus {...props} />;\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiArchive({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M22 7V5.71496C22 4.17371 20.8321 2.88321 19.2985 2.72985L17.9702 2.59702C14 2.2 10 2.2 6.02978 2.59702L4.70149 2.72985C3.16788 2.88321 2 4.17371 2 5.71496V7C2 8.10457 2.89543 9 4 9H20C21.1046 9 22 8.10457 22 7Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.53333 9.5L4.4768 9.74619C3.83435 12.544 3.8494 15.4543 4.51997 18.2455V18.2455C4.85389 19.6354 5.95655 20.7108 7.35451 21.009V21.009C10.4171 21.6623 13.5829 21.6623 16.6455 21.009V21.009C18.0434 20.7108 19.1461 19.6354 19.48 18.2455V18.2455C20.1506 15.4543 20.1657 12.544 19.5232 9.74618L19.4667 9.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M14.0945 13.9189C14.3504 13.9701 14.5682 14.1365 14.6849 14.3698V14.3698C14.8833 14.7665 14.8833 15.2335 14.6849 15.6302V15.6302C14.5682 15.8635 14.3504 16.0299 14.0945 16.0811L13.8853 16.1229C12.6408 16.3718 11.3592 16.3718 10.1147 16.1229L9.90546 16.0811C9.64963 16.0299 9.43176 15.8635 9.31508 15.6302V15.6302C9.11673 15.2335 9.11673 14.7665 9.31508 14.3698V14.3698C9.43176 14.1365 9.64963 13.9701 9.90546 13.9189L10.1147 13.8771C11.3592 13.6282 12.6408 13.6282 13.8853 13.8771L14.0945 13.9189Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.95508 1.85031C9.9749 1.44833 14.0251 1.44833 18.0449 1.85031L19.373 1.98312C21.2897 2.17479 22.7495 3.78844 22.75 5.71457V6.99972C22.75 7.86931 22.345 8.64326 21.7148 9.14719C21.1107 7.71812 19.7022 6.75088 18.1025 6.7507H5.89746C4.29778 6.75078 2.8884 7.71735 2.28418 9.14621C1.65469 8.64226 1.25 7.86881 1.25 6.99972V5.71457C1.2505 3.78844 2.71028 2.17479 4.62695 1.98312L5.95508 1.85031Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M18.1028 8.25C19.2525 8.25003 20.2447 9.05777 20.4778 10.1836C20.9988 12.7045 20.957 15.3105 20.3557 17.8135L20.2092 18.4219C19.8078 20.0924 18.4823 21.3837 16.802 21.7422C13.6364 22.4174 10.3641 22.4174 7.19849 21.7422C5.51812 21.3837 4.19273 20.0925 3.79126 18.4219L3.64478 17.8135C3.04349 15.3105 3.00171 12.7045 3.52271 10.1836C3.75577 9.05776 4.74793 8.25 5.89771 8.25H18.1028ZM14.0334 13.1406C12.6922 12.8724 11.3103 12.8725 9.96899 13.1406L9.75903 13.1826C9.27649 13.2792 8.86496 13.5931 8.64477 14.0332C8.34086 14.641 8.34086 15.357 8.64477 15.9648C8.86494 16.405 9.27646 16.7188 9.75903 16.8154L9.96899 16.8574C11.3103 17.1255 12.6922 17.1257 14.0334 16.8574L14.2424 16.8154C14.7249 16.7187 15.1366 16.4049 15.3567 15.9648C15.6604 15.3571 15.6604 14.6409 15.3567 14.0332C15.1366 13.5931 14.7249 13.2793 14.2424 13.1826L14.0334 13.1406Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M9.96866 13.1406C11.3101 12.8724 12.6917 12.8723 14.0331 13.1406L14.2421 13.1826C14.7247 13.2792 15.1362 13.593 15.3563 14.0332C15.6602 14.641 15.6602 15.357 15.3563 15.9648C15.1362 16.405 14.7247 16.7188 14.2421 16.8154L14.0331 16.8574C12.6917 17.1257 11.3101 17.1256 9.96866 16.8574L9.7587 16.8154C9.27607 16.7188 8.86459 16.4051 8.64444 15.9648C8.34052 15.357 8.34052 14.641 8.64444 14.0332C8.86461 13.593 9.27611 13.2792 9.7587 13.1826L9.96866 13.1406Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiBinEmpty({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 6L5.48806 9.58357C5.16413 11.8511 5.14395 14.1516 5.42806 16.4245L5.51601 17.1281C5.80316 19.4253 7.56538 21.2609 9.84894 21.6415V21.6415C11.2732 21.8789 12.7268 21.8789 14.1511 21.6415V21.6415C16.4346 21.2609 18.1968 19.4253 18.484 17.1281L18.5719 16.4245C18.856 14.1516 18.8359 11.8511 18.5119 9.58357L18 6\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M15 5L14.9062 4.43717C14.7408 3.4451 14.6582 2.94906 14.3711 2.60286C14.2462 2.45218 14.0957 2.32469 13.9265 2.22623C13.5378 2 13.035 2 12.0292 2L11.9708 2C10.965 2 10.4622 2 10.0735 2.22623C9.90431 2.32469 9.75381 2.45219 9.62888 2.60286C9.34182 2.94906 9.25915 3.4451 9.09381 4.43717L9 5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M20 6L18.2017 5.77522C14.0833 5.26041 9.91673 5.26041 5.79826 5.77522L4 6\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.74018 5.12304C9.6721 5.53152 9.28536 5.80813 8.8769 5.74023C8.46843 5.67215 8.19181 5.28541 8.25971 4.87695L8.35444 4.31347C8.43472 3.83178 8.50246 3.41913 8.59077 3.08593C8.68246 2.74003 8.81179 2.41337 9.0517 2.12402C9.23282 1.90562 9.45102 1.72085 9.69623 1.57812C10.0211 1.38906 10.3644 1.31483 10.7206 1.28125C11.0639 1.24892 11.4822 1.25 11.9706 1.25L12.0292 1.25C12.5177 1.25 12.936 1.24892 13.2792 1.28125C13.6355 1.31483 13.9788 1.38906 14.3037 1.57812C14.5489 1.72085 14.7671 1.90562 14.9482 2.12402C15.1881 2.41337 15.3174 2.74003 15.4091 3.08593C15.4974 3.41913 15.5652 3.83177 15.6455 4.31347L15.7402 4.87695L15.749 4.95312C15.7732 5.33241 15.506 5.6764 15.123 5.74023C14.74 5.80389 14.3763 5.56494 14.2763 5.19824L14.2597 5.12304L14.166 4.56054C14.081 4.05049 14.025 3.71896 13.9589 3.46972C13.8964 3.23378 13.8409 3.13889 13.7939 3.08203C13.7252 2.99916 13.6418 2.92817 13.5488 2.87402C13.4849 2.83695 13.3818 2.79831 13.1386 2.77539C12.8819 2.75121 12.5462 2.75 12.0292 2.75L11.9706 2.75C11.4537 2.75 11.1179 2.75121 10.8613 2.77539C10.6181 2.79831 10.515 2.83695 10.4511 2.87402C10.3581 2.92817 10.2747 2.99916 10.206 3.08203C10.1589 3.13889 10.1035 3.23378 10.041 3.46972C9.97489 3.71896 9.91894 4.05049 9.83393 4.56054L9.74018 5.12304Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.94819 5.00114C9.96612 4.51861 14.0279 4.51807 18.0459 5.00016C18.1288 5.01011 18.212 5.02008 18.2949 5.03043L20.0927 5.25504L20.1689 5.26872C20.5391 5.35382 20.792 5.70788 20.7441 6.09293C20.6958 6.47814 20.3633 6.75806 19.9834 6.74918L19.9072 6.7443L18.8447 6.61051L19.2548 9.4777C19.5881 11.8107 19.6086 14.1783 19.3164 16.5168L19.2285 17.2209C18.9001 19.8471 16.8851 21.9459 14.2744 22.381C12.7685 22.632 11.2314 22.632 9.72554 22.381C7.11486 21.9458 5.09978 19.8471 4.77144 17.2209L4.68355 16.5168C4.39132 14.1783 4.41185 11.8107 4.74507 9.4777L5.15425 6.61051L4.09273 6.7443L4.01655 6.74918C3.63657 6.75805 3.30414 6.47813 3.25581 6.09293C3.20471 5.68211 3.49633 5.30642 3.90718 5.25504L5.70503 5.03043C5.78598 5.02032 5.86721 5.01086 5.94819 5.00114Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiCheck({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 7.81836L11.0125 15.7798C10.8216 15.9974 10.4864 16.0079 10.2822 15.8026L6.5 12.0002\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.4951 7.25492C18.7867 7.51112 18.8318 7.9435 18.6113 8.25297L18.5634 8.31352L11.5761 16.2745C11.0989 16.8182 10.2613 16.8446 9.75095 16.3321L5.96774 12.5293L5.91696 12.4717C5.67772 12.1766 5.69574 11.7426 5.97067 11.4688C6.26435 11.1767 6.74009 11.178 7.0322 11.4717L10.6259 15.083L17.4365 7.32328L17.4902 7.26859C17.7685 7.00989 18.2033 6.99884 18.4951 7.25492Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiChevronDownSmall({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 10L11.1515 13.1515C11.6201 13.6201 12.3799 13.6201 12.8485 13.1515L16 10\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.46967 9.46967C7.17678 9.76256 7.17678 10.2373 7.46967 10.5302L10.621 13.6816C11.3826 14.4431 12.6173 14.4431 13.3788 13.6816L16.5302 10.5302C16.8231 10.2373 16.8231 9.76256 16.5302 9.46967C16.2373 9.17678 15.7626 9.17678 15.4697 9.46967L12.3183 12.621C12.1426 12.7968 11.8573 12.7968 11.6816 12.621L8.53022 9.46967C8.23732 9.17678 7.76256 9.17678 7.46967 9.46967Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiChevronUpSmall({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 14L12.8485 10.8485C12.3799 10.3799 11.6201 10.3799 11.1515 10.8485L8 14\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.5303 14.5303C16.8232 14.2374 16.8232 13.7627 16.5303 13.4698L13.379 10.3184C12.6174 9.55689 11.3827 9.55689 10.6212 10.3184L7.46978 13.4698C7.17689 13.7627 7.17689 14.2374 7.46978 14.5303C7.76268 14.8232 8.23744 14.8232 8.53033 14.5303L11.6817 11.379C11.8574 11.2032 12.1427 11.2032 12.3184 11.379L15.4698 14.5303C15.7627 14.8232 16.2374 14.8232 16.5303 14.5303Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiCode({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17 6L21.5858 10.5858C22.3668 11.3668 22.3668 12.6332 21.5858 13.4142L17 18\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7 6L2.41421 10.5858C1.63317 11.3668 1.63316 12.6332 2.41421 13.4142L7 18\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M9.81053 20.2205L14.2104 3.7998\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.4697 5.46967C16.7626 5.17678 17.2373 5.17678 17.5302 5.46967L22.1162 10.0556C23.1899 11.1295 23.1899 12.8704 22.1162 13.9443L17.5302 18.5302C17.2373 18.8231 16.7626 18.8231 16.4697 18.5302C16.1768 18.2373 16.1768 17.7626 16.4697 17.4697L21.0556 12.8837C21.5436 12.3956 21.5436 11.6043 21.0556 11.1162L16.4697 6.53022C16.1768 6.23732 16.1768 5.76256 16.4697 5.46967Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.53033 5.46967C7.23744 5.17678 6.76268 5.17678 6.46978 5.46967L1.88385 10.0556C0.810106 11.1295 0.810105 12.8704 1.88385 13.9443L6.46978 18.5302C6.76268 18.8231 7.23744 18.8231 7.53033 18.5302C7.82322 18.2373 7.82322 17.7626 7.53033 17.4697L2.94439 12.8837C2.45644 12.3956 2.45644 11.6043 2.94439 11.1162L7.53033 6.53022C7.82322 6.23732 7.82322 5.76256 7.53033 5.46967Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M10.5349 20.4147C10.4277 20.8148 10.0164 21.0523 9.61631 20.945C9.21621 20.8378 8.97877 20.4266 9.08598 20.0265L13.4859 3.60575C13.5931 3.20565 14.0044 2.96821 14.4045 3.07542C14.8046 3.18262 15.042 3.59388 14.9348 3.99398L10.5349 20.4147Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiCross({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.00016 8L12.0001 12M12.0001 12L16 16.0002M12.0001 12L16 8.00015M12.0001 12L8 16.0002\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.4698 7.46963C15.7626 7.17684 16.2374 7.17684 16.5303 7.46963C16.8232 7.7625 16.8231 8.23728 16.5303 8.53018L13.0606 11.9999L16.5303 15.4696C16.8232 15.7625 16.8231 16.2373 16.5303 16.5302C16.2557 16.8048 15.821 16.8223 15.5264 16.5819L15.4698 16.5302L12 13.0604L8.53032 16.5302C8.23743 16.8231 7.76267 16.8231 7.46977 16.5302C7.17697 16.2373 7.17691 15.7625 7.46977 15.4696L10.9395 11.9999L7.46977 8.53018L7.41801 8.47354C7.1778 8.17898 7.19527 7.74421 7.46977 7.46963C7.76264 7.17676 8.23742 7.17682 8.53032 7.46963L12 10.9394L15.4698 7.46963Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiExclamationHexagon({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.43719 13.4575C2.15201 12.5069 2.15199 11.4936 2.43715 10.543L2.52265 10.258C3.16817 8.10616 4.22224 6.09886 5.62723 4.34584V4.34584C6.32329 3.47736 7.30701 2.88645 8.40067 2.67987L8.52188 2.65698C10.8203 2.22283 13.1797 2.22283 15.4781 2.65698L15.5993 2.67987C16.693 2.88645 17.6767 3.47737 18.3728 4.34588V4.34588C19.7778 6.09887 20.8318 8.10614 21.4774 10.2579L21.5628 10.5427C21.848 11.4933 21.848 12.5067 21.5628 13.4573L21.4774 13.7421C20.8318 15.8939 19.7778 17.9011 18.3728 19.6541V19.6541C17.6767 20.5226 16.693 21.1135 15.5993 21.3201L15.4781 21.343C13.1797 21.7772 10.8203 21.7772 8.52187 21.343L8.40075 21.3201C7.30704 21.1135 6.32327 20.5226 5.62718 19.6541V19.6541C4.22222 17.9011 3.16815 15.8939 2.52259 13.7421L2.43719 13.4575Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M12 8V13\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M12 15.5V16\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.38258 1.92059C10.7727 1.46912 13.2268 1.46924 15.617 1.92059L15.739 1.94305C17.0082 2.18287 18.1499 2.86991 18.9578 3.87762C20.4228 5.70553 21.5228 7.79896 22.1961 10.0427L22.281 10.3278C22.6083 11.4187 22.6082 12.5826 22.281 13.6735L22.1961 13.9577C21.5229 16.2016 20.4229 18.2956 18.9578 20.1237C18.1499 21.1316 17.0083 21.8174 15.739 22.0573L15.6179 22.0807C13.2277 22.5321 10.7728 22.5322 8.38258 22.0807L8.26148 22.0573C6.99216 21.8174 5.84965 21.1317 5.04176 20.1237C3.57682 18.2957 2.47761 16.2015 1.80445 13.9577L1.71852 13.6735C1.39142 12.5826 1.39129 11.4187 1.71852 10.3278L1.80445 10.0427C2.47762 7.79905 3.57688 5.70548 5.04176 3.87762C5.8497 2.86971 6.99217 2.18286 8.26148 1.94305L8.38258 1.92059ZM11.9998 14.7507C11.5857 14.7508 11.2498 15.0865 11.2498 15.5007V16.0007C11.2499 16.4146 11.5858 16.7505 11.9998 16.7507C12.4139 16.7507 12.7496 16.4147 12.7498 16.0007V15.5007C12.7498 15.0865 12.414 14.7507 11.9998 14.7507ZM11.9998 7.25067C11.5857 7.25082 11.2498 7.58655 11.2498 8.00067V13.0007C11.2499 13.4146 11.5858 13.7505 11.9998 13.7507C12.4139 13.7507 12.7496 13.4147 12.7498 13.0007V8.00067C12.7498 7.58645 12.414 7.25067 11.9998 7.25067Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M12 14.75C12.4142 14.75 12.75 15.0858 12.75 15.5V16C12.75 16.4142 12.4142 16.75 12 16.75C11.5858 16.75 11.25 16.4142 11.25 16V15.5C11.25 15.0858 11.5858 14.75 12 14.75Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M12 7.25C12.4142 7.25 12.75 7.58579 12.75 8V13C12.75 13.4142 12.4142 13.75 12 13.75C11.5858 13.75 11.25 13.4142 11.25 13V8C11.25 7.58579 11.5858 7.25 12 7.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiPlus({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.00002 12.0005H16.9998M12.0006 7L12.0006 16.9998\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.251 17L11.251 12.751H7.00003C6.58598 12.751 6.25028 12.415 6.25003 12.001C6.25003 11.5868 6.58581 11.251 7.00002 11.251H11.251L11.251 7C11.251 6.58579 11.5868 6.25 12.001 6.25C12.415 6.25019 12.751 6.58591 12.751 7L12.751 11.251H17L17.0762 11.2539C17.4546 11.2921 17.75 11.6125 17.75 12.001C17.7498 12.3892 17.4544 12.7088 17.0762 12.7471L17 12.751H12.751L12.751 17C12.7509 17.414 12.415 17.7498 12.001 17.75C11.5869 17.75 11.2512 17.4141 11.251 17Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiRefresh({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n className={className}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M4.24658 5.68421C6.08028 3.4358 8.87252 2 12.0001 2C17.5229 2 22.0001 6.47715 22.0001 12C22.0001 12.6849 21.9312 13.3538 21.8001 14\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M4 2L4 4.99995C4 5.55223 4.44771 5.99995 4.99998 5.99995L8 6\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M19.7534 18.3158C17.9197 20.5642 15.1275 22 11.9999 22C6.47705 22 1.9999 17.5228 1.9999 12C1.9999 11.3151 2.06876 10.6462 2.19994 10\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M20 22L20 19C20 18.4478 19.5523 18.0001 19 18L16 18\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M21.2503 12C21.2503 6.8915 17.1087 2.75021 12.0003 2.75C9.10755 2.75 6.5248 4.07694 4.82741 6.1582C4.5657 6.47903 4.09369 6.5271 3.77272 6.26562C3.45173 6.00383 3.40351 5.53096 3.6653 5.20996C5.63532 2.79453 8.63792 1.25 12.0003 1.25C17.9371 1.25021 22.7503 6.06307 22.7503 12C22.7503 12.7353 22.6755 13.4544 22.5344 14.1494C22.4519 14.5552 22.0565 14.8177 21.6507 14.7354C21.2447 14.653 20.9823 14.2565 21.0647 13.8506C21.186 13.2533 21.2503 12.6345 21.2503 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4 1.25011C3.58579 1.25011 3.25008 1.58582 3.25008 2.00003L3.25008 4.99971C3.25008 5.96617 4.03344 6.74947 4.99989 6.74953L8.00026 6.75022C8.41427 6.75008 8.75004 6.4143 8.75018 6.0003C8.75019 5.58617 8.41436 5.25052 8.00026 5.25038L4.99989 5.24969C4.86187 5.24963 4.74992 5.13775 4.74992 4.99971L4.74992 2.00003C4.74992 1.58582 4.41421 1.25011 4 1.25011Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M2.74974 12C2.74974 17.1085 6.89128 21.2498 11.9997 21.25C14.8925 21.25 17.4752 19.9231 19.1726 17.8418C19.4343 17.521 19.9063 17.4729 20.2273 17.7344C20.5483 17.9962 20.5965 18.469 20.3347 18.79C18.3647 21.2055 15.3621 22.75 11.9997 22.75C6.06285 22.7498 1.24974 17.9369 1.24974 12C1.24974 11.2647 1.32447 10.5456 1.46556 9.85059C1.54808 9.44484 1.94354 9.18232 2.34935 9.26465C2.75528 9.34705 3.01768 9.74348 2.93528 10.1494C2.81404 10.7467 2.74974 11.3655 2.74974 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M20 22.7499C20.4142 22.7499 20.7499 22.4142 20.7499 22L20.7499 19.0003C20.7499 18.0338 19.9666 17.2505 19.0001 17.2505L15.9997 17.2498C15.5857 17.2499 15.25 17.5857 15.2498 17.9997C15.2498 18.4138 15.5856 18.7495 15.9997 18.7496L19.0001 18.7503C19.1381 18.7504 19.2501 18.8623 19.2501 19.0003L19.2501 22C19.2501 22.4142 19.5858 22.7499 20 22.7499Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiSearch({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M22 22L18.5 18.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <circle cx=\"11.5\" cy=\"11.5\" r=\"9.5\" stroke=\"currentColor\" strokeWidth={iconStrokeWidth} />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M19.0303 17.9697C18.7374 17.6768 18.2627 17.6768 17.9698 17.9697C17.6769 18.2626 17.6769 18.7373 17.9698 19.0302L21.4698 22.5302C21.7627 22.8231 22.2374 22.8231 22.5303 22.5302C22.8232 22.2373 22.8232 21.7626 22.5303 21.4697L19.0303 17.9697Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M11.5 1.25C17.1609 1.25 21.75 5.83908 21.75 11.5C21.75 17.1609 17.1609 21.75 11.5 21.75C5.83908 21.75 1.25 17.1609 1.25 11.5C1.25 5.83908 5.83908 1.25 11.5 1.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiSettings({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.3712 11.1182L20.3235 10.3478C21.0169 9.78681 21.2876 8.85332 21.0018 8.00845C20.7764 7.34225 20.4214 6.72728 19.9571 6.19901C19.3683 5.52905 18.4246 5.2967 17.5921 5.61673L16.4487 6.05624L16.3289 6.1025C15.7233 6.33735 15.0468 5.96142 14.9455 5.31981L14.7317 3.96598C14.5926 3.08499 13.9195 2.38385 13.0449 2.20894C12.3553 2.07101 11.6452 2.07101 10.9555 2.20894C10.081 2.38385 9.40786 3.08499 9.26876 3.96598L9.05497 5.31996C8.95366 5.96157 8.27712 6.3375 7.6715 6.10265L7.55132 6.05624L6.40797 5.61673C5.57546 5.2967 4.63171 5.52905 4.04293 6.19901C3.57867 6.72728 3.22362 7.34225 2.99825 8.00845C2.71244 8.85332 2.98309 9.7868 3.6765 10.3478L4.6288 11.1182L4.7128 11.186C5.22952 11.6019 5.22952 12.3968 4.7128 12.8127L4.62904 12.8803L3.67673 13.6507C2.98332 14.2117 2.71267 15.1452 2.99848 15.9901C3.22385 16.6563 3.5789 17.2712 4.04316 17.7995C4.63194 18.4695 5.57568 18.7018 6.4082 18.3818L7.55154 17.9423L7.67131 17.896C8.27692 17.6612 8.95346 18.0371 9.05476 18.6787L9.26876 20.034C9.40786 20.915 10.081 21.6161 10.9555 21.7911C11.6452 21.929 12.3553 21.929 13.0449 21.7911C13.9195 21.6161 14.5926 20.915 14.7317 20.034L14.9457 18.6789C15.047 18.0373 15.7235 17.6613 16.3291 17.8962L16.4485 17.9423L17.5918 18.3818C18.4243 18.7018 19.3681 18.4695 19.9569 17.7995C20.4211 17.2712 20.7762 16.6563 21.0016 15.9901C21.2874 15.1452 21.0167 14.2117 20.3233 13.6507L19.371 12.8803L19.2872 12.8127C18.7705 12.3968 18.7705 11.6019 19.2872 11.186L19.3712 11.1182Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M11.0137 14.8356C10.0655 14.6776 9.32242 13.9345 9.16438 12.9863V12.9863C9.05555 12.3333 9.05555 11.6667 9.16438 11.0137V11.0137C9.32242 10.0655 10.0655 9.32242 11.0137 9.16438V9.16438C11.6667 9.05555 12.3333 9.05555 12.9863 9.16438V9.16438C13.9345 9.32242 14.6776 10.0655 14.8356 11.0137V11.0137C14.9445 11.6667 14.9445 12.3333 14.8356 12.9863V12.9863C14.6776 13.9345 13.9345 14.6776 12.9863 14.8356V14.8356C12.3333 14.9445 11.6667 14.9445 11.0137 14.8356V14.8356Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.8077 1.4739C11.5943 1.31662 12.405 1.31667 13.1915 1.4739C14.3736 1.71051 15.2836 2.6581 15.4718 3.8489L15.6857 5.20339C15.7102 5.35695 15.8828 5.47062 16.0568 5.40359L16.0577 5.40261L16.1779 5.35671L17.3224 4.91726C18.4478 4.48471 19.7237 4.79879 20.5197 5.70437C21.0492 6.30697 21.454 7.00892 21.7111 7.76882C22.0973 8.911 21.7315 10.1726 20.7941 10.9309L19.8419 11.7014L19.8409 11.7024L19.757 11.7698C19.6316 11.8711 19.615 12.0585 19.7091 12.1809L19.757 12.2288L19.8409 12.2971L20.7941 13.0677C21.7316 13.8261 22.0975 15.0885 21.7111 16.2307C21.454 16.9906 21.0492 17.6926 20.5197 18.2952C19.7236 19.2007 18.4468 19.5149 17.3214 19.0823L16.1788 18.6428L16.1779 18.6419L16.0577 18.596C15.8836 18.5289 15.71 18.6424 15.6857 18.7962L15.4718 20.1516C15.2836 21.3423 14.3736 22.29 13.1915 22.5266C12.405 22.6839 11.5942 22.6839 10.8077 22.5266C9.62572 22.29 8.71569 21.3423 8.52747 20.1516L8.31263 18.7962C8.28832 18.6422 8.11592 18.5283 7.94153 18.596L7.82044 18.6419L7.81946 18.6428L6.67689 19.0823C5.55148 19.5147 4.27454 19.2008 3.47864 18.2952C2.94913 17.6926 2.54431 16.9906 2.28724 16.2307C1.9009 15.0886 2.26705 13.8261 3.20423 13.0677L4.15638 12.2971L4.24134 12.2298C4.38509 12.114 4.3851 11.8865 4.24134 11.7708L4.15735 11.7024L4.15638 11.7014L3.20423 10.9309C2.26711 10.1726 1.9012 8.91081 2.28724 7.76882C2.54426 7.00904 2.94923 6.30691 3.47864 5.70437C4.27453 4.79875 5.5505 4.48491 6.67591 4.91726L7.81946 5.35671L7.94056 5.40359C8.11483 5.47117 8.2891 5.35719 8.3136 5.20339L8.52747 3.8489C8.71565 2.65819 9.62571 1.71055 10.8077 1.4739ZM13.1085 8.42507C12.3742 8.30279 11.624 8.30273 10.8898 8.42507C9.6257 8.63598 8.63466 9.62675 8.42396 10.8909C8.30163 11.6252 8.30162 12.3753 8.42396 13.1096C8.63485 14.3735 9.62587 15.3646 10.8898 15.5755C11.624 15.6978 12.3743 15.6977 13.1085 15.5755C14.3725 15.3647 15.3634 14.3736 15.5743 13.1096C15.6967 12.3753 15.6967 11.6253 15.5743 10.8909C15.3636 9.62676 14.3726 8.63594 13.1085 8.42507Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M10.8896 8.42477C11.624 8.30237 12.374 8.30247 13.1084 8.42477C14.3727 8.63548 15.3634 9.62631 15.5742 10.8906C15.6966 11.6251 15.6966 12.3749 15.5742 13.1093C15.3633 14.3735 14.3726 15.3645 13.1084 15.5752C12.374 15.6975 11.624 15.6976 10.8896 15.5752C9.62559 15.3643 8.63456 14.3734 8.4238 13.1093C8.30145 12.3749 8.30144 11.625 8.4238 10.8906C8.6345 9.62644 9.62554 8.63567 10.8896 8.42477Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiSparkle({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.13877 21.1589C5.53267 21.6384 4.70914 21.7467 4.0009 21.4375L3.91854 21.4015C3.3298 21.1445 2.86544 20.6666 2.62532 20.0708V20.0708C2.35103 19.3902 2.46997 18.6056 2.92524 18.0301V18.0301C4.54952 15.9767 6.45457 14.0719 8.50948 12.4496V12.4496C9.07277 12.0049 9.83517 11.8842 10.5055 12.1406V12.1406C11.1311 12.3798 11.6311 12.8652 11.8887 13.4834L11.9228 13.5652C12.2139 14.2639 12.1036 15.0654 11.6346 15.6595V15.6595C10.0253 17.6979 8.17566 19.5477 6.13877 21.1589V21.1589Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M21 12V12C19.753 11.3705 18.2824 11.3649 17.0306 11.9848L17 12\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M18 16.9998V16.9998C18 15.8956 17.1045 15.0004 16.0003 15.0003V15.0003\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M7.00065 5.99954V5.99954C8.10482 5.99951 8.99998 6.89498 9.00006 7.99916V7.99916\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M12 6.9809V6.9809C12.6295 5.73389 12.6351 4.2633 12.0152 3.01152L12 2.9809\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M14.5 9.49997L13.9999 10.0001\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M20.5 3.5L20 4\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M17.5 6.5L17 7\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M17 3L16.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M21 7L20.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.04457 11.861C8.81251 11.2548 9.85282 11.0883 10.7731 11.4401C11.5905 11.7526 12.244 12.3872 12.5807 13.195L12.6149 13.277C13.0104 14.2266 12.8605 15.3161 12.2233 16.1237C10.5778 18.208 8.68645 20.0995 6.60414 21.7467C5.78186 22.3972 4.66406 22.5451 3.70082 22.1247L3.61781 22.0885C2.84936 21.7528 2.24284 21.129 1.92934 20.3512C1.55283 19.4165 1.71725 18.347 2.33656 17.5641C3.99682 15.4654 5.94386 13.5195 8.04457 11.861Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16 14.2505C17.5181 14.2508 18.749 15.482 18.749 17.0005C18.7489 17.4146 18.4132 17.7505 17.999 17.7505C17.5852 17.7501 17.2501 17.4144 17.25 17.0005C17.25 16.3107 16.6901 15.7507 16 15.7505C15.5859 15.7503 15.25 15.4146 15.25 15.0005C15.2502 14.5865 15.586 14.2507 16 14.2505Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16.6982 11.313C18.0699 10.6338 19.6664 10.5965 21.0615 11.2007L21.3389 11.3296L21.4043 11.3687C21.7248 11.5733 21.8449 11.9917 21.6699 12.3384C21.4949 12.6849 21.0872 12.8368 20.7324 12.7007L20.6621 12.6704L20.4658 12.5777C19.4741 12.1481 18.3394 12.1741 17.3643 12.6568L17.333 12.6714L17.2627 12.7017C16.9067 12.8352 16.5005 12.6806 16.3281 12.3325C16.1445 11.9614 16.2968 11.5115 16.668 11.3277L16.6982 11.313Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M13.9697 8.97024C14.2626 8.67734 14.7374 8.67736 15.0303 8.97024C15.323 9.26314 15.3231 9.73794 15.0303 10.0308L14.5303 10.5308C14.2374 10.8236 13.7626 10.8235 13.4697 10.5308C13.1769 10.2379 13.1769 9.76314 13.4697 9.47024L13.9697 8.97024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M7.00098 5.25051C8.42437 5.25061 9.59428 6.33237 9.73535 7.71829L9.75 7.99954L9.74707 8.07668C9.70856 8.45454 9.38893 8.74921 9.00098 8.74954C8.61276 8.74957 8.29347 8.45472 8.25488 8.07668L8.25098 7.99954L8.24414 7.87161C8.17995 7.24166 7.64745 6.75058 7.00098 6.75051C6.58696 6.75046 6.25122 6.41449 6.25098 6.00051C6.25096 5.58636 6.58685 5.25063 7.00098 5.25051Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M20.4697 6.47024C20.7626 6.17735 21.2374 6.17735 21.5303 6.47024C21.823 6.76314 21.8231 7.23794 21.5303 7.53079L21.0303 8.03079L20.9727 8.08254C20.6781 8.32229 20.2442 8.30506 19.9697 8.03079C19.6769 7.73792 19.6769 7.26314 19.9697 6.97024L20.4697 6.47024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16.9697 5.97024C17.2626 5.67735 17.7374 5.67735 18.0303 5.97024C18.323 6.26314 18.3231 6.73794 18.0303 7.03079L17.5303 7.53079L17.4727 7.58254C17.1781 7.82229 16.7442 7.80506 16.4697 7.53079C16.1769 7.23792 16.1769 6.76314 16.4697 6.47024L16.9697 5.97024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M11.667 2.30813C12.0381 2.12449 12.4881 2.27784 12.6719 2.64895L12.6875 2.67922C13.3666 4.05093 13.4031 5.64736 12.7988 7.04251L12.6689 7.3179L12.6318 7.38528C12.4273 7.70555 12.0087 7.82557 11.6621 7.6509C11.3155 7.4759 11.1637 7.06828 11.2998 6.7134L11.3301 6.64309L11.4219 6.4468C11.8515 5.45508 11.8254 4.32034 11.3428 3.34524L11.3281 3.31399L11.2979 3.24368C11.1643 2.88766 11.3189 2.48051 11.667 2.30813Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M19.9697 2.97024C20.2626 2.67735 20.7374 2.67735 21.0303 2.97024C21.323 3.26314 21.3231 3.73794 21.0303 4.03079L20.5303 4.53079C20.2374 4.82355 19.7626 4.82351 19.4697 4.53079C19.1769 4.23792 19.1769 3.76314 19.4697 3.47024L19.9697 2.97024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16.4697 2.47024C16.7626 2.17735 17.2374 2.17735 17.5303 2.47024C17.823 2.76314 17.8231 3.23794 17.5303 3.53079L17.0303 4.03079L16.9727 4.08254C16.6781 4.32229 16.2442 4.30506 15.9697 4.03079C15.6769 3.73792 15.6769 3.26314 15.9697 2.97024L16.4697 2.47024Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import NiAI from \"./nexture/ni-ai\";\nimport NiAirBalloon from \"./nexture/ni-air-balloon\";\nimport NiAnchor from \"./nexture/ni-anchor\";\nimport NiAnnouncement from \"./nexture/ni-announcement\";\nimport NiAntenna from \"./nexture/ni-antenna\";\nimport NiArchive from \"./nexture/ni-archive\";\nimport NiArchiveCheck from \"./nexture/ni-archive-check\";\nimport NiArrowCircleLeft from \"./nexture/ni-arrow-circle-left\";\nimport NiArrowCircleRight from \"./nexture/ni-arrow-circle-right\";\nimport NiArrowDown from \"./nexture/ni-arrow-down\";\nimport NiArrowDownLeft from \"./nexture/ni-arrow-down-left\";\nimport NiArrowDownLeftSquare from \"./nexture/ni-arrow-down-left-square\";\nimport NiArrowDownRight from \"./nexture/ni-arrow-down-right\";\nimport NiArrowDownRightSquare from \"./nexture/ni-arrow-down-right-square\";\nimport NiArrowDownSquare from \"./nexture/ni-arrow-down-square\";\nimport NiArrowHistory from \"./nexture/ni-arrow-history\";\nimport NiArrowInDown from \"./nexture/ni-arrow-in-down\";\nimport NiArrowInLeft from \"./nexture/ni-arrow-in-left\";\nimport NiArrowInRight from \"./nexture/ni-arrow-in-right\";\nimport NiArrowInUp from \"./nexture/ni-arrow-in-up\";\nimport NiArrowLeft from \"./nexture/ni-arrow-left\";\nimport NiArrowLeftRight from \"./nexture/ni-arrow-left-right\";\nimport NiArrowLeftSquare from \"./nexture/ni-arrow-left-square\";\nimport NiArrowOutDown from \"./nexture/ni-arrow-out-down\";\nimport NiArrowOutLeft from \"./nexture/ni-arrow-out-left\";\nimport NiArrowOutRight from \"./nexture/ni-arrow-out-right\";\nimport NiArrowOutUp from \"./nexture/ni-arrow-out-up\";\nimport NiArrowRight from \"./nexture/ni-arrow-right\";\nimport NiArrowRightSquare from \"./nexture/ni-arrow-right-square\";\nimport NiArrowUp from \"./nexture/ni-arrow-up\";\nimport NiArrowUpDown from \"./nexture/ni-arrow-up-down\";\nimport NiArrowUpLeft from \"./nexture/ni-arrow-up-left\";\nimport NiArrowUpLeftSquare from \"./nexture/ni-arrow-up-left-square\";\nimport NiArrowUpRight from \"./nexture/ni-arrow-up-right\";\nimport NiArrowUpRightSquare from \"./nexture/ni-arrow-up-right-square\";\nimport NiArrowUpSquare from \"./nexture/ni-arrow-up-square\";\nimport NiAt from \"./nexture/ni-at\";\nimport NiBadge from \"./nexture/ni-badge\";\nimport NiBadgeCheck from \"./nexture/ni-badge-check\";\nimport NiBag from \"./nexture/ni-bag\";\nimport NiBandAid from \"./nexture/ni-band-aid\";\nimport NiBarcode from \"./nexture/ni-barcode\";\nimport NiBasket from \"./nexture/ni-basket\";\nimport NiBatteryCharging from \"./nexture/ni-battery-charging\";\nimport NiBatteryEmpty from \"./nexture/ni-battery-empty\";\nimport NiBatteryFull from \"./nexture/ni-battery-full\";\nimport NiBell from \"./nexture/ni-bell\";\nimport NiBellInactive from \"./nexture/ni-bell-inactive\";\nimport NiBinEmpty from \"./nexture/ni-bin-empty\";\nimport NiBinFull from \"./nexture/ni-bin-full\";\nimport NiBloodCells from \"./nexture/ni-blood-cells\";\nimport NiBluetooth from \"./nexture/ni-bluetooth\";\nimport NiBook from \"./nexture/ni-book\";\nimport NiBookmark from \"./nexture/ni-bookmark\";\nimport NiBookmarkSingle from \"./nexture/ni-bookmark-single\";\nimport NiBraces from \"./nexture/ni-braces\";\nimport NiBrackets from \"./nexture/ni-brackets\";\nimport NiBrain from \"./nexture/ni-brain\";\nimport NiBrainCircuit from \"./nexture/ni-brain-circuit\";\nimport NiBriefcase from \"./nexture/ni-briefcase\";\nimport NiBrush from \"./nexture/ni-brush\";\nimport NiBrushArt from \"./nexture/ni-brush-art\";\nimport NiBrushArtSquare from \"./nexture/ni-brush-art-square\";\nimport NiBug from \"./nexture/ni-bug\";\nimport NiBuilding from \"./nexture/ni-building\";\nimport NiBulbOff from \"./nexture/ni-bulb-off\";\nimport NiBulbOn from \"./nexture/ni-bulb-on\";\nimport NiButton from \"./nexture/ni-button\";\nimport NiButtonGroup from \"./nexture/ni-button-group\";\nimport NiButtonLarge from \"./nexture/ni-button-large\";\nimport NiCake from \"./nexture/ni-cake\";\nimport NiCalendar from \"./nexture/ni-calendar\";\nimport NiCalendarClock from \"./nexture/ni-calendar-clock\";\nimport NiCamera from \"./nexture/ni-camera\";\nimport NiCar from \"./nexture/ni-car\";\nimport NiCartArrow from \"./nexture/ni-cart-arrow\";\nimport NiCartCross from \"./nexture/ni-cart-cross\";\nimport NiCartEmpty from \"./nexture/ni-cart-empty\";\nimport NiCartMinus from \"./nexture/ni-cart-minus\";\nimport NiCartPlus from \"./nexture/ni-cart-plus\";\nimport NiCatalog from \"./nexture/ni-catalog\";\nimport NiCells from \"./nexture/ni-cells\";\nimport NiCellsPlus from \"./nexture/ni-cells-plus\";\nimport NiChange from \"./nexture/ni-change\";\nimport NiChartBar from \"./nexture/ni-chart-bar\";\nimport NiChartCandleSticks from \"./nexture/ni-chart-candle-sticks\";\nimport NiChartFunnel from \"./nexture/ni-chart-funnel\";\nimport NiChartHeatmap from \"./nexture/ni-chart-heatmap\";\nimport NiChartLine from \"./nexture/ni-chart-line\";\nimport NiChartLineBar from \"./nexture/ni-chart-line-bar\";\nimport NiChartPie from \"./nexture/ni-chart-pie\";\nimport NiChartPolar from \"./nexture/ni-chart-polar\";\nimport NiChartRadar from \"./nexture/ni-chart-radar\";\nimport NiChartScatter from \"./nexture/ni-chart-scatter\";\nimport NiCheck from \"./nexture/ni-check\";\nimport NiCheckFull from \"./nexture/ni-check-full\";\nimport NiCheckSquare from \"./nexture/ni-check-square\";\nimport NiChef from \"./nexture/ni-chef\";\nimport NiChevronDown from \"./nexture/ni-chevron-down\";\nimport NiChevronDownSmall from \"./nexture/ni-chevron-down-small\";\nimport NiChevronLeft from \"./nexture/ni-chevron-left\";\nimport NiChevronLeftRightReverseSmall from \"./nexture/ni-chevron-left-right-reverse-small\";\nimport NiChevronLeftRightSmall from \"./nexture/ni-chevron-left-right-small\";\nimport NiChevronLeftSmall from \"./nexture/ni-chevron-left-small\";\nimport NiChevronRight from \"./nexture/ni-chevron-right\";\nimport NiChevronRightSmall from \"./nexture/ni-chevron-right-small\";\nimport NiChevronUp from \"./nexture/ni-chevron-up\";\nimport NiChevronUpDownReverseSmall from \"./nexture/ni-chevron-up-down-reverse-small\";\nimport NiChevronUpDownSmall from \"./nexture/ni-chevron-up-down-small\";\nimport NiChevronUpSmall from \"./nexture/ni-chevron-up-small\";\nimport NiCholesterol from \"./nexture/ni-cholesterol\";\nimport NiCircle from \"./nexture/ni-circle\";\nimport NiClipboard from \"./nexture/ni-clipboard\";\nimport NiClock from \"./nexture/ni-clock\";\nimport NiCloud from \"./nexture/ni-cloud\";\nimport NiCloudPartly from \"./nexture/ni-cloud-partly\";\nimport NiCloudRain from \"./nexture/ni-cloud-rain\";\nimport NiCloudSnow from \"./nexture/ni-cloud-snow\";\nimport NiCloudThunder from \"./nexture/ni-cloud-thunder\";\nimport NiCode from \"./nexture/ni-code\";\nimport NiCoffee from \"./nexture/ni-coffee\";\nimport NiCoin from \"./nexture/ni-coin\";\nimport NiCollapse from \"./nexture/ni-collapse\";\nimport NiCollapseIn from \"./nexture/ni-collapse-in\";\nimport NiCols from \"./nexture/ni-cols\";\nimport NiCompass from \"./nexture/ni-compass\";\nimport NiController from \"./nexture/ni-controller\";\nimport NiCopyright from \"./nexture/ni-copyright\";\nimport NiCpu from \"./nexture/ni-cpu\";\nimport NiCreditCard from \"./nexture/ni-credit-card\";\nimport NiCrop from \"./nexture/ni-crop\";\nimport NiCross from \"./nexture/ni-cross\";\nimport NiCrossFull from \"./nexture/ni-cross-full\";\nimport NiCrossHexagon from \"./nexture/ni-cross-hexagon\";\nimport NiCrossSquare from \"./nexture/ni-cross-square\";\nimport NiCrosshair from \"./nexture/ni-crosshair\";\nimport NiCrown from \"./nexture/ni-crown\";\nimport NiCursor from \"./nexture/ni-cursor\";\nimport NiDashboard from \"./nexture/ni-dashboard\";\nimport NiDatabase from \"./nexture/ni-database\";\nimport NiDevops from \"./nexture/ni-devops\";\nimport NiDiagram from \"./nexture/ni-diagram\";\nimport NiDice from \"./nexture/ni-dice\";\nimport NiDirectory from \"./nexture/ni-directory\";\nimport NiDocumentArchive from \"./nexture/ni-document-archive\";\nimport NiDocumentChart from \"./nexture/ni-document-chart\";\nimport NiDocumentCheck from \"./nexture/ni-document-check\";\nimport NiDocumentCode from \"./nexture/ni-document-code\";\nimport NiDocumentCross from \"./nexture/ni-document-cross\";\nimport NiDocumentFull from \"./nexture/ni-document-full\";\nimport NiDocumentImage from \"./nexture/ni-document-image\";\nimport NiDocumentMinus from \"./nexture/ni-document-minus\";\nimport NiDocumentNumber from \"./nexture/ni-document-number\";\nimport NiDocumentPlus from \"./nexture/ni-document-plus\";\nimport NiDocumentVideo from \"./nexture/ni-document-video\";\nimport NiDollar from \"./nexture/ni-dollar\";\nimport NiDollarSquare from \"./nexture/ni-dollar-square\";\nimport NiDotsSquare from \"./nexture/ni-dots-square\";\nimport NiDownloadCloud from \"./nexture/ni-download-cloud\";\nimport NiDragHorizontal from \"./nexture/ni-drag-horizontal\";\nimport NiDragVertical from \"./nexture/ni-drag-vertical\";\nimport NiDrink from \"./nexture/ni-drink\";\nimport NiDrop from \"./nexture/ni-drop\";\nimport NiDuplicate from \"./nexture/ni-duplicate\";\nimport NiEllipsisHorizontal from \"./nexture/ni-ellipsis-horizontal\";\nimport NiEllipsisVertical from \"./nexture/ni-ellipsis-vertical\";\nimport NiEmail from \"./nexture/ni-email\";\nimport NiEmailOpen from \"./nexture/ni-email-open\";\nimport NiEndDownSmall from \"./nexture/ni-end-down-small\";\nimport NiEndLeftSmall from \"./nexture/ni-end-left-small\";\nimport NiEndRightSmall from \"./nexture/ni-end-right-small\";\nimport NiEndUpSmall from \"./nexture/ni-end-up-small\";\nimport NiEnterDown from \"./nexture/ni-enter-down\";\nimport NiEnterLeft from \"./nexture/ni-enter-left\";\nimport NiEnterReverseDown from \"./nexture/ni-enter-reverse-down\";\nimport NiEnterReverseLeft from \"./nexture/ni-enter-reverse-left\";\nimport NiEnterReverseRight from \"./nexture/ni-enter-reverse-right\";\nimport NiEnterReverseUp from \"./nexture/ni-enter-reverse-up\";\nimport NiEnterRight from \"./nexture/ni-enter-right\";\nimport NiEnterUp from \"./nexture/ni-enter-up\";\nimport NiEquals from \"./nexture/ni-equals\";\nimport NiEqualsFull from \"./nexture/ni-equals-full\";\nimport NiEraser from \"./nexture/ni-eraser\";\nimport NiEuro from \"./nexture/ni-euro\";\nimport NiEuroSquare from \"./nexture/ni-euro-square\";\nimport NiExclamationHexagon from \"./nexture/ni-exclamation-hexagon\";\nimport NiExclamationSquare from \"./nexture/ni-exclamation-square\";\nimport NiExpand from \"./nexture/ni-expand\";\nimport NiExpandFull from \"./nexture/ni-expand-full\";\nimport NiExpandOut from \"./nexture/ni-expand-out\";\nimport NiExpandSquare from \"./nexture/ni-expand-square\";\nimport NiExternal from \"./nexture/ni-external\";\nimport NiEyeClose from \"./nexture/ni-eye-close\";\nimport NiEyeInactive from \"./nexture/ni-eye-inactive\";\nimport NiEyeOpen from \"./nexture/ni-eye-open\";\nimport NiFaceFrown from \"./nexture/ni-face-frown\";\nimport NiFaceFrownMore from \"./nexture/ni-face-frown-more\";\nimport NiFaceNeutral from \"./nexture/ni-face-neutral\";\nimport NiFaceSmile from \"./nexture/ni-face-smile\";\nimport NiFaceSmileMore from \"./nexture/ni-face-smile-more\";\nimport NiFemale from \"./nexture/ni-female\";\nimport NiFilter from \"./nexture/ni-filter\";\nimport NiFilterCross from \"./nexture/ni-filter-cross\";\nimport NiFilterMinus from \"./nexture/ni-filter-minus\";\nimport NiFilterPlus from \"./nexture/ni-filter-plus\";\nimport NiFingerprint from \"./nexture/ni-fingerprint\";\nimport NiFire from \"./nexture/ni-fire\";\nimport NiFirstAid from \"./nexture/ni-first-aid\";\nimport NiFitness from \"./nexture/ni-fitness\";\nimport NiFlag from \"./nexture/ni-flag\";\nimport NiFlash from \"./nexture/ni-flash\";\nimport NiFlask from \"./nexture/ni-flask\";\nimport NiFloppyDisk from \"./nexture/ni-floppy-disk\";\nimport NiFolder from \"./nexture/ni-folder\";\nimport NiFolderCheck from \"./nexture/ni-folder-check\";\nimport NiFolderCross from \"./nexture/ni-folder-cross\";\nimport NiFolderMinus from \"./nexture/ni-folder-minus\";\nimport NiFolderPlus from \"./nexture/ni-folder-plus\";\nimport NiForwardDownSmall from \"./nexture/ni-forward-down-small\";\nimport NiForwardLeftSmall from \"./nexture/ni-forward-left-small\";\nimport NiForwardRightSmall from \"./nexture/ni-forward-right-small\";\nimport NiForwardUpSmall from \"./nexture/ni-forward-up-small\";\nimport NiGay from \"./nexture/ni-gay\";\nimport NiGerm from \"./nexture/ni-germ\";\nimport NiGogo from \"./nexture/ni-gogo\";\nimport NiGold from \"./nexture/ni-gold\";\nimport NiGpu from \"./nexture/ni-gpu\";\nimport NiGraduation from \"./nexture/ni-graduation\";\nimport NiGroup from \"./nexture/ni-group\";\nimport NiHeadphones from \"./nexture/ni-headphones\";\nimport NiHeadset from \"./nexture/ni-headset\";\nimport NiHeadsetMic from \"./nexture/ni-headset-mic\";\nimport NiHealth from \"./nexture/ni-health\";\nimport NiHeart from \"./nexture/ni-heart\";\nimport NiHeartRate from \"./nexture/ni-heart-rate\";\nimport NiHearts from \"./nexture/ni-hearts\";\nimport NiHome from \"./nexture/ni-home\";\nimport NiInbox from \"./nexture/ni-inbox\";\nimport NiInfoSquare from \"./nexture/ni-info-square\";\nimport NiInjection from \"./nexture/ni-injection\";\nimport NiInput from \"./nexture/ni-input\";\nimport NiIntegration from \"./nexture/ni-integration\";\nimport NiInternal from \"./nexture/ni-internal\";\nimport NiIv from \"./nexture/ni-iv\";\nimport NiJoin from \"./nexture/ni-join\";\nimport NiKey from \"./nexture/ni-key\";\nimport NiKeyboard from \"./nexture/ni-keyboard\";\nimport NiKnobs from \"./nexture/ni-knobs\";\nimport NiLaptop from \"./nexture/ni-laptop\";\nimport NiLaw from \"./nexture/ni-law\";\nimport NiLayout from \"./nexture/ni-layout\";\nimport NiLike from \"./nexture/ni-like\";\nimport NiLink from \"./nexture/ni-link\";\nimport NiLinkBroken from \"./nexture/ni-link-broken\";\nimport NiList from \"./nexture/ni-list\";\nimport NiListCheck from \"./nexture/ni-list-check\";\nimport NiListChevronDown from \"./nexture/ni-list-chevron-down\";\nimport NiListCircle from \"./nexture/ni-list-circle\";\nimport NiListCross from \"./nexture/ni-list-cross\";\nimport NiListNumber from \"./nexture/ni-list-number\";\nimport NiListSquare from \"./nexture/ni-list-square\";\nimport NiLoader from \"./nexture/ni-loader\";\nimport NiLock from \"./nexture/ni-lock\";\nimport NiLuggage from \"./nexture/ni-luggage\";\nimport NiLungs from \"./nexture/ni-lungs\";\nimport NiMagicWand from \"./nexture/ni-magic-wand\";\nimport NiMale from \"./nexture/ni-male\";\nimport NiMap from \"./nexture/ni-map\";\nimport NiMasonary from \"./nexture/ni-masonary\";\nimport NiMedal from \"./nexture/ni-medal\";\nimport NiMenu from \"./nexture/ni-menu\";\nimport NiMenuLeft from \"./nexture/ni-menu-left\";\nimport NiMenuRight from \"./nexture/ni-menu-right\";\nimport NiMenuSplit from \"./nexture/ni-menu-split\";\nimport NiMenuSplitDot from \"./nexture/ni-menu-split-dot\";\nimport NiMenuSplitDotReverse from \"./nexture/ni-menu-split-dot-reverse\";\nimport NiMenuSplitReverse from \"./nexture/ni-menu-split-reverse\";\nimport NiMessage from \"./nexture/ni-message\";\nimport NiMessageCheck from \"./nexture/ni-message-check\";\nimport NiMessageCross from \"./nexture/ni-message-cross\";\nimport NiMessageDots from \"./nexture/ni-message-dots\";\nimport NiMessageFilled from \"./nexture/ni-message-filled\";\nimport NiMessageGrammar from \"./nexture/ni-message-grammar\";\nimport NiMessagePlus from \"./nexture/ni-message-plus\";\nimport NiMessages from \"./nexture/ni-messages\";\nimport NiMicrophone from \"./nexture/ni-microphone\";\nimport NiMinus from \"./nexture/ni-minus\";\nimport NiMinusFull from \"./nexture/ni-minus-full\";\nimport NiMinusSquare from \"./nexture/ni-minus-square\";\nimport NiMoney from \"./nexture/ni-money\";\nimport NiMoneyBag from \"./nexture/ni-money-bag\";\nimport NiMoon from \"./nexture/ni-moon\";\nimport NiMountain from \"./nexture/ni-mountain\";\nimport NiMouse from \"./nexture/ni-mouse\";\nimport NiMove from \"./nexture/ni-move\";\nimport NiMusic from \"./nexture/ni-music\";\nimport NiNetwork from \"./nexture/ni-network\";\nimport NiNext from \"./nexture/ni-next\";\nimport NiOxygen from \"./nexture/ni-oxygen\";\nimport NiPaintBucket from \"./nexture/ni-paint-bucket\";\nimport NiPaintRoller from \"./nexture/ni-paint-roller\";\nimport NiPalette from \"./nexture/ni-palette\";\nimport NiPaperclip from \"./nexture/ni-paperclip\";\nimport NiParentheses from \"./nexture/ni-parentheses\";\nimport NiPath from \"./nexture/ni-path\";\nimport NiPause from \"./nexture/ni-pause\";\nimport NiPen from \"./nexture/ni-pen\";\nimport NiPenSquare from \"./nexture/ni-pen-square\";\nimport NiPercent from \"./nexture/ni-percent\";\nimport NiPhone from \"./nexture/ni-phone\";\nimport NiPhoneHandset from \"./nexture/ni-phone-handset\";\nimport NiPhoneHandsetCheck from \"./nexture/ni-phone-handset-check\";\nimport NiPhoneHandsetOff from \"./nexture/ni-phone-handset-off\";\nimport NiPhoneHandsetOn from \"./nexture/ni-phone-handset-on\";\nimport NiPin from \"./nexture/ni-pin\";\nimport NiPinCheck from \"./nexture/ni-pin-check\";\nimport NiPinCross from \"./nexture/ni-pin-cross\";\nimport NiPinPlus from \"./nexture/ni-pin-plus\";\nimport NiPine from \"./nexture/ni-pine\";\nimport NiPivot from \"./nexture/ni-pivot\";\nimport NiPlane from \"./nexture/ni-plane\";\nimport NiPlay from \"./nexture/ni-play\";\nimport NiPlug from \"./nexture/ni-plug\";\nimport NiPlus from \"./nexture/ni-plus\";\nimport NiPlusFull from \"./nexture/ni-plus-full\";\nimport NiPlusSquare from \"./nexture/ni-plus-square\";\nimport NiPolitics from \"./nexture/ni-politics\";\nimport NiPound from \"./nexture/ni-pound\";\nimport NiPoundSquare from \"./nexture/ni-pound-square\";\nimport NiPower from \"./nexture/ni-power\";\nimport NiPresentation from \"./nexture/ni-presentation\";\nimport NiPrevious from \"./nexture/ni-previous\";\nimport NiPrinter from \"./nexture/ni-printer\";\nimport NiProgress from \"./nexture/ni-progress\";\nimport NiPullRequestClosed from \"./nexture/ni-pull-request-closed\";\nimport NiPullRequestDraft from \"./nexture/ni-pull-request-draft\";\nimport NiPullRequestMerged from \"./nexture/ni-pull-request-merged\";\nimport NiPullRequestOpen from \"./nexture/ni-pull-request-open\";\nimport NiPulse from \"./nexture/ni-pulse\";\nimport NiPushPin from \"./nexture/ni-push-pin\";\nimport NiPushPinLeft from \"./nexture/ni-push-pin-left\";\nimport NiPushPinRight from \"./nexture/ni-push-pin-right\";\nimport NiPuzzle from \"./nexture/ni-puzzle\";\nimport NiQuestionHexagon from \"./nexture/ni-question-hexagon\";\nimport NiRadio from \"./nexture/ni-radio\";\nimport NiRankFour from \"./nexture/ni-rank-four\";\nimport NiRankOne from \"./nexture/ni-rank-one\";\nimport NiRankThree from \"./nexture/ni-rank-three\";\nimport NiRankTwo from \"./nexture/ni-rank-two\";\nimport NiReceipt from \"./nexture/ni-receipt\";\nimport NiRecord from \"./nexture/ni-record\";\nimport NiRefresh from \"./nexture/ni-refresh\";\nimport NiReligion from \"./nexture/ni-religion\";\nimport NiResearch from \"./nexture/ni-research\";\nimport NiRevenue from \"./nexture/ni-revenue\";\nimport NiReverseLeft from \"./nexture/ni-reverse-left\";\nimport NiReverseRight from \"./nexture/ni-reverse-right\";\nimport NiRobot from \"./nexture/ni-robot\";\nimport NiRocket from \"./nexture/ni-rocket\";\nimport NiRouter from \"./nexture/ni-router\";\nimport NiRows from \"./nexture/ni-rows\";\nimport NiSafe from \"./nexture/ni-safe\";\nimport NiScale from \"./nexture/ni-scale\";\nimport NiScalpel from \"./nexture/ni-scalpel\";\nimport NiScissors from \"./nexture/ni-scissors\";\nimport NiScreen from \"./nexture/ni-screen\";\nimport NiScriptSub from \"./nexture/ni-script-sub\";\nimport NiScriptSuper from \"./nexture/ni-script-super\";\nimport NiSdCard from \"./nexture/ni-sd-card\";\nimport NiSearch from \"./nexture/ni-search\";\nimport NiSelect from \"./nexture/ni-select\";\nimport NiSendDown from \"./nexture/ni-send-down\";\nimport NiSendDownLeft from \"./nexture/ni-send-down-left\";\nimport NiSendDownRight from \"./nexture/ni-send-down-right\";\nimport NiSendLeft from \"./nexture/ni-send-left\";\nimport NiSendRight from \"./nexture/ni-send-right\";\nimport NiSendUp from \"./nexture/ni-send-up\";\nimport NiSendUpLeft from \"./nexture/ni-send-up-left\";\nimport NiSendUpRight from \"./nexture/ni-send-up-right\";\nimport NiServer from \"./nexture/ni-server\";\nimport NiSettings from \"./nexture/ni-settings\";\nimport NiShare from \"./nexture/ni-share\";\nimport NiShield from \"./nexture/ni-shield\";\nimport NiShieldCheck from \"./nexture/ni-shield-check\";\nimport NiShieldCross from \"./nexture/ni-shield-cross\";\nimport NiShrinkFull from \"./nexture/ni-shrink-full\";\nimport NiShrinkSquare from \"./nexture/ni-shrink-square\";\nimport NiShuffle from \"./nexture/ni-shuffle\";\nimport NiSign from \"./nexture/ni-sign\";\nimport NiSignalLeftRight from \"./nexture/ni-signal-left-right\";\nimport NiSignalRight from \"./nexture/ni-signal-right\";\nimport NiSignalUp from \"./nexture/ni-signal-up\";\nimport NiSigns from \"./nexture/ni-signs\";\nimport NiSlashHexagon from \"./nexture/ni-slash-hexagon\";\nimport NiSlider from \"./nexture/ni-slider\";\nimport NiSnow from \"./nexture/ni-snow\";\nimport NiSoundCross from \"./nexture/ni-sound-cross\";\nimport NiSoundOff from \"./nexture/ni-sound-off\";\nimport NiSoundOn from \"./nexture/ni-sound-on\";\nimport NiSoundPlus from \"./nexture/ni-sound-plus\";\nimport NiSparkle from \"./nexture/ni-sparkle\";\nimport NiSpinner from \"./nexture/ni-spinner\";\nimport NiSquare from \"./nexture/ni-square\";\nimport NiSquircle from \"./nexture/ni-squircle\";\nimport NiStar from \"./nexture/ni-star\";\nimport NiStars from \"./nexture/ni-stars\";\nimport NiStomach from \"./nexture/ni-stomach\";\nimport NiStopwatch from \"./nexture/ni-stopwatch\";\nimport NiStore from \"./nexture/ni-store\";\nimport NiStructure from \"./nexture/ni-structure\";\nimport NiSum from \"./nexture/ni-sum\";\nimport NiSun from \"./nexture/ni-sun\";\nimport NiSwap from \"./nexture/ni-swap\";\nimport NiSwitch from \"./nexture/ni-switch\";\nimport NiTablet from \"./nexture/ni-tablet\";\nimport NiTag from \"./nexture/ni-tag\";\nimport NiTelescope from \"./nexture/ni-telescope\";\nimport NiTemperature from \"./nexture/ni-temperature\";\nimport NiTent from \"./nexture/ni-tent\";\nimport NiTerminal from \"./nexture/ni-terminal\";\nimport NiTextBold from \"./nexture/ni-text-bold\";\nimport NiTextCenter from \"./nexture/ni-text-center\";\nimport NiTextFont from \"./nexture/ni-text-font\";\nimport NiTextItalic from \"./nexture/ni-text-italic\";\nimport NiTextJustify from \"./nexture/ni-text-justify\";\nimport NiTextLeft from \"./nexture/ni-text-left\";\nimport NiTextQuote from \"./nexture/ni-text-quote\";\nimport NiTextRight from \"./nexture/ni-text-right\";\nimport NiTextStrikethrough from \"./nexture/ni-text-strikethrough\";\nimport NiTextUnderline from \"./nexture/ni-text-underline\";\nimport NiTextarea from \"./nexture/ni-textarea\";\nimport NiTicket from \"./nexture/ni-ticket\";\nimport NiTimeline from \"./nexture/ni-timeline\";\nimport NiTooth from \"./nexture/ni-tooth\";\nimport NiToyBoat from \"./nexture/ni-toy-boat\";\nimport NiToySky from \"./nexture/ni-toy-sky\";\nimport NiToyStacking from \"./nexture/ni-toy-stacking\";\nimport NiTrade from \"./nexture/ni-trade\";\nimport NiTree from \"./nexture/ni-tree\";\nimport NiTrendDown from \"./nexture/ni-trend-down\";\nimport NiTrendUp from \"./nexture/ni-trend-up\";\nimport NiTriangleDown from \"./nexture/ni-triangle-down\";\nimport NiTriangleLeft from \"./nexture/ni-triangle-left\";\nimport NiTriangleRight from \"./nexture/ni-triangle-right\";\nimport NiTriangleUp from \"./nexture/ni-triangle-up\";\nimport NiTrophy from \"./nexture/ni-trophy\";\nimport NiTruck from \"./nexture/ni-truck\";\nimport NiTubes from \"./nexture/ni-tubes\";\nimport NiUngroup from \"./nexture/ni-ungroup\";\nimport NiUnlike from \"./nexture/ni-unlike\";\nimport NiUnlock from \"./nexture/ni-unlock\";\nimport NiUploadCloud from \"./nexture/ni-upload-cloud\";\nimport NiUser from \"./nexture/ni-user\";\nimport NiUserCheck from \"./nexture/ni-user-check\";\nimport NiUserCross from \"./nexture/ni-user-cross\";\nimport NiUserMinus from \"./nexture/ni-user-minus\";\nimport NiUserPlus from \"./nexture/ni-user-plus\";\nimport NiUsers from \"./nexture/ni-users\";\nimport NiVerified from \"./nexture/ni-verified\";\nimport NiWallet from \"./nexture/ni-wallet\";\nimport NiWalletCrypto from \"./nexture/ni-wallet-crypto\";\nimport NiWatch from \"./nexture/ni-watch\";\nimport NiWeightScale from \"./nexture/ni-weight-scale\";\nimport NiWind from \"./nexture/ni-wind\";\nimport NiWorld from \"./nexture/ni-world\";\nimport NiZoomIn from \"./nexture/ni-zoom-in\";\nimport NiZoomOut from \"./nexture/ni-zoom-out\";\n\nexport const IconMap = {\n NiAI,\n NiAirBalloon,\n NiAnchor,\n NiAnnouncement,\n NiAntenna,\n NiArchiveCheck,\n NiArchive,\n NiArrowCircleLeft,\n NiArrowCircleRight,\n NiArrowDownLeftSquare,\n NiArrowDownLeft,\n NiArrowDownRightSquare,\n NiArrowDownRight,\n NiArrowDownSquare,\n NiArrowDown,\n NiArrowHistory,\n NiArrowInDown,\n NiArrowInLeft,\n NiArrowInRight,\n NiArrowInUp,\n NiArrowLeftRight,\n NiArrowLeftSquare,\n NiArrowLeft,\n NiArrowOutDown,\n NiArrowOutLeft,\n NiArrowOutRight,\n NiArrowOutUp,\n NiArrowRightSquare,\n NiArrowRight,\n NiArrowUpDown,\n NiArrowUpLeftSquare,\n NiArrowUpLeft,\n NiArrowUpRightSquare,\n NiArrowUpRight,\n NiArrowUpSquare,\n NiArrowUp,\n NiAt,\n NiBadgeCheck,\n NiBadge,\n NiBag,\n NiBandAid,\n NiBarcode,\n NiBasket,\n NiBatteryCharging,\n NiBatteryEmpty,\n NiBatteryFull,\n NiBellInactive,\n NiBell,\n NiBinEmpty,\n NiBinFull,\n NiBloodCells,\n NiBluetooth,\n NiBook,\n NiBookmarkSingle,\n NiBookmark,\n NiBraces,\n NiBrackets,\n NiBrain,\n NiBrainCircuit,\n NiBriefcase,\n NiBrushArtSquare,\n NiBrushArt,\n NiBrush,\n NiBug,\n NiBuilding,\n NiBulbOff,\n NiBulbOn,\n NiButton,\n NiButtonGroup,\n NiButtonLarge,\n NiCake,\n NiCalendar,\n NiCalendarClock,\n NiCamera,\n NiCar,\n NiCartArrow,\n NiCartCross,\n NiCartEmpty,\n NiCartMinus,\n NiCartPlus,\n NiCatalog,\n NiCellsPlus,\n NiCells,\n NiChange,\n NiChartBar,\n NiChartCandleSticks,\n NiChartFunnel,\n NiChartHeatmap,\n NiChartLineBar,\n NiChartLine,\n NiChartPie,\n NiChartPolar,\n NiChartRadar,\n NiChartScatter,\n NiCheckSquare,\n NiCheck,\n NiCheckFull,\n NiChef,\n NiChevronDownSmall,\n NiChevronDown,\n NiChevronLeftRightReverseSmall,\n NiChevronLeftRightSmall,\n NiChevronLeftSmall,\n NiChevronLeft,\n NiChevronRightSmall,\n NiChevronRight,\n NiChevronUpDownReverseSmall,\n NiChevronUpDownSmall,\n NiChevronUpSmall,\n NiChevronUp,\n NiCholesterol,\n NiCircle,\n NiClipboard,\n NiClock,\n NiCloudPartly,\n NiCloudRain,\n NiCloudSnow,\n NiCloudThunder,\n NiCloud,\n NiCode,\n NiCoffee,\n NiCoin,\n NiCollapse,\n NiCollapseIn,\n NiCols,\n NiCompass,\n NiController,\n NiCopyright,\n NiCpu,\n NiCreditCard,\n NiCrop,\n NiCrossHexagon,\n NiCrossSquare,\n NiCross,\n NiCrossFull,\n NiCrosshair,\n NiCrown,\n NiCursor,\n NiDashboard,\n NiDatabase,\n NiDevops,\n NiDiagram,\n NiDice,\n NiDirectory,\n NiDocumentArchive,\n NiDocumentChart,\n NiDocumentCheck,\n NiDocumentCode,\n NiDocumentCross,\n NiDocumentFull,\n NiDocumentImage,\n NiDocumentMinus,\n NiDocumentNumber,\n NiDocumentPlus,\n NiDocumentVideo,\n NiDollarSquare,\n NiDollar,\n NiDotsSquare,\n NiDownloadCloud,\n NiDragHorizontal,\n NiDragVertical,\n NiDrink,\n NiDrop,\n NiDuplicate,\n NiEllipsisHorizontal,\n NiEllipsisVertical,\n NiEmailOpen,\n NiEmail,\n NiEndDownSmall,\n NiEndLeftSmall,\n NiEndRightSmall,\n NiEndUpSmall,\n NiEnterDown,\n NiEnterLeft,\n NiEnterReverseDown,\n NiEnterReverseLeft,\n NiEnterReverseRight,\n NiEnterReverseUp,\n NiEnterRight,\n NiEnterUp,\n NiEquals,\n NiEqualsFull,\n NiEraser,\n NiEuroSquare,\n NiEuro,\n NiExclamationHexagon,\n NiExclamationSquare,\n NiExpandOut,\n NiExpandSquare,\n NiExpandFull,\n NiExpand,\n NiExternal,\n NiEyeClose,\n NiEyeInactive,\n NiEyeOpen,\n NiFaceFrownMore,\n NiFaceFrown,\n NiFaceNeutral,\n NiFaceSmileMore,\n NiFaceSmile,\n NiFemale,\n NiFilterCross,\n NiFilterMinus,\n NiFilterPlus,\n NiFilter,\n NiFingerprint,\n NiFire,\n NiFirstAid,\n NiFitness,\n NiFlag,\n NiFlash,\n NiFlask,\n NiFloppyDisk,\n NiFolderCheck,\n NiFolderCross,\n NiFolderMinus,\n NiFolderPlus,\n NiFolder,\n NiForwardDownSmall,\n NiForwardLeftSmall,\n NiForwardRightSmall,\n NiForwardUpSmall,\n NiGay,\n NiGerm,\n NiGogo,\n NiGold,\n NiGpu,\n NiGroup,\n NiGraduation,\n NiHeadphones,\n NiHeadset,\n NiHeadsetMic,\n NiHealth,\n NiHeart,\n NiHeartRate,\n NiHearts,\n NiHome,\n NiInbox,\n NiInfoSquare,\n NiInjection,\n NiInput,\n NiIntegration,\n NiInternal,\n NiIv,\n NiJoin,\n NiKey,\n NiKeyboard,\n NiKnobs,\n NiLaptop,\n NiLayout,\n NiLaw,\n NiLike,\n NiLinkBroken,\n NiLink,\n NiListCheck,\n NiListChevronDown,\n NiListCircle,\n NiListCross,\n NiListNumber,\n NiListSquare,\n NiList,\n NiLungs,\n NiLoader,\n NiLock,\n NiLuggage,\n NiMagicWand,\n NiMale,\n NiMap,\n NiMasonary,\n NiMedal,\n NiMenu,\n NiMenuLeft,\n NiMenuRight,\n NiMenuSplitDotReverse,\n NiMenuSplitDot,\n NiMenuSplitReverse,\n NiMenuSplit,\n NiMessageCheck,\n NiMessageCross,\n NiMessageDots,\n NiMessageFilled,\n NiMessageGrammar,\n NiMessagePlus,\n NiMessage,\n NiMessages,\n NiMicrophone,\n NiMinus,\n NiMinusFull,\n NiMinusSquare,\n NiMoneyBag,\n NiMoney,\n NiMoon,\n NiMountain,\n NiMouse,\n NiMove,\n NiMusic,\n NiNetwork,\n NiNext,\n NiOxygen,\n NiPaintBucket,\n NiPaintRoller,\n NiPalette,\n NiPaperclip,\n NiParentheses,\n NiPath,\n NiPause,\n NiPenSquare,\n NiPen,\n NiPercent,\n NiPhoneHandsetCheck,\n NiPhoneHandsetOff,\n NiPhoneHandsetOn,\n NiPhoneHandset,\n NiPhone,\n NiPinCheck,\n NiPinCross,\n NiPinPlus,\n NiPin,\n NiPine,\n NiPivot,\n NiPlane,\n NiPlay,\n NiPlug,\n NiPlusSquare,\n NiPlus,\n NiPlusFull,\n NiPolitics,\n NiPoundSquare,\n NiPound,\n NiPower,\n NiPresentation,\n NiPrevious,\n NiPrinter,\n NiProgress,\n NiPullRequestClosed,\n NiPullRequestDraft,\n NiPullRequestMerged,\n NiPullRequestOpen,\n NiPulse,\n NiPushPin,\n NiPushPinLeft,\n NiPushPinRight,\n NiPuzzle,\n NiQuestionHexagon,\n NiRankOne,\n NiRankTwo,\n NiRankThree,\n NiRankFour,\n NiRadio,\n NiReceipt,\n NiRecord,\n NiRefresh,\n NiReligion,\n NiResearch,\n NiRevenue,\n NiReverseLeft,\n NiReverseRight,\n NiRobot,\n NiRocket,\n NiRouter,\n NiRows,\n NiSafe,\n NiScale,\n NiScalpel,\n NiScissors,\n NiScreen,\n NiScriptSub,\n NiScriptSuper,\n NiSdCard,\n NiSearch,\n NiSelect,\n NiSendDownLeft,\n NiSendDownRight,\n NiSendDown,\n NiSendLeft,\n NiSendRight,\n NiSendUpLeft,\n NiSendUpRight,\n NiSendUp,\n NiServer,\n NiSettings,\n NiShare,\n NiShieldCheck,\n NiShieldCross,\n NiShield,\n NiShrinkSquare,\n NiShrinkFull,\n NiShuffle,\n NiSign,\n NiSignalLeftRight,\n NiSignalRight,\n NiSignalUp,\n NiSigns,\n NiSlashHexagon,\n NiSlider,\n NiSnow,\n NiSoundCross,\n NiSoundOff,\n NiSoundOn,\n NiSoundPlus,\n NiSparkle,\n NiSpinner,\n NiSquare,\n NiSquircle,\n NiStar,\n NiStars,\n NiStopwatch,\n NiStore,\n NiStomach,\n NiStructure,\n NiSum,\n NiSun,\n NiSwap,\n NiSwitch,\n NiTablet,\n NiTag,\n NiTelescope,\n NiTemperature,\n NiTent,\n NiTerminal,\n NiTextBold,\n NiTextCenter,\n NiTextFont,\n NiTextItalic,\n NiTextJustify,\n NiTextLeft,\n NiTextQuote,\n NiTextRight,\n NiTextStrikethrough,\n NiTextUnderline,\n NiTextarea,\n NiTicket,\n NiTimeline,\n NiTooth,\n NiToyBoat,\n NiToySky,\n NiToyStacking,\n NiTrade,\n NiTree,\n NiTrendDown,\n NiTrendUp,\n NiTriangleDown,\n NiTriangleLeft,\n NiTriangleRight,\n NiTriangleUp,\n NiTrophy,\n NiTruck,\n NiTubes,\n NiUngroup,\n NiUnlike,\n NiUnlock,\n NiUploadCloud,\n NiUserCheck,\n NiUserCross,\n NiUserMinus,\n NiUserPlus,\n NiUser,\n NiUsers,\n NiVerified,\n NiWalletCrypto,\n NiWallet,\n NiWatch,\n NiWeightScale,\n NiWind,\n NiWorld,\n NiZoomIn,\n NiZoomOut,\n};\n\nexport type IconName = keyof typeof IconMap;\nexport type IconSize = \"large\" | \"medium\" | \"small\" | \"tiny\" | number;\nexport type IconVariant = \"outlined\" | \"contained\";\n\nexport type NextureIconsProps = {\n variant?: IconVariant;\n className?: string;\n size?: IconSize;\n strokeWidth?: number;\n oneTone?: boolean;\n};\n\nexport type NextureIconsPropsComponent = NextureIconsProps & {\n icon: IconName;\n};\n\nconst NextureIcons: React.FC<NextureIconsPropsComponent> = ({\n icon,\n size = 20,\n variant = \"outlined\",\n className,\n strokeWidth = 1.5,\n oneTone = false,\n}) => {\n const IconComponent = IconMap[icon];\n if (!IconComponent) {\n console.warn(`Icon \"${icon}\" not found in IconMap.`);\n return null;\n }\n return (\n <IconComponent variant={variant} size={size} className={className} strokeWidth={strokeWidth} oneTone={oneTone} />\n );\n};\n\nexport const sizeHelper = (size: NextureIconsProps[\"size\"]) => {\n if (typeof size === \"number\") {\n return size;\n } else if (size === \"large\") {\n return 24;\n } else if (size === \"small\" || size === \"tiny\") {\n return 16;\n } else {\n return 20;\n }\n};\n\nexport const strokeSizeHelper = (size: number) => {\n if (size === 32) {\n return 1.15;\n } else if (size >= 20) {\n return 1.5;\n } else {\n return 1.75;\n }\n};\n\nexport default NextureIcons;\n","import { memo, useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { FilledInput, FormControl, IconButton, InputAdornment, InputLabel } from \"@mui/material\";\n\nimport { NiCross, NiSearch } from \"../../icons/nexture\";\n\ninterface DebouncedSearchInputProps {\n value?: string;\n onChange: (value: string) => void;\n label?: string;\n delay?: number;\n className?: string;\n}\n\n/**\n * Self-contained search input that manages its own typing state.\n * Only calls `onChange` after a debounce, preventing expensive parent re-renders\n * (e.g. DataGrid) on every keystroke.\n *\n * Promoted here from `sales` and `timesheets`, where the file was byte-identical in both and a\n * third search field had been hand-mirrored from it in a shared toolbar. \"Search bars don't look\n * the same\" is not a problem a lint rule can fix - only one implementation can - so this is the\n * implementation, and `coreconnect/no-local-search-input` is the backstop that stops the next\n * plugin writing a fourth.\n *\n * Class composition uses the package's existing join idiom rather than a `cn`/tailwind-merge\n * helper, which keeps `plugin-ui` free of new runtime dependencies. No caller passes a conflicting\n * utility class today, so tailwind-merge's conflict resolution is unexercised; a caller that needs\n * it should override via `sx` instead of racing class order.\n */\nexport const DebouncedSearchInput = memo(function DebouncedSearchInput({\n value = \"\",\n onChange,\n label = \"Search\",\n delay = 400,\n className,\n}: DebouncedSearchInputProps) {\n const [localValue, setLocalValue] = useState(value);\n // Associate the InputLabel with the FilledInput — a bare FormControl+InputLabel+Input\n // doesn't auto-link them (unlike TextField), leaving the label without a `for` target.\n const inputId = useId();\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const lastReportedRef = useRef(value);\n const isFirstRender = useRef(true);\n\n // Sync external value changes (e.g. clear from parent)\n useEffect(() => {\n setLocalValue(value);\n lastReportedRef.current = value;\n }, [value]);\n\n // Debounce: notify parent only after typing pauses (skip initial mount)\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n if (localValue === lastReportedRef.current) return;\n const timer = setTimeout(() => {\n lastReportedRef.current = localValue;\n onChangeRef.current(localValue);\n }, delay);\n return () => clearTimeout(timer);\n }, [localValue, delay]);\n\n const handleClear = useCallback(() => {\n setLocalValue(\"\");\n lastReportedRef.current = \"\";\n onChangeRef.current(\"\");\n }, []);\n\n const classes = (...parts: (string | false | undefined)[]) => parts.filter(Boolean).join(\" \");\n\n return (\n <FormControl variant=\"filled\" size=\"medium\" className={classes(\"surface mb-0 w-full\", className)}>\n <InputLabel htmlFor={inputId}>{label}</InputLabel>\n <FilledInput\n id={inputId}\n value={localValue}\n onChange={(e) => setLocalValue(e.target.value)}\n endAdornment={\n <>\n <InputAdornment position=\"end\" className={classes(localValue === \"\" && \"hidden\")}>\n <IconButton edge=\"end\" onClick={handleClear} aria-label=\"Clear search\">\n <NiCross size=\"medium\" className=\"text-text-disabled\" />\n </IconButton>\n </InputAdornment>\n <InputAdornment position=\"end\" className={classes(localValue !== \"\" && \"hidden\")} aria-hidden>\n <IconButton edge=\"end\" disabled tabIndex={-1}>\n <NiSearch size=\"medium\" className=\"text-text-disabled\" />\n </IconButton>\n </InputAdornment>\n </>\n }\n />\n </FormControl>\n );\n});\n","import type { MappingCompletenessItem } from \"./types\";\n\n/**\n * An operation is INCOMPLETE when it has at least one required canonical field that does not map\n * onto the live tool's schema. Deliberately not \"has no tool\": see {@link MappingCompletenessItem}.\n */\nfunction hasUnmappedRequiredField(op: MappingCompletenessItem): boolean {\n return op.unmappedRequiredCanonicalFields.length > 0;\n}\n\n/**\n * Every operation with a gap, required or optional. Use it to decide whether to mount a banner at\n * all, without duplicating the predicate.\n */\nexport function selectIncompleteOperations(\n operations: MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter(hasUnmappedRequiredField);\n}\n\n/**\n * REQUIRED operations with a gap. These genuinely block the module: the connector cannot run them.\n */\n/**\n * Required operations with NO TOOL MAPPED AT ALL.\n *\n * <b>The gap none of the selectors below could report.</b> Every other selector here keys on\n * `unmappedRequiredCanonicalFields`, which describes a FIELD-translation gap. An operation that\n * declares no required canonical fields therefore has an empty array whether or not a tool answers\n * it - so a required operation with nothing mapped to it was invisible to this banner entirely.\n *\n * That is not a corner case. `find-companies` on the sales prospecting module declares no request\n * fields, so removing its tool mapping left the module's own page silent while the module selector\n * beside it marked the module as needing attention. An operator was told there was a problem by a\n * chip in a dropdown and given nowhere on the page to find out what.\n *\n * Reported SEPARATELY from the field selectors rather than folded into them, because the remedy\n * differs: these need a tool chosen, and field translation is a question that only arises once one\n * is. A consumer rendering both must therefore exclude these from the field lists - see\n * `MappingCompletenessBanner` - or an operation with both problems appears twice and the more\n * urgent half is buried under the less urgent one.\n */\nexport function selectRequiredUnmappedOperations(\n operations: readonly MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter((op) => op.isRequired && !op.isToolMapped);\n}\n\nexport function selectRequiredIncompleteOperations(\n operations: MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter((op) => op.isRequired && hasUnmappedRequiredField(op));\n}\n\n/**\n * OPTIONAL operations with a gap. Informational only: the operation powers an extra capability that\n * stays off until its fields are mapped, and the connector may legitimately expose no suitable tool.\n *\n * @remarks\n * Treat these as a note, never a warning. A connector need not expose every operation a module can\n * use, so a correctly configured connector can sit here indefinitely — and a banner that never\n * clears is a banner operators learn to ignore, which costs you the required warnings too.\n */\nexport function selectOptionalIncompleteOperations(\n operations: MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter((op) => !op.isRequired && hasUnmappedRequiredField(op));\n}\n\n/** A module's readiness, counted over REQUIRED operations only. */\nexport interface MappingReadiness {\n /** Required operations that are mapped AND have no field gaps. */\n complete: number;\n /** Total required operations declared by the module's catalogue. */\n total: number;\n /** True when every required operation is mapped and complete. */\n isReady: boolean;\n}\n\n/**\n * Readiness over REQUIRED operations only, for a progress indicator or a \"ready\" badge.\n *\n * @remarks\n * Optional operations are excluded on purpose. Counting them would leave a properly configured\n * connector permanently short of 100%, for operations the operator was never expected to map. This\n * rule came from `ethisyscore-plugin-timesheets`, which had it right while another plugin was\n * reporting optional field gaps in a standing banner.\n */\nexport function selectMappingReadiness(\n operations: MappingCompletenessItem[],\n): MappingReadiness {\n const required = operations.filter((op) => op.isRequired);\n const complete = required.filter(\n (op) => op.isToolMapped && op.unmappedRequiredCanonicalFields.length === 0,\n ).length;\n\n return {\n complete,\n total: required.length,\n isReady: required.length > 0 && complete === required.length,\n };\n}\n","/**\n * The words the provider controls use, in one place, because two surfaces have to say the same ones.\n *\n * ## Why these are constants and not literals at each site\n *\n * A \"not configured\" message has to name the control that resolves it, in that control's own words.\n * This surface has already paid for the alternative: the completeness banner described a gap in the\n * abstract (\"the mapping editor\"), an operator could not find any such thing on the page, and the\n * report that came back was \"it doesnt really suggest how to fix it\". The fix was to name the\n * affordance verbatim - and a verbatim name held as two separate string literals is one rename away\n * from pointing at nothing again, with both files still compiling and both tests still green.\n *\n * So the control renders {@link PROVIDER_CONTROL_LABEL} and the banner quotes it, from here. A test\n * asserts the banner's text contains the label the view actually renders; it fails if either side\n * is edited alone.\n *\n * Pure strings, no imports. That matters: the mapping HOOKS module value-imports this, and it must\n * not drag `@mui/material` into a barrel whose consumers may not have installed it.\n */\n\n/** Label of the control that chooses what serves a module. */\nexport const PROVIDER_CONTROL_LABEL = \"Served by\";\n\n/**\n * Labels of the two things that can serve a module.\n *\n * Phrased from the operator's side rather than the schema's. \"Plugin\" and \"Connector\" are the\n * platform's words for its own internals; an operator choosing where a module's data comes from is\n * choosing between the applications they already run and something outside.\n */\nexport const PROVIDER_OPTION_LABEL = {\n plugin: \"This organisation's apps\",\n connector: \"External system\",\n} as const;\n\n/** Label of the control that picks WHICH installed application, once \"this organisation's apps\" is chosen. */\nexport const PLUGIN_PROVIDER_CONTROL_LABEL = \"App\";\n\n/** Label of the control that picks WHICH connector, once \"external system\" is chosen. */\nexport const CONNECTOR_CONTROL_LABEL = \"Connector\";\n","import {\n Alert,\n AlertTitle,\n Box,\n Button,\n Chip,\n CircularProgress,\n Stack,\n Typography,\n} from \"../ui\";\nimport {\n selectOptionalIncompleteOperations,\n selectRequiredIncompleteOperations,\n selectRequiredUnmappedOperations,\n} from \"./mappingCompleteness\";\nimport {\n PROVIDER_CONTROL_LABEL,\n PROVIDER_OPTION_LABEL,\n} from \"./providerLabels\";\nimport type { MappingCompletenessItem } from \"./types\";\n\nexport interface MappingCompletenessBannerProps {\n /**\n * Per-operation completeness for the selected connector + module. The banner splits these into\n * REQUIRED operations with gaps (a blocking warning) and OPTIONAL ones (an informational note);\n * it renders nothing when neither group has gaps.\n */\n operations: MappingCompletenessItem[];\n\n /**\n * Opt-in AI assist. Invoked with the operation the operator chose to fix. The consumer wires this\n * to the suggest-translation mutation and decides what to do with the result (open the editor\n * seeded with the suggestion, apply it, and so on).\n */\n onSuggestWithAi: (operation: MappingCompletenessItem) => void;\n\n /**\n * Opens the manual mapping editor for an operation. The consumer owns the editor surface and\n * routing; the banner only raises intent.\n *\n * Every known consumer wires this to the request/response translation editor, which is why the\n * row control is labelled for what it opens rather than for this prop's name. Kept required\n * because it always was: making it optional would let a consumer render rows with no action.\n */\n onOpenMappingEditor: (operation: MappingCompletenessItem) => void;\n\n /**\n * OPTIONAL, and the preferred wiring. Jumps straight to the operation's REQUEST-FIELD\n * TRANSLATION editor — the \"Configure field translation\" surface — rather than to whatever general\n * mapping surface `onOpenMappingEditor` happens to open.\n *\n * @remarks\n * Optional on purpose. This package is pinned independently by every plugin, so a required prop\n * would break every consumer that has not been updated. When it is absent the row falls back to\n * `onOpenMappingEditor` with identical rendering, so an un-updated consumer keeps exactly the\n * behaviour it had and still gains the corrected copy.\n */\n onConfigureTranslation?: (operation: MappingCompletenessItem) => void;\n\n /**\n * Operation key currently awaiting an AI suggestion, or `null`. Drives the per-row spinner and\n * disabled state so a slow suggestion does not lock the whole banner.\n */\n suggestingOperationKey?: string | null;\n\n /** Disables the AI assist affordance entirely, e.g. AI not configured for the organisation. */\n disableSuggest?: boolean;\n\n /**\n * `true` when the module has no PROVIDER chosen at all - nobody has said whether it is served by\n * another installed app or by an external system.\n *\n * @remarks\n * A different gap from everything else this banner reports, and the only one that makes the rest\n * meaningless: with no provider there is no tool inventory to be complete or incomplete against,\n * so the two alerts below correctly have nothing to say and the page would otherwise look\n * configured. This is therefore the one condition that renders the banner when no operation has\n * a gap.\n *\n * Optional, defaulting to `false`, for the reason {@link onConfigureTranslation} is: a consumer\n * that has not adopted the provider surface keeps exactly its current behaviour.\n */\n isProviderUnconfigured?: boolean;\n}\n\n/**\n * Connector-setup \"mapping completeness\" banner, shared by every plugin with a Tool Mappings page.\n *\n * Presentational and props-driven: the consumer fetches completeness and owns the editor, so the\n * same banner serves Repo Monitoring, Timesheets, Error Monitoring and anything added later.\n *\n * It separates two cases:\n *\n * - **Required** operations with unmapped required fields, a warning the operator must act on\n * because the module cannot run them.\n * - **Optional** operations with unmapped required fields, a calm note. These power extra\n * capabilities that stay off until their fields are mapped, and the connector may legitimately\n * expose no suitable tool, so they must never read as a blocking error.\n *\n * Renders nothing when neither group has gaps.\n *\n * @remarks\n * **The wording is load-bearing, and was wrong in the copy this was promoted from.** Both groups are\n * selected on `unmappedRequiredCanonicalFields`, which is about FIELD mapping. The original optional\n * alert was titled \"Optional operations not mapped\" and said they \"stay off until mapped\", which\n * describes TOOL mapping. Auto-match maps tools and cannot close a field gap, so an operator who\n * pressed auto-match saw the count refuse to move and reported the banner as broken. It was\n * accurate; the text was not. Every string here therefore says \"fields\", and both alerts say plainly\n * that auto-match will not clear them.\n *\n * A row without the \"No tool mapped\" chip already HAS a tool and needs its fields mapped. That chip\n * is the only thing distinguishing the two states, which is why the prose points at it.\n *\n * **The second wording fix, from a production report.** Saying \"fields\" was necessary but not\n * sufficient. An operator read \"fields that aren't mapped to this connector's tools\", concluded the\n * TOOL was unmapped (it was not), and had no idea which control closed the gap — the text named an\n * abstraction, \"the mapping editor\", and never the affordance on screen. So the copy now names the\n * thing that is missing (the REQUEST-FIELD TRANSLATION, canonical field name → the tool's own\n * parameter name) and the control that supplies it (\"Configure field translation\"), and every\n * listed operation carries that control inline. Their words: \"it doesnt really suggest how to fix\n * it\".\n *\n * That label is not invented here: it is the verbatim tooltip and aria-label of the per-row gear in\n * every consumer's `ConnectorMappingView` (host gogo-ui, self-healing, tech, timesheets, sales). The\n * prose has to name a string the operator can actually find on the page, so a near-miss paraphrase\n * would reintroduce the defect in a quieter form.\n */\nexport function MappingCompletenessBanner({\n operations,\n onSuggestWithAi,\n onOpenMappingEditor,\n onConfigureTranslation,\n suggestingOperationKey = null,\n disableSuggest = false,\n isProviderUnconfigured = false,\n}: MappingCompletenessBannerProps) {\n /*\n * Three buckets, and the first one is new.\n *\n * A required operation with NO TOOL AT ALL used to reach none of these lists, because both field\n * selectors key on `unmappedRequiredCanonicalFields` and an operation declaring no required\n * canonical fields has an empty array whether or not anything answers it. The module selector\n * beside this banner marked such a module as needing attention while the page itself said\n * nothing - which is the complaint this change answers.\n *\n * The field lists EXCLUDE anything in the first bucket. An operation that is both unmapped and\n * field-incomplete has one actionable next step, choosing a tool, and listing it twice would bury\n * that under a translation task it cannot act on yet.\n */\n const unmapped = selectRequiredUnmappedOperations(operations);\n const unmappedKeys = new Set(unmapped.map((op) => op.operationKey));\n const required = selectRequiredIncompleteOperations(operations).filter(\n (op) => !unmappedKeys.has(op.operationKey),\n );\n const optional = selectOptionalIncompleteOperations(operations).filter(\n (op) => !unmappedKeys.has(op.operationKey),\n );\n\n if (\n !isProviderUnconfigured\n && unmapped.length === 0\n && required.length === 0\n && optional.length === 0\n ) {\n return null;\n }\n\n const renderRow = (op: MappingCompletenessItem) => {\n const isSuggesting = suggestingOperationKey === op.operationKey;\n\n return (\n <Box key={op.operationKey}>\n <Stack\n direction={{ xs: \"column\", sm: \"row\" }}\n spacing={1}\n alignItems={{ xs: \"flex-start\", sm: \"center\" }}\n justifyContent=\"space-between\"\n >\n <Box>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\" sx={{ flexWrap: \"wrap\" }}>\n <Typography variant=\"subtitle2\">{op.label}</Typography>\n {op.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"error\" variant=\"outlined\" />\n )}\n {!op.isToolMapped && (\n <Chip label=\"No tool mapped\" size=\"small\" color=\"warning\" variant=\"outlined\" />\n )}\n </Stack>\n <Typography variant=\"caption\" color=\"text.secondary\">\n Unmapped required request fields:{\" \"}\n {op.unmappedRequiredCanonicalFields.join(\", \")}\n </Typography>\n </Box>\n\n <Stack direction=\"row\" spacing={1} sx={{ flexShrink: 0 }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"primary\"\n // AI suggests a field TRANSLATION for the mapped tool. There is nothing to suggest\n // when no tool is mapped yet, and calling the endpoint with an empty toolName errors,\n // so this stays disabled until a tool is chosen.\n disabled={disableSuggest || isSuggesting || !op.isToolMapped}\n title={\n !op.isToolMapped\n ? \"Map a tool to this operation before suggesting a field translation\"\n : undefined\n }\n startIcon={isSuggesting ? <CircularProgress size={14} color=\"inherit\" /> : undefined}\n onClick={() => onSuggestWithAi(op)}\n >\n {isSuggesting ? \"Suggesting…\" : \"Suggest with AI\"}\n </Button>\n {/*\n Labelled for what it OPENS, not for the prop it happens to call. \"Open mapping\n editor\" was the label an operator could not connect to the request-field gap the\n prose describes, and the prose now names this control verbatim — the two have to\n agree or the instruction points at nothing. `onConfigureTranslation` is the explicit\n wiring; `onOpenMappingEditor` is the pre-existing required prop every consumer\n already points at the same editor, so the fallback is not a downgrade.\n */}\n <Button\n size=\"small\"\n variant=\"text\"\n color=\"primary\"\n onClick={() => (onConfigureTranslation ?? onOpenMappingEditor)(op)}\n >\n Configure field translation\n </Button>\n </Stack>\n </Stack>\n </Box>\n );\n };\n\n return (\n <Box sx={{ mb: 2 }}>\n {/*\n First, because it is the precondition for everything under it: until a provider is chosen,\n no operation can resolve and the two alerts below have nothing to measure against.\n\n The copy names the CONTROL and quotes its two options verbatim, from `providerLabels`, which\n is also where the control itself reads them. That is the rule this banner exists to keep:\n a \"not configured\" message that does not name the thing that configures it produced a real\n support report on this very surface - \"it doesnt really suggest how to fix it\" - and naming\n it as a paraphrase would reintroduce the same defect in a quieter form.\n */}\n {isProviderUnconfigured && (\n <Alert\n severity=\"warning\"\n sx={{ mb: required.length > 0 || optional.length > 0 ? 2 : 0 }}\n data-testid=\"provider-unconfigured-alert\"\n >\n <AlertTitle>Nothing serves this module yet</AlertTitle>\n <Typography variant=\"body2\">\n No provider has been chosen, so every operation below resolves as unmapped no matter\n what is mapped against it. Set one with the &quot;{PROVIDER_CONTROL_LABEL}&quot; control\n at the top of this page: choose &quot;{PROVIDER_OPTION_LABEL.plugin}&quot; to have\n another app this organisation already runs answer these operations, or &quot;\n {PROVIDER_OPTION_LABEL.connector}&quot; to route them through a connector to a\n third-party system. The choice is per module and can be changed later.\n </Typography>\n </Alert>\n )}\n\n {/*\n FIRST, and the only one at error weight. A required operation with nothing mapped to it is\n the one state on this page where the module cannot work at all: the others describe an\n operation that has a tool and needs its fields translating, which is a narrower problem.\n */}\n {unmapped.length > 0 && (\n <Alert\n severity=\"error\"\n sx={{ mb: required.length > 0 || optional.length > 0 ? 2 : 0 }}\n data-testid=\"required-unmapped-alert\"\n >\n <AlertTitle>\n {unmapped.length === 1\n ? \"A required operation has no tool mapped\"\n : \"Required operations have no tool mapped\"}\n </AlertTitle>\n <Typography variant=\"body2\">\n {unmapped.length === 1\n ? \"This operation has nothing to call, so the module cannot do its job until a tool is chosen for it. \"\n : `${unmapped.length} required operations have nothing to call, so the module cannot do its job until a tool is chosen for each. `}\n Pick one on the row below. If this connector exposes nothing suitable, the module needs a\n different connector rather than a translation.\n </Typography>\n <Box sx={{ mt: 1 }}>{unmapped.map(renderRow)}</Box>\n </Alert>\n )}\n\n {required.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: optional.length > 0 ? 2 : 0 }}>\n <AlertTitle>Required operations are missing request-field mappings</AlertTitle>\n <Typography variant=\"body2\">\n {required.length === 1\n ? \"1 required operation declares\"\n : `${required.length} required operations declare`}{\" \"}\n canonical request fields that aren&apos;t mapped to any parameter the tool accepts. The\n missing piece is the REQUEST-FIELD TRANSLATION: the per-operation map from the\n operation&apos;s canonical field names to the tool&apos;s own parameter names. It is not\n the tool binding, which a row without a &quot;No tool mapped&quot; chip already has.\n Ethisys Core can&apos;t run these reliably until every listed field is translated, and\n auto-match picks the TOOL, not its fields, so it won&apos;t clear them on its own.\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 1.5 }}>\n Fix each operation below with &quot;Configure field translation&quot;: for every field\n listed, enter the parameter name the tool actually expects, for example a canonical{\" \"}\n <Box component=\"code\">startDate</Box> the tool calls{\" \"}\n <Box component=\"code\">start_date</Box>. &quot;Suggest with AI&quot; proposes the same\n translation for you to review in that editor before saving.\n </Typography>\n <Stack spacing={1.5}>{required.map(renderRow)}</Stack>\n </Alert>\n )}\n\n {optional.length > 0 && (\n <Alert severity=\"info\">\n <AlertTitle>Optional operations are missing request-field mappings</AlertTitle>\n <Typography variant=\"body2\" sx={{ mb: 1.5 }}>\n {optional.length === 1\n ? \"1 optional operation declares request fields that aren't\"\n : `${optional.length} optional operations declare request fields that aren't`}{\" \"}\n mapped to the tool&apos;s own parameter names. These power extra capabilities and stay\n off until that request-field translation is supplied, so they are safe to leave if you\n don&apos;t need them, or if this connector exposes no matching tool. Each row below\n lists exactly which fields are missing; a row without a &quot;No tool mapped&quot; chip\n already HAS a tool and needs only its fields translated, which auto-match does not do.\n Use &quot;Configure field translation&quot; on the row to supply it.\n </Typography>\n <Stack spacing={1.5}>{optional.map(renderRow)}</Stack>\n </Alert>\n )}\n </Box>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { Box, Typography } from \"@mui/material\";\n\nimport { NiArchive } from \"../../icons/nexture\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title?: string;\n description?: string;\n /** Grow to fill (and vertically centre within) a flex-column parent — e.g. a dashboard tile. */\n fill?: boolean;\n}\n\n/**\n * The shared \"nothing here yet\" panel.\n *\n * Promoted from the plugins rather than designed here: this 32-line file was identical in four of\n * the ten repos (`timesheets`, `projects`, `legal`, `helpdesk`). \"Empty states look different in\n * every app\" is a complaint no lint rule can answer - only one implementation can - so this is it,\n * and `coreconnect/no-local-empty-state` stops a fifth being written.\n *\n * `description` is defaulted rather than coalesced, so a caller passing `\"\"` gets no description at\n * all. A filtered list showing \"No results\" wants a heading and nothing else.\n */\nexport function EmptyState({\n icon = <NiArchive className=\"text-text-disabled\" size=\"large\" />,\n title = \"No items yet\",\n description = \"Create your first item to get started\",\n fill = false,\n}: EmptyStateProps) {\n return (\n <Box className={`flex flex-col items-center justify-center py-12 text-center ${fill ? \"flex-1\" : \"\"}`}>\n <Box className=\"mb-3\">{icon}</Box>\n <Typography variant=\"body1\" className=\"text-text-secondary\">\n {title}\n </Typography>\n {description ? (\n <Typography variant=\"body2\" className=\"text-text-disabled mt-1\">\n {description}\n </Typography>\n ) : null}\n </Box>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport {\n Alert,\n AlertTitle,\n Autocomplete,\n Box,\n Button,\n Card,\n CardContent,\n Chip,\n FormControl,\n Grid,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n Skeleton,\n TextField,\n Tooltip,\n Typography,\n} from \"../ui\";\nimport { NiCode, NiCross, NiRefresh, NiSettings } from \"../../icons/nexture\";\nimport { EmptyState } from \"../shared/EmptyState\";\nimport {\n CONNECTOR_CONTROL_LABEL,\n PLUGIN_PROVIDER_CONTROL_LABEL,\n PROVIDER_CONTROL_LABEL,\n PROVIDER_OPTION_LABEL,\n} from \"./providerLabels\";\nimport type { ConnectorCanonicalField } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Wire vocabularies\n//\n// Declared here rather than imported from `../../connector-mappings/types`, which is where the\n// data-side copies live: this barrel must not depend on the react-query barrel, and a component\n// that renders a chip colour per source needs only the three literals. The two are kept in step by\n// `__tests__/connectorMappingView.test.tsx`, which asserts them against each other.\n// ---------------------------------------------------------------------------\n\nconst SOURCE = {\n keyword: \"keyword\",\n ai: \"ai\",\n manual: \"manual\",\n} as const;\n\n/** The vocabulary of `ToolMapping.Source` values the backend writes. Derived so the two cannot drift. */\ntype MappingSourceValue = (typeof SOURCE)[keyof typeof SOURCE];\n\n/** The MUI Chip colours this surface uses to distinguish those sources. */\ntype MappingSourceChipColour = \"info\" | \"secondary\" | \"success\";\n\nconst SOURCE_COLOURS: Record<MappingSourceValue, MappingSourceChipColour> = {\n [SOURCE.keyword]: \"info\",\n [SOURCE.ai]: \"secondary\",\n [SOURCE.manual]: \"success\",\n};\n\nconst CONFLICT_REASON = {\n AnotherAutoMatchInProgress: \"another_auto_match_in_progress\",\n} as const;\n\n// ---------------------------------------------------------------------------\n// Props\n//\n// Declared structurally, not imported from the data module, for the reason above. Every shape here\n// is assignable from the corresponding one in `@ethisyscore/plugin-ui/connector-mappings`, so\n// `useConnectorToolMappings(...).view` spreads straight onto this component.\n// ---------------------------------------------------------------------------\n\n/** A connector offered in the picker. */\nexport interface ConnectorMappingViewConnector {\n id: string;\n name: string;\n}\n\n/**\n * What serves the module, as this view spells it. Structurally identical to `MappingTargetKind` in\n * the hooks module, declared here for the reason every shape in this file is: the two barrels share\n * types across the boundary only as type-only imports, and this one is two literals.\n */\nexport type ConnectorMappingViewProviderKind = \"connector\" | \"plugin\";\n\n/** An installed application offered in the provider picker. */\nexport interface ConnectorMappingViewPluginProvider {\n extensionId: string;\n name: string;\n}\n\n/** A tool offered in the per-row picker. */\nexport interface ConnectorMappingViewTool {\n name: string;\n description: string;\n}\n\n/** The operator-editable translation on one row, as handed to `onEditTranslation`. */\nexport interface ConnectorMappingViewTranslationState {\n requestFieldMap: Record<string, string> | null;\n responseFieldPaths: Record<string, string> | null;\n staticRequestFields: Record<string, string> | null;\n}\n\n/** One row of the mapping table. */\nexport interface ConnectorMappingViewRow {\n operationKey: string;\n label: string;\n isRequired: boolean;\n mappedToolName: string | null;\n source: MappingSourceValue | null;\n confidence: number | null;\n\n /** `null` when no stored row exists yet; the view sends `\"\"` up so the host upserts. */\n rowVersion: string | null;\n\n requiresReview?: boolean;\n canonicalRequestFields?: ConnectorCanonicalField[] | null;\n canonicalResponseFields?: ConnectorCanonicalField[] | null;\n requestFieldMap?: Record<string, string> | null;\n responseFieldPaths?: Record<string, string> | null;\n staticRequestFields?: Record<string, string> | null;\n}\n\n/** Outcome of the most recent auto-match run, as the banner reads it. */\nexport interface ConnectorMappingViewBannerState {\n aiAvailable: boolean;\n unmatchedRequiredCount: number;\n matchedByKeyword: number;\n matchedByAi: number;\n conflictReason: string | null;\n}\n\nexport interface ConnectorMappingViewProps {\n isLoading: boolean;\n\n /** Wire key of the mapping module, e.g. `repo-monitoring`. Not rendered; kept for parity. */\n moduleKey: string;\n\n /** Human-readable module label, used in the header and the empty state. */\n moduleLabel: string;\n\n /**\n * When `true` (the default), the view renders its own `<h1>` plus {@link breadcrumbs}. Set it to\n * `false` on a page that already renders a `PageHeader`, or the title appears twice.\n */\n withHeader?: boolean;\n\n /**\n * Breadcrumb trail rendered under the built-in `<h1>`, and only when {@link withHeader} is true.\n *\n * A node rather than an import. Breadcrumbs are plugin-specific — they need that plugin's route\n * table and its menu context — and one of the three plugins this was promoted from had deleted\n * the whole header block rather than lift `PageBreadcrumbs` plus its context and router shim for\n * an import that could never execute. Injecting it means a consumer that wants the built-in\n * header can have it without this package taking on a router dependency, and a consumer that\n * does not simply omits both.\n */\n breadcrumbs?: ReactNode;\n\n /**\n * What to render while {@link isLoading}. Defaults to a plain skeleton block.\n *\n * Injected for the same reason as {@link breadcrumbs}: each plugin has its own page skeleton, and\n * a shared one that did not match would be a visible regression on adoption.\n */\n loadingFallback?: ReactNode;\n\n connectors: ConnectorMappingViewConnector[];\n selectedConnectorId: string;\n onConnectorChange: (connectorId: string) => void;\n\n // --- provider selection ----------------------------------------------------\n //\n // Every member below is OPTIONAL, and the picker renders only when `onProviderKindChange` is\n // supplied. That is not caution for its own sake: this package is pinned independently by every\n // plugin, and a required prop would break each consumer that has not been updated. Omit them all\n // and this view behaves exactly as it did when a connector was the only thing a module could be\n // served by.\n\n /**\n * What currently serves the module, or `undefined` when the operator has made no choice.\n *\n * `undefined` is a real state and is NOT rendered as \"connector\". An unconfigured module and a\n * module pointed at a connector with nothing mapped yet look similar and need different actions,\n * and defaulting here is how an operator ends up sent to the wrong control.\n */\n providerKind?: ConnectorMappingViewProviderKind;\n\n /** Supplying this is what turns the provider picker on. See the block comment above. */\n onProviderKindChange?: (kind: ConnectorMappingViewProviderKind) => void;\n\n /** The installed applications on offer. Only read while {@link providerKind} is `\"plugin\"`. */\n pluginProviders?: ConnectorMappingViewPluginProvider[];\n\n /** The chosen application, or `\"\"`. */\n selectedPluginExtensionId?: string;\n\n onPluginProviderChange?: (extensionId: string) => void;\n\n mappings: ConnectorMappingViewRow[];\n availableTools: ConnectorMappingViewTool[];\n\n /**\n * Called with `toolName === \"\"` when the operator clears a row's picker. The consumer routes that\n * to the host's delete tool — see `useConnectorMappingMutations`, which does it — because the\n * set validator rejects an empty tool name.\n */\n onUpdateMapping: (operationKey: string, toolName: string, rowVersion: string) => void;\n\n onAutoMatch: () => void;\n isUpdating: boolean;\n isAutoMatching: boolean;\n\n /** `null` when no outcome banner should render (nothing to say, or the operator dismissed it). */\n bannerState: ConnectorMappingViewBannerState | null;\n\n onDismissBanner: () => void;\n\n /**\n * Href of the host's AI-providers settings page. The view owns no routing; the consumer passes\n * the href so the link stays correct across templates and route changes.\n */\n aiProvidersHref: string;\n\n /** Href of the selected connector's settings page. Same routing-ownership rule. */\n connectorSettingsHref: string;\n\n /**\n * Raised by the per-row \"Configure field translation\" button. Rows with no mapped tool, or with\n * no declared canonical schema, never raise it — the view hides the button for those, because\n * there is nothing operator-meaningful to translate.\n */\n onEditTranslation: (\n operationKey: string,\n current: ConnectorMappingViewTranslationState,\n ) => void;\n}\n\n/**\n * The per-row source indicator.\n *\n * - `manual` → \"manual\"\n * - `keyword` → \"auto (keyword)\"\n * - `ai` → \"auto (AI, NN%)\"\n *\n * An unmapped row, or a row with no recorded source, gets an em-dash chip rather than nothing: a\n * blank cell reads as a rendering failure where a dash reads as \"not applicable\".\n */\nfunction renderSourceChip(item: ConnectorMappingViewRow) {\n if (!item.mappedToolName || !item.source) {\n return <Chip label=\"—\" size=\"small\" color=\"default\" variant=\"outlined\" />;\n }\n\n let label: string;\n if (item.source === SOURCE.manual) {\n label = \"manual\";\n } else if (item.source === SOURCE.keyword) {\n label = \"auto (keyword)\";\n } else {\n const pct = Math.round((item.confidence ?? 0) * 100);\n label = `auto (AI, ${pct}%)`;\n }\n return <Chip label={label} size=\"small\" color={SOURCE_COLOURS[item.source]} variant=\"outlined\" />;\n}\n\n/**\n * The auto-match outcome banner. `null` when the run has nothing worth surfacing.\n *\n * @remarks\n * **The unmapped-required warning is NOT gated on `aiAvailable`.** That condition came from the\n * monolith, where auto-match has an AI pass. A plugin's auto-match may be keyword-only, in which\n * case `aiAvailable` is always false and the gate made the warning unreachable — so the one case an\n * operator actually has to act on stayed invisible. Two of the three copies this was promoted from\n * had fixed it and one had not; this is the fixed behaviour, with the AI counts moved inside the\n * message so the copy is still accurate when AI did run.\n */\nfunction renderBanner(banner: ConnectorMappingViewBannerState, onDismiss: () => void) {\n const dismissButton = (\n <IconButton\n aria-label=\"Dismiss\"\n size=\"small\"\n onClick={onDismiss}\n data-testid=\"dismiss-banner\"\n >\n <NiCross size=\"small\" />\n </IconButton>\n );\n\n if (banner.conflictReason === CONFLICT_REASON.AnotherAutoMatchInProgress) {\n return (\n <Alert severity=\"warning\" className=\"mb-2\" action={dismissButton}>\n <AlertTitle>Auto-match already running</AlertTitle>\n Another user is currently running auto-match. Please refresh the page in a few seconds.\n </Alert>\n );\n }\n\n if (banner.unmatchedRequiredCount > 0) {\n return (\n <Alert severity=\"warning\" className=\"mb-2\" action={dismissButton}>\n <AlertTitle>Some required operations are unmapped</AlertTitle>\n {banner.aiAvailable\n ? `AI matched ${banner.matchedByAi}, keywords matched ${banner.matchedByKeyword}.`\n : `Keywords matched ${banner.matchedByKeyword}.`}{\" \"}\n {banner.unmatchedRequiredCount} required operation\n {banner.unmatchedRequiredCount === 1 ? \"\" : \"s\"} still need\n {banner.unmatchedRequiredCount === 1 ? \"s\" : \"\"} a mapping.\n </Alert>\n );\n }\n\n return null;\n}\n\n/**\n * What to show when nothing yet serves the module.\n *\n * Three states, not one, because they need three different actions from the operator - and each\n * message names the control that supplies the missing piece, using that control's own label. A\n * message that says only what is absent is the defect this surface has already shipped: the\n * completeness banner described a gap in the abstract, and the report back was that it \"doesnt\n * really suggest how to fix it\".\n */\nfunction renderNoProviderEmptyState(\n kind: ConnectorMappingViewProviderKind | undefined,\n moduleLabel: string,\n) {\n const icon = <NiCode className=\"text-text-disabled\" size=\"large\" />;\n const module = moduleLabel.toLowerCase();\n\n if (kind === undefined) {\n return (\n <EmptyState\n icon={icon}\n title={`Choose what serves ${module}`}\n description={\n `Use \"${PROVIDER_CONTROL_LABEL}\" above: \"${PROVIDER_OPTION_LABEL.plugin}\" to have ` +\n `another app you already run answer these operations, or ` +\n `\"${PROVIDER_OPTION_LABEL.connector}\" to route them through a connector. Nothing ` +\n `resolves until one is chosen.`\n }\n />\n );\n }\n\n if (kind === \"plugin\") {\n return (\n <EmptyState\n icon={icon}\n title=\"Select an app\"\n description={\n `Choose the app under \"${PLUGIN_PROVIDER_CONTROL_LABEL}\" above to view and configure ` +\n `which of its tools answer each ${module} operation`\n }\n />\n );\n }\n\n return (\n <EmptyState\n icon={icon}\n title=\"Select a connector\"\n description={`Choose a connector to view and configure its ${module} tool mappings`}\n />\n );\n}\n\n/**\n * The Tool Mappings table: a connector picker, one row per canonical operation with a tool picker\n * and a source chip, the auto-match control, and the per-row translation affordance.\n *\n * ## Promoted, not designed here\n *\n * This file existed three times — `sales`, `tech` and `timesheets` — and two of the three were\n * BYTE-IDENTICAL at 329 lines. The third was the same file with the header block deleted and one\n * behaviour difference that was a live defect (see {@link renderBanner}). Nothing about it was\n * plugin-specific except two imports, which are now props: the breadcrumbs and the loading\n * skeleton.\n *\n * ## What it owns and what it does not\n *\n * Presentational and fully props-driven. It fetches nothing, writes nothing and routes nowhere —\n * `aiProvidersHref` and `connectorSettingsHref` arrive as strings, and clearing a row's picker\n * emits `onUpdateMapping(key, \"\", rowVersion)` for the consumer to route. Pair it with\n * `useConnectorToolMappings` from `@ethisyscore/plugin-ui/connector-mappings`, whose `view` bundle\n * spreads straight onto these props.\n *\n * The translation affordance appears only when a row HAS a mapped tool AND declares both canonical\n * schemas. A row with no schema has nothing to translate, and offering the button anyway opens an\n * editor with no fields in it.\n */\nexport function ConnectorMappingView({\n isLoading,\n moduleLabel,\n breadcrumbs,\n loadingFallback,\n connectors,\n selectedConnectorId,\n onConnectorChange,\n providerKind,\n onProviderKindChange,\n pluginProviders = [],\n selectedPluginExtensionId = \"\",\n onPluginProviderChange,\n mappings,\n availableTools,\n onUpdateMapping,\n onAutoMatch,\n isUpdating,\n isAutoMatching,\n bannerState,\n onDismissBanner,\n onEditTranslation,\n withHeader = true,\n}: ConnectorMappingViewProps) {\n if (isLoading) {\n return (\n <>\n {loadingFallback ?? (\n <Box className=\"flex flex-col gap-4\" data-testid=\"connector-mapping-skeleton\">\n <Skeleton variant=\"rounded\" height={56} />\n <Skeleton variant=\"rounded\" height={240} />\n </Box>\n )}\n </>\n );\n }\n\n // One flag for both writes. A save and an auto-match both invalidate the rows underneath the\n // operator, so letting a second edit start against data that is about to be replaced is how you\n // get a concurrency failure the operator cannot explain.\n const disableInputs = isUpdating || isAutoMatching;\n const banner = bannerState ? renderBanner(bannerState, onDismissBanner) : null;\n\n // The picker exists only when a consumer wired it. See the props block for why.\n const providerPickerEnabled = !!onProviderKindChange;\n\n // Without the picker, \"connector\" is not a default - it is the only kind this view could ever\n // show, so treating the legacy shape as the connector kind is a statement of fact rather than a\n // guess about an operator's intent.\n const effectiveKind: ConnectorMappingViewProviderKind | undefined = providerPickerEnabled\n ? providerKind\n : \"connector\";\n\n const isPluginMode = effectiveKind === \"plugin\";\n\n // A provider is chosen when the KIND is chosen AND the concrete provider under it is. Half a\n // choice resolves to nothing at runtime, so the table would render rows nothing can answer.\n const hasProvider = isPluginMode ? !!selectedPluginExtensionId : !!selectedConnectorId;\n\n // Auto-match is a connector feature end to end: the host tool takes a connector id and matches\n // against that connector's live tool inventory. Rendering the control in plugin mode would offer\n // an action with nothing to act on.\n const showAutoMatch = !isPluginMode && !!selectedConnectorId;\n\n return (\n <Grid container spacing={5}>\n {(withHeader || showAutoMatch) && (\n <Grid size={12}>\n <Box\n className={`flex flex-row items-start ${withHeader ? \"justify-between\" : \"justify-end\"}`}\n >\n {withHeader && (\n <Box>\n <Typography variant=\"h1\" component=\"h1\" className=\"mb-0\">\n {moduleLabel} Mappings\n </Typography>\n {breadcrumbs}\n </Box>\n )}\n {showAutoMatch && (\n <Box className=\"flex flex-row items-center gap-2\">\n <Tooltip title=\"Re-run Auto-Match\">\n <Button\n className=\"icon-only surface-standard\"\n color=\"grey\"\n variant=\"surface\"\n startIcon={<NiRefresh size=\"medium\" />}\n onClick={onAutoMatch}\n aria-label=\"Re-run Auto-Match\"\n disabled={disableInputs}\n data-testid=\"auto-match-button\"\n />\n </Tooltip>\n </Box>\n )}\n </Box>\n </Grid>\n )}\n\n {providerPickerEnabled && (\n <Grid size={{ xs: 12, sm: 6 }}>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 w-full\">\n <InputLabel>{PROVIDER_CONTROL_LABEL}</InputLabel>\n <Select\n // `\"\"` while unconfigured, which MUI renders as an empty field. Deliberately not\n // pre-selected: the choice belongs to the operator, and a picker that opens already\n // showing one of the two answers records a decision nobody made the moment they touch\n // anything else on the page.\n value={providerKind ?? \"\"}\n onChange={(e) =>\n onProviderKindChange?.(e.target.value as ConnectorMappingViewProviderKind)\n }\n disabled={disableInputs}\n data-testid=\"provider-kind-select\"\n >\n <MenuItem value=\"plugin\">{PROVIDER_OPTION_LABEL.plugin}</MenuItem>\n <MenuItem value=\"connector\">{PROVIDER_OPTION_LABEL.connector}</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n )}\n\n {providerPickerEnabled && isPluginMode && (\n <Grid size={{ xs: 12, sm: 6 }}>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 w-full\">\n <InputLabel>{PLUGIN_PROVIDER_CONTROL_LABEL}</InputLabel>\n <Select\n value={selectedPluginExtensionId}\n onChange={(e) => onPluginProviderChange?.(e.target.value)}\n disabled={disableInputs}\n data-testid=\"plugin-provider-select\"\n >\n {/* Same reasoning as the connector picker's None: the route back to unselected, and\n only once there is something to unselect. */}\n {selectedPluginExtensionId ? (\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n ) : null}\n {pluginProviders.map((p) => (\n <MenuItem key={p.extensionId} value={p.extensionId}>\n {p.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n )}\n\n {!isPluginMode && (\n <Grid size={{ xs: 12, sm: 6 }}>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 w-full\">\n <InputLabel>{CONNECTOR_CONTROL_LABEL}</InputLabel>\n <Select\n value={selectedConnectorId}\n onChange={(e) => onConnectorChange(e.target.value)}\n data-testid=\"connector-select\"\n >\n {/*\n The route back to unselected. `onConnectorChange` and the page hooks already normalise\n `\"\"`, and clearing a module's connector is one of the behaviours this package was\n promoted to fix — but with only the connector rows below, a selected module had no\n control that could emit `\"\"`, so the fix was correct underneath and unreachable from\n the UI. Rendered only once something is selected, because an empty option on an empty\n picker is a second way of saying nothing.\n */}\n {selectedConnectorId ? (\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n ) : null}\n {connectors.map((c) => (\n <MenuItem key={c.id} value={c.id}>\n {c.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n )}\n\n <Grid size={12}>\n {!hasProvider ? (\n renderNoProviderEmptyState(effectiveKind, moduleLabel)\n ) : (\n <>\n {banner}\n <Card>\n <CardContent>\n <Grid container spacing={2}>\n <Grid size={12}>\n <Box className=\"border-border flex flex-row items-center gap-4 border-b px-2 pb-2\">\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary flex-1 font-semibold uppercase tracking-wider\"\n >\n Operation\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary font-semibold uppercase tracking-wider\"\n sx={{ width: 300 }}\n >\n Mapped Tool\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary font-semibold uppercase tracking-wider\"\n sx={{ width: 160 }}\n >\n Source\n </Typography>\n </Box>\n </Grid>\n\n {mappings.map((m) => {\n const canEditTranslation =\n !!m.mappedToolName &&\n m.canonicalRequestFields != null &&\n m.canonicalResponseFields != null;\n return (\n <Grid key={m.operationKey} size={12}>\n <Box\n className=\"flex flex-row items-center gap-4 px-2 py-1.5\"\n data-testid={`mapping-row-${m.operationKey}`}\n >\n <Box className=\"flex flex-1 items-center gap-2\">\n <Typography variant=\"subtitle2\">{m.label}</Typography>\n {m.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"primary\" variant=\"outlined\" />\n )}\n </Box>\n <Autocomplete\n sx={{ width: 300 }}\n size=\"small\"\n options={availableTools.map((t) => t.name)}\n value={m.mappedToolName ?? null}\n // A null `rowVersion` means no stored row exists yet — `\"\"` goes up so\n // the host upserts a fresh row rather than failing a concurrency check\n // against a version that was never issued.\n onChange={(_, next) =>\n onUpdateMapping(m.operationKey, next ?? \"\", m.rowVersion ?? \"\")\n }\n disabled={disableInputs}\n disableClearable={false}\n clearText=\"Not mapped\"\n renderInput={(params) => (\n <TextField\n {...params}\n variant=\"filled\"\n label=\"Tool\"\n placeholder=\"Type to search…\"\n className=\"surface mb-0\"\n slotProps={{ inputLabel: { shrink: true } }}\n data-testid={`mapping-tool-input-${m.operationKey}`}\n />\n )}\n renderOption={(props, option) => {\n const tool = availableTools.find((t) => t.name === option);\n return (\n <Box component=\"li\" {...props} key={option}>\n <Box>\n <Typography variant=\"body2\">{option}</Typography>\n {tool?.description && (\n <Typography variant=\"caption\" className=\"text-text-secondary\">\n {tool.description}\n </Typography>\n )}\n </Box>\n </Box>\n );\n }}\n />\n {canEditTranslation ? (\n <Tooltip title=\"Configure field translation\">\n <IconButton\n size=\"small\"\n onClick={() =>\n onEditTranslation(m.operationKey, {\n requestFieldMap: m.requestFieldMap ?? null,\n responseFieldPaths: m.responseFieldPaths ?? null,\n staticRequestFields: m.staticRequestFields ?? null,\n })\n }\n disabled={disableInputs}\n aria-label=\"Configure field translation\"\n data-testid={`edit-translation-${m.operationKey}`}\n >\n <NiSettings size=\"small\" />\n </IconButton>\n </Tooltip>\n ) : (\n // A spacer, not nothing. Without it the source column shifts left on\n // rows with no translation affordance and the table stops being a table.\n <Box sx={{ width: 32, flexShrink: 0 }} />\n )}\n <Box className=\"flex items-center gap-1.5\" sx={{ width: 160 }}>\n {renderSourceChip(m)}\n {m.requiresReview && (\n <Tooltip title=\"AI suggestion, low confidence — please confirm.\">\n <Box\n className=\"bg-warning\"\n sx={{ width: 8, height: 8, borderRadius: \"50%\" }}\n />\n </Tooltip>\n )}\n </Box>\n </Box>\n </Grid>\n );\n })}\n </Grid>\n </CardContent>\n </Card>\n </>\n )}\n </Grid>\n </Grid>\n );\n}\n","/**\n * The request-template placeholder grammar, mirrored from the host's `ToolMappingRequestTemplates`\n * (CoreConnect.Application.Common). A placeholder is a JSON string VALUE that is exactly `{{name}}`;\n * anything else containing `{{` is an embedded placeholder, which the host refuses at save\n * (CON_MAP_023). Kept equal to the host pattern so the editor never passes what the save refuses.\n */\nconst PLACEHOLDER = /^\\{\\{([A-Za-z_][A-Za-z0-9_.-]*)\\}\\}$/;\n\n/** At most this many templates per mapping (spec 2026-09-28 section 1). */\nexport const MAX_REQUEST_TEMPLATES = 4;\n\nexport interface ParsedRequestTemplate {\n /** The parsed object, or `null` when the text is not a JSON object. */\n value: Record<string, unknown> | null;\n /** Why the template cannot be saved, or `null`. */\n error: string | null;\n /** Whole-value placeholders, once each, in first-seen order. */\n placeholders: string[];\n}\n\nexport function parseRequestTemplate(text: string): ParsedRequestTemplate {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return { value: null, error: \"Not valid JSON.\", placeholders: [] };\n }\n\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return { value: null, error: \"A template must be a JSON object.\", placeholders: [] };\n }\n\n const placeholders: string[] = [];\n const embedded: string[] = [];\n walkStrings(parsed, (value) => {\n const match = PLACEHOLDER.exec(value);\n if (match) {\n if (!placeholders.includes(match[1])) placeholders.push(match[1]);\n } else if (value.includes(\"{{\")) {\n embedded.push(value);\n }\n });\n\n return {\n value: parsed as Record<string, unknown>,\n error:\n embedded.length > 0\n ? `A placeholder must be the whole value, like \"{{companyName}}\": \"${embedded[0]}\".`\n : null,\n placeholders,\n };\n}\n\nfunction walkStrings(value: unknown, onString: (value: string) => void): void {\n if (typeof value === \"string\") {\n onString(value);\n } else if (Array.isArray(value)) {\n value.forEach((item) => walkStrings(item, onString));\n } else if (value !== null && typeof value === \"object\") {\n Object.values(value).forEach((item) => walkStrings(item, onString));\n }\n}\n\n/** Row-field bounds, mirrored from the host (spec 2026-09-28 section 2, CON_MAP_025). */\nexport const MAX_ROW_FIELDS_PER_FIELD = 32;\nexport const MAX_ROW_FIELD_TEXT_LENGTH = 256;\n\n/** Why a row-field path cannot be saved, or `null`. A blank path is dropped on save, not an error. */\nexport function rowFieldPathError(path: string): string | null {\n const trimmed = path.trim();\n if (trimmed.length === 0) return null;\n if (!trimmed.startsWith(\"$.\")) return 'A path must start with \"$.\", e.g. $.company_domain.';\n if (trimmed.length > MAX_ROW_FIELD_TEXT_LENGTH) return `A path can be at most ${MAX_ROW_FIELD_TEXT_LENGTH} characters.`;\n return null;\n}\n","import { Box, Button, Chip, FilledInput, FormControl, IconButton, InputLabel, Typography } from \"../ui\";\nimport { NiBinEmpty, NiChevronDownSmall, NiChevronUpSmall, NiPlus } from \"../../icons/nexture\";\nimport {\n MAX_REQUEST_TEMPLATES,\n MAX_ROW_FIELDS_PER_FIELD,\n MAX_ROW_FIELD_TEXT_LENGTH,\n parseRequestTemplate,\n rowFieldPathError,\n} from \"./requestTemplates\";\nimport type { ConnectorCanonicalField } from \"./types\";\n\n/** One editable template: a stable client id (React key only) and the raw JSON text. */\nexport interface TemplateRow {\n id: number;\n text: string;\n}\n\n/** One editable row field: a stable client id, the canonical row key and its path. */\nexport interface RowFieldRow {\n id: number;\n key: string;\n path: string;\n}\n\nexport const REQUEST_TEMPLATES_CAPTION =\n \"The first template whose placeholders all have values is sent as the request. Leave empty to use the field map.\";\n\ninterface RequestTemplatesSectionProps {\n rows: TemplateRow[];\n canonicalRequestFields: ConnectorCanonicalField[];\n onChange: (index: number, text: string) => void;\n onAdd: () => void;\n onRemove: (index: number) => void;\n onMove: (index: number, direction: -1 | 1) => void;\n}\n\n/**\n * The ordered list of request templates (spec section 3). Each area is validated as a JSON object\n * as it is typed and shows the placeholders it uses, marking in red any that is not a canonical\n * request field of the operation.\n */\nexport function RequestTemplatesSection({\n rows,\n canonicalRequestFields,\n onChange,\n onAdd,\n onRemove,\n onMove,\n}: RequestTemplatesSectionProps) {\n const canonicalNames = new Set(canonicalRequestFields.map((field) => field.name));\n\n return (\n <>\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-2\">\n Request templates\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-3 block\">\n {REQUEST_TEMPLATES_CAPTION}\n </Typography>\n\n {rows.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic mb-3\">\n No request templates configured.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3 mb-3\">\n {rows.map((row, index) => {\n const parsed = row.text.trim().length === 0 ? null : parseRequestTemplate(row.text);\n return (\n <Box key={row.id} className=\"flex flex-col gap-1\">\n <Box className=\"flex flex-row items-start gap-2\">\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>{`Template ${index + 1}`}</InputLabel>\n <FilledInput\n multiline\n minRows={4}\n value={row.text}\n onChange={(e) => onChange(index, e.target.value)}\n inputProps={{ \"aria-label\": `Request template ${index + 1}` }}\n sx={{ fontFamily: \"monospace\" }}\n />\n </FormControl>\n <Box className=\"flex flex-col\">\n <IconButton\n aria-label={`Move template ${index + 1} up`}\n color=\"inherit\"\n disabled={index === 0}\n onClick={() => onMove(index, -1)}\n >\n <NiChevronUpSmall size=\"small\" />\n </IconButton>\n <IconButton\n aria-label={`Move template ${index + 1} down`}\n color=\"inherit\"\n disabled={index === rows.length - 1}\n onClick={() => onMove(index, 1)}\n >\n <NiChevronDownSmall size=\"small\" />\n </IconButton>\n <IconButton aria-label={`Remove template ${index + 1}`} color=\"inherit\" onClick={() => onRemove(index)}>\n <NiBinEmpty size=\"small\" />\n </IconButton>\n </Box>\n </Box>\n {parsed?.error && (\n <Typography variant=\"caption\" color=\"error\" role=\"alert\">\n {parsed.error}\n </Typography>\n )}\n {parsed && parsed.placeholders.length > 0 && (\n <Box className=\"flex flex-wrap gap-1\">\n {parsed.placeholders.map((name) =>\n canonicalNames.has(name) ? (\n <Chip key={name} label={`{{${name}}}`} size=\"small\" variant=\"outlined\" />\n ) : (\n <Chip\n key={name}\n label={`{{${name}}} is not a request field`}\n size=\"small\"\n color=\"error\"\n variant=\"outlined\"\n />\n ),\n )}\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n\n <Button\n variant=\"outlined\"\n color=\"grey\"\n size=\"small\"\n onClick={onAdd}\n disabled={rows.length >= MAX_REQUEST_TEMPLATES}\n startIcon={<NiPlus size=\"small\" />}\n sx={{ alignSelf: \"flex-start\" }}\n >\n Add template\n </Button>\n </>\n );\n}\n\ninterface RowFieldsSectionProps {\n objectFields: ConnectorCanonicalField[];\n rows: Record<string, RowFieldRow[]>;\n onChange: (field: string, index: number, patch: Partial<RowFieldRow>) => void;\n onAdd: (field: string) => void;\n onRemove: (field: string, index: number) => void;\n}\n\n/**\n * One key/path table per Object-kind canonical response field (spec section 3): a free-text row key\n * and a path in the same grammar as the response paths, read from one row.\n */\nexport function RowFieldsSection({ objectFields, rows, onChange, onAdd, onRemove }: RowFieldsSectionProps) {\n return (\n <>\n {objectFields.map((field) => {\n const fieldRows = rows[field.name] ?? [];\n return (\n <Box key={field.name} className=\"flex flex-col gap-2 mb-3\">\n <Typography variant=\"h6\" component=\"h2\">\n {`Row fields — ${field.name}`}\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary block\">\n Rename the fields inside each row of this response. Each path is read from one row, e.g.{\" \"}\n <code>$.company_domain</code>; once you list any, the fields you do not list are dropped.\n </Typography>\n {fieldRows.map((row, index) => (\n <Box key={row.id} className=\"flex flex-row items-start gap-3\">\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0\" sx={{ width: 200, flexShrink: 0 }}>\n <InputLabel>Row field</InputLabel>\n <FilledInput\n value={row.key}\n onChange={(e) => onChange(field.name, index, { key: e.target.value })}\n inputProps={{ \"aria-label\": `Row field name ${index + 1} for ${field.name}`, maxLength: MAX_ROW_FIELD_TEXT_LENGTH }}\n placeholder=\"e.g. domain\"\n />\n </FormControl>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>JSON path in the row</InputLabel>\n <FilledInput\n value={row.path}\n onChange={(e) => onChange(field.name, index, { path: e.target.value })}\n inputProps={{ \"aria-label\": `Row field path ${index + 1} for ${field.name}`, maxLength: MAX_ROW_FIELD_TEXT_LENGTH }}\n error={rowFieldPathError(row.path) !== null}\n placeholder=\"e.g. $.company_domain\"\n />\n {rowFieldPathError(row.path) && (\n <Typography variant=\"caption\" color=\"error\" role=\"alert\">\n {rowFieldPathError(row.path)}\n </Typography>\n )}\n </FormControl>\n <IconButton\n aria-label={`Remove row field ${index + 1} for ${field.name}`}\n color=\"inherit\"\n onClick={() => onRemove(field.name, index)}\n sx={{ mt: 1 }}\n >\n <NiBinEmpty size=\"small\" />\n </IconButton>\n </Box>\n ))}\n <Button\n variant=\"outlined\"\n color=\"grey\"\n size=\"small\"\n onClick={() => onAdd(field.name)}\n startIcon={<NiPlus size=\"small\" />}\n disabled={fieldRows.length >= MAX_ROW_FIELDS_PER_FIELD}\n sx={{ alignSelf: \"flex-start\" }}\n aria-label={`Add row field to ${field.name}`}\n >\n Add row field\n </Button>\n </Box>\n );\n })}\n </>\n );\n}\n","import { useRef, useState } from \"react\";\n\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n Checkbox,\n Chip,\n Collapse,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FilledInput,\n FormControl,\n FormControlLabel,\n IconButton,\n InputLabel,\n Typography,\n} from \"../ui\";\nimport {\n NiBinEmpty,\n NiCheck,\n NiChevronDownSmall,\n NiChevronUpSmall,\n NiExclamationHexagon,\n NiPlus,\n NiSettings,\n NiSparkle,\n} from \"../../icons/nexture\";\nimport type {\n ConnectorCanonicalField,\n ConnectorMappingSuggestionResult,\n TestToolMappingRequest,\n TestToolMappingResult,\n} from \"./types\";\nimport {\n RequestTemplatesSection,\n RowFieldsSection,\n type RowFieldRow,\n type TemplateRow,\n} from \"./ConnectorMappingTemplateSections\";\nimport { MAX_REQUEST_TEMPLATES, parseRequestTemplate, rowFieldPathError } from \"./requestTemplates\";\n\n/**\n * The reserved request-field-map value meaning \"do not send this canonical field to the tool at\n * all\". The host reads it in `ConnectorRequestFieldSuppression` (CoreConnect.Application.Common);\n * this is the editor's copy of the same literal, exported so consumers and tests name it rather\n * than retyping it.\n *\n * <p><b>Why an operator needs it.</b> A blank input means \"identity - send this field under its\n * canonical name\", and until the host learned this sentinel that was the ONLY thing the request\n * side could say besides a rename. So an operation pointed at a tool with no property for one of\n * its canonical inputs sent it anyway, and a tool whose input schema is\n * <code>additionalProperties: false</code> rejects the entire call for the unknown key - not the\n * field, the call. Ticking \"Do not send\" writes this value; the host's translator then omits the\n * field from the request.</p>\n *\n * <p><b>Why this literal.</b> It has to be a value no tool could declare as an input property name,\n * or a genuine rename onto that name would be swallowed. Parentheses are the discriminator: they\n * are not valid in an identifier in any mainstream language, and across the tool inventory the\n * platform has discovered, no input property name contains one. They also make the row read as an\n * instruction rather than a name.</p>\n */\nexport const SUPPRESS_REQUEST_FIELD_VALUE = \"(suppress)\";\n\n/**\n * Whether a stored request-field-map value is the suppression sentinel. Trimmed and\n * case-insensitive, matching the host so a value saved here round-trips to a ticked box.\n */\nfunction isSuppressed(value: string | undefined): boolean {\n return value?.trim().toLowerCase() === SUPPRESS_REQUEST_FIELD_VALUE;\n}\n\n/**\n * The template half of a save (spec 2026-09-28 sections 1-3), delivered as `onSave`'s optional fourth\n * argument. A member is PRESENT only when its section was shown; `null` means the operator left it\n * empty (the host clears the column).\n */\nexport interface ConnectorMappingTranslationExtras {\n requestTemplates?: Record<string, unknown>[] | null;\n responseItemFieldPaths?: Record<string, Record<string, string>> | null;\n}\n\nexport interface ConnectorMappingTranslationEditorProps {\n open: boolean;\n\n /**\n * Human-readable operation label for the dialog title (e.g. \"Get File\").\n *\n * Optional because it is derived from a looked-up operation that may not be found: every caller\n * passes `string | undefined`. The contract claimed required while reality was optional, so this\n * states the truth rather than changing any runtime value.\n */\n operationLabel?: string;\n\n /**\n * Tool name the mapping currently points at — shown in the dialog header for context.\n *\n * Optional and nullable because the editor opens for an operation that may not be mapped yet:\n * every caller passes `string | null | undefined`.\n */\n toolName?: string | null;\n\n /**\n * Canonical request fields the editor renders one input per.\n *\n * Optional and nullable: an operation may declare no canonical schema, and the editor already\n * gates on their presence. See the coalescing note in the component body — this is not cosmetic.\n */\n canonicalRequestFields?: ConnectorCanonicalField[] | null;\n\n /** Canonical response fields the editor renders one JSON-path input per. Same nullability. */\n canonicalResponseFields?: ConnectorCanonicalField[] | null;\n\n /** Currently-persisted request-field translation, or `null` if the operator hasn't supplied one. */\n requestFieldMap: Record<string, string> | null;\n\n /** Currently-persisted response-field translation, or `null` if the operator hasn't supplied one. */\n responseFieldPaths: Record<string, string> | null;\n\n /**\n * Currently-persisted static request parameters (tool field name → constant literal value), or\n * `null` if the operator hasn't supplied any. Seeds the \"Static request parameters\" rows.\n */\n staticRequestFields: Record<string, string> | null;\n\n /**\n * Stored request templates, or `null` for none. **Leave `undefined` to hide the \"Request templates\"\n * section**: a host whose save path does not forward templates must not show an editor whose edits\n * would silently vanish.\n */\n requestTemplates?: unknown[] | null;\n\n /** Stored row fields, or `null`. Leave `undefined` to hide the \"Row fields\" section. Same rule. */\n responseItemFieldPaths?: Record<string, Record<string, string>> | null;\n\n /**\n * Called with the operator's translation dictionaries when they click Save. Empty inputs are\n * stripped before this fires; if every input on a side was blank, that side is delivered as `null`\n * rather than `{}` so the consumer can pass it straight through and the BE writes a NULL column\n * (which the resolver treats as \"no operator override\" and falls back to the connector's\n * vendor-default translation). A populated dictionary means \"rewrite these fields explicitly\"; the\n * BE persists it verbatim and the resolver applies it on top of vendor defaults.\n *\n * `staticRequestFields` carries the constant tool-request parameters (e.g. `{ method: \"get\" }`);\n * same null-vs-populated semantics — `null` when every static row was left blank.\n *\n * `extras` is passed only when the host showed at least one of the template sections.\n */\n onSave: (\n requestFieldMap: Record<string, string> | null,\n responseFieldPaths: Record<string, string> | null,\n staticRequestFields: Record<string, string> | null,\n extras?: ConnectorMappingTranslationExtras,\n ) => void;\n\n onCancel: () => void;\n\n /**\n * Optional. When provided, the editor renders a Test section below the field tables and a \"Test\n * mapping\" button inside it. The consumer supplies this callback so the editor never owns a\n * network call. Invoked with the sample args and the current (unsaved) field maps — stripped to\n * `null` when every input is blank, matching `onSave`.\n */\n onTestMapping?: (request: TestToolMappingRequest) => Promise<TestToolMappingResult>;\n\n /**\n * Optional. When provided, the editor renders an \"Auto-configure\" button in the Test section. The\n * consumer invokes the AI suggestion endpoint with the sample inputs the Test section collects,\n * then returns the suggested field maps so the editor can populate the request / response inputs.\n * The operator reviews and clicks Save.\n *\n * @param sampleArgs - Sample values the operator typed, one entry per canonical request field.\n * @returns The suggestion result (success/error + proposed maps).\n */\n onSuggestTranslation?: (sampleArgs: Record<string, unknown>) => Promise<ConnectorMappingSuggestionResult>;\n}\n\n/**\n * Per-mapping translation editor — surfaced when the operator picks a tool whose schema doesn't\n * match the operation's canonical request/response field names. Renders two stacked tables\n * (request / response): left column shows the canonical field's name + kind chip + required\n * indicator; right column captures the operator-supplied tool field name (request side) or JSON\n * path (response side).\n *\n * <p><b>Identity semantics.</b> An empty input on a field means \"identity — pass the canonical name\n * through unchanged\". On Save the editor strips empty values; if every input on a side was blank,\n * that side is delivered to `onSave` as <code>null</code> (not <code>{}</code>) so the BE writes a\n * NULL column. The resolver then treats the NULL as \"no operator override\" and falls back to the\n * connector's vendor-default translation; a populated dictionary means \"rewrite these fields\n * explicitly\" and applies on top of the vendor default.</p>\n *\n * <p><b>State seeding.</b> The consumer page mounts/unmounts this dialog every time the editor opens\n * (the `open` prop is always `true` in practice — the parent gates rendering via conditional mount),\n * so local state initialises lazily from the props on each mount. This avoids the \"setState in\n * useEffect\" pattern the eslint react-hooks ruleset blocks, AND keeps the operator's in-flight edits\n * sovereign once the dialog is open — a concurrent refresh of the mapping row doesn't clobber what\n * they're typing.</p>\n *\n * <p><b>Promoted, not designed here.</b> This file existed FOUR times — the host's gogo-ui adapter\n * plus `self-healing`, `tech` and `timesheets` — and the copies had already drifted. Three\n * differences were adjudicated on the way in, and each is a reason the duplication was expensive:</p>\n *\n * <ol>\n * <li><b>The Test button is gated on `onTestMapping`.</b> The enclosing block is gated on\n * <code>(onTestMapping || onSuggestTranslation)</code>, so without the inner guard a consumer\n * supplying only <code>onSuggestTranslation</code> rendered a \"Test mapping\" button whose\n * handler returns immediately — a DEAD CONTROL. `self-healing` shipped that; `tech` and\n * `timesheets` had fixed it. Nothing noticed, because there was no single source to notice\n * it against.</li>\n * <li><b>Backgrounds come from the theme (`action.hover`), never a hardcoded\n * <code>rgba()</code>.</b> A literal <code>rgba(0,0,0,0.03)</code> is invisible in dark mode\n * and is what `coreconnect/no-hardcoded-colors` exists to stop.</li>\n * <li><b>No emoji in chip labels.</b> The chips already carry an icon and a semantic colour, so\n * the emoji was a third, untranslatable, screen-reader-hostile encoding of the same state.</li>\n * </ol>\n *\n * <p>The null tolerance below came from the HOST copy, which was the most hardened of the four.\n * `coreconnect/no-local-mapping-editor` stops a fifth being written.</p>\n */\nexport function ConnectorMappingTranslationEditorView({\n open,\n operationLabel,\n toolName,\n // Renamed + coalesced below rather than defaulted here: a default parameter only covers\n // `undefined`, and callers pass `null` for an operation with no canonical schema. The six usages\n // further down all call .length / .map directly, so before these props were typed honestly this\n // was an unguarded TypeError waiting on any unmapped operation.\n canonicalRequestFields: canonicalRequestFieldsProp,\n canonicalResponseFields: canonicalResponseFieldsProp,\n requestFieldMap,\n responseFieldPaths,\n staticRequestFields,\n requestTemplates,\n responseItemFieldPaths,\n onSave,\n onCancel,\n onTestMapping,\n onSuggestTranslation,\n}: ConnectorMappingTranslationEditorProps) {\n // Empty array flows straight into the \"No request/response fields\" branch the view already has.\n const canonicalRequestFields = canonicalRequestFieldsProp ?? [];\n const canonicalResponseFields = canonicalResponseFieldsProp ?? [];\n // Lazy initialisers seed from the props once on mount. The consumer page is expected to re-mount\n // this view (via conditional rendering keyed on the targeted row) when the operator picks a\n // different row, so each invocation gets a fresh state machine without the useEffect-driven reset\n // pattern flagged by react-hooks/set-state-in-effect.\n const [requestValues, setRequestValues] = useState<Record<string, string>>(() => ({\n ...(requestFieldMap ?? {}),\n }));\n const [responseValues, setResponseValues] = useState<Record<string, string>>(() => ({\n ...(responseFieldPaths ?? {}),\n }));\n // Static request parameters are arbitrary tool-field → constant-value pairs with no canonical\n // counterpart, so they're held as an ordered row list (each row owns an editable key) rather than\n // the canonical-field-keyed record used above. Each row carries a stable client-side id so React\n // keys survive add/remove without reusing array indices (index keys make controlled inputs and\n // focus jump to the wrong row after a deletion).\n const staticRowIdRef = useRef(0);\n const [staticRows, setStaticRows] = useState<StaticRow[]>(() =>\n Object.entries(staticRequestFields ?? {}).map(([key, value]) => ({\n id: staticRowIdRef.current++,\n key,\n value,\n })),\n );\n const [sampleArgs, setSampleArgs] = useState<Record<string, string>>(() => ({}));\n const [testResult, setTestResult] = useState<TestToolMappingResult | null>(null);\n const [isTesting, setIsTesting] = useState(false);\n const [rawJsonExpanded, setRawJsonExpanded] = useState(false);\n const [suggestionError, setSuggestionError] = useState<string | null>(null);\n const [isSuggesting, setIsSuggesting] = useState(false);\n\n const showTemplates = requestTemplates !== undefined;\n const objectResponseFields = canonicalResponseFields.filter((field) => field.kind === \"Object\");\n // Only true when the section actually renders; a hidden section must not clear stored config the\n // operator never saw, so it is omitted from the save extras (undefined, not null).\n const showRowFields = responseItemFieldPaths !== undefined && objectResponseFields.length > 0;\n\n const templateRowIdRef = useRef(0);\n const [templateRows, setTemplateRows] = useState<TemplateRow[]>(() =>\n (requestTemplates ?? []).flatMap((template) => {\n // A stored element that cannot be shown (undefined, circular) is skipped rather than thrown on.\n let text: string | undefined;\n try {\n text = JSON.stringify(template, null, 2);\n } catch {\n text = undefined;\n }\n return text === undefined ? [] : [{ id: templateRowIdRef.current++, text }];\n }),\n );\n const rowFieldIdRef = useRef(0);\n const [rowFieldRows, setRowFieldRows] = useState<Record<string, RowFieldRow[]>>(() =>\n Object.fromEntries(\n Object.entries(responseItemFieldPaths ?? {}).map(([field, paths]) => [\n field,\n Object.entries(paths).map(([key, path]) => ({ id: rowFieldIdRef.current++, key, path })),\n ]),\n ),\n );\n const hasInvalidTemplate =\n (showTemplates &&\n templateRows.some((row) => row.text.trim().length > 0 && parseRequestTemplate(row.text).error !== null)) ||\n (showRowFields &&\n objectResponseFields.some((field) => (rowFieldRows[field.name] ?? []).some((row) => rowFieldPathError(row.path) !== null)));\n\n const handleTemplateChange = (index: number, text: string) =>\n setTemplateRows((prev) => prev.map((row, i) => (i === index ? { ...row, text } : row)));\n const handleAddTemplate = () =>\n setTemplateRows((prev) =>\n prev.length >= MAX_REQUEST_TEMPLATES ? prev : [...prev, { id: templateRowIdRef.current++, text: \"\" }],\n );\n const handleRemoveTemplate = (index: number) => setTemplateRows((prev) => prev.filter((_, i) => i !== index));\n const handleMoveTemplate = (index: number, direction: -1 | 1) =>\n setTemplateRows((prev) => {\n const target = index + direction;\n if (target < 0 || target >= prev.length) return prev;\n const next = [...prev];\n [next[index], next[target]] = [next[target], next[index]];\n return next;\n });\n const handleRowFieldChange = (field: string, index: number, patch: Partial<RowFieldRow>) =>\n setRowFieldRows((prev) => ({\n ...prev,\n [field]: (prev[field] ?? []).map((row, i) => (i === index ? { ...row, ...patch } : row)),\n }));\n const handleAddRowField = (field: string) =>\n setRowFieldRows((prev) => ({\n ...prev,\n [field]: [...(prev[field] ?? []), { id: rowFieldIdRef.current++, key: \"\", path: \"\" }],\n }));\n const handleRemoveRowField = (field: string, index: number) =>\n setRowFieldRows((prev) => ({ ...prev, [field]: (prev[field] ?? []).filter((_, i) => i !== index) }));\n\n const handleRequestChange = (canonicalName: string, value: string) => {\n setRequestValues((prev) => ({ ...prev, [canonicalName]: value }));\n };\n\n /**\n * Ticking \"Do not send\" writes the sentinel; unticking clears the input back to blank rather than\n * restoring whatever name was typed before. Blank is the identity default, so unticking returns\n * the row to the state it would have had if the operator had never touched it - which is what the\n * control's label promises. Remembering and restoring a prior rename would be a second piece of\n * hidden state the row does not show.\n */\n const handleRequestSuppressToggle = (canonicalName: string, suppress: boolean) => {\n setRequestValues((prev) => ({\n ...prev,\n [canonicalName]: suppress ? SUPPRESS_REQUEST_FIELD_VALUE : \"\",\n }));\n };\n\n const handleResponseChange = (canonicalName: string, value: string) => {\n setResponseValues((prev) => ({ ...prev, [canonicalName]: value }));\n };\n\n const handleStaticChange = (index: number, patch: Partial<StaticRow>) => {\n setStaticRows((prev) => prev.map((row, i) => (i === index ? { ...row, ...patch } : row)));\n };\n\n const handleAddStaticRow = () => {\n setStaticRows((prev) => [...prev, { id: staticRowIdRef.current++, key: \"\", value: \"\" }]);\n };\n\n const handleRemoveStaticRow = (index: number) => {\n setStaticRows((prev) => prev.filter((_, i) => i !== index));\n };\n\n const handleSave = () => {\n // Empty inputs collapse to `null` (not `{}`) so the BE can tell \"no operator override\" from\n // \"operator explicitly set zero rewrites\". See the `onSave` JSDoc for the resolver-side\n // semantics.\n const requestMap = stripEmpty(requestValues);\n const responseMap = stripEmpty(responseValues);\n const staticMap = staticRowsToMap(staticRows);\n const request = Object.keys(requestMap).length === 0 ? null : requestMap;\n const response = Object.keys(responseMap).length === 0 ? null : responseMap;\n const statics = Object.keys(staticMap).length === 0 ? null : staticMap;\n\n if (!showTemplates && !showRowFields) {\n onSave(request, response, statics);\n return;\n }\n\n const extras: ConnectorMappingTranslationExtras = {};\n if (showTemplates) extras.requestTemplates = templateRowsToWire(templateRows);\n if (showRowFields) extras.responseItemFieldPaths = rowFieldRowsToWire(rowFieldRows, objectResponseFields);\n onSave(request, response, statics, extras);\n };\n\n const handleTest = async () => {\n if (!onTestMapping) return;\n setIsTesting(true);\n setTestResult(null);\n try {\n const requestMap = stripEmpty(requestValues);\n const responseMap = stripEmpty(responseValues);\n // Forward the DRAFT static params (the same `staticRowsToMap` collapse `handleSave` uses) so\n // the dry-run exercises the unsaved `method`/`state` discriminator the operator just typed —\n // the whole point of testing before saving.\n const staticMap = staticRowsToMap(staticRows);\n const request: TestToolMappingRequest = {\n sampleArgs: Object.fromEntries(\n Object.entries(sampleArgs).filter(([, v]) => v.trim().length > 0),\n ),\n requestFieldMap: Object.keys(requestMap).length === 0 ? null : requestMap,\n responseFieldPaths: Object.keys(responseMap).length === 0 ? null : responseMap,\n staticRequestFields: Object.keys(staticMap).length === 0 ? null : staticMap,\n };\n const result = await onTestMapping(request);\n setTestResult(result);\n } catch {\n setTestResult({\n success: false,\n error: \"An unexpected error occurred while running the test.\",\n rawResponseJson: null,\n extractedFields: [],\n });\n } finally {\n setIsTesting(false);\n }\n };\n\n const handleSuggest = async () => {\n if (!onSuggestTranslation) return;\n setIsSuggesting(true);\n setSuggestionError(null);\n try {\n const collectedSampleArgs: Record<string, unknown> = Object.fromEntries(\n Object.entries(sampleArgs).filter(([, v]) => v.trim().length > 0),\n );\n const result: ConnectorMappingSuggestionResult = await onSuggestTranslation(collectedSampleArgs);\n if (result.success) {\n // Merge the AI-proposed maps over current state so filled inputs are visible.\n setRequestValues((prev) => ({ ...prev, ...result.requestFieldMap }));\n setResponseValues((prev) => ({ ...prev, ...result.responseFieldPaths }));\n } else {\n setSuggestionError(result.error ?? \"Auto-configure failed.\");\n }\n } catch {\n setSuggestionError(\"An unexpected error occurred during auto-configure.\");\n } finally {\n setIsSuggesting(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onCancel} maxWidth=\"md\" fullWidth>\n <DialogTitle>Configure Field Translation — {operationLabel}</DialogTitle>\n <DialogContent>\n <Box className=\"flex flex-col gap-2 pt-2\">\n <Typography variant=\"body2\" className=\"text-text-secondary\">\n Mapping operation <strong>{operationLabel}</strong> to tool <strong>{toolName}</strong>.\n Leave a field blank to pass the canonical name through unchanged (identity translation).\n </Typography>\n\n {/*\n * A CSS grid via `sx`, not <Grid>. `size={{ xs, md }}` is the Grid v2 API, which does not\n * exist under this package's declared `@mui/material` peer of `>=5` - on v5 the prop is\n * unknown and leaks to the DOM. Responsive `sx` values behave identically across v5, v6\n * and v7, so the promoted component stays agnostic to the major the host ships. Column\n * split and gutter are unchanged: `md` is MUI's own breakpoint, and `gap: 5` is the same\n * 40px the previous `spacing={5}` produced.\n */}\n <Box\n className=\"pt-3\"\n sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 5 }}\n >\n <Box>\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-3\">\n Request fields\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-2 block\">\n Map each canonical request field to the tool&apos;s actual input field name. If the\n tool has no property for a field, tick <strong>Do not send this field</strong> —\n many tools reject a whole call for one argument they do not recognise.\n </Typography>\n {canonicalRequestFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic\">\n No request fields declared.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3\">\n {canonicalRequestFields.map((field) => (\n <FieldRow\n key={field.name}\n field={field}\n value={requestValues[field.name] ?? \"\"}\n onChange={(v) => handleRequestChange(field.name, v)}\n placeholder=\"Same as canonical\"\n inputLabel=\"Tool field name\"\n onSuppressToggle={(v) => handleRequestSuppressToggle(field.name, v)}\n />\n ))}\n </Box>\n )}\n </Box>\n\n <Box>\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-3\">\n Response fields\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-2 block\">\n Map each canonical response field to a JSON path against the tool&apos;s response.\n </Typography>\n {canonicalResponseFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic\">\n No response fields declared.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3\">\n {canonicalResponseFields.map((field) => (\n <FieldRow\n key={field.name}\n field={field}\n value={responseValues[field.name] ?? \"\"}\n onChange={(v) => handleResponseChange(field.name, v)}\n placeholder={'e.g. \"$.content\" or \"$.contents[0].text\"'}\n inputLabel=\"JSON path\"\n />\n ))}\n </Box>\n )}\n </Box>\n </Box>\n\n <Divider className=\"my-4\" />\n\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-2\">\n Static request parameters\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-3 block\">\n Constant values sent with every call, regardless of the canonical input — e.g. a\n consolidated tool&apos;s <code>method</code> discriminator (<code>method</code> →{\" \"}\n <code>get</code>). These are injected after the mapped request fields.\n </Typography>\n\n {staticRows.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic mb-3\">\n No static parameters configured.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3 mb-3\">\n {staticRows.map((row, index) => (\n <Box key={row.id} className=\"flex flex-row items-start gap-3\">\n <FormControl\n variant=\"filled\"\n size=\"medium\"\n className=\"surface mb-0\"\n sx={{ width: 240, flexShrink: 0 }}\n >\n <InputLabel>Tool field name</InputLabel>\n <FilledInput\n value={row.key}\n onChange={(e) => handleStaticChange(index, { key: e.target.value })}\n placeholder=\"e.g. method\"\n />\n </FormControl>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>Constant value</InputLabel>\n <FilledInput\n value={row.value}\n onChange={(e) => handleStaticChange(index, { value: e.target.value })}\n placeholder=\"e.g. get\"\n />\n </FormControl>\n {/*\n * `inherit`, not the `grey` the four copies used, and deliberately so. gogo-ui has\n * no `MuiIconButton-*Grey` rule (the only `.MuiIconButton-root` block sets sizes),\n * and MUI emits no styles for a `main`-less palette entry, so `color=\"grey\"` fell\n * through to the root's `palette.action.active` - which that theme defines as\n * `hsl(var(--text-primary))`, the same value inherited here from the dialog's\n * `MuiPaper-root`. Same pixels either way, so this one is not worth an\n * `IconButtonPropsColorOverrides` augmentation.\n */}\n <IconButton\n aria-label=\"Remove static parameter\"\n color=\"inherit\"\n onClick={() => handleRemoveStaticRow(index)}\n sx={{ mt: 1 }}\n >\n <NiBinEmpty size=\"small\" />\n </IconButton>\n </Box>\n ))}\n </Box>\n )}\n\n <Button\n variant=\"outlined\"\n color=\"grey\"\n size=\"small\"\n onClick={handleAddStaticRow}\n startIcon={<NiPlus size=\"small\" />}\n sx={{ alignSelf: \"flex-start\" }}\n >\n Add parameter\n </Button>\n\n {showTemplates && (\n <>\n <Divider className=\"my-4\" />\n <RequestTemplatesSection\n rows={templateRows}\n canonicalRequestFields={canonicalRequestFields}\n onChange={handleTemplateChange}\n onAdd={handleAddTemplate}\n onRemove={handleRemoveTemplate}\n onMove={handleMoveTemplate}\n />\n </>\n )}\n\n {showRowFields && objectResponseFields.length > 0 && (\n <>\n <Divider className=\"my-4\" />\n <RowFieldsSection\n objectFields={objectResponseFields}\n rows={rowFieldRows}\n onChange={handleRowFieldChange}\n onAdd={handleAddRowField}\n onRemove={handleRemoveRowField}\n />\n </>\n )}\n\n {(onTestMapping || onSuggestTranslation) && (\n <>\n <Divider className=\"my-4\" />\n\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-2\">\n Test with sample inputs\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-3 block\">\n Enter sample values for each request field, then click &quot;Test mapping&quot; to see\n what each response field extracts from the live tool response.\n </Typography>\n\n {canonicalRequestFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic mb-3\">\n No request fields — nothing to sample.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3 mb-4\">\n {canonicalRequestFields.map((field) => (\n <Box key={field.name} className=\"flex flex-row items-start gap-3\">\n <Box className=\"flex flex-col gap-1\" sx={{ width: 200, flexShrink: 0 }}>\n <Box className=\"flex items-center gap-1.5\">\n <Typography variant=\"subtitle2\" className=\"break-all\">\n {field.name}\n </Typography>\n {field.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"primary\" variant=\"outlined\" />\n )}\n </Box>\n <Chip\n label={field.kind}\n size=\"small\"\n variant=\"outlined\"\n sx={{ alignSelf: \"flex-start\" }}\n />\n </Box>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>Sample value</InputLabel>\n <FilledInput\n value={sampleArgs[field.name] ?? \"\"}\n onChange={(e) =>\n setSampleArgs((prev) => ({ ...prev, [field.name]: e.target.value }))\n }\n placeholder=\"e.g. my-value\"\n />\n </FormControl>\n </Box>\n ))}\n </Box>\n )}\n\n <Box className=\"flex items-center gap-3\">\n {onSuggestTranslation && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSuggest}\n disabled={isSuggesting || isTesting}\n startIcon={isSuggesting ? undefined : <NiSparkle size=\"small\" />}\n data-testid=\"suggest-translation-button\"\n >\n {isSuggesting ? \"Configuring…\" : \"Auto-configure\"}\n </Button>\n )}\n {/* The enclosing block is gated on (onTestMapping || onSuggestTranslation), so\n without this guard a caller supplying only onSuggestTranslation still got a\n \"Test mapping\" button whose handler returns immediately - a dead control. */}\n {onTestMapping && (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={handleTest}\n disabled={isTesting || isSuggesting}\n startIcon={isTesting ? undefined : <NiSettings size=\"small\" />}\n data-testid=\"test-mapping-button\"\n >\n {isTesting ? \"Testing…\" : \"Test mapping\"}\n </Button>\n )}\n </Box>\n\n {suggestionError && (\n <Box className=\"mt-3\">\n <Alert severity=\"error\">\n <AlertTitle>Auto-configure failed</AlertTitle>\n {suggestionError}\n </Alert>\n </Box>\n )}\n\n {testResult && (\n <Box className=\"mt-4 flex flex-col gap-3\">\n {/*\n * Branch on `success`, never on `error` being present. They are two fields and\n * the contract only ties them one way - `error` is documented as the message\n * WHEN success is false, not as the signal that it is. A caller returning\n * `{ success: false, error: null }` is within the type, and reading truthiness\n * of `error` would render that failure as the success panel, complete with\n * whatever `extractedFields` came back. The message falls back rather than the\n * branch.\n */}\n {!testResult.success ? (\n <Alert severity=\"error\">\n <AlertTitle>Test failed</AlertTitle>\n {testResult.error ?? \"The tool call failed without reporting a reason.\"}\n </Alert>\n ) : (\n <>\n {testResult.extractedFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-secondary italic\">\n No response fields to show.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-2\">\n {testResult.extractedFields.map((ef) => (\n <Box\n key={ef.canonicalField}\n className=\"flex items-center gap-3 rounded p-2\"\n // Theme token, never a literal rgba(): a hardcoded near-black wash is\n // invisible in dark mode, and `no-hardcoded-colors` reports it.\n sx={{ backgroundColor: \"action.hover\" }}\n >\n <Typography variant=\"subtitle2\" sx={{ minWidth: 140, flexShrink: 0 }}>\n {ef.canonicalField}\n </Typography>\n <Typography\n variant=\"body2\"\n className=\"text-text-secondary flex-1 truncate\"\n sx={{ fontFamily: \"monospace\" }}\n title={ef.value ?? undefined}\n >\n {ef.value != null\n ? ef.value.length > 60\n ? `${ef.value.slice(0, 60)}…`\n : ef.value\n : \"—\"}\n </Typography>\n {/* No emoji in these labels. Each chip already carries an icon and a\n semantic colour, so an emoji is a third encoding of the same state\n - one a screen reader announces and no locale translates. */}\n {ef.present && !ef.looksBase64 && (\n <Chip\n icon={<NiCheck size=\"small\" />}\n label=\"extracted\"\n size=\"small\"\n color=\"success\"\n variant=\"outlined\"\n />\n )}\n {ef.present && ef.looksBase64 && (\n <Chip\n icon={<NiSettings size=\"small\" />}\n label='looks base64 — prefix path with \"base64:\"'\n size=\"small\"\n color=\"warning\"\n variant=\"outlined\"\n />\n )}\n {!ef.present && (\n <Chip\n icon={<NiExclamationHexagon size=\"small\" />}\n label=\"no value — adjust the JSON path\"\n size=\"small\"\n color=\"warning\"\n variant=\"outlined\"\n />\n )}\n </Box>\n ))}\n </Box>\n )}\n\n {testResult.rawResponseJson && (\n <Box className=\"mt-2\">\n <Button\n variant=\"text\"\n color=\"grey\"\n size=\"small\"\n onClick={() => setRawJsonExpanded((v) => !v)}\n endIcon={\n rawJsonExpanded ? (\n <NiChevronUpSmall size=\"small\" />\n ) : (\n <NiChevronDownSmall size=\"small\" />\n )\n }\n >\n {rawJsonExpanded ? \"Hide raw response\" : \"Show raw response\"}\n </Button>\n <Collapse in={rawJsonExpanded}>\n <Box\n component=\"pre\"\n className=\"mt-2 overflow-auto rounded p-3 text-xs\"\n sx={{\n maxHeight: 240,\n backgroundColor: \"action.hover\",\n fontFamily: \"monospace\",\n }}\n >\n {testResult.rawResponseJson}\n </Box>\n </Collapse>\n </Box>\n )}\n </>\n )}\n </Box>\n )}\n </>\n )}\n </Box>\n </DialogContent>\n <DialogActions className=\"px-6 pb-4 pt-2\">\n <Button variant=\"outlined\" color=\"grey\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSave}\n data-testid=\"save-translation-button\"\n disabled={hasInvalidTemplate}\n >\n Save\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\n/**\n * One editable static-parameter row. `id` is a stable client-side identity used only as the React\n * key (so rows survive add/remove without index reuse); `key` is the tool field name and `value`\n * the constant injected into the request.\n */\ninterface StaticRow {\n id: number;\n key: string;\n value: string;\n}\n\ninterface FieldRowProps {\n field: ConnectorCanonicalField;\n value: string;\n onChange: (value: string) => void;\n placeholder: string;\n inputLabel: string;\n\n /**\n * Request side only. When supplied, the row renders a \"Do not send\" checkbox that writes the\n * suppression sentinel. Omitted on the response side, where \"send nothing\" is not a thing a JSON\n * path can mean: a response field with no path simply resolves to null already.\n */\n onSuppressToggle?: (suppress: boolean) => void;\n}\n\n/**\n * One row of the translation editor — canonical-field summary on the left, free-text input on the\n * right. The input is a filled MUI text field per the platform's form conventions so it visually\n * matches every other operator form.\n *\n * <p><b>The suppression checkbox is a control over the same single value the input holds</b>, not a\n * second piece of state. Ticked means the value IS the sentinel, so the row can never disagree with\n * what will be saved, and a mapping loaded with a stored `(suppress)` shows ticked without any\n * seeding logic of its own. The input is disabled while ticked because a tool field name and \"do\n * not send it\" are contradictory instructions, and letting both be entered would leave the operator\n * to guess which wins.</p>\n */\nfunction FieldRow({\n field,\n value,\n onChange,\n placeholder,\n inputLabel,\n onSuppressToggle,\n}: FieldRowProps) {\n const suppressed = isSuppressed(value);\n\n return (\n <Box className=\"flex flex-row items-start gap-3\">\n <Box className=\"flex flex-col gap-1\" sx={{ width: 200, flexShrink: 0 }}>\n <Box className=\"flex items-center gap-1.5\">\n <Typography variant=\"subtitle2\" className=\"break-all\">\n {field.name}\n </Typography>\n {field.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"primary\" variant=\"outlined\" />\n )}\n </Box>\n <Chip label={field.kind} size=\"small\" variant=\"outlined\" sx={{ alignSelf: \"flex-start\" }} />\n </Box>\n <Box className=\"flex flex-1 flex-col\">\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>{inputLabel}</InputLabel>\n <FilledInput\n value={suppressed ? \"\" : value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={suppressed ? \"Not sent\" : placeholder}\n disabled={suppressed}\n />\n </FormControl>\n {onSuppressToggle && (\n <FormControlLabel\n className=\"mt-1\"\n control={\n <Checkbox\n size=\"small\"\n checked={suppressed}\n onChange={(e) => onSuppressToggle(e.target.checked)}\n inputProps={{ \"aria-label\": `Do not send ${field.name}` }}\n />\n }\n label={\n <Typography variant=\"caption\" className=\"text-text-secondary\">\n Do not send this field\n {field.isRequired ? \" (this operation declares it as required)\" : \"\"}\n </Typography>\n }\n />\n )}\n </Box>\n </Box>\n );\n}\n\n/**\n * Drop empty-string entries — an empty input means \"identity for this field\", which is represented\n * on the wire by the ABSENCE of the key (not a `\"\" → \"\"` entry). Saving the stripped dictionary\n * keeps the persisted JSON minimal and the read path's \"no entry = identity\" contract honest.\n */\nfunction stripEmpty(values: Record<string, string>): Record<string, string> {\n return Object.fromEntries(\n Object.entries(values)\n .filter(([, value]) => value.trim().length > 0)\n .map(([key, value]) => [key, value.trim()]),\n );\n}\n\n/**\n * Collapse the editable static-parameter rows into the wire dictionary. Rows with a blank key are\n * dropped (a value with no field name can't be injected); the value is preserved verbatim\n * (including intentional whitespace / empty string) once the key is present. A later duplicate key\n * wins — matching how the BE's `Dictionary<string,string>` would deserialise the JSON.\n */\nfunction staticRowsToMap(rows: StaticRow[]): Record<string, string> {\n // Object.fromEntries defines own data properties, so a free-text key of `__proto__` survives.\n return Object.fromEntries(rows.filter(({ key }) => key.trim().length > 0).map(({ key, value }) => [key.trim(), value]));\n}\n\n/** Non-blank template texts, parsed, in order; `null` when none remain. Invalid ones block Save. */\nfunction templateRowsToWire(rows: TemplateRow[]): Record<string, unknown>[] | null {\n const templates = rows\n .filter((row) => row.text.trim().length > 0)\n .map((row) => parseRequestTemplate(row.text).value)\n .filter((value): value is Record<string, unknown> => value !== null);\n return templates.length === 0 ? null : templates;\n}\n\n/**\n * Row fields for the Object-kind fields the editor shows; rows with a blank name or path are dropped\n * and a field left with none is omitted. `null` when nothing remains.\n */\nfunction rowFieldRowsToWire(\n rows: Record<string, RowFieldRow[]>,\n objectFields: ConnectorCanonicalField[],\n): Record<string, Record<string, string>> | null {\n // Object.fromEntries (not `out[key] = ...`): both key sets are free text, and assignment would\n // drop or mis-handle a key named `__proto__`.\n const out: Record<string, Record<string, string>> = Object.fromEntries(\n objectFields\n .map((field) => {\n const paths: Record<string, string> = Object.fromEntries(\n (rows[field.name] ?? [])\n .filter(({ key, path }) => key.trim().length > 0 && path.trim().length > 0)\n .map(({ key, path }) => [key.trim(), path.trim()]),\n );\n return [field.name, paths] as const;\n })\n .filter(([, paths]) => Object.keys(paths).length > 0),\n );\n return Object.keys(out).length === 0 ? null : out;\n}\n","/**\n * React-query keys for a connector's tool mappings and the completeness read derived from them.\n *\n * @remarks\n * The completeness key is built as a CHILD of the mappings key, and that nesting is the whole point\n * of shipping these from the SDK rather than letting each plugin declare its own.\n *\n * Completeness is derived state: it is the mappings joined against the live tool schemas. Every write\n * that changes a mapping can change it. When the two keys are siblings, a mutation has to remember to\n * invalidate both, and one plugin duly invalidated only the mappings key — so its \"operations aren't\n * fully mapped\" banner went stale after every save, clear and auto-match, and stayed stale until the\n * operator navigated away. Nesting means a single `invalidateQueries({ queryKey: mappings })` takes\n * the completeness read with it, and there is nothing left to forget.\n *\n * @example\n * ```ts\n * const mappings = connectorMappingsQueryKey(connectorId, moduleKey);\n *\n * useQuery({ queryKey: mappings, queryFn: ... });\n * useQuery({ queryKey: connectorMappingCompletenessQueryKey(connectorId, moduleKey), queryFn: ... });\n *\n * // One call. Covers both, and any future query keyed beneath the mappings key.\n * queryClient.invalidateQueries({ queryKey: mappings });\n * ```\n */\n\n/** Root segment for every connector-mapping query, so one prefix can invalidate the family. */\nconst CONNECTOR_MAPPINGS_ROOT = \"connector-mappings\" as const;\n\n/**\n * Key for the mappings list of one connector + module.\n *\n * `connectorId` is accepted as possibly-undefined because the page renders before a connector is\n * chosen; pair it with `enabled: !!connectorId` rather than branching on the key.\n */\nexport function connectorMappingsQueryKey(\n connectorId: string | undefined,\n moduleKey: string,\n) {\n return [CONNECTOR_MAPPINGS_ROOT, connectorId, moduleKey] as const;\n}\n\n/**\n * The whole family's prefix, for the one invalidation that has to cross connectors.\n *\n * Almost every write is scoped to one connector and should invalidate only that connector's subtree\n * via {@link connectorMappingsQueryKey}. Changing a module's PROVIDER is the exception: it moves the\n * module from one provider's rows to another's, so the subtree that must be discarded is the one\n * being left, which the new scope's key does not name.\n */\nexport function connectorMappingsRootQueryKey() {\n return [CONNECTOR_MAPPINGS_ROOT] as const;\n}\n\n// The provider selection's own key lives with the hook that owns it, in\n// `connector-mappings/useModuleProvider` - `moduleProviderQueryKey` there. It is inside this family\n// (`[\"connector-mappings\", \"module-provider\", moduleKey]`) so the root invalidation above covers it,\n// but NOT beneath a connector id: the selection is what CHOOSES the connector, so nesting it under\n// one would move the cache entry every time the operator switched and lose it at the single moment\n// it has to be correct.\n\n/**\n * Key for the mapping rows of a module served by an installed application.\n *\n * A sibling of {@link connectorMappingsQueryKey} rather than a variant of it, because the read\n * behind it is a different one: the connector list read is scoped by connector id and a\n * plugin-target row has none. Keyed under the same root so the family invalidation covers it.\n */\nexport function pluginTargetMappingsQueryKey(moduleKey: string) {\n return [CONNECTOR_MAPPINGS_ROOT, \"plugin-target\", moduleKey] as const;\n}\n\n/**\n * Key for the completeness read, nested UNDER {@link connectorMappingsQueryKey} so invalidating the\n * mappings prefix always covers it. Do not flatten this into a sibling key.\n */\nexport function connectorMappingCompletenessQueryKey(\n connectorId: string | undefined,\n moduleKey: string,\n) {\n return [...connectorMappingsQueryKey(connectorId, moduleKey), \"completeness\"] as const;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/components/ui/Dialog.tsx","../../../src/icons/nexture/ni-archive.tsx","../../../src/icons/nexture/ni-bin-empty.tsx","../../../src/icons/nexture/ni-check.tsx","../../../src/icons/nexture/ni-chevron-down-small.tsx","../../../src/icons/nexture/ni-chevron-up-small.tsx","../../../src/icons/nexture/ni-code.tsx","../../../src/icons/nexture/ni-cross.tsx","../../../src/icons/nexture/ni-exclamation-hexagon.tsx","../../../src/icons/nexture/ni-plus.tsx","../../../src/icons/nexture/ni-refresh.tsx","../../../src/icons/nexture/ni-search.tsx","../../../src/icons/nexture/ni-settings.tsx","../../../src/icons/nexture/ni-sparkle.tsx","../../../src/icons/nexture-icons.tsx","../../../src/components/ui/DebouncedSearchInput.tsx","../../../src/components/connectors/mappingCompleteness.ts","../../../src/components/connectors/providerLabels.ts","../../../src/components/connectors/MappingCompletenessBanner.tsx","../../../src/components/shared/EmptyState.tsx","../../../src/components/connectors/ConnectorMappingView.tsx","../../../src/components/connectors/requestTemplates.ts","../../../src/components/connectors/ConnectorMappingTemplateSections.tsx","../../../src/components/connectors/ConnectorMappingTranslationEditorView.tsx","../../../src/components/connectors/mappingQueryKeys.ts"],"names":["MuiDialog","jsxs","jsx","DebouncedSearchInput","Box","Typography","IconButton","Fragment","FormControl","InputLabel","FilledInput","useState","useRef"],"mappings":"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","file":"index.js","sourcesContent":["import { Dialog as MuiDialog, type DialogProps } from \"@mui/material\";\n\n/**\n * MUI `Dialog` with the scroll-lock + focus-restore overrides plugin surfaces\n * need (AB#4808): MUI's defaults reset the page to top when a dialog opened from\n * below the fold closes. Everything else is the stock `Dialog` — this is the one\n * `components/ui` wrapper that isn't a pure re-export.\n */\nexport function Dialog(props: DialogProps) {\n return <MuiDialog disableScrollLock disableRestoreFocus {...props} />;\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiArchive({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M22 7V5.71496C22 4.17371 20.8321 2.88321 19.2985 2.72985L17.9702 2.59702C14 2.2 10 2.2 6.02978 2.59702L4.70149 2.72985C3.16788 2.88321 2 4.17371 2 5.71496V7C2 8.10457 2.89543 9 4 9H20C21.1046 9 22 8.10457 22 7Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.53333 9.5L4.4768 9.74619C3.83435 12.544 3.8494 15.4543 4.51997 18.2455V18.2455C4.85389 19.6354 5.95655 20.7108 7.35451 21.009V21.009C10.4171 21.6623 13.5829 21.6623 16.6455 21.009V21.009C18.0434 20.7108 19.1461 19.6354 19.48 18.2455V18.2455C20.1506 15.4543 20.1657 12.544 19.5232 9.74618L19.4667 9.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M14.0945 13.9189C14.3504 13.9701 14.5682 14.1365 14.6849 14.3698V14.3698C14.8833 14.7665 14.8833 15.2335 14.6849 15.6302V15.6302C14.5682 15.8635 14.3504 16.0299 14.0945 16.0811L13.8853 16.1229C12.6408 16.3718 11.3592 16.3718 10.1147 16.1229L9.90546 16.0811C9.64963 16.0299 9.43176 15.8635 9.31508 15.6302V15.6302C9.11673 15.2335 9.11673 14.7665 9.31508 14.3698V14.3698C9.43176 14.1365 9.64963 13.9701 9.90546 13.9189L10.1147 13.8771C11.3592 13.6282 12.6408 13.6282 13.8853 13.8771L14.0945 13.9189Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.95508 1.85031C9.9749 1.44833 14.0251 1.44833 18.0449 1.85031L19.373 1.98312C21.2897 2.17479 22.7495 3.78844 22.75 5.71457V6.99972C22.75 7.86931 22.345 8.64326 21.7148 9.14719C21.1107 7.71812 19.7022 6.75088 18.1025 6.7507H5.89746C4.29778 6.75078 2.8884 7.71735 2.28418 9.14621C1.65469 8.64226 1.25 7.86881 1.25 6.99972V5.71457C1.2505 3.78844 2.71028 2.17479 4.62695 1.98312L5.95508 1.85031Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M18.1028 8.25C19.2525 8.25003 20.2447 9.05777 20.4778 10.1836C20.9988 12.7045 20.957 15.3105 20.3557 17.8135L20.2092 18.4219C19.8078 20.0924 18.4823 21.3837 16.802 21.7422C13.6364 22.4174 10.3641 22.4174 7.19849 21.7422C5.51812 21.3837 4.19273 20.0925 3.79126 18.4219L3.64478 17.8135C3.04349 15.3105 3.00171 12.7045 3.52271 10.1836C3.75577 9.05776 4.74793 8.25 5.89771 8.25H18.1028ZM14.0334 13.1406C12.6922 12.8724 11.3103 12.8725 9.96899 13.1406L9.75903 13.1826C9.27649 13.2792 8.86496 13.5931 8.64477 14.0332C8.34086 14.641 8.34086 15.357 8.64477 15.9648C8.86494 16.405 9.27646 16.7188 9.75903 16.8154L9.96899 16.8574C11.3103 17.1255 12.6922 17.1257 14.0334 16.8574L14.2424 16.8154C14.7249 16.7187 15.1366 16.4049 15.3567 15.9648C15.6604 15.3571 15.6604 14.6409 15.3567 14.0332C15.1366 13.5931 14.7249 13.2793 14.2424 13.1826L14.0334 13.1406Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M9.96866 13.1406C11.3101 12.8724 12.6917 12.8723 14.0331 13.1406L14.2421 13.1826C14.7247 13.2792 15.1362 13.593 15.3563 14.0332C15.6602 14.641 15.6602 15.357 15.3563 15.9648C15.1362 16.405 14.7247 16.7188 14.2421 16.8154L14.0331 16.8574C12.6917 17.1257 11.3101 17.1256 9.96866 16.8574L9.7587 16.8154C9.27607 16.7188 8.86459 16.4051 8.64444 15.9648C8.34052 15.357 8.34052 14.641 8.64444 14.0332C8.86461 13.593 9.27611 13.2792 9.7587 13.1826L9.96866 13.1406Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiBinEmpty({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 6L5.48806 9.58357C5.16413 11.8511 5.14395 14.1516 5.42806 16.4245L5.51601 17.1281C5.80316 19.4253 7.56538 21.2609 9.84894 21.6415V21.6415C11.2732 21.8789 12.7268 21.8789 14.1511 21.6415V21.6415C16.4346 21.2609 18.1968 19.4253 18.484 17.1281L18.5719 16.4245C18.856 14.1516 18.8359 11.8511 18.5119 9.58357L18 6\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M15 5L14.9062 4.43717C14.7408 3.4451 14.6582 2.94906 14.3711 2.60286C14.2462 2.45218 14.0957 2.32469 13.9265 2.22623C13.5378 2 13.035 2 12.0292 2L11.9708 2C10.965 2 10.4622 2 10.0735 2.22623C9.90431 2.32469 9.75381 2.45219 9.62888 2.60286C9.34182 2.94906 9.25915 3.4451 9.09381 4.43717L9 5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M20 6L18.2017 5.77522C14.0833 5.26041 9.91673 5.26041 5.79826 5.77522L4 6\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.74018 5.12304C9.6721 5.53152 9.28536 5.80813 8.8769 5.74023C8.46843 5.67215 8.19181 5.28541 8.25971 4.87695L8.35444 4.31347C8.43472 3.83178 8.50246 3.41913 8.59077 3.08593C8.68246 2.74003 8.81179 2.41337 9.0517 2.12402C9.23282 1.90562 9.45102 1.72085 9.69623 1.57812C10.0211 1.38906 10.3644 1.31483 10.7206 1.28125C11.0639 1.24892 11.4822 1.25 11.9706 1.25L12.0292 1.25C12.5177 1.25 12.936 1.24892 13.2792 1.28125C13.6355 1.31483 13.9788 1.38906 14.3037 1.57812C14.5489 1.72085 14.7671 1.90562 14.9482 2.12402C15.1881 2.41337 15.3174 2.74003 15.4091 3.08593C15.4974 3.41913 15.5652 3.83177 15.6455 4.31347L15.7402 4.87695L15.749 4.95312C15.7732 5.33241 15.506 5.6764 15.123 5.74023C14.74 5.80389 14.3763 5.56494 14.2763 5.19824L14.2597 5.12304L14.166 4.56054C14.081 4.05049 14.025 3.71896 13.9589 3.46972C13.8964 3.23378 13.8409 3.13889 13.7939 3.08203C13.7252 2.99916 13.6418 2.92817 13.5488 2.87402C13.4849 2.83695 13.3818 2.79831 13.1386 2.77539C12.8819 2.75121 12.5462 2.75 12.0292 2.75L11.9706 2.75C11.4537 2.75 11.1179 2.75121 10.8613 2.77539C10.6181 2.79831 10.515 2.83695 10.4511 2.87402C10.3581 2.92817 10.2747 2.99916 10.206 3.08203C10.1589 3.13889 10.1035 3.23378 10.041 3.46972C9.97489 3.71896 9.91894 4.05049 9.83393 4.56054L9.74018 5.12304Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.94819 5.00114C9.96612 4.51861 14.0279 4.51807 18.0459 5.00016C18.1288 5.01011 18.212 5.02008 18.2949 5.03043L20.0927 5.25504L20.1689 5.26872C20.5391 5.35382 20.792 5.70788 20.7441 6.09293C20.6958 6.47814 20.3633 6.75806 19.9834 6.74918L19.9072 6.7443L18.8447 6.61051L19.2548 9.4777C19.5881 11.8107 19.6086 14.1783 19.3164 16.5168L19.2285 17.2209C18.9001 19.8471 16.8851 21.9459 14.2744 22.381C12.7685 22.632 11.2314 22.632 9.72554 22.381C7.11486 21.9458 5.09978 19.8471 4.77144 17.2209L4.68355 16.5168C4.39132 14.1783 4.41185 11.8107 4.74507 9.4777L5.15425 6.61051L4.09273 6.7443L4.01655 6.74918C3.63657 6.75805 3.30414 6.47813 3.25581 6.09293C3.20471 5.68211 3.49633 5.30642 3.90718 5.25504L5.70503 5.03043C5.78598 5.02032 5.86721 5.01086 5.94819 5.00114Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiCheck({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 7.81836L11.0125 15.7798C10.8216 15.9974 10.4864 16.0079 10.2822 15.8026L6.5 12.0002\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.4951 7.25492C18.7867 7.51112 18.8318 7.9435 18.6113 8.25297L18.5634 8.31352L11.5761 16.2745C11.0989 16.8182 10.2613 16.8446 9.75095 16.3321L5.96774 12.5293L5.91696 12.4717C5.67772 12.1766 5.69574 11.7426 5.97067 11.4688C6.26435 11.1767 6.74009 11.178 7.0322 11.4717L10.6259 15.083L17.4365 7.32328L17.4902 7.26859C17.7685 7.00989 18.2033 6.99884 18.4951 7.25492Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiChevronDownSmall({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 10L11.1515 13.1515C11.6201 13.6201 12.3799 13.6201 12.8485 13.1515L16 10\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.46967 9.46967C7.17678 9.76256 7.17678 10.2373 7.46967 10.5302L10.621 13.6816C11.3826 14.4431 12.6173 14.4431 13.3788 13.6816L16.5302 10.5302C16.8231 10.2373 16.8231 9.76256 16.5302 9.46967C16.2373 9.17678 15.7626 9.17678 15.4697 9.46967L12.3183 12.621C12.1426 12.7968 11.8573 12.7968 11.6816 12.621L8.53022 9.46967C8.23732 9.17678 7.76256 9.17678 7.46967 9.46967Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiChevronUpSmall({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 14L12.8485 10.8485C12.3799 10.3799 11.6201 10.3799 11.1515 10.8485L8 14\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.5303 14.5303C16.8232 14.2374 16.8232 13.7627 16.5303 13.4698L13.379 10.3184C12.6174 9.55689 11.3827 9.55689 10.6212 10.3184L7.46978 13.4698C7.17689 13.7627 7.17689 14.2374 7.46978 14.5303C7.76268 14.8232 8.23744 14.8232 8.53033 14.5303L11.6817 11.379C11.8574 11.2032 12.1427 11.2032 12.3184 11.379L15.4698 14.5303C15.7627 14.8232 16.2374 14.8232 16.5303 14.5303Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiCode({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17 6L21.5858 10.5858C22.3668 11.3668 22.3668 12.6332 21.5858 13.4142L17 18\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7 6L2.41421 10.5858C1.63317 11.3668 1.63316 12.6332 2.41421 13.4142L7 18\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M9.81053 20.2205L14.2104 3.7998\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.4697 5.46967C16.7626 5.17678 17.2373 5.17678 17.5302 5.46967L22.1162 10.0556C23.1899 11.1295 23.1899 12.8704 22.1162 13.9443L17.5302 18.5302C17.2373 18.8231 16.7626 18.8231 16.4697 18.5302C16.1768 18.2373 16.1768 17.7626 16.4697 17.4697L21.0556 12.8837C21.5436 12.3956 21.5436 11.6043 21.0556 11.1162L16.4697 6.53022C16.1768 6.23732 16.1768 5.76256 16.4697 5.46967Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.53033 5.46967C7.23744 5.17678 6.76268 5.17678 6.46978 5.46967L1.88385 10.0556C0.810106 11.1295 0.810105 12.8704 1.88385 13.9443L6.46978 18.5302C6.76268 18.8231 7.23744 18.8231 7.53033 18.5302C7.82322 18.2373 7.82322 17.7626 7.53033 17.4697L2.94439 12.8837C2.45644 12.3956 2.45644 11.6043 2.94439 11.1162L7.53033 6.53022C7.82322 6.23732 7.82322 5.76256 7.53033 5.46967Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M10.5349 20.4147C10.4277 20.8148 10.0164 21.0523 9.61631 20.945C9.21621 20.8378 8.97877 20.4266 9.08598 20.0265L13.4859 3.60575C13.5931 3.20565 14.0044 2.96821 14.4045 3.07542C14.8046 3.18262 15.042 3.59388 14.9348 3.99398L10.5349 20.4147Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiCross({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.00016 8L12.0001 12M12.0001 12L16 16.0002M12.0001 12L16 8.00015M12.0001 12L8 16.0002\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.4698 7.46963C15.7626 7.17684 16.2374 7.17684 16.5303 7.46963C16.8232 7.7625 16.8231 8.23728 16.5303 8.53018L13.0606 11.9999L16.5303 15.4696C16.8232 15.7625 16.8231 16.2373 16.5303 16.5302C16.2557 16.8048 15.821 16.8223 15.5264 16.5819L15.4698 16.5302L12 13.0604L8.53032 16.5302C8.23743 16.8231 7.76267 16.8231 7.46977 16.5302C7.17697 16.2373 7.17691 15.7625 7.46977 15.4696L10.9395 11.9999L7.46977 8.53018L7.41801 8.47354C7.1778 8.17898 7.19527 7.74421 7.46977 7.46963C7.76264 7.17676 8.23742 7.17682 8.53032 7.46963L12 10.9394L15.4698 7.46963Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiExclamationHexagon({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.43719 13.4575C2.15201 12.5069 2.15199 11.4936 2.43715 10.543L2.52265 10.258C3.16817 8.10616 4.22224 6.09886 5.62723 4.34584V4.34584C6.32329 3.47736 7.30701 2.88645 8.40067 2.67987L8.52188 2.65698C10.8203 2.22283 13.1797 2.22283 15.4781 2.65698L15.5993 2.67987C16.693 2.88645 17.6767 3.47737 18.3728 4.34588V4.34588C19.7778 6.09887 20.8318 8.10614 21.4774 10.2579L21.5628 10.5427C21.848 11.4933 21.848 12.5067 21.5628 13.4573L21.4774 13.7421C20.8318 15.8939 19.7778 17.9011 18.3728 19.6541V19.6541C17.6767 20.5226 16.693 21.1135 15.5993 21.3201L15.4781 21.343C13.1797 21.7772 10.8203 21.7772 8.52187 21.343L8.40075 21.3201C7.30704 21.1135 6.32327 20.5226 5.62718 19.6541V19.6541C4.22222 17.9011 3.16815 15.8939 2.52259 13.7421L2.43719 13.4575Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M12 8V13\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M12 15.5V16\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.38258 1.92059C10.7727 1.46912 13.2268 1.46924 15.617 1.92059L15.739 1.94305C17.0082 2.18287 18.1499 2.86991 18.9578 3.87762C20.4228 5.70553 21.5228 7.79896 22.1961 10.0427L22.281 10.3278C22.6083 11.4187 22.6082 12.5826 22.281 13.6735L22.1961 13.9577C21.5229 16.2016 20.4229 18.2956 18.9578 20.1237C18.1499 21.1316 17.0083 21.8174 15.739 22.0573L15.6179 22.0807C13.2277 22.5321 10.7728 22.5322 8.38258 22.0807L8.26148 22.0573C6.99216 21.8174 5.84965 21.1317 5.04176 20.1237C3.57682 18.2957 2.47761 16.2015 1.80445 13.9577L1.71852 13.6735C1.39142 12.5826 1.39129 11.4187 1.71852 10.3278L1.80445 10.0427C2.47762 7.79905 3.57688 5.70548 5.04176 3.87762C5.8497 2.86971 6.99217 2.18286 8.26148 1.94305L8.38258 1.92059ZM11.9998 14.7507C11.5857 14.7508 11.2498 15.0865 11.2498 15.5007V16.0007C11.2499 16.4146 11.5858 16.7505 11.9998 16.7507C12.4139 16.7507 12.7496 16.4147 12.7498 16.0007V15.5007C12.7498 15.0865 12.414 14.7507 11.9998 14.7507ZM11.9998 7.25067C11.5857 7.25082 11.2498 7.58655 11.2498 8.00067V13.0007C11.2499 13.4146 11.5858 13.7505 11.9998 13.7507C12.4139 13.7507 12.7496 13.4147 12.7498 13.0007V8.00067C12.7498 7.58645 12.414 7.25067 11.9998 7.25067Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M12 14.75C12.4142 14.75 12.75 15.0858 12.75 15.5V16C12.75 16.4142 12.4142 16.75 12 16.75C11.5858 16.75 11.25 16.4142 11.25 16V15.5C11.25 15.0858 11.5858 14.75 12 14.75Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M12 7.25C12.4142 7.25 12.75 7.58579 12.75 8V13C12.75 13.4142 12.4142 13.75 12 13.75C11.5858 13.75 11.25 13.4142 11.25 13V8C11.25 7.58579 11.5858 7.25 12 7.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiPlus({ className, variant = \"outlined\", size = \"medium\" }: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.00002 12.0005H16.9998M12.0006 7L12.0006 16.9998\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.251 17L11.251 12.751H7.00003C6.58598 12.751 6.25028 12.415 6.25003 12.001C6.25003 11.5868 6.58581 11.251 7.00002 11.251H11.251L11.251 7C11.251 6.58579 11.5868 6.25 12.001 6.25C12.415 6.25019 12.751 6.58591 12.751 7L12.751 11.251H17L17.0762 11.2539C17.4546 11.2921 17.75 11.6125 17.75 12.001C17.7498 12.3892 17.4544 12.7088 17.0762 12.7471L17 12.751H12.751L12.751 17C12.7509 17.414 12.415 17.7498 12.001 17.75C11.5869 17.75 11.2512 17.4141 11.251 17Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiRefresh({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n className={className}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M4.24658 5.68421C6.08028 3.4358 8.87252 2 12.0001 2C17.5229 2 22.0001 6.47715 22.0001 12C22.0001 12.6849 21.9312 13.3538 21.8001 14\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M4 2L4 4.99995C4 5.55223 4.44771 5.99995 4.99998 5.99995L8 6\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M19.7534 18.3158C17.9197 20.5642 15.1275 22 11.9999 22C6.47705 22 1.9999 17.5228 1.9999 12C1.9999 11.3151 2.06876 10.6462 2.19994 10\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n d=\"M20 22L20 19C20 18.4478 19.5523 18.0001 19 18L16 18\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M21.2503 12C21.2503 6.8915 17.1087 2.75021 12.0003 2.75C9.10755 2.75 6.5248 4.07694 4.82741 6.1582C4.5657 6.47903 4.09369 6.5271 3.77272 6.26562C3.45173 6.00383 3.40351 5.53096 3.6653 5.20996C5.63532 2.79453 8.63792 1.25 12.0003 1.25C17.9371 1.25021 22.7503 6.06307 22.7503 12C22.7503 12.7353 22.6755 13.4544 22.5344 14.1494C22.4519 14.5552 22.0565 14.8177 21.6507 14.7354C21.2447 14.653 20.9823 14.2565 21.0647 13.8506C21.186 13.2533 21.2503 12.6345 21.2503 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M4 1.25011C3.58579 1.25011 3.25008 1.58582 3.25008 2.00003L3.25008 4.99971C3.25008 5.96617 4.03344 6.74947 4.99989 6.74953L8.00026 6.75022C8.41427 6.75008 8.75004 6.4143 8.75018 6.0003C8.75019 5.58617 8.41436 5.25052 8.00026 5.25038L4.99989 5.24969C4.86187 5.24963 4.74992 5.13775 4.74992 4.99971L4.74992 2.00003C4.74992 1.58582 4.41421 1.25011 4 1.25011Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M2.74974 12C2.74974 17.1085 6.89128 21.2498 11.9997 21.25C14.8925 21.25 17.4752 19.9231 19.1726 17.8418C19.4343 17.521 19.9063 17.4729 20.2273 17.7344C20.5483 17.9962 20.5965 18.469 20.3347 18.79C18.3647 21.2055 15.3621 22.75 11.9997 22.75C6.06285 22.7498 1.24974 17.9369 1.24974 12C1.24974 11.2647 1.32447 10.5456 1.46556 9.85059C1.54808 9.44484 1.94354 9.18232 2.34935 9.26465C2.75528 9.34705 3.01768 9.74348 2.93528 10.1494C2.81404 10.7467 2.74974 11.3655 2.74974 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M20 22.7499C20.4142 22.7499 20.7499 22.4142 20.7499 22L20.7499 19.0003C20.7499 18.0338 19.9666 17.2505 19.0001 17.2505L15.9997 17.2498C15.5857 17.2499 15.25 17.5857 15.2498 17.9997C15.2498 18.4138 15.5856 18.7495 15.9997 18.7496L19.0001 18.7503C19.1381 18.7504 19.2501 18.8623 19.2501 19.0003L19.2501 22C19.2501 22.4142 19.5858 22.7499 20 22.7499Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiSearch({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M22 22L18.5 18.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <circle cx=\"11.5\" cy=\"11.5\" r=\"9.5\" stroke=\"currentColor\" strokeWidth={iconStrokeWidth} />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M19.0303 17.9697C18.7374 17.6768 18.2627 17.6768 17.9698 17.9697C17.6769 18.2626 17.6769 18.7373 17.9698 19.0302L21.4698 22.5302C21.7627 22.8231 22.2374 22.8231 22.5303 22.5302C22.8232 22.2373 22.8232 21.7626 22.5303 21.4697L19.0303 17.9697Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M11.5 1.25C17.1609 1.25 21.75 5.83908 21.75 11.5C21.75 17.1609 17.1609 21.75 11.5 21.75C5.83908 21.75 1.25 17.1609 1.25 11.5C1.25 5.83908 5.83908 1.25 11.5 1.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiSettings({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.3712 11.1182L20.3235 10.3478C21.0169 9.78681 21.2876 8.85332 21.0018 8.00845C20.7764 7.34225 20.4214 6.72728 19.9571 6.19901C19.3683 5.52905 18.4246 5.2967 17.5921 5.61673L16.4487 6.05624L16.3289 6.1025C15.7233 6.33735 15.0468 5.96142 14.9455 5.31981L14.7317 3.96598C14.5926 3.08499 13.9195 2.38385 13.0449 2.20894C12.3553 2.07101 11.6452 2.07101 10.9555 2.20894C10.081 2.38385 9.40786 3.08499 9.26876 3.96598L9.05497 5.31996C8.95366 5.96157 8.27712 6.3375 7.6715 6.10265L7.55132 6.05624L6.40797 5.61673C5.57546 5.2967 4.63171 5.52905 4.04293 6.19901C3.57867 6.72728 3.22362 7.34225 2.99825 8.00845C2.71244 8.85332 2.98309 9.7868 3.6765 10.3478L4.6288 11.1182L4.7128 11.186C5.22952 11.6019 5.22952 12.3968 4.7128 12.8127L4.62904 12.8803L3.67673 13.6507C2.98332 14.2117 2.71267 15.1452 2.99848 15.9901C3.22385 16.6563 3.5789 17.2712 4.04316 17.7995C4.63194 18.4695 5.57568 18.7018 6.4082 18.3818L7.55154 17.9423L7.67131 17.896C8.27692 17.6612 8.95346 18.0371 9.05476 18.6787L9.26876 20.034C9.40786 20.915 10.081 21.6161 10.9555 21.7911C11.6452 21.929 12.3553 21.929 13.0449 21.7911C13.9195 21.6161 14.5926 20.915 14.7317 20.034L14.9457 18.6789C15.047 18.0373 15.7235 17.6613 16.3291 17.8962L16.4485 17.9423L17.5918 18.3818C18.4243 18.7018 19.3681 18.4695 19.9569 17.7995C20.4211 17.2712 20.7762 16.6563 21.0016 15.9901C21.2874 15.1452 21.0167 14.2117 20.3233 13.6507L19.371 12.8803L19.2872 12.8127C18.7705 12.3968 18.7705 11.6019 19.2872 11.186L19.3712 11.1182Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M11.0137 14.8356C10.0655 14.6776 9.32242 13.9345 9.16438 12.9863V12.9863C9.05555 12.3333 9.05555 11.6667 9.16438 11.0137V11.0137C9.32242 10.0655 10.0655 9.32242 11.0137 9.16438V9.16438C11.6667 9.05555 12.3333 9.05555 12.9863 9.16438V9.16438C13.9345 9.32242 14.6776 10.0655 14.8356 11.0137V11.0137C14.9445 11.6667 14.9445 12.3333 14.8356 12.9863V12.9863C14.6776 13.9345 13.9345 14.6776 12.9863 14.8356V14.8356C12.3333 14.9445 11.6667 14.9445 11.0137 14.8356V14.8356Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.8077 1.4739C11.5943 1.31662 12.405 1.31667 13.1915 1.4739C14.3736 1.71051 15.2836 2.6581 15.4718 3.8489L15.6857 5.20339C15.7102 5.35695 15.8828 5.47062 16.0568 5.40359L16.0577 5.40261L16.1779 5.35671L17.3224 4.91726C18.4478 4.48471 19.7237 4.79879 20.5197 5.70437C21.0492 6.30697 21.454 7.00892 21.7111 7.76882C22.0973 8.911 21.7315 10.1726 20.7941 10.9309L19.8419 11.7014L19.8409 11.7024L19.757 11.7698C19.6316 11.8711 19.615 12.0585 19.7091 12.1809L19.757 12.2288L19.8409 12.2971L20.7941 13.0677C21.7316 13.8261 22.0975 15.0885 21.7111 16.2307C21.454 16.9906 21.0492 17.6926 20.5197 18.2952C19.7236 19.2007 18.4468 19.5149 17.3214 19.0823L16.1788 18.6428L16.1779 18.6419L16.0577 18.596C15.8836 18.5289 15.71 18.6424 15.6857 18.7962L15.4718 20.1516C15.2836 21.3423 14.3736 22.29 13.1915 22.5266C12.405 22.6839 11.5942 22.6839 10.8077 22.5266C9.62572 22.29 8.71569 21.3423 8.52747 20.1516L8.31263 18.7962C8.28832 18.6422 8.11592 18.5283 7.94153 18.596L7.82044 18.6419L7.81946 18.6428L6.67689 19.0823C5.55148 19.5147 4.27454 19.2008 3.47864 18.2952C2.94913 17.6926 2.54431 16.9906 2.28724 16.2307C1.9009 15.0886 2.26705 13.8261 3.20423 13.0677L4.15638 12.2971L4.24134 12.2298C4.38509 12.114 4.3851 11.8865 4.24134 11.7708L4.15735 11.7024L4.15638 11.7014L3.20423 10.9309C2.26711 10.1726 1.9012 8.91081 2.28724 7.76882C2.54426 7.00904 2.94923 6.30691 3.47864 5.70437C4.27453 4.79875 5.5505 4.48491 6.67591 4.91726L7.81946 5.35671L7.94056 5.40359C8.11483 5.47117 8.2891 5.35719 8.3136 5.20339L8.52747 3.8489C8.71565 2.65819 9.62571 1.71055 10.8077 1.4739ZM13.1085 8.42507C12.3742 8.30279 11.624 8.30273 10.8898 8.42507C9.6257 8.63598 8.63466 9.62675 8.42396 10.8909C8.30163 11.6252 8.30162 12.3753 8.42396 13.1096C8.63485 14.3735 9.62587 15.3646 10.8898 15.5755C11.624 15.6978 12.3743 15.6977 13.1085 15.5755C14.3725 15.3647 15.3634 14.3736 15.5743 13.1096C15.6967 12.3753 15.6967 11.6253 15.5743 10.8909C15.3636 9.62676 14.3726 8.63594 13.1085 8.42507Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 0 : 0.4}\n d=\"M10.8896 8.42477C11.624 8.30237 12.374 8.30247 13.1084 8.42477C14.3727 8.63548 15.3634 9.62631 15.5742 10.8906C15.6966 11.6251 15.6966 12.3749 15.5742 13.1093C15.3633 14.3735 14.3726 15.3645 13.1084 15.5752C12.374 15.6975 11.624 15.6976 10.8896 15.5752C9.62559 15.3643 8.63456 14.3734 8.4238 13.1093C8.30145 12.3749 8.30144 11.625 8.4238 10.8906C8.6345 9.62644 9.62554 8.63567 10.8896 8.42477Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import { NextureIconsProps, sizeHelper, strokeSizeHelper } from \"../nexture-icons\";\n\nexport default function NiSparkle({\n className,\n variant = \"outlined\",\n size = \"medium\",\n oneTone = false,\n}: NextureIconsProps) {\n const iconSize = sizeHelper(size);\n const iconStrokeWidth = strokeSizeHelper(iconSize);\n if (variant === \"outlined\") {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.13877 21.1589C5.53267 21.6384 4.70914 21.7467 4.0009 21.4375L3.91854 21.4015C3.3298 21.1445 2.86544 20.6666 2.62532 20.0708V20.0708C2.35103 19.3902 2.46997 18.6056 2.92524 18.0301V18.0301C4.54952 15.9767 6.45457 14.0719 8.50948 12.4496V12.4496C9.07277 12.0049 9.83517 11.8842 10.5055 12.1406V12.1406C11.1311 12.3798 11.6311 12.8652 11.8887 13.4834L11.9228 13.5652C12.2139 14.2639 12.1036 15.0654 11.6346 15.6595V15.6595C10.0253 17.6979 8.17566 19.5477 6.13877 21.1589V21.1589Z\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M21 12V12C19.753 11.3705 18.2824 11.3649 17.0306 11.9848L17 12\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M18 16.9998V16.9998C18 15.8956 17.1045 15.0004 16.0003 15.0003V15.0003\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M7.00065 5.99954V5.99954C8.10482 5.99951 8.99998 6.89498 9.00006 7.99916V7.99916\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M12 6.9809V6.9809C12.6295 5.73389 12.6351 4.2633 12.0152 3.01152L12 2.9809\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M14.5 9.49997L13.9999 10.0001\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M20.5 3.5L20 4\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M17.5 6.5L17 7\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M17 3L16.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n opacity={oneTone ? 1 : 0.6}\n d=\"M21 7L20.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth={iconStrokeWidth}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n } else {\n return (\n <svg\n width={iconSize}\n height={iconSize}\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.04457 11.861C8.81251 11.2548 9.85282 11.0883 10.7731 11.4401C11.5905 11.7526 12.244 12.3872 12.5807 13.195L12.6149 13.277C13.0104 14.2266 12.8605 15.3161 12.2233 16.1237C10.5778 18.208 8.68645 20.0995 6.60414 21.7467C5.78186 22.3972 4.66406 22.5451 3.70082 22.1247L3.61781 22.0885C2.84936 21.7528 2.24284 21.129 1.92934 20.3512C1.55283 19.4165 1.71725 18.347 2.33656 17.5641C3.99682 15.4654 5.94386 13.5195 8.04457 11.861Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16 14.2505C17.5181 14.2508 18.749 15.482 18.749 17.0005C18.7489 17.4146 18.4132 17.7505 17.999 17.7505C17.5852 17.7501 17.2501 17.4144 17.25 17.0005C17.25 16.3107 16.6901 15.7507 16 15.7505C15.5859 15.7503 15.25 15.4146 15.25 15.0005C15.2502 14.5865 15.586 14.2507 16 14.2505Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16.6982 11.313C18.0699 10.6338 19.6664 10.5965 21.0615 11.2007L21.3389 11.3296L21.4043 11.3687C21.7248 11.5733 21.8449 11.9917 21.6699 12.3384C21.4949 12.6849 21.0872 12.8368 20.7324 12.7007L20.6621 12.6704L20.4658 12.5777C19.4741 12.1481 18.3394 12.1741 17.3643 12.6568L17.333 12.6714L17.2627 12.7017C16.9067 12.8352 16.5005 12.6806 16.3281 12.3325C16.1445 11.9614 16.2968 11.5115 16.668 11.3277L16.6982 11.313Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M13.9697 8.97024C14.2626 8.67734 14.7374 8.67736 15.0303 8.97024C15.323 9.26314 15.3231 9.73794 15.0303 10.0308L14.5303 10.5308C14.2374 10.8236 13.7626 10.8235 13.4697 10.5308C13.1769 10.2379 13.1769 9.76314 13.4697 9.47024L13.9697 8.97024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M7.00098 5.25051C8.42437 5.25061 9.59428 6.33237 9.73535 7.71829L9.75 7.99954L9.74707 8.07668C9.70856 8.45454 9.38893 8.74921 9.00098 8.74954C8.61276 8.74957 8.29347 8.45472 8.25488 8.07668L8.25098 7.99954L8.24414 7.87161C8.17995 7.24166 7.64745 6.75058 7.00098 6.75051C6.58696 6.75046 6.25122 6.41449 6.25098 6.00051C6.25096 5.58636 6.58685 5.25063 7.00098 5.25051Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M20.4697 6.47024C20.7626 6.17735 21.2374 6.17735 21.5303 6.47024C21.823 6.76314 21.8231 7.23794 21.5303 7.53079L21.0303 8.03079L20.9727 8.08254C20.6781 8.32229 20.2442 8.30506 19.9697 8.03079C19.6769 7.73792 19.6769 7.26314 19.9697 6.97024L20.4697 6.47024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16.9697 5.97024C17.2626 5.67735 17.7374 5.67735 18.0303 5.97024C18.323 6.26314 18.3231 6.73794 18.0303 7.03079L17.5303 7.53079L17.4727 7.58254C17.1781 7.82229 16.7442 7.80506 16.4697 7.53079C16.1769 7.23792 16.1769 6.76314 16.4697 6.47024L16.9697 5.97024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M11.667 2.30813C12.0381 2.12449 12.4881 2.27784 12.6719 2.64895L12.6875 2.67922C13.3666 4.05093 13.4031 5.64736 12.7988 7.04251L12.6689 7.3179L12.6318 7.38528C12.4273 7.70555 12.0087 7.82557 11.6621 7.6509C11.3155 7.4759 11.1637 7.06828 11.2998 6.7134L11.3301 6.64309L11.4219 6.4468C11.8515 5.45508 11.8254 4.32034 11.3428 3.34524L11.3281 3.31399L11.2979 3.24368C11.1643 2.88766 11.3189 2.48051 11.667 2.30813Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M19.9697 2.97024C20.2626 2.67735 20.7374 2.67735 21.0303 2.97024C21.323 3.26314 21.3231 3.73794 21.0303 4.03079L20.5303 4.53079C20.2374 4.82355 19.7626 4.82351 19.4697 4.53079C19.1769 4.23792 19.1769 3.76314 19.4697 3.47024L19.9697 2.97024Z\"\n fill=\"currentColor\"\n />\n <path\n opacity={oneTone ? 1 : 0.4}\n d=\"M16.4697 2.47024C16.7626 2.17735 17.2374 2.17735 17.5303 2.47024C17.823 2.76314 17.8231 3.23794 17.5303 3.53079L17.0303 4.03079L16.9727 4.08254C16.6781 4.32229 16.2442 4.30506 15.9697 4.03079C15.6769 3.73792 15.6769 3.26314 15.9697 2.97024L16.4697 2.47024Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","import NiAI from \"./nexture/ni-ai\";\nimport NiAirBalloon from \"./nexture/ni-air-balloon\";\nimport NiAnchor from \"./nexture/ni-anchor\";\nimport NiAnnouncement from \"./nexture/ni-announcement\";\nimport NiAntenna from \"./nexture/ni-antenna\";\nimport NiArchive from \"./nexture/ni-archive\";\nimport NiArchiveCheck from \"./nexture/ni-archive-check\";\nimport NiArrowCircleLeft from \"./nexture/ni-arrow-circle-left\";\nimport NiArrowCircleRight from \"./nexture/ni-arrow-circle-right\";\nimport NiArrowDown from \"./nexture/ni-arrow-down\";\nimport NiArrowDownLeft from \"./nexture/ni-arrow-down-left\";\nimport NiArrowDownLeftSquare from \"./nexture/ni-arrow-down-left-square\";\nimport NiArrowDownRight from \"./nexture/ni-arrow-down-right\";\nimport NiArrowDownRightSquare from \"./nexture/ni-arrow-down-right-square\";\nimport NiArrowDownSquare from \"./nexture/ni-arrow-down-square\";\nimport NiArrowHistory from \"./nexture/ni-arrow-history\";\nimport NiArrowInDown from \"./nexture/ni-arrow-in-down\";\nimport NiArrowInLeft from \"./nexture/ni-arrow-in-left\";\nimport NiArrowInRight from \"./nexture/ni-arrow-in-right\";\nimport NiArrowInUp from \"./nexture/ni-arrow-in-up\";\nimport NiArrowLeft from \"./nexture/ni-arrow-left\";\nimport NiArrowLeftRight from \"./nexture/ni-arrow-left-right\";\nimport NiArrowLeftSquare from \"./nexture/ni-arrow-left-square\";\nimport NiArrowOutDown from \"./nexture/ni-arrow-out-down\";\nimport NiArrowOutLeft from \"./nexture/ni-arrow-out-left\";\nimport NiArrowOutRight from \"./nexture/ni-arrow-out-right\";\nimport NiArrowOutUp from \"./nexture/ni-arrow-out-up\";\nimport NiArrowRight from \"./nexture/ni-arrow-right\";\nimport NiArrowRightSquare from \"./nexture/ni-arrow-right-square\";\nimport NiArrowUp from \"./nexture/ni-arrow-up\";\nimport NiArrowUpDown from \"./nexture/ni-arrow-up-down\";\nimport NiArrowUpLeft from \"./nexture/ni-arrow-up-left\";\nimport NiArrowUpLeftSquare from \"./nexture/ni-arrow-up-left-square\";\nimport NiArrowUpRight from \"./nexture/ni-arrow-up-right\";\nimport NiArrowUpRightSquare from \"./nexture/ni-arrow-up-right-square\";\nimport NiArrowUpSquare from \"./nexture/ni-arrow-up-square\";\nimport NiAt from \"./nexture/ni-at\";\nimport NiBadge from \"./nexture/ni-badge\";\nimport NiBadgeCheck from \"./nexture/ni-badge-check\";\nimport NiBag from \"./nexture/ni-bag\";\nimport NiBandAid from \"./nexture/ni-band-aid\";\nimport NiBarcode from \"./nexture/ni-barcode\";\nimport NiBasket from \"./nexture/ni-basket\";\nimport NiBatteryCharging from \"./nexture/ni-battery-charging\";\nimport NiBatteryEmpty from \"./nexture/ni-battery-empty\";\nimport NiBatteryFull from \"./nexture/ni-battery-full\";\nimport NiBell from \"./nexture/ni-bell\";\nimport NiBellInactive from \"./nexture/ni-bell-inactive\";\nimport NiBinEmpty from \"./nexture/ni-bin-empty\";\nimport NiBinFull from \"./nexture/ni-bin-full\";\nimport NiBloodCells from \"./nexture/ni-blood-cells\";\nimport NiBluetooth from \"./nexture/ni-bluetooth\";\nimport NiBook from \"./nexture/ni-book\";\nimport NiBookmark from \"./nexture/ni-bookmark\";\nimport NiBookmarkSingle from \"./nexture/ni-bookmark-single\";\nimport NiBraces from \"./nexture/ni-braces\";\nimport NiBrackets from \"./nexture/ni-brackets\";\nimport NiBrain from \"./nexture/ni-brain\";\nimport NiBrainCircuit from \"./nexture/ni-brain-circuit\";\nimport NiBriefcase from \"./nexture/ni-briefcase\";\nimport NiBrush from \"./nexture/ni-brush\";\nimport NiBrushArt from \"./nexture/ni-brush-art\";\nimport NiBrushArtSquare from \"./nexture/ni-brush-art-square\";\nimport NiBug from \"./nexture/ni-bug\";\nimport NiBuilding from \"./nexture/ni-building\";\nimport NiBulbOff from \"./nexture/ni-bulb-off\";\nimport NiBulbOn from \"./nexture/ni-bulb-on\";\nimport NiButton from \"./nexture/ni-button\";\nimport NiButtonGroup from \"./nexture/ni-button-group\";\nimport NiButtonLarge from \"./nexture/ni-button-large\";\nimport NiCake from \"./nexture/ni-cake\";\nimport NiCalendar from \"./nexture/ni-calendar\";\nimport NiCalendarClock from \"./nexture/ni-calendar-clock\";\nimport NiCamera from \"./nexture/ni-camera\";\nimport NiCar from \"./nexture/ni-car\";\nimport NiCartArrow from \"./nexture/ni-cart-arrow\";\nimport NiCartCross from \"./nexture/ni-cart-cross\";\nimport NiCartEmpty from \"./nexture/ni-cart-empty\";\nimport NiCartMinus from \"./nexture/ni-cart-minus\";\nimport NiCartPlus from \"./nexture/ni-cart-plus\";\nimport NiCatalog from \"./nexture/ni-catalog\";\nimport NiCells from \"./nexture/ni-cells\";\nimport NiCellsPlus from \"./nexture/ni-cells-plus\";\nimport NiChange from \"./nexture/ni-change\";\nimport NiChartBar from \"./nexture/ni-chart-bar\";\nimport NiChartCandleSticks from \"./nexture/ni-chart-candle-sticks\";\nimport NiChartFunnel from \"./nexture/ni-chart-funnel\";\nimport NiChartHeatmap from \"./nexture/ni-chart-heatmap\";\nimport NiChartLine from \"./nexture/ni-chart-line\";\nimport NiChartLineBar from \"./nexture/ni-chart-line-bar\";\nimport NiChartPie from \"./nexture/ni-chart-pie\";\nimport NiChartPolar from \"./nexture/ni-chart-polar\";\nimport NiChartRadar from \"./nexture/ni-chart-radar\";\nimport NiChartScatter from \"./nexture/ni-chart-scatter\";\nimport NiCheck from \"./nexture/ni-check\";\nimport NiCheckFull from \"./nexture/ni-check-full\";\nimport NiCheckSquare from \"./nexture/ni-check-square\";\nimport NiChef from \"./nexture/ni-chef\";\nimport NiChevronDown from \"./nexture/ni-chevron-down\";\nimport NiChevronDownSmall from \"./nexture/ni-chevron-down-small\";\nimport NiChevronLeft from \"./nexture/ni-chevron-left\";\nimport NiChevronLeftRightReverseSmall from \"./nexture/ni-chevron-left-right-reverse-small\";\nimport NiChevronLeftRightSmall from \"./nexture/ni-chevron-left-right-small\";\nimport NiChevronLeftSmall from \"./nexture/ni-chevron-left-small\";\nimport NiChevronRight from \"./nexture/ni-chevron-right\";\nimport NiChevronRightSmall from \"./nexture/ni-chevron-right-small\";\nimport NiChevronUp from \"./nexture/ni-chevron-up\";\nimport NiChevronUpDownReverseSmall from \"./nexture/ni-chevron-up-down-reverse-small\";\nimport NiChevronUpDownSmall from \"./nexture/ni-chevron-up-down-small\";\nimport NiChevronUpSmall from \"./nexture/ni-chevron-up-small\";\nimport NiCholesterol from \"./nexture/ni-cholesterol\";\nimport NiCircle from \"./nexture/ni-circle\";\nimport NiClipboard from \"./nexture/ni-clipboard\";\nimport NiClock from \"./nexture/ni-clock\";\nimport NiCloud from \"./nexture/ni-cloud\";\nimport NiCloudPartly from \"./nexture/ni-cloud-partly\";\nimport NiCloudRain from \"./nexture/ni-cloud-rain\";\nimport NiCloudSnow from \"./nexture/ni-cloud-snow\";\nimport NiCloudThunder from \"./nexture/ni-cloud-thunder\";\nimport NiCode from \"./nexture/ni-code\";\nimport NiCoffee from \"./nexture/ni-coffee\";\nimport NiCoin from \"./nexture/ni-coin\";\nimport NiCollapse from \"./nexture/ni-collapse\";\nimport NiCollapseIn from \"./nexture/ni-collapse-in\";\nimport NiCols from \"./nexture/ni-cols\";\nimport NiCompass from \"./nexture/ni-compass\";\nimport NiController from \"./nexture/ni-controller\";\nimport NiCopyright from \"./nexture/ni-copyright\";\nimport NiCpu from \"./nexture/ni-cpu\";\nimport NiCreditCard from \"./nexture/ni-credit-card\";\nimport NiCrop from \"./nexture/ni-crop\";\nimport NiCross from \"./nexture/ni-cross\";\nimport NiCrossFull from \"./nexture/ni-cross-full\";\nimport NiCrossHexagon from \"./nexture/ni-cross-hexagon\";\nimport NiCrossSquare from \"./nexture/ni-cross-square\";\nimport NiCrosshair from \"./nexture/ni-crosshair\";\nimport NiCrown from \"./nexture/ni-crown\";\nimport NiCursor from \"./nexture/ni-cursor\";\nimport NiDashboard from \"./nexture/ni-dashboard\";\nimport NiDatabase from \"./nexture/ni-database\";\nimport NiDevops from \"./nexture/ni-devops\";\nimport NiDiagram from \"./nexture/ni-diagram\";\nimport NiDice from \"./nexture/ni-dice\";\nimport NiDirectory from \"./nexture/ni-directory\";\nimport NiDocumentArchive from \"./nexture/ni-document-archive\";\nimport NiDocumentChart from \"./nexture/ni-document-chart\";\nimport NiDocumentCheck from \"./nexture/ni-document-check\";\nimport NiDocumentCode from \"./nexture/ni-document-code\";\nimport NiDocumentCross from \"./nexture/ni-document-cross\";\nimport NiDocumentFull from \"./nexture/ni-document-full\";\nimport NiDocumentImage from \"./nexture/ni-document-image\";\nimport NiDocumentMinus from \"./nexture/ni-document-minus\";\nimport NiDocumentNumber from \"./nexture/ni-document-number\";\nimport NiDocumentPlus from \"./nexture/ni-document-plus\";\nimport NiDocumentVideo from \"./nexture/ni-document-video\";\nimport NiDollar from \"./nexture/ni-dollar\";\nimport NiDollarSquare from \"./nexture/ni-dollar-square\";\nimport NiDotsSquare from \"./nexture/ni-dots-square\";\nimport NiDownloadCloud from \"./nexture/ni-download-cloud\";\nimport NiDragHorizontal from \"./nexture/ni-drag-horizontal\";\nimport NiDragVertical from \"./nexture/ni-drag-vertical\";\nimport NiDrink from \"./nexture/ni-drink\";\nimport NiDrop from \"./nexture/ni-drop\";\nimport NiDuplicate from \"./nexture/ni-duplicate\";\nimport NiEllipsisHorizontal from \"./nexture/ni-ellipsis-horizontal\";\nimport NiEllipsisVertical from \"./nexture/ni-ellipsis-vertical\";\nimport NiEmail from \"./nexture/ni-email\";\nimport NiEmailOpen from \"./nexture/ni-email-open\";\nimport NiEndDownSmall from \"./nexture/ni-end-down-small\";\nimport NiEndLeftSmall from \"./nexture/ni-end-left-small\";\nimport NiEndRightSmall from \"./nexture/ni-end-right-small\";\nimport NiEndUpSmall from \"./nexture/ni-end-up-small\";\nimport NiEnterDown from \"./nexture/ni-enter-down\";\nimport NiEnterLeft from \"./nexture/ni-enter-left\";\nimport NiEnterReverseDown from \"./nexture/ni-enter-reverse-down\";\nimport NiEnterReverseLeft from \"./nexture/ni-enter-reverse-left\";\nimport NiEnterReverseRight from \"./nexture/ni-enter-reverse-right\";\nimport NiEnterReverseUp from \"./nexture/ni-enter-reverse-up\";\nimport NiEnterRight from \"./nexture/ni-enter-right\";\nimport NiEnterUp from \"./nexture/ni-enter-up\";\nimport NiEquals from \"./nexture/ni-equals\";\nimport NiEqualsFull from \"./nexture/ni-equals-full\";\nimport NiEraser from \"./nexture/ni-eraser\";\nimport NiEuro from \"./nexture/ni-euro\";\nimport NiEuroSquare from \"./nexture/ni-euro-square\";\nimport NiExclamationHexagon from \"./nexture/ni-exclamation-hexagon\";\nimport NiExclamationSquare from \"./nexture/ni-exclamation-square\";\nimport NiExpand from \"./nexture/ni-expand\";\nimport NiExpandFull from \"./nexture/ni-expand-full\";\nimport NiExpandOut from \"./nexture/ni-expand-out\";\nimport NiExpandSquare from \"./nexture/ni-expand-square\";\nimport NiExternal from \"./nexture/ni-external\";\nimport NiEyeClose from \"./nexture/ni-eye-close\";\nimport NiEyeInactive from \"./nexture/ni-eye-inactive\";\nimport NiEyeOpen from \"./nexture/ni-eye-open\";\nimport NiFaceFrown from \"./nexture/ni-face-frown\";\nimport NiFaceFrownMore from \"./nexture/ni-face-frown-more\";\nimport NiFaceNeutral from \"./nexture/ni-face-neutral\";\nimport NiFaceSmile from \"./nexture/ni-face-smile\";\nimport NiFaceSmileMore from \"./nexture/ni-face-smile-more\";\nimport NiFemale from \"./nexture/ni-female\";\nimport NiFilter from \"./nexture/ni-filter\";\nimport NiFilterCross from \"./nexture/ni-filter-cross\";\nimport NiFilterMinus from \"./nexture/ni-filter-minus\";\nimport NiFilterPlus from \"./nexture/ni-filter-plus\";\nimport NiFingerprint from \"./nexture/ni-fingerprint\";\nimport NiFire from \"./nexture/ni-fire\";\nimport NiFirstAid from \"./nexture/ni-first-aid\";\nimport NiFitness from \"./nexture/ni-fitness\";\nimport NiFlag from \"./nexture/ni-flag\";\nimport NiFlash from \"./nexture/ni-flash\";\nimport NiFlask from \"./nexture/ni-flask\";\nimport NiFloppyDisk from \"./nexture/ni-floppy-disk\";\nimport NiFolder from \"./nexture/ni-folder\";\nimport NiFolderCheck from \"./nexture/ni-folder-check\";\nimport NiFolderCross from \"./nexture/ni-folder-cross\";\nimport NiFolderMinus from \"./nexture/ni-folder-minus\";\nimport NiFolderPlus from \"./nexture/ni-folder-plus\";\nimport NiForwardDownSmall from \"./nexture/ni-forward-down-small\";\nimport NiForwardLeftSmall from \"./nexture/ni-forward-left-small\";\nimport NiForwardRightSmall from \"./nexture/ni-forward-right-small\";\nimport NiForwardUpSmall from \"./nexture/ni-forward-up-small\";\nimport NiGay from \"./nexture/ni-gay\";\nimport NiGerm from \"./nexture/ni-germ\";\nimport NiGogo from \"./nexture/ni-gogo\";\nimport NiGold from \"./nexture/ni-gold\";\nimport NiGpu from \"./nexture/ni-gpu\";\nimport NiGraduation from \"./nexture/ni-graduation\";\nimport NiGroup from \"./nexture/ni-group\";\nimport NiHeadphones from \"./nexture/ni-headphones\";\nimport NiHeadset from \"./nexture/ni-headset\";\nimport NiHeadsetMic from \"./nexture/ni-headset-mic\";\nimport NiHealth from \"./nexture/ni-health\";\nimport NiHeart from \"./nexture/ni-heart\";\nimport NiHeartRate from \"./nexture/ni-heart-rate\";\nimport NiHearts from \"./nexture/ni-hearts\";\nimport NiHome from \"./nexture/ni-home\";\nimport NiInbox from \"./nexture/ni-inbox\";\nimport NiInfoSquare from \"./nexture/ni-info-square\";\nimport NiInjection from \"./nexture/ni-injection\";\nimport NiInput from \"./nexture/ni-input\";\nimport NiIntegration from \"./nexture/ni-integration\";\nimport NiInternal from \"./nexture/ni-internal\";\nimport NiIv from \"./nexture/ni-iv\";\nimport NiJoin from \"./nexture/ni-join\";\nimport NiKey from \"./nexture/ni-key\";\nimport NiKeyboard from \"./nexture/ni-keyboard\";\nimport NiKnobs from \"./nexture/ni-knobs\";\nimport NiLaptop from \"./nexture/ni-laptop\";\nimport NiLaw from \"./nexture/ni-law\";\nimport NiLayout from \"./nexture/ni-layout\";\nimport NiLike from \"./nexture/ni-like\";\nimport NiLink from \"./nexture/ni-link\";\nimport NiLinkBroken from \"./nexture/ni-link-broken\";\nimport NiList from \"./nexture/ni-list\";\nimport NiListCheck from \"./nexture/ni-list-check\";\nimport NiListChevronDown from \"./nexture/ni-list-chevron-down\";\nimport NiListCircle from \"./nexture/ni-list-circle\";\nimport NiListCross from \"./nexture/ni-list-cross\";\nimport NiListNumber from \"./nexture/ni-list-number\";\nimport NiListSquare from \"./nexture/ni-list-square\";\nimport NiLoader from \"./nexture/ni-loader\";\nimport NiLock from \"./nexture/ni-lock\";\nimport NiLuggage from \"./nexture/ni-luggage\";\nimport NiLungs from \"./nexture/ni-lungs\";\nimport NiMagicWand from \"./nexture/ni-magic-wand\";\nimport NiMale from \"./nexture/ni-male\";\nimport NiMap from \"./nexture/ni-map\";\nimport NiMasonary from \"./nexture/ni-masonary\";\nimport NiMedal from \"./nexture/ni-medal\";\nimport NiMenu from \"./nexture/ni-menu\";\nimport NiMenuLeft from \"./nexture/ni-menu-left\";\nimport NiMenuRight from \"./nexture/ni-menu-right\";\nimport NiMenuSplit from \"./nexture/ni-menu-split\";\nimport NiMenuSplitDot from \"./nexture/ni-menu-split-dot\";\nimport NiMenuSplitDotReverse from \"./nexture/ni-menu-split-dot-reverse\";\nimport NiMenuSplitReverse from \"./nexture/ni-menu-split-reverse\";\nimport NiMessage from \"./nexture/ni-message\";\nimport NiMessageCheck from \"./nexture/ni-message-check\";\nimport NiMessageCross from \"./nexture/ni-message-cross\";\nimport NiMessageDots from \"./nexture/ni-message-dots\";\nimport NiMessageFilled from \"./nexture/ni-message-filled\";\nimport NiMessageGrammar from \"./nexture/ni-message-grammar\";\nimport NiMessagePlus from \"./nexture/ni-message-plus\";\nimport NiMessages from \"./nexture/ni-messages\";\nimport NiMicrophone from \"./nexture/ni-microphone\";\nimport NiMinus from \"./nexture/ni-minus\";\nimport NiMinusFull from \"./nexture/ni-minus-full\";\nimport NiMinusSquare from \"./nexture/ni-minus-square\";\nimport NiMoney from \"./nexture/ni-money\";\nimport NiMoneyBag from \"./nexture/ni-money-bag\";\nimport NiMoon from \"./nexture/ni-moon\";\nimport NiMountain from \"./nexture/ni-mountain\";\nimport NiMouse from \"./nexture/ni-mouse\";\nimport NiMove from \"./nexture/ni-move\";\nimport NiMusic from \"./nexture/ni-music\";\nimport NiNetwork from \"./nexture/ni-network\";\nimport NiNext from \"./nexture/ni-next\";\nimport NiOxygen from \"./nexture/ni-oxygen\";\nimport NiPaintBucket from \"./nexture/ni-paint-bucket\";\nimport NiPaintRoller from \"./nexture/ni-paint-roller\";\nimport NiPalette from \"./nexture/ni-palette\";\nimport NiPaperclip from \"./nexture/ni-paperclip\";\nimport NiParentheses from \"./nexture/ni-parentheses\";\nimport NiPath from \"./nexture/ni-path\";\nimport NiPause from \"./nexture/ni-pause\";\nimport NiPen from \"./nexture/ni-pen\";\nimport NiPenSquare from \"./nexture/ni-pen-square\";\nimport NiPercent from \"./nexture/ni-percent\";\nimport NiPhone from \"./nexture/ni-phone\";\nimport NiPhoneHandset from \"./nexture/ni-phone-handset\";\nimport NiPhoneHandsetCheck from \"./nexture/ni-phone-handset-check\";\nimport NiPhoneHandsetOff from \"./nexture/ni-phone-handset-off\";\nimport NiPhoneHandsetOn from \"./nexture/ni-phone-handset-on\";\nimport NiPin from \"./nexture/ni-pin\";\nimport NiPinCheck from \"./nexture/ni-pin-check\";\nimport NiPinCross from \"./nexture/ni-pin-cross\";\nimport NiPinPlus from \"./nexture/ni-pin-plus\";\nimport NiPine from \"./nexture/ni-pine\";\nimport NiPivot from \"./nexture/ni-pivot\";\nimport NiPlane from \"./nexture/ni-plane\";\nimport NiPlay from \"./nexture/ni-play\";\nimport NiPlug from \"./nexture/ni-plug\";\nimport NiPlus from \"./nexture/ni-plus\";\nimport NiPlusFull from \"./nexture/ni-plus-full\";\nimport NiPlusSquare from \"./nexture/ni-plus-square\";\nimport NiPolitics from \"./nexture/ni-politics\";\nimport NiPound from \"./nexture/ni-pound\";\nimport NiPoundSquare from \"./nexture/ni-pound-square\";\nimport NiPower from \"./nexture/ni-power\";\nimport NiPresentation from \"./nexture/ni-presentation\";\nimport NiPrevious from \"./nexture/ni-previous\";\nimport NiPrinter from \"./nexture/ni-printer\";\nimport NiProgress from \"./nexture/ni-progress\";\nimport NiPullRequestClosed from \"./nexture/ni-pull-request-closed\";\nimport NiPullRequestDraft from \"./nexture/ni-pull-request-draft\";\nimport NiPullRequestMerged from \"./nexture/ni-pull-request-merged\";\nimport NiPullRequestOpen from \"./nexture/ni-pull-request-open\";\nimport NiPulse from \"./nexture/ni-pulse\";\nimport NiPushPin from \"./nexture/ni-push-pin\";\nimport NiPushPinLeft from \"./nexture/ni-push-pin-left\";\nimport NiPushPinRight from \"./nexture/ni-push-pin-right\";\nimport NiPuzzle from \"./nexture/ni-puzzle\";\nimport NiQuestionHexagon from \"./nexture/ni-question-hexagon\";\nimport NiRadio from \"./nexture/ni-radio\";\nimport NiRankFour from \"./nexture/ni-rank-four\";\nimport NiRankOne from \"./nexture/ni-rank-one\";\nimport NiRankThree from \"./nexture/ni-rank-three\";\nimport NiRankTwo from \"./nexture/ni-rank-two\";\nimport NiReceipt from \"./nexture/ni-receipt\";\nimport NiRecord from \"./nexture/ni-record\";\nimport NiRefresh from \"./nexture/ni-refresh\";\nimport NiReligion from \"./nexture/ni-religion\";\nimport NiResearch from \"./nexture/ni-research\";\nimport NiRevenue from \"./nexture/ni-revenue\";\nimport NiReverseLeft from \"./nexture/ni-reverse-left\";\nimport NiReverseRight from \"./nexture/ni-reverse-right\";\nimport NiRobot from \"./nexture/ni-robot\";\nimport NiRocket from \"./nexture/ni-rocket\";\nimport NiRouter from \"./nexture/ni-router\";\nimport NiRows from \"./nexture/ni-rows\";\nimport NiSafe from \"./nexture/ni-safe\";\nimport NiScale from \"./nexture/ni-scale\";\nimport NiScalpel from \"./nexture/ni-scalpel\";\nimport NiScissors from \"./nexture/ni-scissors\";\nimport NiScreen from \"./nexture/ni-screen\";\nimport NiScriptSub from \"./nexture/ni-script-sub\";\nimport NiScriptSuper from \"./nexture/ni-script-super\";\nimport NiSdCard from \"./nexture/ni-sd-card\";\nimport NiSearch from \"./nexture/ni-search\";\nimport NiSelect from \"./nexture/ni-select\";\nimport NiSendDown from \"./nexture/ni-send-down\";\nimport NiSendDownLeft from \"./nexture/ni-send-down-left\";\nimport NiSendDownRight from \"./nexture/ni-send-down-right\";\nimport NiSendLeft from \"./nexture/ni-send-left\";\nimport NiSendRight from \"./nexture/ni-send-right\";\nimport NiSendUp from \"./nexture/ni-send-up\";\nimport NiSendUpLeft from \"./nexture/ni-send-up-left\";\nimport NiSendUpRight from \"./nexture/ni-send-up-right\";\nimport NiServer from \"./nexture/ni-server\";\nimport NiSettings from \"./nexture/ni-settings\";\nimport NiShare from \"./nexture/ni-share\";\nimport NiShield from \"./nexture/ni-shield\";\nimport NiShieldCheck from \"./nexture/ni-shield-check\";\nimport NiShieldCross from \"./nexture/ni-shield-cross\";\nimport NiShrinkFull from \"./nexture/ni-shrink-full\";\nimport NiShrinkSquare from \"./nexture/ni-shrink-square\";\nimport NiShuffle from \"./nexture/ni-shuffle\";\nimport NiSign from \"./nexture/ni-sign\";\nimport NiSignalLeftRight from \"./nexture/ni-signal-left-right\";\nimport NiSignalRight from \"./nexture/ni-signal-right\";\nimport NiSignalUp from \"./nexture/ni-signal-up\";\nimport NiSigns from \"./nexture/ni-signs\";\nimport NiSlashHexagon from \"./nexture/ni-slash-hexagon\";\nimport NiSlider from \"./nexture/ni-slider\";\nimport NiSnow from \"./nexture/ni-snow\";\nimport NiSoundCross from \"./nexture/ni-sound-cross\";\nimport NiSoundOff from \"./nexture/ni-sound-off\";\nimport NiSoundOn from \"./nexture/ni-sound-on\";\nimport NiSoundPlus from \"./nexture/ni-sound-plus\";\nimport NiSparkle from \"./nexture/ni-sparkle\";\nimport NiSpinner from \"./nexture/ni-spinner\";\nimport NiSquare from \"./nexture/ni-square\";\nimport NiSquircle from \"./nexture/ni-squircle\";\nimport NiStar from \"./nexture/ni-star\";\nimport NiStars from \"./nexture/ni-stars\";\nimport NiStomach from \"./nexture/ni-stomach\";\nimport NiStopwatch from \"./nexture/ni-stopwatch\";\nimport NiStore from \"./nexture/ni-store\";\nimport NiStructure from \"./nexture/ni-structure\";\nimport NiSum from \"./nexture/ni-sum\";\nimport NiSun from \"./nexture/ni-sun\";\nimport NiSwap from \"./nexture/ni-swap\";\nimport NiSwitch from \"./nexture/ni-switch\";\nimport NiTablet from \"./nexture/ni-tablet\";\nimport NiTag from \"./nexture/ni-tag\";\nimport NiTelescope from \"./nexture/ni-telescope\";\nimport NiTemperature from \"./nexture/ni-temperature\";\nimport NiTent from \"./nexture/ni-tent\";\nimport NiTerminal from \"./nexture/ni-terminal\";\nimport NiTextBold from \"./nexture/ni-text-bold\";\nimport NiTextCenter from \"./nexture/ni-text-center\";\nimport NiTextFont from \"./nexture/ni-text-font\";\nimport NiTextItalic from \"./nexture/ni-text-italic\";\nimport NiTextJustify from \"./nexture/ni-text-justify\";\nimport NiTextLeft from \"./nexture/ni-text-left\";\nimport NiTextQuote from \"./nexture/ni-text-quote\";\nimport NiTextRight from \"./nexture/ni-text-right\";\nimport NiTextStrikethrough from \"./nexture/ni-text-strikethrough\";\nimport NiTextUnderline from \"./nexture/ni-text-underline\";\nimport NiTextarea from \"./nexture/ni-textarea\";\nimport NiTicket from \"./nexture/ni-ticket\";\nimport NiTimeline from \"./nexture/ni-timeline\";\nimport NiTooth from \"./nexture/ni-tooth\";\nimport NiToyBoat from \"./nexture/ni-toy-boat\";\nimport NiToySky from \"./nexture/ni-toy-sky\";\nimport NiToyStacking from \"./nexture/ni-toy-stacking\";\nimport NiTrade from \"./nexture/ni-trade\";\nimport NiTree from \"./nexture/ni-tree\";\nimport NiTrendDown from \"./nexture/ni-trend-down\";\nimport NiTrendUp from \"./nexture/ni-trend-up\";\nimport NiTriangleDown from \"./nexture/ni-triangle-down\";\nimport NiTriangleLeft from \"./nexture/ni-triangle-left\";\nimport NiTriangleRight from \"./nexture/ni-triangle-right\";\nimport NiTriangleUp from \"./nexture/ni-triangle-up\";\nimport NiTrophy from \"./nexture/ni-trophy\";\nimport NiTruck from \"./nexture/ni-truck\";\nimport NiTubes from \"./nexture/ni-tubes\";\nimport NiUngroup from \"./nexture/ni-ungroup\";\nimport NiUnlike from \"./nexture/ni-unlike\";\nimport NiUnlock from \"./nexture/ni-unlock\";\nimport NiUploadCloud from \"./nexture/ni-upload-cloud\";\nimport NiUser from \"./nexture/ni-user\";\nimport NiUserCheck from \"./nexture/ni-user-check\";\nimport NiUserCross from \"./nexture/ni-user-cross\";\nimport NiUserMinus from \"./nexture/ni-user-minus\";\nimport NiUserPlus from \"./nexture/ni-user-plus\";\nimport NiUsers from \"./nexture/ni-users\";\nimport NiVerified from \"./nexture/ni-verified\";\nimport NiWallet from \"./nexture/ni-wallet\";\nimport NiWalletCrypto from \"./nexture/ni-wallet-crypto\";\nimport NiWatch from \"./nexture/ni-watch\";\nimport NiWeightScale from \"./nexture/ni-weight-scale\";\nimport NiWind from \"./nexture/ni-wind\";\nimport NiWorld from \"./nexture/ni-world\";\nimport NiZoomIn from \"./nexture/ni-zoom-in\";\nimport NiZoomOut from \"./nexture/ni-zoom-out\";\n\nexport const IconMap = {\n NiAI,\n NiAirBalloon,\n NiAnchor,\n NiAnnouncement,\n NiAntenna,\n NiArchiveCheck,\n NiArchive,\n NiArrowCircleLeft,\n NiArrowCircleRight,\n NiArrowDownLeftSquare,\n NiArrowDownLeft,\n NiArrowDownRightSquare,\n NiArrowDownRight,\n NiArrowDownSquare,\n NiArrowDown,\n NiArrowHistory,\n NiArrowInDown,\n NiArrowInLeft,\n NiArrowInRight,\n NiArrowInUp,\n NiArrowLeftRight,\n NiArrowLeftSquare,\n NiArrowLeft,\n NiArrowOutDown,\n NiArrowOutLeft,\n NiArrowOutRight,\n NiArrowOutUp,\n NiArrowRightSquare,\n NiArrowRight,\n NiArrowUpDown,\n NiArrowUpLeftSquare,\n NiArrowUpLeft,\n NiArrowUpRightSquare,\n NiArrowUpRight,\n NiArrowUpSquare,\n NiArrowUp,\n NiAt,\n NiBadgeCheck,\n NiBadge,\n NiBag,\n NiBandAid,\n NiBarcode,\n NiBasket,\n NiBatteryCharging,\n NiBatteryEmpty,\n NiBatteryFull,\n NiBellInactive,\n NiBell,\n NiBinEmpty,\n NiBinFull,\n NiBloodCells,\n NiBluetooth,\n NiBook,\n NiBookmarkSingle,\n NiBookmark,\n NiBraces,\n NiBrackets,\n NiBrain,\n NiBrainCircuit,\n NiBriefcase,\n NiBrushArtSquare,\n NiBrushArt,\n NiBrush,\n NiBug,\n NiBuilding,\n NiBulbOff,\n NiBulbOn,\n NiButton,\n NiButtonGroup,\n NiButtonLarge,\n NiCake,\n NiCalendar,\n NiCalendarClock,\n NiCamera,\n NiCar,\n NiCartArrow,\n NiCartCross,\n NiCartEmpty,\n NiCartMinus,\n NiCartPlus,\n NiCatalog,\n NiCellsPlus,\n NiCells,\n NiChange,\n NiChartBar,\n NiChartCandleSticks,\n NiChartFunnel,\n NiChartHeatmap,\n NiChartLineBar,\n NiChartLine,\n NiChartPie,\n NiChartPolar,\n NiChartRadar,\n NiChartScatter,\n NiCheckSquare,\n NiCheck,\n NiCheckFull,\n NiChef,\n NiChevronDownSmall,\n NiChevronDown,\n NiChevronLeftRightReverseSmall,\n NiChevronLeftRightSmall,\n NiChevronLeftSmall,\n NiChevronLeft,\n NiChevronRightSmall,\n NiChevronRight,\n NiChevronUpDownReverseSmall,\n NiChevronUpDownSmall,\n NiChevronUpSmall,\n NiChevronUp,\n NiCholesterol,\n NiCircle,\n NiClipboard,\n NiClock,\n NiCloudPartly,\n NiCloudRain,\n NiCloudSnow,\n NiCloudThunder,\n NiCloud,\n NiCode,\n NiCoffee,\n NiCoin,\n NiCollapse,\n NiCollapseIn,\n NiCols,\n NiCompass,\n NiController,\n NiCopyright,\n NiCpu,\n NiCreditCard,\n NiCrop,\n NiCrossHexagon,\n NiCrossSquare,\n NiCross,\n NiCrossFull,\n NiCrosshair,\n NiCrown,\n NiCursor,\n NiDashboard,\n NiDatabase,\n NiDevops,\n NiDiagram,\n NiDice,\n NiDirectory,\n NiDocumentArchive,\n NiDocumentChart,\n NiDocumentCheck,\n NiDocumentCode,\n NiDocumentCross,\n NiDocumentFull,\n NiDocumentImage,\n NiDocumentMinus,\n NiDocumentNumber,\n NiDocumentPlus,\n NiDocumentVideo,\n NiDollarSquare,\n NiDollar,\n NiDotsSquare,\n NiDownloadCloud,\n NiDragHorizontal,\n NiDragVertical,\n NiDrink,\n NiDrop,\n NiDuplicate,\n NiEllipsisHorizontal,\n NiEllipsisVertical,\n NiEmailOpen,\n NiEmail,\n NiEndDownSmall,\n NiEndLeftSmall,\n NiEndRightSmall,\n NiEndUpSmall,\n NiEnterDown,\n NiEnterLeft,\n NiEnterReverseDown,\n NiEnterReverseLeft,\n NiEnterReverseRight,\n NiEnterReverseUp,\n NiEnterRight,\n NiEnterUp,\n NiEquals,\n NiEqualsFull,\n NiEraser,\n NiEuroSquare,\n NiEuro,\n NiExclamationHexagon,\n NiExclamationSquare,\n NiExpandOut,\n NiExpandSquare,\n NiExpandFull,\n NiExpand,\n NiExternal,\n NiEyeClose,\n NiEyeInactive,\n NiEyeOpen,\n NiFaceFrownMore,\n NiFaceFrown,\n NiFaceNeutral,\n NiFaceSmileMore,\n NiFaceSmile,\n NiFemale,\n NiFilterCross,\n NiFilterMinus,\n NiFilterPlus,\n NiFilter,\n NiFingerprint,\n NiFire,\n NiFirstAid,\n NiFitness,\n NiFlag,\n NiFlash,\n NiFlask,\n NiFloppyDisk,\n NiFolderCheck,\n NiFolderCross,\n NiFolderMinus,\n NiFolderPlus,\n NiFolder,\n NiForwardDownSmall,\n NiForwardLeftSmall,\n NiForwardRightSmall,\n NiForwardUpSmall,\n NiGay,\n NiGerm,\n NiGogo,\n NiGold,\n NiGpu,\n NiGroup,\n NiGraduation,\n NiHeadphones,\n NiHeadset,\n NiHeadsetMic,\n NiHealth,\n NiHeart,\n NiHeartRate,\n NiHearts,\n NiHome,\n NiInbox,\n NiInfoSquare,\n NiInjection,\n NiInput,\n NiIntegration,\n NiInternal,\n NiIv,\n NiJoin,\n NiKey,\n NiKeyboard,\n NiKnobs,\n NiLaptop,\n NiLayout,\n NiLaw,\n NiLike,\n NiLinkBroken,\n NiLink,\n NiListCheck,\n NiListChevronDown,\n NiListCircle,\n NiListCross,\n NiListNumber,\n NiListSquare,\n NiList,\n NiLungs,\n NiLoader,\n NiLock,\n NiLuggage,\n NiMagicWand,\n NiMale,\n NiMap,\n NiMasonary,\n NiMedal,\n NiMenu,\n NiMenuLeft,\n NiMenuRight,\n NiMenuSplitDotReverse,\n NiMenuSplitDot,\n NiMenuSplitReverse,\n NiMenuSplit,\n NiMessageCheck,\n NiMessageCross,\n NiMessageDots,\n NiMessageFilled,\n NiMessageGrammar,\n NiMessagePlus,\n NiMessage,\n NiMessages,\n NiMicrophone,\n NiMinus,\n NiMinusFull,\n NiMinusSquare,\n NiMoneyBag,\n NiMoney,\n NiMoon,\n NiMountain,\n NiMouse,\n NiMove,\n NiMusic,\n NiNetwork,\n NiNext,\n NiOxygen,\n NiPaintBucket,\n NiPaintRoller,\n NiPalette,\n NiPaperclip,\n NiParentheses,\n NiPath,\n NiPause,\n NiPenSquare,\n NiPen,\n NiPercent,\n NiPhoneHandsetCheck,\n NiPhoneHandsetOff,\n NiPhoneHandsetOn,\n NiPhoneHandset,\n NiPhone,\n NiPinCheck,\n NiPinCross,\n NiPinPlus,\n NiPin,\n NiPine,\n NiPivot,\n NiPlane,\n NiPlay,\n NiPlug,\n NiPlusSquare,\n NiPlus,\n NiPlusFull,\n NiPolitics,\n NiPoundSquare,\n NiPound,\n NiPower,\n NiPresentation,\n NiPrevious,\n NiPrinter,\n NiProgress,\n NiPullRequestClosed,\n NiPullRequestDraft,\n NiPullRequestMerged,\n NiPullRequestOpen,\n NiPulse,\n NiPushPin,\n NiPushPinLeft,\n NiPushPinRight,\n NiPuzzle,\n NiQuestionHexagon,\n NiRankOne,\n NiRankTwo,\n NiRankThree,\n NiRankFour,\n NiRadio,\n NiReceipt,\n NiRecord,\n NiRefresh,\n NiReligion,\n NiResearch,\n NiRevenue,\n NiReverseLeft,\n NiReverseRight,\n NiRobot,\n NiRocket,\n NiRouter,\n NiRows,\n NiSafe,\n NiScale,\n NiScalpel,\n NiScissors,\n NiScreen,\n NiScriptSub,\n NiScriptSuper,\n NiSdCard,\n NiSearch,\n NiSelect,\n NiSendDownLeft,\n NiSendDownRight,\n NiSendDown,\n NiSendLeft,\n NiSendRight,\n NiSendUpLeft,\n NiSendUpRight,\n NiSendUp,\n NiServer,\n NiSettings,\n NiShare,\n NiShieldCheck,\n NiShieldCross,\n NiShield,\n NiShrinkSquare,\n NiShrinkFull,\n NiShuffle,\n NiSign,\n NiSignalLeftRight,\n NiSignalRight,\n NiSignalUp,\n NiSigns,\n NiSlashHexagon,\n NiSlider,\n NiSnow,\n NiSoundCross,\n NiSoundOff,\n NiSoundOn,\n NiSoundPlus,\n NiSparkle,\n NiSpinner,\n NiSquare,\n NiSquircle,\n NiStar,\n NiStars,\n NiStopwatch,\n NiStore,\n NiStomach,\n NiStructure,\n NiSum,\n NiSun,\n NiSwap,\n NiSwitch,\n NiTablet,\n NiTag,\n NiTelescope,\n NiTemperature,\n NiTent,\n NiTerminal,\n NiTextBold,\n NiTextCenter,\n NiTextFont,\n NiTextItalic,\n NiTextJustify,\n NiTextLeft,\n NiTextQuote,\n NiTextRight,\n NiTextStrikethrough,\n NiTextUnderline,\n NiTextarea,\n NiTicket,\n NiTimeline,\n NiTooth,\n NiToyBoat,\n NiToySky,\n NiToyStacking,\n NiTrade,\n NiTree,\n NiTrendDown,\n NiTrendUp,\n NiTriangleDown,\n NiTriangleLeft,\n NiTriangleRight,\n NiTriangleUp,\n NiTrophy,\n NiTruck,\n NiTubes,\n NiUngroup,\n NiUnlike,\n NiUnlock,\n NiUploadCloud,\n NiUserCheck,\n NiUserCross,\n NiUserMinus,\n NiUserPlus,\n NiUser,\n NiUsers,\n NiVerified,\n NiWalletCrypto,\n NiWallet,\n NiWatch,\n NiWeightScale,\n NiWind,\n NiWorld,\n NiZoomIn,\n NiZoomOut,\n};\n\nexport type IconName = keyof typeof IconMap;\nexport type IconSize = \"large\" | \"medium\" | \"small\" | \"tiny\" | number;\nexport type IconVariant = \"outlined\" | \"contained\";\n\nexport type NextureIconsProps = {\n variant?: IconVariant;\n className?: string;\n size?: IconSize;\n strokeWidth?: number;\n oneTone?: boolean;\n};\n\nexport type NextureIconsPropsComponent = NextureIconsProps & {\n icon: IconName;\n};\n\nconst NextureIcons: React.FC<NextureIconsPropsComponent> = ({\n icon,\n size = 20,\n variant = \"outlined\",\n className,\n strokeWidth = 1.5,\n oneTone = false,\n}) => {\n const IconComponent = IconMap[icon];\n if (!IconComponent) {\n console.warn(`Icon \"${icon}\" not found in IconMap.`);\n return null;\n }\n return (\n <IconComponent variant={variant} size={size} className={className} strokeWidth={strokeWidth} oneTone={oneTone} />\n );\n};\n\nexport const sizeHelper = (size: NextureIconsProps[\"size\"]) => {\n if (typeof size === \"number\") {\n return size;\n } else if (size === \"large\") {\n return 24;\n } else if (size === \"small\" || size === \"tiny\") {\n return 16;\n } else {\n return 20;\n }\n};\n\nexport const strokeSizeHelper = (size: number) => {\n if (size === 32) {\n return 1.15;\n } else if (size >= 20) {\n return 1.5;\n } else {\n return 1.75;\n }\n};\n\nexport default NextureIcons;\n","import { memo, useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport { FilledInput, FormControl, IconButton, InputAdornment, InputLabel } from \"@mui/material\";\n\nimport { NiCross, NiSearch } from \"../../icons/nexture\";\n\ninterface DebouncedSearchInputProps {\n value?: string;\n onChange: (value: string) => void;\n label?: string;\n delay?: number;\n className?: string;\n}\n\n/**\n * Self-contained search input that manages its own typing state.\n * Only calls `onChange` after a debounce, preventing expensive parent re-renders\n * (e.g. DataGrid) on every keystroke.\n *\n * Promoted here from `sales` and `timesheets`, where the file was byte-identical in both and a\n * third search field had been hand-mirrored from it in a shared toolbar. \"Search bars don't look\n * the same\" is not a problem a lint rule can fix - only one implementation can - so this is the\n * implementation, and `coreconnect/no-local-search-input` is the backstop that stops the next\n * plugin writing a fourth.\n *\n * Class composition uses the package's existing join idiom rather than a `cn`/tailwind-merge\n * helper, which keeps `plugin-ui` free of new runtime dependencies. No caller passes a conflicting\n * utility class today, so tailwind-merge's conflict resolution is unexercised; a caller that needs\n * it should override via `sx` instead of racing class order.\n */\nexport const DebouncedSearchInput = memo(function DebouncedSearchInput({\n value = \"\",\n onChange,\n label = \"Search\",\n delay = 400,\n className,\n}: DebouncedSearchInputProps) {\n const [localValue, setLocalValue] = useState(value);\n // Associate the InputLabel with the FilledInput — a bare FormControl+InputLabel+Input\n // doesn't auto-link them (unlike TextField), leaving the label without a `for` target.\n const inputId = useId();\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const lastReportedRef = useRef(value);\n const isFirstRender = useRef(true);\n\n // Sync external value changes (e.g. clear from parent)\n useEffect(() => {\n setLocalValue(value);\n lastReportedRef.current = value;\n }, [value]);\n\n // Debounce: notify parent only after typing pauses (skip initial mount)\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n if (localValue === lastReportedRef.current) return;\n const timer = setTimeout(() => {\n lastReportedRef.current = localValue;\n onChangeRef.current(localValue);\n }, delay);\n return () => clearTimeout(timer);\n }, [localValue, delay]);\n\n const handleClear = useCallback(() => {\n setLocalValue(\"\");\n lastReportedRef.current = \"\";\n onChangeRef.current(\"\");\n }, []);\n\n const classes = (...parts: (string | false | undefined)[]) => parts.filter(Boolean).join(\" \");\n\n return (\n <FormControl variant=\"filled\" size=\"medium\" className={classes(\"surface mb-0 w-full\", className)}>\n <InputLabel htmlFor={inputId}>{label}</InputLabel>\n <FilledInput\n id={inputId}\n value={localValue}\n onChange={(e) => setLocalValue(e.target.value)}\n endAdornment={\n <>\n <InputAdornment position=\"end\" className={classes(localValue === \"\" && \"hidden\")}>\n <IconButton edge=\"end\" onClick={handleClear} aria-label=\"Clear search\">\n <NiCross size=\"medium\" className=\"text-text-disabled\" />\n </IconButton>\n </InputAdornment>\n <InputAdornment position=\"end\" className={classes(localValue !== \"\" && \"hidden\")} aria-hidden>\n <IconButton edge=\"end\" disabled tabIndex={-1}>\n <NiSearch size=\"medium\" className=\"text-text-disabled\" />\n </IconButton>\n </InputAdornment>\n </>\n }\n />\n </FormControl>\n );\n});\n","import type { MappingCompletenessItem } from \"./types\";\n\n/**\n * An operation is INCOMPLETE when it has at least one required canonical field that does not map\n * onto the live tool's schema. Deliberately not \"has no tool\": see {@link MappingCompletenessItem}.\n */\nfunction hasUnmappedRequiredField(op: MappingCompletenessItem): boolean {\n return op.unmappedRequiredCanonicalFields.length > 0;\n}\n\n/**\n * Every operation with a gap, required or optional. Use it to decide whether to mount a banner at\n * all, without duplicating the predicate.\n */\nexport function selectIncompleteOperations(\n operations: MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter(hasUnmappedRequiredField);\n}\n\n/**\n * REQUIRED operations with a gap. These genuinely block the module: the connector cannot run them.\n */\n/**\n * Required operations with NO TOOL MAPPED AT ALL.\n *\n * <b>The gap none of the selectors below could report.</b> Every other selector here keys on\n * `unmappedRequiredCanonicalFields`, which describes a FIELD-translation gap. An operation that\n * declares no required canonical fields therefore has an empty array whether or not a tool answers\n * it - so a required operation with nothing mapped to it was invisible to this banner entirely.\n *\n * That is not a corner case. `find-companies` on the sales prospecting module declares no request\n * fields, so removing its tool mapping left the module's own page silent while the module selector\n * beside it marked the module as needing attention. An operator was told there was a problem by a\n * chip in a dropdown and given nowhere on the page to find out what.\n *\n * Reported SEPARATELY from the field selectors rather than folded into them, because the remedy\n * differs: these need a tool chosen, and field translation is a question that only arises once one\n * is. A consumer rendering both must therefore exclude these from the field lists - see\n * `MappingCompletenessBanner` - or an operation with both problems appears twice and the more\n * urgent half is buried under the less urgent one.\n */\nexport function selectRequiredUnmappedOperations(\n operations: readonly MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter((op) => op.isRequired && !op.isToolMapped);\n}\n\nexport function selectRequiredIncompleteOperations(\n operations: MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter((op) => op.isRequired && hasUnmappedRequiredField(op));\n}\n\n/**\n * OPTIONAL operations with a gap. Informational only: the operation powers an extra capability that\n * stays off until its fields are mapped, and the connector may legitimately expose no suitable tool.\n *\n * @remarks\n * Treat these as a note, never a warning. A connector need not expose every operation a module can\n * use, so a correctly configured connector can sit here indefinitely — and a banner that never\n * clears is a banner operators learn to ignore, which costs you the required warnings too.\n */\nexport function selectOptionalIncompleteOperations(\n operations: MappingCompletenessItem[],\n): MappingCompletenessItem[] {\n return operations.filter((op) => !op.isRequired && hasUnmappedRequiredField(op));\n}\n\n/** A module's readiness, counted over REQUIRED operations only. */\nexport interface MappingReadiness {\n /** Required operations that are mapped AND have no field gaps. */\n complete: number;\n /** Total required operations declared by the module's catalogue. */\n total: number;\n /** True when every required operation is mapped and complete. */\n isReady: boolean;\n}\n\n/**\n * Readiness over REQUIRED operations only, for a progress indicator or a \"ready\" badge.\n *\n * @remarks\n * Optional operations are excluded on purpose. Counting them would leave a properly configured\n * connector permanently short of 100%, for operations the operator was never expected to map. This\n * rule came from `ethisyscore-plugin-timesheets`, which had it right while another plugin was\n * reporting optional field gaps in a standing banner.\n */\nexport function selectMappingReadiness(\n operations: MappingCompletenessItem[],\n): MappingReadiness {\n const required = operations.filter((op) => op.isRequired);\n const complete = required.filter(\n (op) => op.isToolMapped && op.unmappedRequiredCanonicalFields.length === 0,\n ).length;\n\n return {\n complete,\n total: required.length,\n isReady: required.length > 0 && complete === required.length,\n };\n}\n","/**\n * The words the provider controls use, in one place, because two surfaces have to say the same ones.\n *\n * ## Why these are constants and not literals at each site\n *\n * A \"not configured\" message has to name the control that resolves it, in that control's own words.\n * This surface has already paid for the alternative: the completeness banner described a gap in the\n * abstract (\"the mapping editor\"), an operator could not find any such thing on the page, and the\n * report that came back was \"it doesnt really suggest how to fix it\". The fix was to name the\n * affordance verbatim - and a verbatim name held as two separate string literals is one rename away\n * from pointing at nothing again, with both files still compiling and both tests still green.\n *\n * So the control renders {@link PROVIDER_CONTROL_LABEL} and the banner quotes it, from here. A test\n * asserts the banner's text contains the label the view actually renders; it fails if either side\n * is edited alone.\n *\n * Pure strings, no imports. That matters: the mapping HOOKS module value-imports this, and it must\n * not drag `@mui/material` into a barrel whose consumers may not have installed it.\n */\n\n/** Label of the control that chooses what serves a module. */\nexport const PROVIDER_CONTROL_LABEL = \"Served by\";\n\n/**\n * Labels of the two things that can serve a module.\n *\n * Phrased from the operator's side rather than the schema's. \"Plugin\" and \"Connector\" are the\n * platform's words for its own internals; an operator choosing where a module's data comes from is\n * choosing between the applications they already run and something outside.\n */\nexport const PROVIDER_OPTION_LABEL = {\n plugin: \"This organisation's apps\",\n connector: \"External system\",\n} as const;\n\n/** Label of the control that picks WHICH installed application, once \"this organisation's apps\" is chosen. */\nexport const PLUGIN_PROVIDER_CONTROL_LABEL = \"App\";\n\n/** Label of the control that picks WHICH connector, once \"external system\" is chosen. */\nexport const CONNECTOR_CONTROL_LABEL = \"Connector\";\n","import {\n Alert,\n AlertTitle,\n Box,\n Button,\n Chip,\n CircularProgress,\n Stack,\n Typography,\n} from \"../ui\";\nimport {\n selectOptionalIncompleteOperations,\n selectRequiredIncompleteOperations,\n selectRequiredUnmappedOperations,\n} from \"./mappingCompleteness\";\nimport {\n PROVIDER_CONTROL_LABEL,\n PROVIDER_OPTION_LABEL,\n} from \"./providerLabels\";\nimport type { MappingCompletenessItem } from \"./types\";\n\nexport interface MappingCompletenessBannerProps {\n /**\n * Per-operation completeness for the selected connector + module. The banner splits these into\n * REQUIRED operations with gaps (a blocking warning) and OPTIONAL ones (an informational note);\n * it renders nothing when neither group has gaps.\n */\n operations: MappingCompletenessItem[];\n\n /**\n * Opt-in AI assist. Invoked with the operation the operator chose to fix. The consumer wires this\n * to the suggest-translation mutation and decides what to do with the result (open the editor\n * seeded with the suggestion, apply it, and so on).\n */\n onSuggestWithAi: (operation: MappingCompletenessItem) => void;\n\n /**\n * Opens the manual mapping editor for an operation. The consumer owns the editor surface and\n * routing; the banner only raises intent.\n *\n * Every known consumer wires this to the request/response translation editor, which is why the\n * row control is labelled for what it opens rather than for this prop's name. Kept required\n * because it always was: making it optional would let a consumer render rows with no action.\n */\n onOpenMappingEditor: (operation: MappingCompletenessItem) => void;\n\n /**\n * OPTIONAL, and the preferred wiring. Jumps straight to the operation's REQUEST-FIELD\n * TRANSLATION editor — the \"Configure field translation\" surface — rather than to whatever general\n * mapping surface `onOpenMappingEditor` happens to open.\n *\n * @remarks\n * Optional on purpose. This package is pinned independently by every plugin, so a required prop\n * would break every consumer that has not been updated. When it is absent the row falls back to\n * `onOpenMappingEditor` with identical rendering, so an un-updated consumer keeps exactly the\n * behaviour it had and still gains the corrected copy.\n */\n onConfigureTranslation?: (operation: MappingCompletenessItem) => void;\n\n /**\n * Operation key currently awaiting an AI suggestion, or `null`. Drives the per-row spinner and\n * disabled state so a slow suggestion does not lock the whole banner.\n */\n suggestingOperationKey?: string | null;\n\n /** Disables the AI assist affordance entirely, e.g. AI not configured for the organisation. */\n disableSuggest?: boolean;\n\n /**\n * `true` when the module has no PROVIDER chosen at all - nobody has said whether it is served by\n * another installed app or by an external system.\n *\n * @remarks\n * A different gap from everything else this banner reports, and the only one that makes the rest\n * meaningless: with no provider there is no tool inventory to be complete or incomplete against,\n * so the two alerts below correctly have nothing to say and the page would otherwise look\n * configured. This is therefore the one condition that renders the banner when no operation has\n * a gap.\n *\n * Optional, defaulting to `false`, for the reason {@link onConfigureTranslation} is: a consumer\n * that has not adopted the provider surface keeps exactly its current behaviour.\n */\n isProviderUnconfigured?: boolean;\n}\n\n/**\n * Connector-setup \"mapping completeness\" banner, shared by every plugin with a Tool Mappings page.\n *\n * Presentational and props-driven: the consumer fetches completeness and owns the editor, so the\n * same banner serves Repo Monitoring, Timesheets, Error Monitoring and anything added later.\n *\n * It separates two cases:\n *\n * - **Required** operations with unmapped required fields, a warning the operator must act on\n * because the module cannot run them.\n * - **Optional** operations with unmapped required fields, a calm note. These power extra\n * capabilities that stay off until their fields are mapped, and the connector may legitimately\n * expose no suitable tool, so they must never read as a blocking error.\n *\n * Renders nothing when neither group has gaps.\n *\n * @remarks\n * **The wording is load-bearing, and was wrong in the copy this was promoted from.** Both groups are\n * selected on `unmappedRequiredCanonicalFields`, which is about FIELD mapping. The original optional\n * alert was titled \"Optional operations not mapped\" and said they \"stay off until mapped\", which\n * describes TOOL mapping. Auto-match maps tools and cannot close a field gap, so an operator who\n * pressed auto-match saw the count refuse to move and reported the banner as broken. It was\n * accurate; the text was not. Every string here therefore says \"fields\", and both alerts say plainly\n * that auto-match will not clear them.\n *\n * A row without the \"No tool mapped\" chip already HAS a tool and needs its fields mapped. That chip\n * is the only thing distinguishing the two states, which is why the prose points at it.\n *\n * **The second wording fix, from a production report.** Saying \"fields\" was necessary but not\n * sufficient. An operator read \"fields that aren't mapped to this connector's tools\", concluded the\n * TOOL was unmapped (it was not), and had no idea which control closed the gap — the text named an\n * abstraction, \"the mapping editor\", and never the affordance on screen. So the copy now names the\n * thing that is missing (the REQUEST-FIELD TRANSLATION, canonical field name → the tool's own\n * parameter name) and the control that supplies it (\"Configure field translation\"), and every\n * listed operation carries that control inline. Their words: \"it doesnt really suggest how to fix\n * it\".\n *\n * That label is not invented here: it is the verbatim tooltip and aria-label of the per-row gear in\n * every consumer's `ConnectorMappingView` (host gogo-ui, self-healing, tech, timesheets, sales). The\n * prose has to name a string the operator can actually find on the page, so a near-miss paraphrase\n * would reintroduce the defect in a quieter form.\n */\nexport function MappingCompletenessBanner({\n operations,\n onSuggestWithAi,\n onOpenMappingEditor,\n onConfigureTranslation,\n suggestingOperationKey = null,\n disableSuggest = false,\n isProviderUnconfigured = false,\n}: MappingCompletenessBannerProps) {\n /*\n * Three buckets, and the first one is new.\n *\n * A required operation with NO TOOL AT ALL used to reach none of these lists, because both field\n * selectors key on `unmappedRequiredCanonicalFields` and an operation declaring no required\n * canonical fields has an empty array whether or not anything answers it. The module selector\n * beside this banner marked such a module as needing attention while the page itself said\n * nothing - which is the complaint this change answers.\n *\n * The field lists EXCLUDE anything in the first bucket. An operation that is both unmapped and\n * field-incomplete has one actionable next step, choosing a tool, and listing it twice would bury\n * that under a translation task it cannot act on yet.\n */\n const unmapped = selectRequiredUnmappedOperations(operations);\n const unmappedKeys = new Set(unmapped.map((op) => op.operationKey));\n const required = selectRequiredIncompleteOperations(operations).filter(\n (op) => !unmappedKeys.has(op.operationKey),\n );\n const optional = selectOptionalIncompleteOperations(operations).filter(\n (op) => !unmappedKeys.has(op.operationKey),\n );\n\n if (\n !isProviderUnconfigured\n && unmapped.length === 0\n && required.length === 0\n && optional.length === 0\n ) {\n return null;\n }\n\n const renderRow = (op: MappingCompletenessItem) => {\n const isSuggesting = suggestingOperationKey === op.operationKey;\n\n return (\n <Box key={op.operationKey}>\n <Stack\n direction={{ xs: \"column\", sm: \"row\" }}\n spacing={1}\n alignItems={{ xs: \"flex-start\", sm: \"center\" }}\n justifyContent=\"space-between\"\n >\n <Box>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\" sx={{ flexWrap: \"wrap\" }}>\n <Typography variant=\"subtitle2\">{op.label}</Typography>\n {op.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"error\" variant=\"outlined\" />\n )}\n {!op.isToolMapped && (\n <Chip label=\"No tool mapped\" size=\"small\" color=\"warning\" variant=\"outlined\" />\n )}\n </Stack>\n <Typography variant=\"caption\" color=\"text.secondary\">\n Unmapped required request fields:{\" \"}\n {op.unmappedRequiredCanonicalFields.join(\", \")}\n </Typography>\n </Box>\n\n <Stack direction=\"row\" spacing={1} sx={{ flexShrink: 0 }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"primary\"\n // AI suggests a field TRANSLATION for the mapped tool. There is nothing to suggest\n // when no tool is mapped yet, and calling the endpoint with an empty toolName errors,\n // so this stays disabled until a tool is chosen.\n disabled={disableSuggest || isSuggesting || !op.isToolMapped}\n title={\n !op.isToolMapped\n ? \"Map a tool to this operation before suggesting a field translation\"\n : undefined\n }\n startIcon={isSuggesting ? <CircularProgress size={14} color=\"inherit\" /> : undefined}\n onClick={() => onSuggestWithAi(op)}\n >\n {isSuggesting ? \"Suggesting…\" : \"Suggest with AI\"}\n </Button>\n {/*\n Labelled for what it OPENS, not for the prop it happens to call. \"Open mapping\n editor\" was the label an operator could not connect to the request-field gap the\n prose describes, and the prose now names this control verbatim — the two have to\n agree or the instruction points at nothing. `onConfigureTranslation` is the explicit\n wiring; `onOpenMappingEditor` is the pre-existing required prop every consumer\n already points at the same editor, so the fallback is not a downgrade.\n */}\n <Button\n size=\"small\"\n variant=\"text\"\n color=\"primary\"\n onClick={() => (onConfigureTranslation ?? onOpenMappingEditor)(op)}\n >\n Configure field translation\n </Button>\n </Stack>\n </Stack>\n </Box>\n );\n };\n\n return (\n <Box sx={{ mb: 2 }}>\n {/*\n First, because it is the precondition for everything under it: until a provider is chosen,\n no operation can resolve and the two alerts below have nothing to measure against.\n\n The copy names the CONTROL and quotes its two options verbatim, from `providerLabels`, which\n is also where the control itself reads them. That is the rule this banner exists to keep:\n a \"not configured\" message that does not name the thing that configures it produced a real\n support report on this very surface - \"it doesnt really suggest how to fix it\" - and naming\n it as a paraphrase would reintroduce the same defect in a quieter form.\n */}\n {isProviderUnconfigured && (\n <Alert\n severity=\"warning\"\n sx={{ mb: required.length > 0 || optional.length > 0 ? 2 : 0 }}\n data-testid=\"provider-unconfigured-alert\"\n >\n <AlertTitle>Nothing serves this module yet</AlertTitle>\n <Typography variant=\"body2\">\n No provider has been chosen, so every operation below resolves as unmapped no matter\n what is mapped against it. Set one with the &quot;{PROVIDER_CONTROL_LABEL}&quot; control\n at the top of this page: choose &quot;{PROVIDER_OPTION_LABEL.plugin}&quot; to have\n another app this organisation already runs answer these operations, or &quot;\n {PROVIDER_OPTION_LABEL.connector}&quot; to route them through a connector to a\n third-party system. The choice is per module and can be changed later.\n </Typography>\n </Alert>\n )}\n\n {/*\n FIRST, and the only one at error weight. A required operation with nothing mapped to it is\n the one state on this page where the module cannot work at all: the others describe an\n operation that has a tool and needs its fields translating, which is a narrower problem.\n */}\n {unmapped.length > 0 && (\n <Alert\n severity=\"error\"\n sx={{ mb: required.length > 0 || optional.length > 0 ? 2 : 0 }}\n data-testid=\"required-unmapped-alert\"\n >\n <AlertTitle>\n {unmapped.length === 1\n ? \"A required operation has no tool mapped\"\n : \"Required operations have no tool mapped\"}\n </AlertTitle>\n <Typography variant=\"body2\">\n {unmapped.length === 1\n ? \"This operation has nothing to call, so the module cannot do its job until a tool is chosen for it. \"\n : `${unmapped.length} required operations have nothing to call, so the module cannot do its job until a tool is chosen for each. `}\n Pick one on the row below. If this connector exposes nothing suitable, the module needs a\n different connector rather than a translation.\n </Typography>\n <Box sx={{ mt: 1 }}>{unmapped.map(renderRow)}</Box>\n </Alert>\n )}\n\n {required.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: optional.length > 0 ? 2 : 0 }}>\n <AlertTitle>Required operations are missing request-field mappings</AlertTitle>\n <Typography variant=\"body2\">\n {required.length === 1\n ? \"1 required operation declares\"\n : `${required.length} required operations declare`}{\" \"}\n canonical request fields that aren&apos;t mapped to any parameter the tool accepts. The\n missing piece is the REQUEST-FIELD TRANSLATION: the per-operation map from the\n operation&apos;s canonical field names to the tool&apos;s own parameter names. It is not\n the tool binding, which a row without a &quot;No tool mapped&quot; chip already has.\n Ethisys Core can&apos;t run these reliably until every listed field is translated, and\n auto-match picks the TOOL, not its fields, so it won&apos;t clear them on its own.\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 1.5 }}>\n Fix each operation below with &quot;Configure field translation&quot;: for every field\n listed, enter the parameter name the tool actually expects, for example a canonical{\" \"}\n <Box component=\"code\">startDate</Box> the tool calls{\" \"}\n <Box component=\"code\">start_date</Box>. &quot;Suggest with AI&quot; proposes the same\n translation for you to review in that editor before saving.\n </Typography>\n <Stack spacing={1.5}>{required.map(renderRow)}</Stack>\n </Alert>\n )}\n\n {optional.length > 0 && (\n <Alert severity=\"info\">\n <AlertTitle>Optional operations are missing request-field mappings</AlertTitle>\n <Typography variant=\"body2\" sx={{ mb: 1.5 }}>\n {optional.length === 1\n ? \"1 optional operation declares request fields that aren't\"\n : `${optional.length} optional operations declare request fields that aren't`}{\" \"}\n mapped to the tool&apos;s own parameter names. These power extra capabilities and stay\n off until that request-field translation is supplied, so they are safe to leave if you\n don&apos;t need them, or if this connector exposes no matching tool. Each row below\n lists exactly which fields are missing; a row without a &quot;No tool mapped&quot; chip\n already HAS a tool and needs only its fields translated, which auto-match does not do.\n Use &quot;Configure field translation&quot; on the row to supply it.\n </Typography>\n <Stack spacing={1.5}>{optional.map(renderRow)}</Stack>\n </Alert>\n )}\n </Box>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { Box, Typography } from \"@mui/material\";\n\nimport { NiArchive } from \"../../icons/nexture\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title?: string;\n description?: string;\n /** Grow to fill (and vertically centre within) a flex-column parent — e.g. a dashboard tile. */\n fill?: boolean;\n}\n\n/**\n * The shared \"nothing here yet\" panel.\n *\n * Promoted from the plugins rather than designed here: this 32-line file was identical in four of\n * the ten repos (`timesheets`, `projects`, `legal`, `helpdesk`). \"Empty states look different in\n * every app\" is a complaint no lint rule can answer - only one implementation can - so this is it,\n * and `coreconnect/no-local-empty-state` stops a fifth being written.\n *\n * `description` is defaulted rather than coalesced, so a caller passing `\"\"` gets no description at\n * all. A filtered list showing \"No results\" wants a heading and nothing else.\n */\nexport function EmptyState({\n icon = <NiArchive className=\"text-text-disabled\" size=\"large\" />,\n title = \"No items yet\",\n description = \"Create your first item to get started\",\n fill = false,\n}: EmptyStateProps) {\n return (\n <Box className={`flex flex-col items-center justify-center py-12 text-center ${fill ? \"flex-1\" : \"\"}`}>\n <Box className=\"mb-3\">{icon}</Box>\n <Typography variant=\"body1\" className=\"text-text-secondary\">\n {title}\n </Typography>\n {description ? (\n <Typography variant=\"body2\" className=\"text-text-disabled mt-1\">\n {description}\n </Typography>\n ) : null}\n </Box>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport {\n Alert,\n AlertTitle,\n Autocomplete,\n Box,\n Button,\n Card,\n CardContent,\n Chip,\n FormControl,\n Grid,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n Skeleton,\n TextField,\n Tooltip,\n Typography,\n} from \"../ui\";\nimport { NiCode, NiCross, NiRefresh, NiSettings } from \"../../icons/nexture\";\nimport { EmptyState } from \"../shared/EmptyState\";\nimport {\n CONNECTOR_CONTROL_LABEL,\n PLUGIN_PROVIDER_CONTROL_LABEL,\n PROVIDER_CONTROL_LABEL,\n PROVIDER_OPTION_LABEL,\n} from \"./providerLabels\";\nimport type { ConnectorCanonicalField } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Wire vocabularies\n//\n// Declared here rather than imported from `../../connector-mappings/types`, which is where the\n// data-side copies live: this barrel must not depend on the react-query barrel, and a component\n// that renders a chip colour per source needs only the three literals. The two are kept in step by\n// `__tests__/connectorMappingView.test.tsx`, which asserts them against each other.\n// ---------------------------------------------------------------------------\n\nconst SOURCE = {\n keyword: \"keyword\",\n ai: \"ai\",\n manual: \"manual\",\n} as const;\n\n/** The vocabulary of `ToolMapping.Source` values the backend writes. Derived so the two cannot drift. */\ntype MappingSourceValue = (typeof SOURCE)[keyof typeof SOURCE];\n\n/** The MUI Chip colours this surface uses to distinguish those sources. */\ntype MappingSourceChipColour = \"info\" | \"secondary\" | \"success\";\n\nconst SOURCE_COLOURS: Record<MappingSourceValue, MappingSourceChipColour> = {\n [SOURCE.keyword]: \"info\",\n [SOURCE.ai]: \"secondary\",\n [SOURCE.manual]: \"success\",\n};\n\nconst CONFLICT_REASON = {\n AnotherAutoMatchInProgress: \"another_auto_match_in_progress\",\n} as const;\n\n// ---------------------------------------------------------------------------\n// Props\n//\n// Declared structurally, not imported from the data module, for the reason above. Every shape here\n// is assignable from the corresponding one in `@ethisyscore/plugin-ui/connector-mappings`, so\n// `useConnectorToolMappings(...).view` spreads straight onto this component.\n// ---------------------------------------------------------------------------\n\n/** A connector offered in the picker. */\nexport interface ConnectorMappingViewConnector {\n id: string;\n name: string;\n}\n\n/**\n * What serves the module, as this view spells it. Structurally identical to `MappingTargetKind` in\n * the hooks module, declared here for the reason every shape in this file is: the two barrels share\n * types across the boundary only as type-only imports, and this one is two literals.\n */\nexport type ConnectorMappingViewProviderKind = \"connector\" | \"plugin\";\n\n/** An installed application offered in the provider picker. */\nexport interface ConnectorMappingViewPluginProvider {\n extensionId: string;\n name: string;\n}\n\n/** A tool offered in the per-row picker. */\nexport interface ConnectorMappingViewTool {\n name: string;\n description: string;\n}\n\n/** The operator-editable translation on one row, as handed to `onEditTranslation`. */\nexport interface ConnectorMappingViewTranslationState {\n requestFieldMap: Record<string, string> | null;\n responseFieldPaths: Record<string, string> | null;\n staticRequestFields: Record<string, string> | null;\n}\n\n/** One row of the mapping table. */\nexport interface ConnectorMappingViewRow {\n operationKey: string;\n label: string;\n isRequired: boolean;\n mappedToolName: string | null;\n source: MappingSourceValue | null;\n confidence: number | null;\n\n /** `null` when no stored row exists yet; the view sends `\"\"` up so the host upserts. */\n rowVersion: string | null;\n\n requiresReview?: boolean;\n canonicalRequestFields?: ConnectorCanonicalField[] | null;\n canonicalResponseFields?: ConnectorCanonicalField[] | null;\n requestFieldMap?: Record<string, string> | null;\n responseFieldPaths?: Record<string, string> | null;\n staticRequestFields?: Record<string, string> | null;\n}\n\n/** Outcome of the most recent auto-match run, as the banner reads it. */\nexport interface ConnectorMappingViewBannerState {\n aiAvailable: boolean;\n unmatchedRequiredCount: number;\n matchedByKeyword: number;\n matchedByAi: number;\n conflictReason: string | null;\n}\n\nexport interface ConnectorMappingViewProps {\n isLoading: boolean;\n\n /** Wire key of the mapping module, e.g. `repo-monitoring`. Not rendered; kept for parity. */\n moduleKey: string;\n\n /** Human-readable module label, used in the header and the empty state. */\n moduleLabel: string;\n\n /**\n * When `true` (the default), the view renders its own `<h1>` plus {@link breadcrumbs}. Set it to\n * `false` on a page that already renders a `PageHeader`, or the title appears twice.\n */\n withHeader?: boolean;\n\n /**\n * Breadcrumb trail rendered under the built-in `<h1>`, and only when {@link withHeader} is true.\n *\n * A node rather than an import. Breadcrumbs are plugin-specific — they need that plugin's route\n * table and its menu context — and one of the three plugins this was promoted from had deleted\n * the whole header block rather than lift `PageBreadcrumbs` plus its context and router shim for\n * an import that could never execute. Injecting it means a consumer that wants the built-in\n * header can have it without this package taking on a router dependency, and a consumer that\n * does not simply omits both.\n */\n breadcrumbs?: ReactNode;\n\n /**\n * What to render while {@link isLoading}. Defaults to a plain skeleton block.\n *\n * Injected for the same reason as {@link breadcrumbs}: each plugin has its own page skeleton, and\n * a shared one that did not match would be a visible regression on adoption.\n */\n loadingFallback?: ReactNode;\n\n connectors: ConnectorMappingViewConnector[];\n selectedConnectorId: string;\n onConnectorChange: (connectorId: string) => void;\n\n // --- provider selection ----------------------------------------------------\n //\n // Every member below is OPTIONAL, and the picker renders only when `onProviderKindChange` is\n // supplied. That is not caution for its own sake: this package is pinned independently by every\n // plugin, and a required prop would break each consumer that has not been updated. Omit them all\n // and this view behaves exactly as it did when a connector was the only thing a module could be\n // served by.\n\n /**\n * What currently serves the module, or `undefined` when the operator has made no choice.\n *\n * `undefined` is a real state and is NOT rendered as \"connector\". An unconfigured module and a\n * module pointed at a connector with nothing mapped yet look similar and need different actions,\n * and defaulting here is how an operator ends up sent to the wrong control.\n */\n providerKind?: ConnectorMappingViewProviderKind;\n\n /** Supplying this is what turns the provider picker on. See the block comment above. */\n onProviderKindChange?: (kind: ConnectorMappingViewProviderKind) => void;\n\n /** The installed applications on offer. Only read while {@link providerKind} is `\"plugin\"`. */\n pluginProviders?: ConnectorMappingViewPluginProvider[];\n\n /** The chosen application, or `\"\"`. */\n selectedPluginExtensionId?: string;\n\n onPluginProviderChange?: (extensionId: string) => void;\n\n mappings: ConnectorMappingViewRow[];\n availableTools: ConnectorMappingViewTool[];\n\n /**\n * Called with `toolName === \"\"` when the operator clears a row's picker. The consumer routes that\n * to the host's delete tool — see `useConnectorMappingMutations`, which does it — because the\n * set validator rejects an empty tool name.\n */\n onUpdateMapping: (operationKey: string, toolName: string, rowVersion: string) => void;\n\n onAutoMatch: () => void;\n isUpdating: boolean;\n isAutoMatching: boolean;\n\n /** `null` when no outcome banner should render (nothing to say, or the operator dismissed it). */\n bannerState: ConnectorMappingViewBannerState | null;\n\n onDismissBanner: () => void;\n\n /**\n * Href of the host's AI-providers settings page. The view owns no routing; the consumer passes\n * the href so the link stays correct across templates and route changes.\n */\n aiProvidersHref: string;\n\n /** Href of the selected connector's settings page. Same routing-ownership rule. */\n connectorSettingsHref: string;\n\n /**\n * Raised by the per-row \"Configure field translation\" button. Rows with no mapped tool, or with\n * no declared canonical schema, never raise it — the view hides the button for those, because\n * there is nothing operator-meaningful to translate.\n */\n onEditTranslation: (\n operationKey: string,\n current: ConnectorMappingViewTranslationState,\n ) => void;\n}\n\n/**\n * The per-row source indicator.\n *\n * - `manual` → \"manual\"\n * - `keyword` → \"auto (keyword)\"\n * - `ai` → \"auto (AI, NN%)\"\n *\n * An unmapped row, or a row with no recorded source, gets an em-dash chip rather than nothing: a\n * blank cell reads as a rendering failure where a dash reads as \"not applicable\".\n */\nfunction renderSourceChip(item: ConnectorMappingViewRow) {\n if (!item.mappedToolName || !item.source) {\n return <Chip label=\"—\" size=\"small\" color=\"default\" variant=\"outlined\" />;\n }\n\n let label: string;\n if (item.source === SOURCE.manual) {\n label = \"manual\";\n } else if (item.source === SOURCE.keyword) {\n label = \"auto (keyword)\";\n } else {\n const pct = Math.round((item.confidence ?? 0) * 100);\n label = `auto (AI, ${pct}%)`;\n }\n return <Chip label={label} size=\"small\" color={SOURCE_COLOURS[item.source]} variant=\"outlined\" />;\n}\n\n/**\n * The auto-match outcome banner. `null` when the run has nothing worth surfacing.\n *\n * @remarks\n * **The unmapped-required warning is NOT gated on `aiAvailable`.** That condition came from the\n * monolith, where auto-match has an AI pass. A plugin's auto-match may be keyword-only, in which\n * case `aiAvailable` is always false and the gate made the warning unreachable — so the one case an\n * operator actually has to act on stayed invisible. Two of the three copies this was promoted from\n * had fixed it and one had not; this is the fixed behaviour, with the AI counts moved inside the\n * message so the copy is still accurate when AI did run.\n */\nfunction renderBanner(banner: ConnectorMappingViewBannerState, onDismiss: () => void) {\n const dismissButton = (\n <IconButton\n aria-label=\"Dismiss\"\n size=\"small\"\n onClick={onDismiss}\n data-testid=\"dismiss-banner\"\n >\n <NiCross size=\"small\" />\n </IconButton>\n );\n\n if (banner.conflictReason === CONFLICT_REASON.AnotherAutoMatchInProgress) {\n return (\n <Alert severity=\"warning\" className=\"mb-2\" action={dismissButton}>\n <AlertTitle>Auto-match already running</AlertTitle>\n Another user is currently running auto-match. Please refresh the page in a few seconds.\n </Alert>\n );\n }\n\n if (banner.unmatchedRequiredCount > 0) {\n return (\n <Alert severity=\"warning\" className=\"mb-2\" action={dismissButton}>\n <AlertTitle>Some required operations are unmapped</AlertTitle>\n {banner.aiAvailable\n ? `AI matched ${banner.matchedByAi}, keywords matched ${banner.matchedByKeyword}.`\n : `Keywords matched ${banner.matchedByKeyword}.`}{\" \"}\n {banner.unmatchedRequiredCount} required operation\n {banner.unmatchedRequiredCount === 1 ? \"\" : \"s\"} still need\n {banner.unmatchedRequiredCount === 1 ? \"s\" : \"\"} a mapping.\n </Alert>\n );\n }\n\n return null;\n}\n\n/**\n * What to show when nothing yet serves the module.\n *\n * Three states, not one, because they need three different actions from the operator - and each\n * message names the control that supplies the missing piece, using that control's own label. A\n * message that says only what is absent is the defect this surface has already shipped: the\n * completeness banner described a gap in the abstract, and the report back was that it \"doesnt\n * really suggest how to fix it\".\n */\nfunction renderNoProviderEmptyState(\n kind: ConnectorMappingViewProviderKind | undefined,\n moduleLabel: string,\n) {\n const icon = <NiCode className=\"text-text-disabled\" size=\"large\" />;\n const module = moduleLabel.toLowerCase();\n\n if (kind === undefined) {\n return (\n <EmptyState\n icon={icon}\n title={`Choose what serves ${module}`}\n description={\n `Use \"${PROVIDER_CONTROL_LABEL}\" above: \"${PROVIDER_OPTION_LABEL.plugin}\" to have ` +\n `another app you already run answer these operations, or ` +\n `\"${PROVIDER_OPTION_LABEL.connector}\" to route them through a connector. Nothing ` +\n `resolves until one is chosen.`\n }\n />\n );\n }\n\n if (kind === \"plugin\") {\n return (\n <EmptyState\n icon={icon}\n title=\"Select an app\"\n description={\n `Choose the app under \"${PLUGIN_PROVIDER_CONTROL_LABEL}\" above to view and configure ` +\n `which of its tools answer each ${module} operation`\n }\n />\n );\n }\n\n return (\n <EmptyState\n icon={icon}\n title=\"Select a connector\"\n description={`Choose a connector to view and configure its ${module} tool mappings`}\n />\n );\n}\n\n/**\n * The Tool Mappings table: a connector picker, one row per canonical operation with a tool picker\n * and a source chip, the auto-match control, and the per-row translation affordance.\n *\n * ## Promoted, not designed here\n *\n * This file existed three times — `sales`, `tech` and `timesheets` — and two of the three were\n * BYTE-IDENTICAL at 329 lines. The third was the same file with the header block deleted and one\n * behaviour difference that was a live defect (see {@link renderBanner}). Nothing about it was\n * plugin-specific except two imports, which are now props: the breadcrumbs and the loading\n * skeleton.\n *\n * ## What it owns and what it does not\n *\n * Presentational and fully props-driven. It fetches nothing, writes nothing and routes nowhere —\n * `aiProvidersHref` and `connectorSettingsHref` arrive as strings, and clearing a row's picker\n * emits `onUpdateMapping(key, \"\", rowVersion)` for the consumer to route. Pair it with\n * `useConnectorToolMappings` from `@ethisyscore/plugin-ui/connector-mappings`, whose `view` bundle\n * spreads straight onto these props.\n *\n * The translation affordance appears only when a row HAS a mapped tool AND declares both canonical\n * schemas. A row with no schema has nothing to translate, and offering the button anyway opens an\n * editor with no fields in it.\n */\nexport function ConnectorMappingView({\n isLoading,\n moduleLabel,\n breadcrumbs,\n loadingFallback,\n connectors,\n selectedConnectorId,\n onConnectorChange,\n providerKind,\n onProviderKindChange,\n pluginProviders = [],\n selectedPluginExtensionId = \"\",\n onPluginProviderChange,\n mappings,\n availableTools,\n onUpdateMapping,\n onAutoMatch,\n isUpdating,\n isAutoMatching,\n bannerState,\n onDismissBanner,\n onEditTranslation,\n withHeader = true,\n}: ConnectorMappingViewProps) {\n if (isLoading) {\n return (\n <>\n {loadingFallback ?? (\n <Box className=\"flex flex-col gap-4\" data-testid=\"connector-mapping-skeleton\">\n <Skeleton variant=\"rounded\" height={56} />\n <Skeleton variant=\"rounded\" height={240} />\n </Box>\n )}\n </>\n );\n }\n\n // One flag for both writes. A save and an auto-match both invalidate the rows underneath the\n // operator, so letting a second edit start against data that is about to be replaced is how you\n // get a concurrency failure the operator cannot explain.\n const disableInputs = isUpdating || isAutoMatching;\n const banner = bannerState ? renderBanner(bannerState, onDismissBanner) : null;\n\n // The picker exists only when a consumer wired it. See the props block for why.\n const providerPickerEnabled = !!onProviderKindChange;\n\n // Without the picker, \"connector\" is not a default - it is the only kind this view could ever\n // show, so treating the legacy shape as the connector kind is a statement of fact rather than a\n // guess about an operator's intent.\n const effectiveKind: ConnectorMappingViewProviderKind | undefined = providerPickerEnabled\n ? providerKind\n : \"connector\";\n\n const isPluginMode = effectiveKind === \"plugin\";\n\n // A provider is chosen when the KIND is chosen AND the concrete provider under it is. Half a\n // choice resolves to nothing at runtime, so the table would render rows nothing can answer.\n const hasProvider = isPluginMode ? !!selectedPluginExtensionId : !!selectedConnectorId;\n\n // Auto-match is a connector feature end to end: the host tool takes a connector id and matches\n // against that connector's live tool inventory. Rendering the control in plugin mode would offer\n // an action with nothing to act on.\n const showAutoMatch = !isPluginMode && !!selectedConnectorId;\n\n return (\n <Grid container spacing={5}>\n {(withHeader || showAutoMatch) && (\n <Grid size={12}>\n <Box\n className={`flex flex-row items-start ${withHeader ? \"justify-between\" : \"justify-end\"}`}\n >\n {withHeader && (\n <Box>\n <Typography variant=\"h1\" component=\"h1\" className=\"mb-0\">\n {moduleLabel} Mappings\n </Typography>\n {breadcrumbs}\n </Box>\n )}\n {showAutoMatch && (\n <Box className=\"flex flex-row items-center gap-2\">\n <Tooltip title=\"Re-run Auto-Match\">\n <Button\n className=\"icon-only surface-standard\"\n color=\"grey\"\n variant=\"surface\"\n startIcon={<NiRefresh size=\"medium\" />}\n onClick={onAutoMatch}\n aria-label=\"Re-run Auto-Match\"\n disabled={disableInputs}\n data-testid=\"auto-match-button\"\n />\n </Tooltip>\n </Box>\n )}\n </Box>\n </Grid>\n )}\n\n {providerPickerEnabled && (\n <Grid size={{ xs: 12, sm: 6 }}>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 w-full\">\n <InputLabel>{PROVIDER_CONTROL_LABEL}</InputLabel>\n <Select\n // `\"\"` while unconfigured, which MUI renders as an empty field. Deliberately not\n // pre-selected: the choice belongs to the operator, and a picker that opens already\n // showing one of the two answers records a decision nobody made the moment they touch\n // anything else on the page.\n value={providerKind ?? \"\"}\n onChange={(e) =>\n onProviderKindChange?.(e.target.value as ConnectorMappingViewProviderKind)\n }\n disabled={disableInputs}\n data-testid=\"provider-kind-select\"\n >\n <MenuItem value=\"plugin\">{PROVIDER_OPTION_LABEL.plugin}</MenuItem>\n <MenuItem value=\"connector\">{PROVIDER_OPTION_LABEL.connector}</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n )}\n\n {providerPickerEnabled && isPluginMode && (\n <Grid size={{ xs: 12, sm: 6 }}>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 w-full\">\n <InputLabel>{PLUGIN_PROVIDER_CONTROL_LABEL}</InputLabel>\n <Select\n value={selectedPluginExtensionId}\n onChange={(e) => onPluginProviderChange?.(e.target.value)}\n disabled={disableInputs}\n data-testid=\"plugin-provider-select\"\n >\n {/* Same reasoning as the connector picker's None: the route back to unselected, and\n only once there is something to unselect. */}\n {selectedPluginExtensionId ? (\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n ) : null}\n {pluginProviders.map((p) => (\n <MenuItem key={p.extensionId} value={p.extensionId}>\n {p.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n )}\n\n {!isPluginMode && (\n <Grid size={{ xs: 12, sm: 6 }}>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 w-full\">\n <InputLabel>{CONNECTOR_CONTROL_LABEL}</InputLabel>\n <Select\n value={selectedConnectorId}\n onChange={(e) => onConnectorChange(e.target.value)}\n data-testid=\"connector-select\"\n >\n {/*\n The route back to unselected. `onConnectorChange` and the page hooks already normalise\n `\"\"`, and clearing a module's connector is one of the behaviours this package was\n promoted to fix — but with only the connector rows below, a selected module had no\n control that could emit `\"\"`, so the fix was correct underneath and unreachable from\n the UI. Rendered only once something is selected, because an empty option on an empty\n picker is a second way of saying nothing.\n */}\n {selectedConnectorId ? (\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n ) : null}\n {connectors.map((c) => (\n <MenuItem key={c.id} value={c.id}>\n {c.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n )}\n\n <Grid size={12}>\n {!hasProvider ? (\n renderNoProviderEmptyState(effectiveKind, moduleLabel)\n ) : (\n <>\n {banner}\n <Card>\n <CardContent>\n <Grid container spacing={2}>\n <Grid size={12}>\n <Box className=\"border-border flex flex-row items-center gap-4 border-b px-2 pb-2\">\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary flex-1 font-semibold uppercase tracking-wider\"\n >\n Operation\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary font-semibold uppercase tracking-wider\"\n sx={{ width: 300 }}\n >\n Mapped Tool\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary font-semibold uppercase tracking-wider\"\n sx={{ width: 160 }}\n >\n Source\n </Typography>\n </Box>\n </Grid>\n\n {mappings.map((m) => {\n const canEditTranslation =\n !!m.mappedToolName &&\n m.canonicalRequestFields != null &&\n m.canonicalResponseFields != null;\n return (\n <Grid key={m.operationKey} size={12}>\n <Box\n className=\"flex flex-row items-center gap-4 px-2 py-1.5\"\n data-testid={`mapping-row-${m.operationKey}`}\n >\n <Box className=\"flex flex-1 items-center gap-2\">\n <Typography variant=\"subtitle2\">{m.label}</Typography>\n {m.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"primary\" variant=\"outlined\" />\n )}\n </Box>\n <Autocomplete\n sx={{ width: 300 }}\n size=\"small\"\n options={availableTools.map((t) => t.name)}\n value={m.mappedToolName ?? null}\n // A null `rowVersion` means no stored row exists yet — `\"\"` goes up so\n // the host upserts a fresh row rather than failing a concurrency check\n // against a version that was never issued.\n onChange={(_, next) =>\n onUpdateMapping(m.operationKey, next ?? \"\", m.rowVersion ?? \"\")\n }\n disabled={disableInputs}\n disableClearable={false}\n clearText=\"Not mapped\"\n renderInput={(params) => (\n <TextField\n {...params}\n variant=\"filled\"\n label=\"Tool\"\n placeholder=\"Type to search…\"\n className=\"surface mb-0\"\n slotProps={{ inputLabel: { shrink: true } }}\n data-testid={`mapping-tool-input-${m.operationKey}`}\n />\n )}\n renderOption={(props, option) => {\n const tool = availableTools.find((t) => t.name === option);\n return (\n <Box component=\"li\" {...props} key={option}>\n <Box>\n <Typography variant=\"body2\">{option}</Typography>\n {tool?.description && (\n <Typography variant=\"caption\" className=\"text-text-secondary\">\n {tool.description}\n </Typography>\n )}\n </Box>\n </Box>\n );\n }}\n />\n {canEditTranslation ? (\n <Tooltip title=\"Configure field translation\">\n <IconButton\n size=\"small\"\n onClick={() =>\n onEditTranslation(m.operationKey, {\n requestFieldMap: m.requestFieldMap ?? null,\n responseFieldPaths: m.responseFieldPaths ?? null,\n staticRequestFields: m.staticRequestFields ?? null,\n })\n }\n disabled={disableInputs}\n aria-label=\"Configure field translation\"\n data-testid={`edit-translation-${m.operationKey}`}\n >\n <NiSettings size=\"small\" />\n </IconButton>\n </Tooltip>\n ) : (\n // A spacer, not nothing. Without it the source column shifts left on\n // rows with no translation affordance and the table stops being a table.\n <Box sx={{ width: 32, flexShrink: 0 }} />\n )}\n <Box className=\"flex items-center gap-1.5\" sx={{ width: 160 }}>\n {renderSourceChip(m)}\n {m.requiresReview && (\n <Tooltip title=\"AI suggestion, low confidence — please confirm.\">\n <Box\n className=\"bg-warning\"\n sx={{ width: 8, height: 8, borderRadius: \"50%\" }}\n />\n </Tooltip>\n )}\n </Box>\n </Box>\n </Grid>\n );\n })}\n </Grid>\n </CardContent>\n </Card>\n </>\n )}\n </Grid>\n </Grid>\n );\n}\n","/**\n * The request-template placeholder grammar, mirrored from the host's `ToolMappingRequestTemplates`\n * (CoreConnect.Application.Common). A placeholder is a JSON string VALUE that is exactly `{{name}}`;\n * anything else containing `{{` is an embedded placeholder, which the host refuses at save\n * (CON_MAP_023). Kept equal to the host pattern so the editor never passes what the save refuses.\n */\nconst PLACEHOLDER = /^\\{\\{([A-Za-z_][A-Za-z0-9_.-]*)\\}\\}$/;\n\n/** At most this many templates per mapping (spec 2026-09-28 section 1). */\nexport const MAX_REQUEST_TEMPLATES = 4;\n\nexport interface ParsedRequestTemplate {\n /** The parsed object, or `null` when the text is not a JSON object. */\n value: Record<string, unknown> | null;\n /** Why the template cannot be saved, or `null`. */\n error: string | null;\n /** Whole-value placeholders, once each, in first-seen order. */\n placeholders: string[];\n}\n\nexport function parseRequestTemplate(text: string): ParsedRequestTemplate {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return { value: null, error: \"Not valid JSON.\", placeholders: [] };\n }\n\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return { value: null, error: \"A template must be a JSON object.\", placeholders: [] };\n }\n\n const placeholders: string[] = [];\n const embedded: string[] = [];\n walkStrings(parsed, (value) => {\n const match = PLACEHOLDER.exec(value);\n if (match) {\n if (!placeholders.includes(match[1])) placeholders.push(match[1]);\n } else if (value.includes(\"{{\")) {\n embedded.push(value);\n }\n });\n\n return {\n value: parsed as Record<string, unknown>,\n error:\n embedded.length > 0\n ? `A placeholder must be the whole value, like \"{{companyName}}\": \"${embedded[0]}\".`\n : null,\n placeholders,\n };\n}\n\nfunction walkStrings(value: unknown, onString: (value: string) => void): void {\n if (typeof value === \"string\") {\n onString(value);\n } else if (Array.isArray(value)) {\n value.forEach((item) => walkStrings(item, onString));\n } else if (value !== null && typeof value === \"object\") {\n Object.values(value).forEach((item) => walkStrings(item, onString));\n }\n}\n\n/** Row-field bounds, mirrored from the host (spec 2026-09-28 section 2, CON_MAP_025). */\nexport const MAX_ROW_FIELDS_PER_FIELD = 32;\nexport const MAX_ROW_FIELD_TEXT_LENGTH = 256;\n\n/** Why a row-field path cannot be saved, or `null`. A blank path is dropped on save, not an error. */\nexport function rowFieldPathError(path: string): string | null {\n const trimmed = path.trim();\n if (trimmed.length === 0) return null;\n if (!trimmed.startsWith(\"$.\")) return 'A path must start with \"$.\", e.g. $.company_domain.';\n if (trimmed.length > MAX_ROW_FIELD_TEXT_LENGTH) return `A path can be at most ${MAX_ROW_FIELD_TEXT_LENGTH} characters.`;\n return null;\n}\n\nexport const DUPLICATE_ROW_FIELD_KEY_ERROR = \"This key is already used\";\n\n/**\n * Indexes of the rows whose key repeats an earlier row's in the same Object field. Keys compare\n * trimmed (the wire form trims them) and case-sensitively; a blank key is dropped on save, not a\n * duplicate. Saving collapses same-key rows into one and the last wins silently, so the editor flags\n * the later ones and blocks Save instead.\n */\nexport function duplicateRowFieldKeyIndexes(rows: readonly { key: string }[]): Set<number> {\n const seen = new Set<string>();\n const duplicates = new Set<number>();\n rows.forEach(({ key }, index) => {\n const trimmed = key.trim();\n if (trimmed.length === 0) return;\n if (seen.has(trimmed)) duplicates.add(index);\n else seen.add(trimmed);\n });\n return duplicates;\n}\n\n","import { Box, Button, Chip, FilledInput, FormControl, IconButton, InputLabel, Typography } from \"../ui\";\nimport { NiBinEmpty, NiChevronDownSmall, NiChevronUpSmall, NiPlus } from \"../../icons/nexture\";\nimport {\n DUPLICATE_ROW_FIELD_KEY_ERROR,\n MAX_REQUEST_TEMPLATES,\n MAX_ROW_FIELDS_PER_FIELD,\n MAX_ROW_FIELD_TEXT_LENGTH,\n duplicateRowFieldKeyIndexes,\n parseRequestTemplate,\n rowFieldPathError,\n} from \"./requestTemplates\";\nimport type { ConnectorCanonicalField } from \"./types\";\n\n/** One editable template: a stable client id (React key only) and the raw JSON text. */\nexport interface TemplateRow {\n id: number;\n text: string;\n}\n\n/** One editable row field: a stable client id, the canonical row key and its path. */\nexport interface RowFieldRow {\n id: number;\n key: string;\n path: string;\n}\n\nexport const REQUEST_TEMPLATES_CAPTION =\n \"The first template whose placeholders all have values is sent as the request. Leave empty to use the field map.\";\n\ninterface RequestTemplatesSectionProps {\n rows: TemplateRow[];\n canonicalRequestFields: ConnectorCanonicalField[];\n onChange: (index: number, text: string) => void;\n onAdd: () => void;\n onRemove: (index: number) => void;\n onMove: (index: number, direction: -1 | 1) => void;\n}\n\n/**\n * The ordered list of request templates (spec section 3). Each area is validated as a JSON object\n * as it is typed and shows the placeholders it uses, marking in red any that is not a canonical\n * request field of the operation.\n */\nexport function RequestTemplatesSection({\n rows,\n canonicalRequestFields,\n onChange,\n onAdd,\n onRemove,\n onMove,\n}: RequestTemplatesSectionProps) {\n const canonicalNames = new Set(canonicalRequestFields.map((field) => field.name));\n\n return (\n <>\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-2\">\n Request templates\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-3 block\">\n {REQUEST_TEMPLATES_CAPTION}\n </Typography>\n\n {rows.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic mb-3\">\n No request templates configured.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3 mb-3\">\n {rows.map((row, index) => {\n const parsed = row.text.trim().length === 0 ? null : parseRequestTemplate(row.text);\n return (\n <Box key={row.id} className=\"flex flex-col gap-1\">\n <Box className=\"flex flex-row items-start gap-2\">\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>{`Template ${index + 1}`}</InputLabel>\n <FilledInput\n multiline\n minRows={4}\n value={row.text}\n onChange={(e) => onChange(index, e.target.value)}\n inputProps={{ \"aria-label\": `Request template ${index + 1}` }}\n sx={{ fontFamily: \"monospace\" }}\n />\n </FormControl>\n <Box className=\"flex flex-col\">\n <IconButton\n aria-label={`Move template ${index + 1} up`}\n color=\"inherit\"\n disabled={index === 0}\n onClick={() => onMove(index, -1)}\n >\n <NiChevronUpSmall size=\"small\" />\n </IconButton>\n <IconButton\n aria-label={`Move template ${index + 1} down`}\n color=\"inherit\"\n disabled={index === rows.length - 1}\n onClick={() => onMove(index, 1)}\n >\n <NiChevronDownSmall size=\"small\" />\n </IconButton>\n <IconButton aria-label={`Remove template ${index + 1}`} color=\"inherit\" onClick={() => onRemove(index)}>\n <NiBinEmpty size=\"small\" />\n </IconButton>\n </Box>\n </Box>\n {parsed?.error && (\n <Typography variant=\"caption\" color=\"error\" role=\"alert\">\n {parsed.error}\n </Typography>\n )}\n {parsed && parsed.placeholders.length > 0 && (\n <Box className=\"flex flex-wrap gap-1\">\n {parsed.placeholders.map((name) =>\n canonicalNames.has(name) ? (\n <Chip key={name} label={`{{${name}}}`} size=\"small\" variant=\"outlined\" />\n ) : (\n <Chip\n key={name}\n label={`{{${name}}} is not a request field`}\n size=\"small\"\n color=\"error\"\n variant=\"outlined\"\n />\n ),\n )}\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n\n <Button\n variant=\"outlined\"\n color=\"grey\"\n size=\"small\"\n onClick={onAdd}\n disabled={rows.length >= MAX_REQUEST_TEMPLATES}\n startIcon={<NiPlus size=\"small\" />}\n sx={{ alignSelf: \"flex-start\" }}\n >\n Add template\n </Button>\n </>\n );\n}\n\ninterface RowFieldsSectionProps {\n objectFields: ConnectorCanonicalField[];\n rows: Record<string, RowFieldRow[]>;\n onChange: (field: string, index: number, patch: Partial<RowFieldRow>) => void;\n onAdd: (field: string) => void;\n onRemove: (field: string, index: number) => void;\n}\n\n/**\n * One key/path table per Object-kind canonical response field (spec section 3): a free-text row key\n * and a path in the same grammar as the response paths, read from one row.\n */\nexport function RowFieldsSection({ objectFields, rows, onChange, onAdd, onRemove }: RowFieldsSectionProps) {\n return (\n <>\n {objectFields.map((field) => {\n const fieldRows = rows[field.name] ?? [];\n const duplicateKeys = duplicateRowFieldKeyIndexes(fieldRows);\n return (\n <Box key={field.name} className=\"flex flex-col gap-2 mb-3\">\n <Typography variant=\"h6\" component=\"h2\">\n {`Row fields — ${field.name}`}\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary block\">\n Rename the fields inside each row of this response. Each path is read from one row, e.g.{\" \"}\n <code>$.company_domain</code>; once you list any, the fields you do not list are dropped.\n </Typography>\n {fieldRows.map((row, index) => (\n <Box key={row.id} className=\"flex flex-row items-start gap-3\">\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0\" sx={{ width: 200, flexShrink: 0 }}>\n <InputLabel>Row field</InputLabel>\n <FilledInput\n value={row.key}\n onChange={(e) => onChange(field.name, index, { key: e.target.value })}\n inputProps={{ \"aria-label\": `Row field name ${index + 1} for ${field.name}`, maxLength: MAX_ROW_FIELD_TEXT_LENGTH }}\n error={duplicateKeys.has(index)}\n placeholder=\"e.g. domain\"\n />\n {duplicateKeys.has(index) && (\n <Typography variant=\"caption\" color=\"error\" role=\"alert\">\n {DUPLICATE_ROW_FIELD_KEY_ERROR}\n </Typography>\n )}\n </FormControl>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>JSON path in the row</InputLabel>\n <FilledInput\n value={row.path}\n onChange={(e) => onChange(field.name, index, { path: e.target.value })}\n inputProps={{ \"aria-label\": `Row field path ${index + 1} for ${field.name}`, maxLength: MAX_ROW_FIELD_TEXT_LENGTH }}\n error={rowFieldPathError(row.path) !== null}\n placeholder=\"e.g. $.company_domain\"\n />\n {rowFieldPathError(row.path) && (\n <Typography variant=\"caption\" color=\"error\" role=\"alert\">\n {rowFieldPathError(row.path)}\n </Typography>\n )}\n </FormControl>\n <IconButton\n aria-label={`Remove row field ${index + 1} for ${field.name}`}\n color=\"inherit\"\n onClick={() => onRemove(field.name, index)}\n sx={{ mt: 1 }}\n >\n <NiBinEmpty size=\"small\" />\n </IconButton>\n </Box>\n ))}\n <Button\n variant=\"outlined\"\n color=\"grey\"\n size=\"small\"\n onClick={() => onAdd(field.name)}\n startIcon={<NiPlus size=\"small\" />}\n disabled={fieldRows.length >= MAX_ROW_FIELDS_PER_FIELD}\n sx={{ alignSelf: \"flex-start\" }}\n aria-label={`Add row field to ${field.name}`}\n >\n Add row field\n </Button>\n </Box>\n );\n })}\n </>\n );\n}\n","import { useRef, useState } from \"react\";\n\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n Checkbox,\n Chip,\n Collapse,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FilledInput,\n FormControl,\n FormControlLabel,\n IconButton,\n InputLabel,\n Typography,\n} from \"../ui\";\nimport {\n NiBinEmpty,\n NiCheck,\n NiChevronDownSmall,\n NiChevronUpSmall,\n NiExclamationHexagon,\n NiPlus,\n NiSettings,\n NiSparkle,\n} from \"../../icons/nexture\";\nimport type {\n ConnectorCanonicalField,\n ConnectorMappingSuggestionResult,\n TestToolMappingRequest,\n TestToolMappingResult,\n} from \"./types\";\nimport {\n RequestTemplatesSection,\n RowFieldsSection,\n type RowFieldRow,\n type TemplateRow,\n} from \"./ConnectorMappingTemplateSections\";\nimport {\n MAX_REQUEST_TEMPLATES,\n duplicateRowFieldKeyIndexes,\n parseRequestTemplate,\n rowFieldPathError,\n} from \"./requestTemplates\";\n\n/**\n * The reserved request-field-map value meaning \"do not send this canonical field to the tool at\n * all\". The host reads it in `ConnectorRequestFieldSuppression` (CoreConnect.Application.Common);\n * this is the editor's copy of the same literal, exported so consumers and tests name it rather\n * than retyping it.\n *\n * <p><b>Why an operator needs it.</b> A blank input means \"identity - send this field under its\n * canonical name\", and until the host learned this sentinel that was the ONLY thing the request\n * side could say besides a rename. So an operation pointed at a tool with no property for one of\n * its canonical inputs sent it anyway, and a tool whose input schema is\n * <code>additionalProperties: false</code> rejects the entire call for the unknown key - not the\n * field, the call. Ticking \"Do not send\" writes this value; the host's translator then omits the\n * field from the request.</p>\n *\n * <p><b>Why this literal.</b> It has to be a value no tool could declare as an input property name,\n * or a genuine rename onto that name would be swallowed. Parentheses are the discriminator: they\n * are not valid in an identifier in any mainstream language, and across the tool inventory the\n * platform has discovered, no input property name contains one. They also make the row read as an\n * instruction rather than a name.</p>\n */\nexport const SUPPRESS_REQUEST_FIELD_VALUE = \"(suppress)\";\n\n/**\n * Whether a stored request-field-map value is the suppression sentinel. Trimmed and\n * case-insensitive, matching the host so a value saved here round-trips to a ticked box.\n */\nfunction isSuppressed(value: string | undefined): boolean {\n return value?.trim().toLowerCase() === SUPPRESS_REQUEST_FIELD_VALUE;\n}\n\n/**\n * The template half of a save (spec 2026-09-28 sections 1-3), delivered as `onSave`'s optional fourth\n * argument. A member is PRESENT only when its section was shown; `null` means the operator left it\n * empty (the host clears the column).\n */\nexport interface ConnectorMappingTranslationExtras {\n requestTemplates?: Record<string, unknown>[] | null;\n responseItemFieldPaths?: Record<string, Record<string, string>> | null;\n}\n\nexport interface ConnectorMappingTranslationEditorProps {\n open: boolean;\n\n /**\n * Human-readable operation label for the dialog title (e.g. \"Get File\").\n *\n * Optional because it is derived from a looked-up operation that may not be found: every caller\n * passes `string | undefined`. The contract claimed required while reality was optional, so this\n * states the truth rather than changing any runtime value.\n */\n operationLabel?: string;\n\n /**\n * Tool name the mapping currently points at — shown in the dialog header for context.\n *\n * Optional and nullable because the editor opens for an operation that may not be mapped yet:\n * every caller passes `string | null | undefined`.\n */\n toolName?: string | null;\n\n /**\n * Canonical request fields the editor renders one input per.\n *\n * Optional and nullable: an operation may declare no canonical schema, and the editor already\n * gates on their presence. See the coalescing note in the component body — this is not cosmetic.\n */\n canonicalRequestFields?: ConnectorCanonicalField[] | null;\n\n /** Canonical response fields the editor renders one JSON-path input per. Same nullability. */\n canonicalResponseFields?: ConnectorCanonicalField[] | null;\n\n /** Currently-persisted request-field translation, or `null` if the operator hasn't supplied one. */\n requestFieldMap: Record<string, string> | null;\n\n /** Currently-persisted response-field translation, or `null` if the operator hasn't supplied one. */\n responseFieldPaths: Record<string, string> | null;\n\n /**\n * Currently-persisted static request parameters (tool field name → constant literal value), or\n * `null` if the operator hasn't supplied any. Seeds the \"Static request parameters\" rows.\n */\n staticRequestFields: Record<string, string> | null;\n\n /**\n * Stored request templates, or `null` for none. **Leave `undefined` to hide the \"Request templates\"\n * section**: a host whose save path does not forward templates must not show an editor whose edits\n * would silently vanish.\n */\n requestTemplates?: unknown[] | null;\n\n /** Stored row fields, or `null`. Leave `undefined` to hide the \"Row fields\" section. Same rule. */\n responseItemFieldPaths?: Record<string, Record<string, string>> | null;\n\n /**\n * Called with the operator's translation dictionaries when they click Save. Empty inputs are\n * stripped before this fires; if every input on a side was blank, that side is delivered as `null`\n * rather than `{}` so the consumer can pass it straight through and the BE writes a NULL column\n * (which the resolver treats as \"no operator override\" and falls back to the connector's\n * vendor-default translation). A populated dictionary means \"rewrite these fields explicitly\"; the\n * BE persists it verbatim and the resolver applies it on top of vendor defaults.\n *\n * `staticRequestFields` carries the constant tool-request parameters (e.g. `{ method: \"get\" }`);\n * same null-vs-populated semantics — `null` when every static row was left blank.\n *\n * `extras` is passed only when the host showed at least one of the template sections.\n */\n onSave: (\n requestFieldMap: Record<string, string> | null,\n responseFieldPaths: Record<string, string> | null,\n staticRequestFields: Record<string, string> | null,\n extras?: ConnectorMappingTranslationExtras,\n ) => void;\n\n onCancel: () => void;\n\n /**\n * Optional. When provided, the editor renders a Test section below the field tables and a \"Test\n * mapping\" button inside it. The consumer supplies this callback so the editor never owns a\n * network call. Invoked with the sample args and the current (unsaved) field maps — stripped to\n * `null` when every input is blank, matching `onSave`.\n *\n * `extras` is the same optional trailing argument `onSave` takes: the DRAFT request templates and\n * row fields, passed only when the host showed at least one of those sections, so a templated\n * mapping can be tested before it is saved. A host that declares only the first parameter still\n * compiles and simply never sees them.\n */\n onTestMapping?: (\n request: TestToolMappingRequest,\n extras?: ConnectorMappingTranslationExtras,\n ) => Promise<TestToolMappingResult>;\n\n /**\n * Optional. When provided, the editor renders an \"Auto-configure\" button in the Test section. The\n * consumer invokes the AI suggestion endpoint with the sample inputs the Test section collects,\n * then returns the suggested field maps so the editor can populate the request / response inputs.\n * The operator reviews and clicks Save.\n *\n * @param sampleArgs - Sample values the operator typed, one entry per canonical request field.\n * @returns The suggestion result (success/error + proposed maps).\n */\n onSuggestTranslation?: (sampleArgs: Record<string, unknown>) => Promise<ConnectorMappingSuggestionResult>;\n}\n\n/**\n * Per-mapping translation editor — surfaced when the operator picks a tool whose schema doesn't\n * match the operation's canonical request/response field names. Renders two stacked tables\n * (request / response): left column shows the canonical field's name + kind chip + required\n * indicator; right column captures the operator-supplied tool field name (request side) or JSON\n * path (response side).\n *\n * <p><b>Identity semantics.</b> An empty input on a field means \"identity — pass the canonical name\n * through unchanged\". On Save the editor strips empty values; if every input on a side was blank,\n * that side is delivered to `onSave` as <code>null</code> (not <code>{}</code>) so the BE writes a\n * NULL column. The resolver then treats the NULL as \"no operator override\" and falls back to the\n * connector's vendor-default translation; a populated dictionary means \"rewrite these fields\n * explicitly\" and applies on top of the vendor default.</p>\n *\n * <p><b>State seeding.</b> The consumer page mounts/unmounts this dialog every time the editor opens\n * (the `open` prop is always `true` in practice — the parent gates rendering via conditional mount),\n * so local state initialises lazily from the props on each mount. This avoids the \"setState in\n * useEffect\" pattern the eslint react-hooks ruleset blocks, AND keeps the operator's in-flight edits\n * sovereign once the dialog is open — a concurrent refresh of the mapping row doesn't clobber what\n * they're typing.</p>\n *\n * <p><b>Promoted, not designed here.</b> This file existed FOUR times — the host's gogo-ui adapter\n * plus `self-healing`, `tech` and `timesheets` — and the copies had already drifted. Three\n * differences were adjudicated on the way in, and each is a reason the duplication was expensive:</p>\n *\n * <ol>\n * <li><b>The Test button is gated on `onTestMapping`.</b> The enclosing block is gated on\n * <code>(onTestMapping || onSuggestTranslation)</code>, so without the inner guard a consumer\n * supplying only <code>onSuggestTranslation</code> rendered a \"Test mapping\" button whose\n * handler returns immediately — a DEAD CONTROL. `self-healing` shipped that; `tech` and\n * `timesheets` had fixed it. Nothing noticed, because there was no single source to notice\n * it against.</li>\n * <li><b>Backgrounds come from the theme (`action.hover`), never a hardcoded\n * <code>rgba()</code>.</b> A literal <code>rgba(0,0,0,0.03)</code> is invisible in dark mode\n * and is what `coreconnect/no-hardcoded-colors` exists to stop.</li>\n * <li><b>No emoji in chip labels.</b> The chips already carry an icon and a semantic colour, so\n * the emoji was a third, untranslatable, screen-reader-hostile encoding of the same state.</li>\n * </ol>\n *\n * <p>The null tolerance below came from the HOST copy, which was the most hardened of the four.\n * `coreconnect/no-local-mapping-editor` stops a fifth being written.</p>\n */\nexport function ConnectorMappingTranslationEditorView({\n open,\n operationLabel,\n toolName,\n // Renamed + coalesced below rather than defaulted here: a default parameter only covers\n // `undefined`, and callers pass `null` for an operation with no canonical schema. The six usages\n // further down all call .length / .map directly, so before these props were typed honestly this\n // was an unguarded TypeError waiting on any unmapped operation.\n canonicalRequestFields: canonicalRequestFieldsProp,\n canonicalResponseFields: canonicalResponseFieldsProp,\n requestFieldMap,\n responseFieldPaths,\n staticRequestFields,\n requestTemplates,\n responseItemFieldPaths,\n onSave,\n onCancel,\n onTestMapping,\n onSuggestTranslation,\n}: ConnectorMappingTranslationEditorProps) {\n // Empty array flows straight into the \"No request/response fields\" branch the view already has.\n const canonicalRequestFields = canonicalRequestFieldsProp ?? [];\n const canonicalResponseFields = canonicalResponseFieldsProp ?? [];\n // Lazy initialisers seed from the props once on mount. The consumer page is expected to re-mount\n // this view (via conditional rendering keyed on the targeted row) when the operator picks a\n // different row, so each invocation gets a fresh state machine without the useEffect-driven reset\n // pattern flagged by react-hooks/set-state-in-effect.\n const [requestValues, setRequestValues] = useState<Record<string, string>>(() => ({\n ...(requestFieldMap ?? {}),\n }));\n const [responseValues, setResponseValues] = useState<Record<string, string>>(() => ({\n ...(responseFieldPaths ?? {}),\n }));\n // Static request parameters are arbitrary tool-field → constant-value pairs with no canonical\n // counterpart, so they're held as an ordered row list (each row owns an editable key) rather than\n // the canonical-field-keyed record used above. Each row carries a stable client-side id so React\n // keys survive add/remove without reusing array indices (index keys make controlled inputs and\n // focus jump to the wrong row after a deletion).\n const staticRowIdRef = useRef(0);\n const [staticRows, setStaticRows] = useState<StaticRow[]>(() =>\n Object.entries(staticRequestFields ?? {}).map(([key, value]) => ({\n id: staticRowIdRef.current++,\n key,\n value,\n })),\n );\n const [sampleArgs, setSampleArgs] = useState<Record<string, string>>(() => ({}));\n const [testResult, setTestResult] = useState<TestToolMappingResult | null>(null);\n const [isTesting, setIsTesting] = useState(false);\n const [rawJsonExpanded, setRawJsonExpanded] = useState(false);\n const [suggestionError, setSuggestionError] = useState<string | null>(null);\n const [isSuggesting, setIsSuggesting] = useState(false);\n\n const showTemplates = requestTemplates !== undefined;\n const objectResponseFields = canonicalResponseFields.filter((field) => field.kind === \"Object\");\n // Only true when the section actually renders; a hidden section must not clear stored config the\n // operator never saw, so it is omitted from the save extras (undefined, not null).\n const showRowFields = responseItemFieldPaths !== undefined && objectResponseFields.length > 0;\n\n const templateRowIdRef = useRef(0);\n const [templateRows, setTemplateRows] = useState<TemplateRow[]>(() =>\n (requestTemplates ?? []).flatMap((template) => {\n // A stored element that cannot be shown (undefined, circular) is skipped rather than thrown on.\n let text: string | undefined;\n try {\n text = JSON.stringify(template, null, 2);\n } catch {\n text = undefined;\n }\n return text === undefined ? [] : [{ id: templateRowIdRef.current++, text }];\n }),\n );\n const rowFieldIdRef = useRef(0);\n const [rowFieldRows, setRowFieldRows] = useState<Record<string, RowFieldRow[]>>(() =>\n Object.fromEntries(\n Object.entries(responseItemFieldPaths ?? {}).map(([field, paths]) => [\n field,\n Object.entries(paths).map(([key, path]) => ({ id: rowFieldIdRef.current++, key, path })),\n ]),\n ),\n );\n const hasInvalidTemplate =\n (showTemplates &&\n templateRows.some((row) => row.text.trim().length > 0 && parseRequestTemplate(row.text).error !== null)) ||\n (showRowFields &&\n objectResponseFields.some(\n (field) =>\n (rowFieldRows[field.name] ?? []).some((row) => rowFieldPathError(row.path) !== null) ||\n duplicateRowFieldKeyIndexes(rowFieldRows[field.name] ?? []).size > 0,\n ));\n\n const handleTemplateChange = (index: number, text: string) =>\n setTemplateRows((prev) => prev.map((row, i) => (i === index ? { ...row, text } : row)));\n const handleAddTemplate = () =>\n setTemplateRows((prev) =>\n prev.length >= MAX_REQUEST_TEMPLATES ? prev : [...prev, { id: templateRowIdRef.current++, text: \"\" }],\n );\n const handleRemoveTemplate = (index: number) => setTemplateRows((prev) => prev.filter((_, i) => i !== index));\n const handleMoveTemplate = (index: number, direction: -1 | 1) =>\n setTemplateRows((prev) => {\n const target = index + direction;\n if (target < 0 || target >= prev.length) return prev;\n const next = [...prev];\n [next[index], next[target]] = [next[target], next[index]];\n return next;\n });\n const handleRowFieldChange = (field: string, index: number, patch: Partial<RowFieldRow>) =>\n setRowFieldRows((prev) => ({\n ...prev,\n [field]: (prev[field] ?? []).map((row, i) => (i === index ? { ...row, ...patch } : row)),\n }));\n const handleAddRowField = (field: string) =>\n setRowFieldRows((prev) => ({\n ...prev,\n [field]: [...(prev[field] ?? []), { id: rowFieldIdRef.current++, key: \"\", path: \"\" }],\n }));\n const handleRemoveRowField = (field: string, index: number) =>\n setRowFieldRows((prev) => ({ ...prev, [field]: (prev[field] ?? []).filter((_, i) => i !== index) }));\n\n const handleRequestChange = (canonicalName: string, value: string) => {\n setRequestValues((prev) => ({ ...prev, [canonicalName]: value }));\n };\n\n /**\n * Ticking \"Do not send\" writes the sentinel; unticking clears the input back to blank rather than\n * restoring whatever name was typed before. Blank is the identity default, so unticking returns\n * the row to the state it would have had if the operator had never touched it - which is what the\n * control's label promises. Remembering and restoring a prior rename would be a second piece of\n * hidden state the row does not show.\n */\n const handleRequestSuppressToggle = (canonicalName: string, suppress: boolean) => {\n setRequestValues((prev) => ({\n ...prev,\n [canonicalName]: suppress ? SUPPRESS_REQUEST_FIELD_VALUE : \"\",\n }));\n };\n\n const handleResponseChange = (canonicalName: string, value: string) => {\n setResponseValues((prev) => ({ ...prev, [canonicalName]: value }));\n };\n\n const handleStaticChange = (index: number, patch: Partial<StaticRow>) => {\n setStaticRows((prev) => prev.map((row, i) => (i === index ? { ...row, ...patch } : row)));\n };\n\n const handleAddStaticRow = () => {\n setStaticRows((prev) => [...prev, { id: staticRowIdRef.current++, key: \"\", value: \"\" }]);\n };\n\n const handleRemoveStaticRow = (index: number) => {\n setStaticRows((prev) => prev.filter((_, i) => i !== index));\n };\n\n // Shared by save and test. Undefined when neither section is shown, so a host that forwards\n // nothing is told nothing; a member is present only when its own section is shown.\n const buildExtras = (): ConnectorMappingTranslationExtras | undefined => {\n if (!showTemplates && !showRowFields) return undefined;\n const extras: ConnectorMappingTranslationExtras = {};\n if (showTemplates) extras.requestTemplates = templateRowsToWire(templateRows);\n if (showRowFields) extras.responseItemFieldPaths = rowFieldRowsToWire(rowFieldRows, objectResponseFields);\n return extras;\n };\n\n const handleSave = () => {\n // Empty inputs collapse to `null` (not `{}`) so the BE can tell \"no operator override\" from\n // \"operator explicitly set zero rewrites\". See the `onSave` JSDoc for the resolver-side\n // semantics.\n const requestMap = stripEmpty(requestValues);\n const responseMap = stripEmpty(responseValues);\n const staticMap = staticRowsToMap(staticRows);\n const request = Object.keys(requestMap).length === 0 ? null : requestMap;\n const response = Object.keys(responseMap).length === 0 ? null : responseMap;\n const statics = Object.keys(staticMap).length === 0 ? null : staticMap;\n\n const extras = buildExtras();\n if (extras === undefined) {\n onSave(request, response, statics);\n return;\n }\n onSave(request, response, statics, extras);\n };\n\n const handleTest = async () => {\n if (!onTestMapping) return;\n setIsTesting(true);\n setTestResult(null);\n try {\n const requestMap = stripEmpty(requestValues);\n const responseMap = stripEmpty(responseValues);\n // Forward the DRAFT static params (the same `staticRowsToMap` collapse `handleSave` uses) so\n // the dry-run exercises the unsaved `method`/`state` discriminator the operator just typed —\n // the whole point of testing before saving.\n const staticMap = staticRowsToMap(staticRows);\n const request: TestToolMappingRequest = {\n sampleArgs: Object.fromEntries(\n Object.entries(sampleArgs).filter(([, v]) => v.trim().length > 0),\n ),\n requestFieldMap: Object.keys(requestMap).length === 0 ? null : requestMap,\n responseFieldPaths: Object.keys(responseMap).length === 0 ? null : responseMap,\n staticRequestFields: Object.keys(staticMap).length === 0 ? null : staticMap,\n };\n const extras = buildExtras();\n const result = extras === undefined ? await onTestMapping(request) : await onTestMapping(request, extras);\n setTestResult(result);\n } catch {\n setTestResult({\n success: false,\n error: \"An unexpected error occurred while running the test.\",\n rawResponseJson: null,\n extractedFields: [],\n });\n } finally {\n setIsTesting(false);\n }\n };\n\n const handleSuggest = async () => {\n if (!onSuggestTranslation) return;\n setIsSuggesting(true);\n setSuggestionError(null);\n try {\n const collectedSampleArgs: Record<string, unknown> = Object.fromEntries(\n Object.entries(sampleArgs).filter(([, v]) => v.trim().length > 0),\n );\n const result: ConnectorMappingSuggestionResult = await onSuggestTranslation(collectedSampleArgs);\n if (result.success) {\n // Merge the AI-proposed maps over current state so filled inputs are visible.\n setRequestValues((prev) => ({ ...prev, ...result.requestFieldMap }));\n setResponseValues((prev) => ({ ...prev, ...result.responseFieldPaths }));\n } else {\n setSuggestionError(result.error ?? \"Auto-configure failed.\");\n }\n } catch {\n setSuggestionError(\"An unexpected error occurred during auto-configure.\");\n } finally {\n setIsSuggesting(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onCancel} maxWidth=\"md\" fullWidth>\n <DialogTitle>Configure Field Translation — {operationLabel}</DialogTitle>\n <DialogContent>\n <Box className=\"flex flex-col gap-2 pt-2\">\n <Typography variant=\"body2\" className=\"text-text-secondary\">\n Mapping operation <strong>{operationLabel}</strong> to tool <strong>{toolName}</strong>.\n Leave a field blank to pass the canonical name through unchanged (identity translation).\n </Typography>\n\n {/*\n * A CSS grid via `sx`, not <Grid>. `size={{ xs, md }}` is the Grid v2 API, which does not\n * exist under this package's declared `@mui/material` peer of `>=5` - on v5 the prop is\n * unknown and leaks to the DOM. Responsive `sx` values behave identically across v5, v6\n * and v7, so the promoted component stays agnostic to the major the host ships. Column\n * split and gutter are unchanged: `md` is MUI's own breakpoint, and `gap: 5` is the same\n * 40px the previous `spacing={5}` produced.\n */}\n <Box\n className=\"pt-3\"\n sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 5 }}\n >\n <Box>\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-3\">\n Request fields\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-2 block\">\n Map each canonical request field to the tool&apos;s actual input field name. If the\n tool has no property for a field, tick <strong>Do not send this field</strong> —\n many tools reject a whole call for one argument they do not recognise.\n </Typography>\n {canonicalRequestFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic\">\n No request fields declared.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3\">\n {canonicalRequestFields.map((field) => (\n <FieldRow\n key={field.name}\n field={field}\n value={requestValues[field.name] ?? \"\"}\n onChange={(v) => handleRequestChange(field.name, v)}\n placeholder=\"Same as canonical\"\n inputLabel=\"Tool field name\"\n onSuppressToggle={(v) => handleRequestSuppressToggle(field.name, v)}\n />\n ))}\n </Box>\n )}\n </Box>\n\n <Box>\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-3\">\n Response fields\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-2 block\">\n Map each canonical response field to a JSON path against the tool&apos;s response.\n </Typography>\n {canonicalResponseFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic\">\n No response fields declared.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3\">\n {canonicalResponseFields.map((field) => (\n <FieldRow\n key={field.name}\n field={field}\n value={responseValues[field.name] ?? \"\"}\n onChange={(v) => handleResponseChange(field.name, v)}\n placeholder={'e.g. \"$.content\" or \"$.contents[0].text\"'}\n inputLabel=\"JSON path\"\n />\n ))}\n </Box>\n )}\n </Box>\n </Box>\n\n <Divider className=\"my-4\" />\n\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-2\">\n Static request parameters\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-3 block\">\n Constant values sent with every call, regardless of the canonical input — e.g. a\n consolidated tool&apos;s <code>method</code> discriminator (<code>method</code> →{\" \"}\n <code>get</code>). These are injected after the mapped request fields.\n </Typography>\n\n {staticRows.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic mb-3\">\n No static parameters configured.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3 mb-3\">\n {staticRows.map((row, index) => (\n <Box key={row.id} className=\"flex flex-row items-start gap-3\">\n <FormControl\n variant=\"filled\"\n size=\"medium\"\n className=\"surface mb-0\"\n sx={{ width: 240, flexShrink: 0 }}\n >\n <InputLabel>Tool field name</InputLabel>\n <FilledInput\n value={row.key}\n onChange={(e) => handleStaticChange(index, { key: e.target.value })}\n placeholder=\"e.g. method\"\n />\n </FormControl>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>Constant value</InputLabel>\n <FilledInput\n value={row.value}\n onChange={(e) => handleStaticChange(index, { value: e.target.value })}\n placeholder=\"e.g. get\"\n />\n </FormControl>\n {/*\n * `inherit`, not the `grey` the four copies used, and deliberately so. gogo-ui has\n * no `MuiIconButton-*Grey` rule (the only `.MuiIconButton-root` block sets sizes),\n * and MUI emits no styles for a `main`-less palette entry, so `color=\"grey\"` fell\n * through to the root's `palette.action.active` - which that theme defines as\n * `hsl(var(--text-primary))`, the same value inherited here from the dialog's\n * `MuiPaper-root`. Same pixels either way, so this one is not worth an\n * `IconButtonPropsColorOverrides` augmentation.\n */}\n <IconButton\n aria-label=\"Remove static parameter\"\n color=\"inherit\"\n onClick={() => handleRemoveStaticRow(index)}\n sx={{ mt: 1 }}\n >\n <NiBinEmpty size=\"small\" />\n </IconButton>\n </Box>\n ))}\n </Box>\n )}\n\n <Button\n variant=\"outlined\"\n color=\"grey\"\n size=\"small\"\n onClick={handleAddStaticRow}\n startIcon={<NiPlus size=\"small\" />}\n sx={{ alignSelf: \"flex-start\" }}\n >\n Add parameter\n </Button>\n\n {showTemplates && (\n <>\n <Divider className=\"my-4\" />\n <RequestTemplatesSection\n rows={templateRows}\n canonicalRequestFields={canonicalRequestFields}\n onChange={handleTemplateChange}\n onAdd={handleAddTemplate}\n onRemove={handleRemoveTemplate}\n onMove={handleMoveTemplate}\n />\n </>\n )}\n\n {showRowFields && objectResponseFields.length > 0 && (\n <>\n <Divider className=\"my-4\" />\n <RowFieldsSection\n objectFields={objectResponseFields}\n rows={rowFieldRows}\n onChange={handleRowFieldChange}\n onAdd={handleAddRowField}\n onRemove={handleRemoveRowField}\n />\n </>\n )}\n\n {(onTestMapping || onSuggestTranslation) && (\n <>\n <Divider className=\"my-4\" />\n\n <Typography variant=\"h6\" component=\"h2\" className=\"mb-2\">\n Test with sample inputs\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary mb-3 block\">\n Enter sample values for each request field, then click &quot;Test mapping&quot; to see\n what each response field extracts from the live tool response.\n </Typography>\n\n {canonicalRequestFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-disabled italic mb-3\">\n No request fields — nothing to sample.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-3 mb-4\">\n {canonicalRequestFields.map((field) => (\n <Box key={field.name} className=\"flex flex-row items-start gap-3\">\n <Box className=\"flex flex-col gap-1\" sx={{ width: 200, flexShrink: 0 }}>\n <Box className=\"flex items-center gap-1.5\">\n <Typography variant=\"subtitle2\" className=\"break-all\">\n {field.name}\n </Typography>\n {field.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"primary\" variant=\"outlined\" />\n )}\n </Box>\n <Chip\n label={field.kind}\n size=\"small\"\n variant=\"outlined\"\n sx={{ alignSelf: \"flex-start\" }}\n />\n </Box>\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>Sample value</InputLabel>\n <FilledInput\n value={sampleArgs[field.name] ?? \"\"}\n onChange={(e) =>\n setSampleArgs((prev) => ({ ...prev, [field.name]: e.target.value }))\n }\n placeholder=\"e.g. my-value\"\n />\n </FormControl>\n </Box>\n ))}\n </Box>\n )}\n\n <Box className=\"flex items-center gap-3\">\n {onSuggestTranslation && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSuggest}\n disabled={isSuggesting || isTesting}\n startIcon={isSuggesting ? undefined : <NiSparkle size=\"small\" />}\n data-testid=\"suggest-translation-button\"\n >\n {isSuggesting ? \"Configuring…\" : \"Auto-configure\"}\n </Button>\n )}\n {/* The enclosing block is gated on (onTestMapping || onSuggestTranslation), so\n without this guard a caller supplying only onSuggestTranslation still got a\n \"Test mapping\" button whose handler returns immediately - a dead control. */}\n {onTestMapping && (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={handleTest}\n disabled={isTesting || isSuggesting}\n startIcon={isTesting ? undefined : <NiSettings size=\"small\" />}\n data-testid=\"test-mapping-button\"\n >\n {isTesting ? \"Testing…\" : \"Test mapping\"}\n </Button>\n )}\n </Box>\n\n {suggestionError && (\n <Box className=\"mt-3\">\n <Alert severity=\"error\">\n <AlertTitle>Auto-configure failed</AlertTitle>\n {suggestionError}\n </Alert>\n </Box>\n )}\n\n {testResult && (\n <Box className=\"mt-4 flex flex-col gap-3\">\n {/*\n * Branch on `success`, never on `error` being present. They are two fields and\n * the contract only ties them one way - `error` is documented as the message\n * WHEN success is false, not as the signal that it is. A caller returning\n * `{ success: false, error: null }` is within the type, and reading truthiness\n * of `error` would render that failure as the success panel, complete with\n * whatever `extractedFields` came back. The message falls back rather than the\n * branch.\n */}\n {!testResult.success ? (\n <Alert severity=\"error\">\n <AlertTitle>Test failed</AlertTitle>\n {testResult.error ?? \"The tool call failed without reporting a reason.\"}\n </Alert>\n ) : (\n <>\n {testResult.extractedFields.length === 0 ? (\n <Typography variant=\"body2\" className=\"text-text-secondary italic\">\n No response fields to show.\n </Typography>\n ) : (\n <Box className=\"flex flex-col gap-2\">\n {testResult.extractedFields.map((ef) => (\n <Box\n key={ef.canonicalField}\n className=\"flex items-center gap-3 rounded p-2\"\n // Theme token, never a literal rgba(): a hardcoded near-black wash is\n // invisible in dark mode, and `no-hardcoded-colors` reports it.\n sx={{ backgroundColor: \"action.hover\" }}\n >\n <Typography variant=\"subtitle2\" sx={{ minWidth: 140, flexShrink: 0 }}>\n {ef.canonicalField}\n </Typography>\n <Typography\n variant=\"body2\"\n className=\"text-text-secondary flex-1 truncate\"\n sx={{ fontFamily: \"monospace\" }}\n title={ef.value ?? undefined}\n >\n {ef.value != null\n ? ef.value.length > 60\n ? `${ef.value.slice(0, 60)}…`\n : ef.value\n : \"—\"}\n </Typography>\n {/* No emoji in these labels. Each chip already carries an icon and a\n semantic colour, so an emoji is a third encoding of the same state\n - one a screen reader announces and no locale translates. */}\n {ef.present && !ef.looksBase64 && (\n <Chip\n icon={<NiCheck size=\"small\" />}\n label=\"extracted\"\n size=\"small\"\n color=\"success\"\n variant=\"outlined\"\n />\n )}\n {ef.present && ef.looksBase64 && (\n <Chip\n icon={<NiSettings size=\"small\" />}\n label='looks base64 — prefix path with \"base64:\"'\n size=\"small\"\n color=\"warning\"\n variant=\"outlined\"\n />\n )}\n {!ef.present && (\n <Chip\n icon={<NiExclamationHexagon size=\"small\" />}\n label=\"no value — adjust the JSON path\"\n size=\"small\"\n color=\"warning\"\n variant=\"outlined\"\n />\n )}\n </Box>\n ))}\n </Box>\n )}\n\n {testResult.requestArgumentsJson && (\n <Box className=\"mt-2\" data-testid=\"test-request-sent\">\n <Typography variant=\"caption\" color=\"text.secondary\">\n Request sent\n </Typography>\n <Box\n component=\"pre\"\n className=\"mt-1 overflow-auto rounded p-3 text-xs\"\n sx={{\n maxHeight: 240,\n backgroundColor: \"action.hover\",\n fontFamily: \"monospace\",\n }}\n >\n {testResult.requestArgumentsJson}\n </Box>\n </Box>\n )}\n\n {testResult.rawResponseJson && (\n <Box className=\"mt-2\">\n <Button\n variant=\"text\"\n color=\"grey\"\n size=\"small\"\n onClick={() => setRawJsonExpanded((v) => !v)}\n endIcon={\n rawJsonExpanded ? (\n <NiChevronUpSmall size=\"small\" />\n ) : (\n <NiChevronDownSmall size=\"small\" />\n )\n }\n >\n {rawJsonExpanded ? \"Hide raw response\" : \"Show raw response\"}\n </Button>\n <Collapse in={rawJsonExpanded}>\n <Box\n component=\"pre\"\n className=\"mt-2 overflow-auto rounded p-3 text-xs\"\n sx={{\n maxHeight: 240,\n backgroundColor: \"action.hover\",\n fontFamily: \"monospace\",\n }}\n >\n {testResult.rawResponseJson}\n </Box>\n </Collapse>\n </Box>\n )}\n </>\n )}\n </Box>\n )}\n </>\n )}\n </Box>\n </DialogContent>\n <DialogActions className=\"px-6 pb-4 pt-2\">\n <Button variant=\"outlined\" color=\"grey\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSave}\n data-testid=\"save-translation-button\"\n disabled={hasInvalidTemplate}\n >\n Save\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\n/**\n * One editable static-parameter row. `id` is a stable client-side identity used only as the React\n * key (so rows survive add/remove without index reuse); `key` is the tool field name and `value`\n * the constant injected into the request.\n */\ninterface StaticRow {\n id: number;\n key: string;\n value: string;\n}\n\ninterface FieldRowProps {\n field: ConnectorCanonicalField;\n value: string;\n onChange: (value: string) => void;\n placeholder: string;\n inputLabel: string;\n\n /**\n * Request side only. When supplied, the row renders a \"Do not send\" checkbox that writes the\n * suppression sentinel. Omitted on the response side, where \"send nothing\" is not a thing a JSON\n * path can mean: a response field with no path simply resolves to null already.\n */\n onSuppressToggle?: (suppress: boolean) => void;\n}\n\n/**\n * One row of the translation editor — canonical-field summary on the left, free-text input on the\n * right. The input is a filled MUI text field per the platform's form conventions so it visually\n * matches every other operator form.\n *\n * <p><b>The suppression checkbox is a control over the same single value the input holds</b>, not a\n * second piece of state. Ticked means the value IS the sentinel, so the row can never disagree with\n * what will be saved, and a mapping loaded with a stored `(suppress)` shows ticked without any\n * seeding logic of its own. The input is disabled while ticked because a tool field name and \"do\n * not send it\" are contradictory instructions, and letting both be entered would leave the operator\n * to guess which wins.</p>\n */\nfunction FieldRow({\n field,\n value,\n onChange,\n placeholder,\n inputLabel,\n onSuppressToggle,\n}: FieldRowProps) {\n const suppressed = isSuppressed(value);\n\n return (\n <Box className=\"flex flex-row items-start gap-3\">\n <Box className=\"flex flex-col gap-1\" sx={{ width: 200, flexShrink: 0 }}>\n <Box className=\"flex items-center gap-1.5\">\n <Typography variant=\"subtitle2\" className=\"break-all\">\n {field.name}\n </Typography>\n {field.isRequired && (\n <Chip label=\"Required\" size=\"small\" color=\"primary\" variant=\"outlined\" />\n )}\n </Box>\n <Chip label={field.kind} size=\"small\" variant=\"outlined\" sx={{ alignSelf: \"flex-start\" }} />\n </Box>\n <Box className=\"flex flex-1 flex-col\">\n <FormControl variant=\"filled\" size=\"medium\" className=\"surface mb-0 flex-1\">\n <InputLabel>{inputLabel}</InputLabel>\n <FilledInput\n value={suppressed ? \"\" : value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={suppressed ? \"Not sent\" : placeholder}\n disabled={suppressed}\n />\n </FormControl>\n {onSuppressToggle && (\n <FormControlLabel\n className=\"mt-1\"\n control={\n <Checkbox\n size=\"small\"\n checked={suppressed}\n onChange={(e) => onSuppressToggle(e.target.checked)}\n inputProps={{ \"aria-label\": `Do not send ${field.name}` }}\n />\n }\n label={\n <Typography variant=\"caption\" className=\"text-text-secondary\">\n Do not send this field\n {field.isRequired ? \" (this operation declares it as required)\" : \"\"}\n </Typography>\n }\n />\n )}\n </Box>\n </Box>\n );\n}\n\n/**\n * Drop empty-string entries — an empty input means \"identity for this field\", which is represented\n * on the wire by the ABSENCE of the key (not a `\"\" → \"\"` entry). Saving the stripped dictionary\n * keeps the persisted JSON minimal and the read path's \"no entry = identity\" contract honest.\n */\nfunction stripEmpty(values: Record<string, string>): Record<string, string> {\n return Object.fromEntries(\n Object.entries(values)\n .filter(([, value]) => value.trim().length > 0)\n .map(([key, value]) => [key, value.trim()]),\n );\n}\n\n/**\n * Collapse the editable static-parameter rows into the wire dictionary. Rows with a blank key are\n * dropped (a value with no field name can't be injected); the value is preserved verbatim\n * (including intentional whitespace / empty string) once the key is present. A later duplicate key\n * wins — matching how the BE's `Dictionary<string,string>` would deserialise the JSON.\n */\nfunction staticRowsToMap(rows: StaticRow[]): Record<string, string> {\n // Object.fromEntries defines own data properties, so a free-text key of `__proto__` survives.\n return Object.fromEntries(rows.filter(({ key }) => key.trim().length > 0).map(({ key, value }) => [key.trim(), value]));\n}\n\n/** Non-blank template texts, parsed, in order; `null` when none remain. Invalid ones block Save. */\nfunction templateRowsToWire(rows: TemplateRow[]): Record<string, unknown>[] | null {\n const templates = rows\n .filter((row) => row.text.trim().length > 0)\n .map((row) => parseRequestTemplate(row.text).value)\n .filter((value): value is Record<string, unknown> => value !== null);\n return templates.length === 0 ? null : templates;\n}\n\n/**\n * Row fields for the Object-kind fields the editor shows; rows with a blank name or path are dropped\n * and a field left with none is omitted. `null` when nothing remains.\n */\nfunction rowFieldRowsToWire(\n rows: Record<string, RowFieldRow[]>,\n objectFields: ConnectorCanonicalField[],\n): Record<string, Record<string, string>> | null {\n // Object.fromEntries (not `out[key] = ...`): both key sets are free text, and assignment would\n // drop or mis-handle a key named `__proto__`.\n const out: Record<string, Record<string, string>> = Object.fromEntries(\n objectFields\n .map((field) => {\n const paths: Record<string, string> = Object.fromEntries(\n (rows[field.name] ?? [])\n .filter(({ key, path }) => key.trim().length > 0 && path.trim().length > 0)\n .map(({ key, path }) => [key.trim(), path.trim()]),\n );\n return [field.name, paths] as const;\n })\n .filter(([, paths]) => Object.keys(paths).length > 0),\n );\n return Object.keys(out).length === 0 ? null : out;\n}\n","/**\n * React-query keys for a connector's tool mappings and the completeness read derived from them.\n *\n * @remarks\n * The completeness key is built as a CHILD of the mappings key, and that nesting is the whole point\n * of shipping these from the SDK rather than letting each plugin declare its own.\n *\n * Completeness is derived state: it is the mappings joined against the live tool schemas. Every write\n * that changes a mapping can change it. When the two keys are siblings, a mutation has to remember to\n * invalidate both, and one plugin duly invalidated only the mappings key — so its \"operations aren't\n * fully mapped\" banner went stale after every save, clear and auto-match, and stayed stale until the\n * operator navigated away. Nesting means a single `invalidateQueries({ queryKey: mappings })` takes\n * the completeness read with it, and there is nothing left to forget.\n *\n * @example\n * ```ts\n * const mappings = connectorMappingsQueryKey(connectorId, moduleKey);\n *\n * useQuery({ queryKey: mappings, queryFn: ... });\n * useQuery({ queryKey: connectorMappingCompletenessQueryKey(connectorId, moduleKey), queryFn: ... });\n *\n * // One call. Covers both, and any future query keyed beneath the mappings key.\n * queryClient.invalidateQueries({ queryKey: mappings });\n * ```\n */\n\n/** Root segment for every connector-mapping query, so one prefix can invalidate the family. */\nconst CONNECTOR_MAPPINGS_ROOT = \"connector-mappings\" as const;\n\n/**\n * Key for the mappings list of one connector + module.\n *\n * `connectorId` is accepted as possibly-undefined because the page renders before a connector is\n * chosen; pair it with `enabled: !!connectorId` rather than branching on the key.\n */\nexport function connectorMappingsQueryKey(\n connectorId: string | undefined,\n moduleKey: string,\n) {\n return [CONNECTOR_MAPPINGS_ROOT, connectorId, moduleKey] as const;\n}\n\n/**\n * The whole family's prefix, for the one invalidation that has to cross connectors.\n *\n * Almost every write is scoped to one connector and should invalidate only that connector's subtree\n * via {@link connectorMappingsQueryKey}. Changing a module's PROVIDER is the exception: it moves the\n * module from one provider's rows to another's, so the subtree that must be discarded is the one\n * being left, which the new scope's key does not name.\n */\nexport function connectorMappingsRootQueryKey() {\n return [CONNECTOR_MAPPINGS_ROOT] as const;\n}\n\n// The provider selection's own key lives with the hook that owns it, in\n// `connector-mappings/useModuleProvider` - `moduleProviderQueryKey` there. It is inside this family\n// (`[\"connector-mappings\", \"module-provider\", moduleKey]`) so the root invalidation above covers it,\n// but NOT beneath a connector id: the selection is what CHOOSES the connector, so nesting it under\n// one would move the cache entry every time the operator switched and lose it at the single moment\n// it has to be correct.\n\n/**\n * Key for the mapping rows of a module served by an installed application.\n *\n * A sibling of {@link connectorMappingsQueryKey} rather than a variant of it, because the read\n * behind it is a different one: the connector list read is scoped by connector id and a\n * plugin-target row has none. Keyed under the same root so the family invalidation covers it.\n */\nexport function pluginTargetMappingsQueryKey(moduleKey: string) {\n return [CONNECTOR_MAPPINGS_ROOT, \"plugin-target\", moduleKey] as const;\n}\n\n/**\n * Key for the completeness read, nested UNDER {@link connectorMappingsQueryKey} so invalidating the\n * mappings prefix always covers it. Do not flatten this into a sibling key.\n */\nexport function connectorMappingCompletenessQueryKey(\n connectorId: string | undefined,\n moduleKey: string,\n) {\n return [...connectorMappingsQueryKey(connectorId, moduleKey), \"completeness\"] as const;\n}\n"]}