@reltio/remotes 1.4.1721 → 1.4.1722

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/1088.js +1 -1
  2. package/1148.js +1 -1
  3. package/1215.js +1 -1
  4. package/1334.js +1 -1
  5. package/1425.js +1 -1
  6. package/1550.js +1 -1
  7. package/1664.js +1 -1
  8. package/1707.js +1 -1
  9. package/1840.js +1 -1
  10. package/2066.js +1 -1
  11. package/2345.js +1 -1
  12. package/2400.js +1 -1
  13. package/2617.js +1 -1
  14. package/2825.js +3 -0
  15. package/2825.js.map +1 -0
  16. package/2857.js +1 -1
  17. package/3004.js +1 -1
  18. package/3042.js +1 -1
  19. package/3096.js +1 -1
  20. package/3104.js +2 -0
  21. package/3104.js.map +1 -0
  22. package/3144.js +1 -1
  23. package/3191.js +1 -1
  24. package/3348.js +1 -1
  25. package/3381.js +1 -1
  26. package/3383.js +1 -1
  27. package/3463.js +1 -1
  28. package/3469.js +1 -1
  29. package/3538.js +1 -1
  30. package/3639.js +1 -1
  31. package/393.js +1 -1
  32. package/393.js.map +1 -1
  33. package/4038.js +1 -1
  34. package/415.js +1 -1
  35. package/4212.js +1 -1
  36. package/{3209.css → 4265.css} +1 -1
  37. package/{3209.css.map → 4265.css.map} +1 -1
  38. package/4265.js +2 -0
  39. package/4265.js.map +1 -0
  40. package/{829.css → 4390.css} +1 -1
  41. package/4390.css.map +1 -0
  42. package/4390.js +2 -0
  43. package/4390.js.map +1 -0
  44. package/4444.js +1 -1
  45. package/4481.js +1 -1
  46. package/4780.js +2 -0
  47. package/4780.js.map +1 -0
  48. package/4787.js +1 -1
  49. package/4838.js +1 -1
  50. package/4969.js +1 -1
  51. package/50.js +1 -1
  52. package/5039.js +1 -1
  53. package/5177.js +1 -1
  54. package/5201.js +1 -1
  55. package/5292.js +1 -1
  56. package/5368.js +2 -0
  57. package/{4143.js.map → 5368.js.map} +1 -1
  58. package/5383.js +1 -1
  59. package/5738.js +1 -1
  60. package/5738.js.map +1 -1
  61. package/5769.js +1 -1
  62. package/6012.js +76 -0
  63. package/{2966.js.LICENSE.txt → 6012.js.LICENSE.txt} +0 -10
  64. package/6012.js.map +1 -0
  65. package/6287.js +1 -1
  66. package/6422.js +1 -1
  67. package/6506.js +1 -1
  68. package/6578.js +1 -1
  69. package/6578.js.map +1 -1
  70. package/658.js +1 -1
  71. package/6799.js +1 -1
  72. package/6807.js +2 -0
  73. package/6807.js.map +1 -0
  74. package/6844.js +1 -1
  75. package/6903.js +1 -1
  76. package/7074.js +1 -1
  77. package/7119.js +1 -1
  78. package/7237.js +1 -1
  79. package/7340.js +1 -1
  80. package/735.js +1 -1
  81. package/7401.js +2 -0
  82. package/7401.js.map +1 -0
  83. package/7407.js +1 -1
  84. package/7422.js +1 -1
  85. package/7468.js +1 -1
  86. package/7626.js +1 -1
  87. package/7719.js +1 -1
  88. package/7744.js +1 -1
  89. package/7744.js.map +1 -1
  90. package/7896.js +1 -1
  91. package/820.js +1 -1
  92. package/8207.js +1 -1
  93. package/8216.js +1 -1
  94. package/8741.js +1 -1
  95. package/8786.js +1 -1
  96. package/9016.js +1 -1
  97. package/9032.js +1 -1
  98. package/9050.js +1 -1
  99. package/913.js +56 -0
  100. package/913.js.LICENSE.txt +9 -0
  101. package/913.js.map +1 -0
  102. package/9283.js +1 -1
  103. package/9328.js +1 -1
  104. package/9387.js +1 -1
  105. package/9719.js +1 -1
  106. package/main.js +1 -1
  107. package/main.js.map +1 -1
  108. package/package.json +1 -1
  109. package/remoteEntry.js +1 -1
  110. package/remoteEntry.js.map +1 -1
  111. package/2383.js +0 -3
  112. package/2383.js.map +0 -1
  113. package/2966.js +0 -129
  114. package/2966.js.map +0 -1
  115. package/3209.js +0 -2
  116. package/3209.js.map +0 -1
  117. package/3785.js +0 -2
  118. package/3785.js.map +0 -1
  119. package/4143.js +0 -2
  120. package/829.css.map +0 -1
  121. package/829.js +0 -2
  122. package/829.js.map +0 -1
  123. package/9109.js +0 -2
  124. package/9109.js.map +0 -1
  125. /package/{2383.js.LICENSE.txt → 2825.js.LICENSE.txt} +0 -0
package/3209.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"3209.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/icons/ReferenceAttribute.tsx","webpack://@reltio/remotes/../components/src/icons/SimpleAttribute.tsx","webpack://@reltio/remotes/../components/src/components/AttributeListItem/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributeListItem/AttrTypeIcon.tsx","webpack://@reltio/remotes/../components/src/icons/Recommended.tsx","webpack://@reltio/remotes/../components/src/components/AttributeListItem/AttributeListItem.tsx","webpack://@reltio/remotes/../components/src/components/AutoSizeList/styles.ts","webpack://@reltio/remotes/../components/src/components/AutoSizeList/AutoSizeList.tsx","webpack://@reltio/remotes/../components/src/components/ConnectionEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/ConnectionEditor/ConnectionEditor.tsx","webpack://@reltio/remotes/../components/src/components/DropDownSelector/components/styles.js","webpack://@reltio/remotes/../components/src/components/DropDownSelector/components/Menu.js","webpack://@reltio/remotes/../components/src/components/DropDownSelector/components/SingleValue.js","webpack://@reltio/remotes/../components/src/components/DropDownSelector/styles.js","webpack://@reltio/remotes/../components/src/components/DropDownSelector/DropDownSelector.js","webpack://@reltio/remotes/../components/src/components/EntityTypesSelector/EntityTypesSelector.tsx","webpack://@reltio/remotes/../components/src/components/EntityUriLink/EntityUriLink.tsx","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/ListLabel/styles.ts","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/ListLabel/helpers.ts","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/ListLabel/ListLabel.tsx","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/SelectMetadataTypesList.tsx","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/MetadataTypesSelector/MetadataTypesSelector.tsx","webpack://@reltio/remotes/../components/src/components/ReactSelect/AsyncSelect.js","webpack://@reltio/remotes/../components/src/components/RelationTypesSelector/RelationTypesSelector.tsx","webpack://@reltio/remotes/../components/src/components/RequiredMark/styles.js","webpack://@reltio/remotes/../components/src/components/RequiredMark/RequiredMark.tsx","webpack://@reltio/remotes/../components/src/components/ScreenProfileBand/styles.ts","webpack://@reltio/remotes/../components/src/components/ScreenProfileBand/ScreenProfileBand.tsx","webpack://@reltio/remotes/../components/src/components/SimpleDropDownSelector/styles.js","webpack://@reltio/remotes/../components/src/components/SimpleDropDownSelector/DropDownValue.js","webpack://@reltio/remotes/../components/src/components/SimpleDropDownSelector/DropDownPlaceholder.js","webpack://@reltio/remotes/../components/src/components/SimpleDropDownSelector/SimpleDropDownSelector.js","webpack://@reltio/remotes/../components/src/contexts/UrlGeneratorsContext/index.ts","webpack://@reltio/remotes/../components/src/contexts/ViewIdContext/index.ts","webpack://@reltio/remotes/../components/src/hooks/useEditableConnection.ts","webpack://@reltio/remotes/../components/src/icons/NestedAttribute.tsx","webpack://@reltio/remotes/../graph/src/utils/hopsData.ts","webpack://@reltio/remotes/../graph/src/utils/graph.ts","webpack://@reltio/remotes/../graph/src/utils/processResponseToGraph.ts","webpack://@reltio/remotes/../graph/src/hooks/useGraphLoader.ts","webpack://@reltio/remotes/../graph/src/hooks/useSelectedEntity.ts","webpack://@reltio/remotes/../graph/src/constants/index.ts","webpack://@reltio/remotes/../graph/src/hooks/useRelationshipTable.ts","webpack://@reltio/remotes/../graph/src/hooks/useRelationshipTableFilters.ts","webpack://@reltio/remotes/../graph/src/contexts/GraphStateContext.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/CollapsibleTable/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/CollapsibleTable/TableHead.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/CollapsibleTable/CollapsibleTable.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/DefaultCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/ProfileCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/ExpandedRowRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/DeleteRelationDialog/DeleteRelationDialog.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/components/DeleteRelationButton.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/cell-renderers/ControlsCellRenderer.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipTable/RelationshipTable.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsSearchTextField/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsSearchTextField/RelationshipsSearchTextField.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsFiltersDialog/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsFiltersDialog/RelationshipsFiltersDialog.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/RelationshipsFilters/RelationshipsFilters.tsx","webpack://@reltio/remotes/../graph/src/helpers/relationsHelpers.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/useCreatableInOutRelationTypes.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/GraphAddRelationDialog.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/components/GraphAddRelationDialog/GraphAddRelationButton.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelRelationship/RightPanelRelationship.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelEntityDetails/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelEntityDetails/RightPanelEntityDetails.tsx","webpack://@reltio/remotes/../graph/src/components/RightPanelProfileBand/styles.ts","webpack://@reltio/remotes/../graph/src/components/RightPanelProfileBand/RightPanelProfileBand.tsx","webpack://@reltio/remotes/../graph/src/components/GraphRightSidePanel/GraphRightSidePanel.tsx","webpack://@reltio/remotes/../graph/src/components/GraphRightSidePanel/icons/relationship-icon.svg","webpack://@reltio/remotes/../graph/src/hooks/useSigmaCustomRenderers.ts","webpack://@reltio/remotes/../graph/src/contexts/SigmaCustomRenderersContext.ts","webpack://@reltio/remotes/../graph/src/components/SigmaCustomRenderers/SigmaCustomRenderersContainer.tsx","webpack://@reltio/remotes/../graph/src/rendering/canvas/nodeBackground.ts","webpack://@reltio/remotes/../graph/src/rendering/canvas/label.ts","webpack://@reltio/remotes/../graph/src/rendering/canvas/hover.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/node.border.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.border.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.border.frag.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/image.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/helpers/imageHelper.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/node.image.ts","webpack://@reltio/remotes/../graph/src/rendering/icons/no_photo.inline.svg.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.image.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.image.frag.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.buttons.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/node.buttons.ts","webpack://@reltio/remotes/../graph/src/rendering/icons/expandIcon.inline.svg.ts","webpack://@reltio/remotes/../graph/src/rendering/icons/collapseIcon.inline.svg.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/node.buttons.frag.glsl.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/edge.arrowHead.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/edge.reversedArrowHead.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/edge.clamped.ts","webpack://@reltio/remotes/../graph/src/rendering/webgl/shaders/edge.clamped.vert.glsl.ts","webpack://@reltio/remotes/../graph/src/components/SigmaGraphContainer/SigmaGraphContainer.tsx","webpack://@reltio/remotes/../graph/src/utils/graphLayout.ts","webpack://@reltio/remotes/../graph/src/rendering/canvas/selfRelationLoop.ts","webpack://@reltio/remotes/../graph/src/hooks/useGraphLayout.ts","webpack://@reltio/remotes/../graph/src/hooks/useSelfRelationLoopsRenderer.ts","webpack://@reltio/remotes/../graph/src/hooks/useTooltipRenderer.ts","webpack://@reltio/remotes/../graph/src/rendering/canvas/tooltip.ts","webpack://@reltio/remotes/../graph/src/components/CircleLayout/CircleLayout.tsx","webpack://@reltio/remotes/../graph/src/components/HierarchyLayout/buildHierarchy.ts","webpack://@reltio/remotes/../graph/src/components/HierarchyLayout/calculations.ts","webpack://@reltio/remotes/../graph/src/components/HierarchyLayout/HierarchyLayout.ts","webpack://@reltio/remotes/../graph/src/components/GraphTypeSelector/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphTypeSelector/GraphTypeSelector.tsx","webpack://@reltio/remotes/../graph/src/components/GraphLayoutSelector/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphLayoutSelector/GraphLayoutSelector.tsx","webpack://@reltio/remotes/../graph/src/components/SigmaGraphResizer/SigmaGraphResizer.tsx","webpack://@reltio/remotes/../graph/src/components/ZoomSlider/styles.ts","webpack://@reltio/remotes/../graph/src/components/ZoomSlider/ZoomSlider.tsx","webpack://@reltio/remotes/../graph/src/components/GotoButton/styles.ts","webpack://@reltio/remotes/../graph/src/components/GotoButton/GotoButton.tsx","webpack://@reltio/remotes/../graph/src/components/TreeLayout/styles.ts","webpack://@reltio/remotes/../graph/src/components/TreeLayout/TreeLayout.tsx","webpack://@reltio/remotes/../graph/src/components/GraphArea/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphArea/GraphArea.tsx","webpack://@reltio/remotes/../graph/src/components/GraphPerspectiveView/styles.ts","webpack://@reltio/remotes/../graph/src/components/GraphPerspectiveView/GraphPerspectiveView.tsx","webpack://@reltio/remotes/../graph/src/hooks/useGraphState.ts","webpack://@reltio/remotes/../graph/src/hooks/useGraphLayoutSelector.ts","webpack://@reltio/remotes/../graph/src/hooks/useGraphType.ts","webpack://@reltio/remotes/../graph/src/hooks/useGraphRightSidePanelElements.tsx","webpack://@reltio/remotes/../graph/src/index.tsx","webpack://@reltio/remotes/./src/graph.ts"],"sourcesContent":["import React from 'react';\n\nconst SvgReferenceAttribute: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={24} height={24} viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M10 18h3v-1a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-1H8V8H6a1 1 0 01-1-1V3a1 1 0 011-1h6a1 1 0 011 1v4a1 1 0 01-1 1h-2v3h3v-1a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-1h-3v5z\"\n fill=\"#000\"\n stroke=\"none\"\n strokeWidth={1}\n fillRule=\"evenodd\"\n />\n </svg>\n );\n};\n\nexport default SvgReferenceAttribute;\n","import React from 'react';\n\nconst SvgSimpleAttribute: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={24} height={24} viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect\n fill=\"#000\"\n x={9}\n y={9}\n width={6}\n height={6}\n rx={1}\n stroke=\"none\"\n strokeWidth={1}\n fillRule=\"evenodd\"\n />\n </svg>\n );\n};\n\nexport default SvgSimpleAttribute;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n container: {\n '& > $marginWrapper:first-child': {\n paddingLeft: '4px'\n }\n },\n listItem: {\n paddingLeft: '1px',\n paddingTop: '2px',\n paddingBottom: '2px',\n transition: 'none',\n '&:hover': {\n '& $itemAfter': {\n background: 'linear-gradient(to right, rgba(235, 235, 235, 0.2), rgba(235, 235, 235, 1) 100%)'\n }\n },\n '&$listItemFocus': {\n '& $itemAfter': {\n background: 'linear-gradient(to right, rgba(219, 219, 219, 0.2), rgba(219, 219, 219, 1) 100%)'\n }\n },\n '&:focus': {\n outline: 'none'\n }\n },\n listItemFocus: {},\n icon: {\n opacity: 0.29,\n width: '16px',\n height: '16px',\n flexShrink: 0,\n marginRight: '6px',\n marginLeft: '8px'\n },\n recommendedIcon: {\n width: '18px',\n height: '18px',\n marginRight: '5px',\n marginLeft: '7px',\n flexShrink: 0\n },\n logoIcon: {\n width: '18px',\n height: '18px',\n flexShrink: 0,\n marginRight: '4px'\n },\n itemAfter: {\n position: 'absolute',\n right: 0,\n top: 0,\n width: '40px',\n height: '100%',\n pointerEvents: 'none',\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)'\n },\n itemText: {\n padding: '0',\n margin: 0,\n '& span': {\n fontSize: '0.8125rem',\n letterSpacing: 'normal',\n whiteSpace: 'nowrap'\n }\n },\n checkbox: {\n opacity: 0.34,\n padding: 0,\n marginLeft: '14px',\n '&$checked': {\n opacity: 1,\n background: 'none'\n }\n },\n checked: {},\n marginWrapper: {\n display: 'flex',\n alignItems: 'center'\n },\n defaultCursor: {\n cursor: 'default'\n },\n itemTooltip: {\n margin: '4px 0'\n },\n marginText: {\n marginLeft: '21px'\n },\n itemTextWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n});\n","import React from 'react';\n\nimport {DataTypes, AttributeType} from '@reltio/mdm-sdk';\nimport NestedAttrIcon from '../../icons/NestedAttribute';\nimport ReferenceAttrIcon from '../../icons/ReferenceAttribute';\nimport SimpleAttrIcon from '../../icons/SimpleAttribute';\nimport {useStyles} from './styles';\n\nconst getIconForAttrType = (attrType: AttributeType) => {\n switch (attrType.type) {\n case DataTypes.TYPE_IMAGE:\n case DataTypes.TYPE_NESTED:\n return NestedAttrIcon;\n case DataTypes.TYPE_REFERENCE:\n return ReferenceAttrIcon;\n default:\n return SimpleAttrIcon;\n }\n};\n\ntype Props = {\n attrType?: AttributeType;\n};\n\nconst AttrTypeIcon = ({attrType = {} as AttributeType}: Props) => {\n const styles = useStyles();\n const Icon = getIconForAttrType(attrType);\n return <Icon className={styles.icon} />;\n};\n\nexport default AttrTypeIcon;\n","import React from 'react';\n\nconst SvgRecommended: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={13} height={18} viewBox=\"0 0 13 18\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g transform=\"translate(-3 -1)\" stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <path fill=\"#FF4081\" d=\"M5.833 10h3.75v6.667l-3.75 1.666z\" />\n <path fill=\"#CE0C4E\" d=\"M13.333 10v8.333l-3.75-1.666V10z\" />\n <circle fill=\"#FFC058\" cx={9.583} cy={7.917} r={6.25} />\n <circle fill=\"#FFCD7B\" cx={9.583} cy={7.917} r={5.417} />\n <path fill=\"#FFFBB5\" d=\"M8.333 11.667L5 8.462l.933-.898 2.4 2.308L13.4 5l.933.897z\" />\n </g>\n </svg>\n );\n};\n\nexport default SvgRecommended;\n","import React, {memo} from 'react';\n\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {AttributeType} from '@reltio/mdm-sdk';\nimport ListItemText from '@mui/material/ListItemText';\nimport Checkbox from '@mui/material/Checkbox';\nimport MenuItem, {MenuItemProps} from '@mui/material/MenuItem';\nimport ExpandedValueTooltip from '../ExpandedValueTooltip/ExpandedValueTooltip';\nimport {isNested} from '@reltio/mdm-sdk';\nimport withTooltip from '../../HOCs/withTooltip/withTooltip';\nimport RequiredMark from '../RequiredMark/RequiredMark';\nimport {noop} from '../../core';\nimport AttrTypeIcon from './AttrTypeIcon';\nimport Marginator from '../Marginator/Marginator';\nimport RecommendedIcon from '../../icons/Recommended';\nimport {useStyles} from './styles';\n\nexport const RecommendedIconWithTooltip = withTooltip(RecommendedIcon);\n\ntype Data = {\n attrType?: AttributeType;\n};\ntype Props = {\n data: Data;\n checked: boolean;\n label: React.ReactNode;\n labelInText?: string;\n level?: number;\n isFocused?: boolean;\n isRequired?: boolean;\n hideIcon?: boolean;\n hideCheckBox?: boolean;\n notSelectable?: boolean;\n disableHorizontalScrollbar?: boolean;\n onClick?: (data: Data, checked: boolean, groupId: string) => void;\n subItemMargin?: number;\n groupId?: string;\n style?: MenuItemProps['style'];\n LogoIcon?: React.ElementType;\n className?: string;\n disableNonSelectable?: boolean;\n disableGutters?: boolean;\n};\n\nconst AttributeListItem = ({\n groupId,\n data,\n checked = false,\n isFocused = false,\n isRequired = false,\n label,\n labelInText,\n level,\n onClick = noop,\n hideCheckBox = false,\n hideIcon = false,\n notSelectable = false,\n disableHorizontalScrollbar = false,\n style = {},\n subItemMargin = 20,\n LogoIcon,\n className,\n disableNonSelectable,\n disableGutters\n}: Props) => {\n const styles = useStyles();\n const {attrType} = data || {};\n\n const isButton = (!hideCheckBox || !isNested(attrType)) && !notSelectable;\n const handleItemClick = () => onClick(data, !checked, groupId);\n const showLogoIcon = !!LogoIcon;\n\n const renderIcon = (attrType: AttributeType): JSX.Element =>\n groupId === 'recommended' ? (\n <RecommendedIconWithTooltip\n className={styles.recommendedIcon}\n tooltipTitle={i18n.text('Recommended')}\n showForDisabled={true}\n />\n ) : (\n <AttrTypeIcon attrType={attrType} />\n );\n\n return (\n <ExpandedValueTooltip value={labelInText || label} className={styles.itemTooltip} placement=\"bottom-end\">\n <MenuItem\n className={classnames(\n styles.container,\n styles.listItem,\n {[styles.defaultCursor]: !isButton},\n className\n )}\n onClick={isButton ? handleItemClick : undefined}\n style={style}\n dense\n disabled={disableNonSelectable && notSelectable}\n classes={{\n focusVisible: styles.listItemFocus,\n selected: styles.listItemFocus\n }}\n selected={isFocused}\n tabIndex={-1}\n disableGutters={disableGutters}\n >\n {!hideCheckBox && (\n <Checkbox\n checked={checked}\n disableRipple\n disabled={!isButton}\n className={classnames(styles.checkbox, {[styles.checked]: checked})}\n tabIndex={-1}\n />\n )}\n <Marginator margin={subItemMargin} level={level} className={styles.marginWrapper}>\n <>\n {!hideIcon && renderIcon(attrType)}\n <div className={classnames(styles.itemTextWrapper, {[styles.marginText]: hideIcon})}>\n {showLogoIcon && <LogoIcon className={styles.logoIcon} />}\n <ListItemText\n primary={\n <>\n {label}\n {isRequired && <RequiredMark />}\n </>\n }\n className={styles.itemText}\n />\n </div>\n </>\n </Marginator>\n {isButton && disableHorizontalScrollbar && <div className={styles.itemAfter} />}\n </MenuItem>\n </ExpandedValueTooltip>\n );\n};\n\nexport default memo(AttributeListItem);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n item: {\n overflow: 'hidden'\n }\n});\n","import React, {memo, MutableRefObject, useCallback, useMemo, useRef, useState} from 'react';\nimport {VariableSizeList as List} from 'react-window';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {debounce} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props<T> = {\n width: number;\n height: number;\n data: T[];\n defaultItemSize: number;\n itemKey?: (index: number, data: T[]) => string;\n children: ({data, index}: {data: T[]; index: number}) => React.ReactNode;\n showNotMeasuredItems?: boolean;\n listRef?: MutableRefObject<List>;\n};\n\nconst AutoSizeList = <T extends unknown>({\n width = 0,\n height = 0,\n defaultItemSize,\n data,\n children,\n itemKey,\n showNotMeasuredItems,\n listRef: listRefProp\n}: Props<T>) => {\n const styles = useStyles();\n const rowHeightsCache = useRef({});\n const cacheRowHeight = (key, height) => {\n rowHeightsCache.current = {\n ...rowHeightsCache.current,\n [key]: height\n };\n };\n\n const [rowHeights, setRowHeights] = useState({});\n const applyRowHeights = useCallback(\n debounce(() => {\n setRowHeights({...rowHeightsCache.current});\n }),\n []\n );\n\n const getItemKeyFromData = useCallback((data, index) => (itemKey ? itemKey(index, data) : index), [itemKey]);\n const getItemKey = (index) => getItemKeyFromData(data, index);\n const getItemSize = (index) => rowHeights[getItemKey(index)] || defaultItemSize;\n\n const localListRef = useRef<List>();\n const listRef = listRefProp || localListRef;\n listRef.current && listRef.current.resetAfterIndex(0, false);\n\n const Row = useMemo(\n //eslint-disable-next-line\n () => ({data, index, style}) => {\n const key = getItemKeyFromData(data, index);\n return (\n <div style={style} className={styles.item}>\n <div\n style={\n !showNotMeasuredItems ? {visibility: key in rowHeights ? undefined : 'hidden'} : undefined\n }\n >\n <ReactResizeDetector\n handleHeight={true}\n onResize={(_, height) => {\n if (rowHeightsCache.current[key] !== height) {\n cacheRowHeight(key, height);\n applyRowHeights();\n }\n }}\n />\n {children({data, index})}\n </div>\n </div>\n );\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [children, showNotMeasuredItems, getItemKeyFromData, applyRowHeights, !showNotMeasuredItems && rowHeights]\n );\n\n return (\n <List\n ref={listRef}\n width={width}\n height={height}\n itemCount={data.length}\n itemData={data}\n itemSize={getItemSize}\n itemKey={itemKey}\n >\n {Row}\n </List>\n );\n};\n\nexport default memo(AutoSizeList);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n item: {\n marginBottom: '16px'\n },\n dense: {\n marginBottom: 0\n }\n});\n","import {useStyles} from './styles';\nimport {useDidUpdateEffect} from '../../hooks';\n\nimport React, {useCallback, useEffect, useMemo} from 'react';\n\nimport {\n AttributeItem,\n Directions,\n EditingConnection,\n Entity,\n getActivenessAttributes,\n getSuitableEntityTypeUrisForRelationTypes,\n getDefaultRelationTypeObject,\n getLabel,\n getRelationAttributesList,\n getRelationType,\n isAvailableRelationBetweenEntities,\n Mode,\n TRelationType\n} from '@reltio/mdm-sdk';\nimport AttributesList from '../attributes/editMode/AttributesList';\n\nimport classnames from 'classnames';\nimport {uniq} from 'ramda';\nimport ConnectionRelationTypeSelector from '../ConnectionRelationTypeSelector/ConnectionRelationTypeSelector';\nimport ErrorWrapper from '../ErrorWrapper/ErrorWrapper';\nimport EntitySelector from '../attributes/editMode/EntitySelector/EntitySelector';\nimport {useMdmGlobalSearchRequestOptions, useMdmMetadata} from '../../contexts';\n\ntype Props = {\n connection: EditingConnection;\n showEmptyEditors?: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onAddAttributes: (attributes: AttributeItem[]) => void;\n onRemoveAttribute: (attributes: AttributeItem) => void;\n onChangeRelationType?: (value: {type: string; direction: string}) => void;\n onChangeEntity?: (entity: Entity) => void;\n relatedEntity?: Entity;\n inRelationTypes?: TRelationType[];\n outRelationTypes?: TRelationType[];\n entityErrorMessage?: string;\n};\n\nexport const ConnectionEditor = ({\n connection,\n relatedEntity,\n inRelationTypes = [],\n outRelationTypes = [],\n showEmptyEditors,\n entityErrorMessage,\n onChangeAttribute,\n onRemoveAttribute,\n onAddAttributes,\n onChangeRelationType,\n onChangeEntity\n}: Props) => {\n const styles = useStyles();\n const {relation, entity} = connection;\n const {attributes, uri: relationUri, type: relationTypeUri = '', direction} = relation || {};\n const isRelationTypeSelected = Boolean(relationTypeUri);\n\n const metadata = useMdmMetadata();\n const globalSearchRequestOptions = useMdmGlobalSearchRequestOptions(['ovOnly']);\n\n const attributeListEntity = useMemo(\n () =>\n relation && {\n attributes,\n ...getActivenessAttributes(relation)\n },\n [relation, attributes]\n );\n\n const relationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relationTypeUri),\n [relationTypeUri, metadata]\n );\n\n const availableEntityTypeUris = useMemo(() => {\n return isRelationTypeSelected\n ? getSuitableEntityTypeUrisForRelationTypes(direction === Directions.OUT, metadata, [\n getRelationType(metadata, relationTypeUri)\n ])\n : uniq(\n getSuitableEntityTypeUrisForRelationTypes(true, metadata, outRelationTypes).concat(\n getSuitableEntityTypeUrisForRelationTypes(false, metadata, inRelationTypes)\n )\n );\n }, [isRelationTypeSelected, relationTypeUri, metadata, inRelationTypes, outRelationTypes]);\n\n const selectorCompatibleRelation = useMemo(\n () =>\n relation && {\n relationType: relation.type,\n direction: relation.direction\n },\n [relation]\n );\n\n const selectorCompatibleEntity = useMemo(\n () =>\n entity && {\n entityUri: entity.uri,\n entityType: entity.type,\n entityLabel: getLabel(entity.label)\n },\n [entity]\n );\n\n const availableInRelationTypes = useMemo(\n () =>\n entity && entity.uri\n ? inRelationTypes.filter(isAvailableRelationBetweenEntities(false, entity, relatedEntity, metadata))\n : inRelationTypes,\n [entity, inRelationTypes, relatedEntity, metadata]\n );\n\n const availableOutRelationTypes = useMemo(\n () =>\n entity && entity.uri\n ? outRelationTypes.filter(isAvailableRelationBetweenEntities(true, entity, relatedEntity, metadata))\n : outRelationTypes,\n [entity, outRelationTypes, relatedEntity, metadata]\n );\n\n useEffect(() => {\n // autoselecting relation type on mount\n const {type, direction} = getDefaultRelationTypeObject(inRelationTypes, outRelationTypes) || {};\n\n if (!relationTypeUri && type && onChangeRelationType) {\n onChangeRelationType({type: type.uri, direction});\n }\n }, [relationTypeUri, inRelationTypes, outRelationTypes, onChangeRelationType]);\n\n useDidUpdateEffect(() => {\n // autoselecting relation type on entity change\n const {type, direction} =\n getDefaultRelationTypeObject(availableInRelationTypes, availableOutRelationTypes) || {};\n\n if (!relationTypeUri && type) {\n onChangeRelationType({type: type.uri, direction});\n }\n }, [relationTypeUri, entity, availableInRelationTypes, availableOutRelationTypes, onChangeEntity]);\n\n const handleChangeRelationType = useCallback(\n ({type, direction}: {type: TRelationType; direction: string}) => {\n onChangeRelationType({type: type.uri, direction});\n },\n [onChangeRelationType]\n );\n\n return (\n <>\n {onChangeRelationType && (\n <ConnectionRelationTypeSelector\n className={styles.item}\n relation={selectorCompatibleRelation}\n metadata={metadata}\n inRelationTypes={inRelationTypes}\n outRelationTypes={outRelationTypes}\n onChange={handleChangeRelationType}\n />\n )}\n {onChangeEntity && (\n <ErrorWrapper errorMessage={entityErrorMessage} className={styles.item}>\n <EntitySelector\n key={relationTypeUri}\n className={classnames({[styles.dense]: entityErrorMessage})}\n entity={selectorCompatibleEntity || {}}\n entityTypesUris={availableEntityTypeUris}\n max={20}\n globalSearchRequestOptions={globalSearchRequestOptions}\n mode={Mode.Editing}\n onChange={onChangeEntity}\n onCreate={undefined}\n metadata={metadata}\n attributeTypesSelectionStrategy={undefined}\n />\n </ErrorWrapper>\n )}\n {relationTypeUri && (\n <AttributesList\n attrTypes={relationAttrTypes}\n entity={attributeListEntity}\n showEmptyEditors={showEmptyEditors}\n mode={Mode.Editing}\n parentUri={relationUri}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onRemoveAttribute}\n />\n )}\n </>\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useMenuStyles = makeStyles((theme) => ({\n addLabel: {\n display: 'flex',\n padding: '0 7px',\n height: '35px',\n alignItems: 'center',\n fontSize: '13px',\n fontWeight: '500',\n color: theme.palette.primary.main,\n cursor: 'pointer',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n borderTop: 'solid 1px rgba(0, 0, 0, 0.14)',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n addIcon: {\n height: '18px',\n width: '18px',\n padding: '0 9px'\n }\n}));\n\nexport const useSingleValueStyles = makeStyles({\n singleValue: {\n fontSize: '14px',\n lineHeight: '16px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n marginTop: '17px'\n }\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {prop} from 'ramda';\nimport AddIcon from '@mui/icons-material/Add';\nimport {useMenuStyles} from './styles';\nimport MenuWithPopper from '../../commonReactSelectComponents/MenuWithPopper';\n\nconst Menu = (props) => {\n const {\n selectProps: {onCreate, createLabel, inputValue, components},\n children\n } = props;\n\n const styles = useMenuStyles();\n return (\n <MenuWithPopper {...props}>\n {children}\n {createLabel && !prop('Group', components) && (\n <span className={styles.addLabel} onClick={() => onCreate(inputValue)}>\n <AddIcon className={styles.addIcon} />\n {createLabel}\n </span>\n )}\n </MenuWithPopper>\n );\n};\n\nMenu.propTypes = {\n children: PropTypes.element.isRequired,\n selectProps: PropTypes.object.isRequired\n};\n\nexport default Menu;\n","import Typography from '@mui/material/Typography';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport {useSingleValueStyles} from './styles';\n\nexport default function SingleValue(props) {\n const {\n selectProps: {menuIsOpen},\n innerProps,\n children\n } = props;\n const styles = useSingleValueStyles();\n\n return (\n !menuIsOpen && (\n <Typography className={styles.singleValue} {...innerProps}>\n {children}\n </Typography>\n )\n );\n}\n\nSingleValue.propTypes = {\n children: PropTypes.node,\n innerProps: PropTypes.object\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n control: {\n height: 'auto'\n },\n dropdownIndicator: {\n boxSizing: 'content-box',\n transition: 'transform .15s ease',\n padding: (props) => `${(props.height - 24) / 2}px 12px`,\n cursor: 'pointer',\n color: 'rgba(0, 0, 0, 0.54)'\n },\n valueContainer: {\n marginLeft: '16px',\n width: 0\n },\n formControl: {\n margin: 0\n },\n filledInputRoot: {\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n '&.focused': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n }\n },\n filledInputUnderline: {\n '&:before': {\n display: 'none'\n }\n },\n inputLabel: {\n color: 'rgba(0,0,0,0.6)',\n fontSize: '14px',\n paddingLeft: '4px',\n '&.shrink': {\n paddingLeft: '4px'\n }\n }\n});\n\nexport const customStyles = {\n menu: (baseStyles) => ({\n ...baseStyles,\n borderRadius: '0 0 4px 4px',\n backgroundColor: '#FFFFFFFF',\n boxShadow: '0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2)',\n margin: 0\n }),\n menuList: (baseStyles) => ({\n ...baseStyles,\n maxHeight: '208px',\n padding: '8px 0'\n }),\n group: (baseStyles) => ({\n ...baseStyles,\n padding: '0 0 8px 0'\n }),\n input: (baseStyles) => ({\n ...baseStyles,\n height: '16px',\n color: 'rgba(0, 0, 0, 0.87)',\n fontSize: '14px',\n lineHeight: '16px',\n margin: '16px 0 0',\n padding: 0\n }),\n option: (baseStyles) => ({\n ...baseStyles,\n fontSize: '13px',\n lineHeight: '15px',\n height: '32px'\n })\n};\n\nexport const overloadMenuListStyle = {\n menuList: (baseStyles) => ({\n ...baseStyles,\n padding: 0\n })\n};\n\nexport const withoutLabelInputStyle = {\n input: (baseStyles) => ({\n ...baseStyles,\n height: '16px',\n color: 'rgba(0, 0, 0, 0.87)',\n fontSize: '14px',\n lineHeight: '16px',\n margin: 0,\n padding: 0\n })\n};\n","import React, {useRef, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {defaultTo, identity, isEmpty, path, prop} from 'ramda';\nimport DropdownIndicator from '../commonReactSelectComponents/DropdownIndicator';\nimport Menu from './components/Menu';\nimport AsyncSelect from '../ReactSelect/AsyncSelect';\nimport Select from '../ReactSelect/Select';\nimport {EmptyStub} from '../../core';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {useInputStyles} from '../editors/constants';\nimport SingleValue from './components/SingleValue';\nimport {useStyles, customStyles, overloadMenuListStyle, withoutLabelInputStyle} from './styles';\n\nconst DropDownSelector = ({\n value,\n label,\n createLabel,\n getOptions,\n options,\n height = 46,\n onChange = identity,\n onCreate,\n onClear = identity,\n components,\n textFieldInputRef,\n TextFieldProps,\n classes,\n ...otherProps\n}) => {\n const styles = useStyles({height});\n const underlineStyle = useInputStyles();\n const [open, setOpen] = useState(false);\n const inputRef = useRef(null);\n\n const SelectComponent = getOptions ? AsyncSelect : Select;\n\n const showIndicatorSeparator = prop('ClearIndicator', components)\n ? {}\n : {IndicatorSeparator: EmptyStub, ClearIndicator: EmptyStub};\n\n const handleCreate = onCreate\n ? (value, group) => {\n onCreate(value, group);\n setOpen(false);\n }\n : undefined;\n\n const overloadStylesIfGroup = prop('Group', components) ? overloadMenuListStyle : {};\n const overloadStylesIfNoLabel = isEmpty(label) ? withoutLabelInputStyle : {};\n\n const mergedStyles = {...customStyles, ...overloadStylesIfGroup, ...overloadStylesIfNoLabel};\n const mergedClasses = {...styles, ...classes};\n\n return (\n <SelectComponent\n placeholder=\"\"\n defaultOptions={true}\n {...otherProps}\n value={defaultTo(null, value)}\n loadOptions={getOptions}\n options={options}\n cacheOptions={true}\n onChange={onChange}\n onCreate={handleCreate}\n onClear={onClear}\n createLabel={createLabel}\n classes={mergedClasses}\n styles={mergedStyles}\n components={{\n DropdownIndicator,\n LoadingIndicator: EmptyStub,\n SingleValue,\n Menu,\n ...showIndicatorSeparator,\n ...components\n }}\n menuPlacement=\"auto\"\n TextFieldProps={{\n ...TextFieldProps,\n label,\n variant: 'filled',\n size: 'small',\n classes: {\n ...prop('classes', TextFieldProps),\n root: classnames(styles.formControl, path(['classes', 'root'], TextFieldProps))\n },\n inputProps: {\n ...prop('inputProps', TextFieldProps)\n },\n InputProps: {\n ...prop('InputProps', TextFieldProps),\n classes: {\n ...path(['InputProps', 'classes'], TextFieldProps),\n root: classnames(\n styles.filledInputRoot,\n path(['InputProps', 'classes', 'root'], TextFieldProps)\n ),\n underline: classnames(\n {[underlineStyle.filledInputUnderline]: isEmptyValue(value)},\n path(['InputProps', 'classes', 'underline'], TextFieldProps)\n ),\n focused: classnames('focused', path(['InputProps', 'classes', 'focused'], TextFieldProps))\n }\n },\n InputLabelProps: {\n ...prop('InputLabelProps', TextFieldProps),\n classes: {\n ...path(['InputLabelProps', 'classes'], TextFieldProps),\n root: classnames(\n styles.inputLabel,\n path(['InputLabelProps', 'classes', 'root'], TextFieldProps)\n ),\n shrink: classnames('shrink', path(['InputLabelProps', 'classes', 'shrink'], TextFieldProps))\n },\n shrink: !isEmptyValue(value) ? true : undefined\n },\n ref: textFieldInputRef || inputRef\n }}\n inputRef={textFieldInputRef || inputRef}\n menuIsOpen={open}\n onMenuOpen={() => setOpen(true)}\n onMenuClose={() => setOpen(false)}\n />\n );\n};\n\nexport const DropDownSelectorType = {\n value: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n label: PropTypes.string.isRequired,\n getOptions: PropTypes.func,\n options: PropTypes.array,\n onChange: PropTypes.func,\n onCreate: PropTypes.func,\n onClear: PropTypes.func,\n createLabel: PropTypes.string,\n components: PropTypes.object,\n textFieldInputRef: PropTypes.object,\n TextFieldProps: PropTypes.object,\n height: PropTypes.number,\n classes: PropTypes.object\n};\n\nDropDownSelector.propTypes = DropDownSelectorType;\n\nexport default DropDownSelector;\n","import React, {useMemo, memo} from 'react';\nimport i18n from 'ui-i18n';\nimport {isAvailableEntityType, TEntityType} from '@reltio/mdm-sdk';\nimport {MetadataTypesSelector} from '../MetadataTypesSelector/MetadataTypesSelector';\n\ntype MetadataTypesSelectorProps = React.ComponentProps<typeof MetadataTypesSelector>;\n\ntype Props = {\n entityTypes: TEntityType[];\n selectedEntityTypes: string[];\n onChange: (values: string[]) => void;\n single?: boolean;\n placeholder?: string;\n enableEmptyValueUnderline?: boolean;\n classes?: MetadataTypesSelectorProps['classes'];\n ListLabelProps?: MetadataTypesSelectorProps['ListLabelProps'];\n disabled?: boolean;\n};\n\nexport const EntityTypesSelector = memo(\n ({\n entityTypes,\n selectedEntityTypes,\n single,\n placeholder,\n enableEmptyValueUnderline,\n onChange,\n classes = {},\n ListLabelProps = {},\n disabled = false\n }: Props) => {\n const items = useMemo(() => entityTypes.filter(isAvailableEntityType), [entityTypes]);\n\n return (\n <MetadataTypesSelector\n items={items}\n selectedItemsUris={selectedEntityTypes}\n single={single}\n placeholder={placeholder}\n enableEmptyValueUnderline={enableEmptyValueUnderline}\n onChange={onChange}\n classes={classes}\n ListLabelProps={ListLabelProps}\n disabled={disabled}\n label={i18n.text('Entity type')}\n dataReltioId=\"entity-type-selector\"\n selectionPopupTitle={i18n.text('Select entity types')}\n />\n );\n }\n);\n\nEntityTypesSelector.displayName = 'EntityTypesSelector';\n","import React, {forwardRef, useCallback, useContext} from 'react';\nimport {ViewIdContext, UrlGeneratorsContext, useMdmUiPath, useMdmAction} from '../../contexts';\n\ntype Props = Omit<React.HTMLProps<HTMLAnchorElement>, 'href' | 'onClick' | 'target'> & {\n value: string;\n screen?: string;\n shouldOpenInNewTab?: boolean;\n};\n\nconst EntityUriLink = forwardRef(\n (\n {value, children, screen, className, shouldOpenInNewTab = false, ...otherProps}: Props,\n ref: React.Ref<HTMLAnchorElement>\n ) => {\n const viewId = useContext(ViewIdContext);\n const {generateEntityUrl} = useContext(UrlGeneratorsContext);\n\n const openEntity = useMdmAction('openEntity');\n const uiPath = useMdmUiPath();\n\n const generateEntityUrlByUri = (uri: string) => generateEntityUrl({uiPath, uri, screen});\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>) => {\n openEntity({uri: value, viewId, screen});\n e.stopPropagation();\n e.preventDefault();\n },\n [openEntity, screen, value, viewId]\n );\n\n return (\n <a\n ref={ref}\n href={generateEntityUrlByUri(value)}\n onClick={shouldOpenInNewTab ? undefined : handleClick}\n target={shouldOpenInNewTab ? '_blank' : '_self'}\n className={className}\n {...otherProps}\n >\n {children}\n </a>\n );\n }\n);\n\nEntityUriLink.displayName = 'EntityUriLink';\n\nexport default EntityUriLink;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n listLabelContainer: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n justifyContent: 'space-between',\n height: '100%',\n width: '100%'\n },\n listLabel: {\n visibility: 'hidden',\n position: 'absolute',\n overflow: 'hidden'\n },\n visibleItemsLabel: {\n textOverflow: 'ellipsis',\n marginRight: '5px',\n overflow: 'hidden',\n flex: 1,\n flexBasis: 'auto'\n },\n hiddenCount: {\n color: 'rgba(0,0,0,0.87)',\n fontSize: '13px',\n lineHeight: '15px',\n padding: '5px 8px',\n borderRadius: '16px',\n backgroundColor: 'rgba(0,0,0,.12)'\n }\n});\n","import {isNil} from 'ramda';\n\nconst ITEMS_SEPARATOR = ', ';\nconst ALWAYS_VISIBLE_ITEMS_COUNT = 1;\nconst HIDDEN_COUNT_WIDTH = 35;\n\nconst countHiddenItems = (list: string[], labelEl: HTMLDivElement) => {\n const itemsCount = list.length;\n const overflowItemsCount = countOverflowItems(list, labelEl);\n const visibleItemsCount = Math.max(ALWAYS_VISIBLE_ITEMS_COUNT, itemsCount - overflowItemsCount);\n return itemsCount - visibleItemsCount;\n};\n\nconst countOverflowItems = (list: string[], labelEl: HTMLDivElement) => {\n if (labelEl) {\n const firstOverflowItemIndex = findFirstOverflowItemIndex(list, labelEl);\n return firstOverflowItemIndex === -1 ? 0 : list.length - firstOverflowItemIndex;\n } else {\n return 0;\n }\n};\n\nconst findFirstOverflowItemIndex = (list: string[], labelEl: HTMLDivElement) => {\n const {childNodes, clientLeft, clientWidth} = labelEl;\n if (childNodes.length > 0) {\n const [textNode] = Array.from(childNodes);\n const range = document.createRange();\n range.setStart(textNode, 0);\n\n for (let index = 0; index < list.length; index++) {\n range.setEnd(textNode, range.endOffset + list[index].length);\n const {width: rangeWidth} = range.getBoundingClientRect();\n if (clientLeft + rangeWidth > clientWidth) {\n return index;\n }\n if (index !== list.length - 1) {\n range.setEnd(textNode, range.endOffset + ITEMS_SEPARATOR.length);\n }\n }\n }\n return -1;\n};\n\nconst getListLabel = (list: string[]) => list.join(ITEMS_SEPARATOR);\n\nconst getListLabelWidth = (maxWidth?: number) => {\n const maxCssWidth = isNil(maxWidth) ? '100%' : `${maxWidth}px`;\n return `calc(${maxCssWidth} - ${HIDDEN_COUNT_WIDTH}px)`;\n};\n\nexport {countHiddenItems, getListLabel, getListLabelWidth};\n","import React, {useEffect, useRef, useState} from 'react';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport {useStyles} from './styles';\nimport {countHiddenItems, getListLabel, getListLabelWidth} from './helpers';\n\ntype Props = {\n maxWidth?: number;\n list: string[];\n};\n\nexport const ListLabel = ({list, maxWidth}: Props) => {\n const styles = useStyles();\n\n const labelRef = useRef<HTMLDivElement>();\n const [hiddenItemsCount, setHiddenItemsCount] = useState(0);\n useEffect(() => {\n setHiddenItemsCount(countHiddenItems(list, labelRef.current));\n }, [list]);\n\n const listLabel = getListLabel(list);\n const hasHiddenItems = hiddenItemsCount > 0;\n const visibleItemsLabel = hasHiddenItems ? getListLabel(list.slice(0, -hiddenItemsCount)) : listLabel;\n\n return (\n <Tooltip title={hasHiddenItems ? listLabel : ''}>\n <div className={styles.listLabelContainer}>\n <div style={{width: getListLabelWidth(maxWidth)}} className={styles.listLabel} ref={labelRef}>\n {listLabel}\n </div>\n <div className={styles.visibleItemsLabel}>{visibleItemsLabel}</div>\n {hasHiddenItems && <div className={styles.hiddenCount}>{`+${hiddenItemsCount}`}</div>}\n </div>\n </Tooltip>\n );\n};\n","import React, {memo} from 'react';\nimport {always} from 'ramda';\nimport {TEntityType, TRelationType} from '@reltio/mdm-sdk';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport Highlighter from '../Highlighter/Highlighter';\nimport VirtualGroupedList from '../VirtualGroupedList/VirtualGroupedList';\n\nconst ITEM_HEIGHT = 32;\nconst getItemSize = always(ITEM_HEIGHT);\n\ntype AttributeListItemProps = React.ComponentPropsWithoutRef<typeof AttributeListItem>;\n\ntype Item = {\n item: {\n item: TEntityType | TRelationType;\n };\n index: number;\n};\n\ntype Props = {\n selectedItems: string[];\n onItemClick: AttributeListItemProps['onClick'];\n focusIndex: number;\n items: Item[];\n width: number;\n height: number;\n};\n\nexport const SelectMetadataTypesList = memo(\n ({selectedItems, onItemClick, focusIndex, width, height, ...otherProps}: Props) => {\n const renderItem = (style, {item}, index) => {\n const isSelected = !!selectedItems.find((uri) => item.uri === uri);\n const isFocused = index === focusIndex;\n return (\n <AttributeListItem\n key={item.uri}\n onClick={onItemClick}\n checked={isSelected}\n data={item}\n label={<Highlighter text={item.label} highlight={item.filterText} />}\n labelInText={item.label}\n style={style}\n isFocused={isFocused}\n hideIcon={true}\n LogoIcon={item.LogoIcon}\n />\n );\n };\n\n return (\n <VirtualGroupedList\n getItemSize={getItemSize}\n renderItem={renderItem}\n focusIndex={focusIndex}\n fixedTitle={false}\n disableHorizontalScrollbar={true}\n width={width as any}\n height={height}\n {...otherProps}\n />\n );\n }\n);\n\nSelectMetadataTypesList.displayName = 'SelectMetadataTypesList';\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n borderRadius: '4px 4px 0 0',\n margin: 0,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n inputLabel: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n width: '100%',\n cursor: 'pointer',\n top: 'calc(50% - 23px)'\n },\n inputText: {\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n height: '25px',\n width: 'calc(100% - 53px)',\n paddingTop: '18px',\n paddingBottom: '4px',\n color: 'rgba(0,0,0,0.87)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n input: {\n width: 0,\n cursor: 'pointer',\n '&.Mui-disabled': {\n backgroundColor: 'transparent',\n cursor: 'default'\n },\n '&$emptyInput': {\n width: '100%'\n }\n },\n emptyInput: {},\n disabledInput: {},\n disabledPointer: {},\n disabledUnderline: {},\n inputRoot: {\n flex: 1,\n paddingRight: '4px',\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px',\n cursor: 'pointer',\n '&$disabledInput': {\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n cursor: 'pointer',\n '&$disabledPointer': {\n cursor: 'default'\n },\n '&$disabledUnderline::before': {\n borderBottomStyle: 'solid'\n }\n }\n },\n icon: {\n transform: 'rotate(0deg)',\n transition: 'transform 0.35s ease'\n },\n 'popup-opened-icon': {\n transform: 'rotate(-180deg)'\n }\n});\n","import React, {useRef, useState, useCallback, useMemo, memo} from 'react';\nimport classnames from 'classnames';\nimport {pipe, propEq, prop} from 'ramda';\nimport {TEntityType, TRelationType, utils} from '@reltio/mdm-sdk';\nimport TextField from '@mui/material/TextField';\nimport ArrowDropDown from '@mui/icons-material/ArrowDropDown';\nimport {ListLabel} from './ListLabel/ListLabel';\nimport {SmallIconButton} from '../SmallIconButton';\nimport SelectionPopup from '../SelectionPopup/SelectionPopup';\nimport {useKeyboardNavigation} from '../SelectionPopup/helpers';\nimport {SelectMetadataTypesList} from './SelectMetadataTypesList';\nimport {useStyles} from './styles';\n\nconst MIN_CONTAINER_WIDTH = 255;\nconst LIST_HEIGHT = 245;\nconst POPUP_HEIGHT = 355;\n\ntype ListLabelProps = React.ComponentPropsWithoutRef<typeof ListLabel>;\n\ntype Classes = {\n inputText?: string;\n input?: string;\n root?: string;\n label?: string;\n};\n\ntype Props = {\n items: (TEntityType | TRelationType)[];\n selectedItemsUris: string[];\n onChange: (values: string[]) => void;\n label: string;\n dataReltioId: string;\n selectionPopupTitle: string;\n classes?: Classes;\n placeholder?: string;\n ListLabelProps?: Omit<ListLabelProps, 'list'>;\n disabled?: boolean;\n enableEmptyValueUnderline?: boolean;\n single?: boolean;\n};\n\nexport const MetadataTypesSelector = memo(\n ({\n placeholder,\n classes = {},\n items,\n selectedItemsUris,\n onChange,\n ListLabelProps = {},\n disabled,\n enableEmptyValueUnderline,\n single,\n label,\n dataReltioId,\n selectionPopupTitle\n }: Props) => {\n const styles = useStyles();\n\n const [isPopupOpen, setIsPopupOpen] = useState(false);\n const openPopup = useCallback(() => setIsPopupOpen(true), []);\n const closePopup = useCallback(() => setIsPopupOpen(false), []);\n const [filterText, setFilterText] = useState('');\n\n const clearFilterText = useCallback(() => setFilterText(''), []);\n\n const handleClose = useCallback(pipe(clearFilterText, closePopup), [closePopup, clearFilterText]);\n\n const filteredItems = items\n .filter(({label}) => utils.strings.search(label, filterText))\n .map((item, index) => ({item: {item: {...item, filterText}}, index}));\n\n const selectedLabels = useMemo(\n () => selectedItemsUris.map((uri) => items.find(propEq('uri', uri))).map(prop('label')),\n [selectedItemsUris, items]\n ) as string[];\n\n const handleListItemClick = useCallback(\n (item, checked) => {\n if (single) {\n onChange(checked ? [item.uri] : []);\n handleClose();\n } else {\n onChange(\n checked\n ? selectedItemsUris.concat(item.uri)\n : selectedItemsUris.filter((uri) => uri !== item.uri)\n );\n }\n },\n [selectedItemsUris, onChange, single, handleClose]\n );\n\n const handleSearchOnEnter = useCallback(\n ({item}) => {\n const checked = !selectedItemsUris.includes(item.uri);\n handleListItemClick(item, checked);\n },\n [selectedItemsUris, handleListItemClick]\n );\n\n const {focusIndex, handleKeyDown} = useKeyboardNavigation({\n items: filteredItems,\n open: isPopupOpen,\n onSelectFocusedItem: handleSearchOnEnter,\n selectedItems: selectedItemsUris,\n onClose: handleClose\n });\n\n const rootRef = useRef<HTMLDivElement>();\n const rootWidth = rootRef.current ? rootRef.current.getBoundingClientRect().width : 0;\n const containerWidth = Math.max(rootWidth, MIN_CONTAINER_WIDTH);\n\n const noTypesSelected = selectedItemsUris.length === 0;\n\n return (\n <>\n <TextField\n label={label}\n ref={rootRef}\n InputProps={{\n startAdornment:\n noTypesSelected && !placeholder ? null : (\n <div className={classnames(styles.inputText, classes.inputText)}>\n {noTypesSelected ? (\n <div>{placeholder}</div>\n ) : (\n <ListLabel {...ListLabelProps} list={selectedLabels} />\n )}\n </div>\n ),\n classes: {\n root: styles.inputRoot,\n input: classnames(styles.input, classes.input, {\n [styles.emptyInput]: noTypesSelected && !placeholder\n }),\n disabled: classnames(styles.disabledInput, {[styles.disabledPointer]: disabled}),\n underline: styles.disabledUnderline\n },\n endAdornment: (\n <SmallIconButton\n size={'L'}\n icon={ArrowDropDown}\n iconClassName={classnames(styles.icon, {\n [styles['popup-opened-icon']]: isPopupOpen\n })}\n disabled={disabled}\n />\n ),\n readOnly: true,\n disableUnderline: noTypesSelected && !enableEmptyValueUnderline\n }}\n inputProps={{\n tabIndex: -1\n }}\n InputLabelProps={{\n classes: {\n root: classnames(styles.inputLabel, classes.label)\n }\n }}\n value=\"\"\n onClick={disabled ? undefined : openPopup}\n classes={{root: classnames(styles.root, classes.root)}}\n size=\"small\"\n variant=\"filled\"\n disabled={disabled}\n data-reltio-id={dataReltioId}\n />\n <SelectionPopup\n open={isPopupOpen}\n anchorEl={rootRef.current}\n onClose={handleClose}\n onSearch={setFilterText}\n title={selectionPopupTitle}\n containerWidth={containerWidth}\n containerHeight={POPUP_HEIGHT}\n searchInputOnKeyDown={handleKeyDown}\n transformOrigin={{horizontal: 'left', vertical: 'top'}}\n anchorOrigin={{horizontal: 'left', vertical: 'bottom'}}\n PaperProps={{['data-reltio-id']: `${dataReltioId}-popup`}}\n >\n <SelectMetadataTypesList\n items={filteredItems}\n onItemClick={handleListItemClick}\n selectedItems={selectedItemsUris}\n width={containerWidth}\n height={LIST_HEIGHT}\n focusIndex={focusIndex}\n />\n </SelectionPopup>\n </>\n );\n }\n);\n\nMetadataTypesSelector.displayName = 'MetadataTypesSelector';\n","import AsyncSelect from 'react-select/async';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(AsyncSelect);\n","import React, {useMemo, memo} from 'react';\nimport i18n from 'ui-i18n';\nimport {isAvailableRelationType, TRelationType} from '@reltio/mdm-sdk';\nimport {MetadataTypesSelector} from '../MetadataTypesSelector/MetadataTypesSelector';\n\ntype MetadataTypesSelectorProps = React.ComponentProps<typeof MetadataTypesSelector>;\n\ntype Props = {\n relationTypes: TRelationType[];\n selectedRelationTypes: string[];\n enableEmptyValueUnderline?: boolean;\n onChange: (values: string[]) => void;\n single?: boolean;\n placeholder?: string;\n classes?: MetadataTypesSelectorProps['classes'];\n ListLabelProps?: MetadataTypesSelectorProps['ListLabelProps'];\n disabled?: boolean;\n};\n\nexport const RelationTypesSelector = memo(\n ({\n relationTypes,\n selectedRelationTypes,\n single,\n placeholder,\n enableEmptyValueUnderline,\n onChange,\n classes = {},\n ListLabelProps = {},\n disabled = false\n }: Props) => {\n const items = useMemo(() => relationTypes.filter(isAvailableRelationType), [relationTypes]);\n\n return (\n <MetadataTypesSelector\n items={items}\n selectedItemsUris={selectedRelationTypes}\n single={single}\n placeholder={placeholder}\n enableEmptyValueUnderline={enableEmptyValueUnderline}\n onChange={onChange}\n classes={classes}\n ListLabelProps={ListLabelProps}\n disabled={disabled}\n label={i18n.text('Relation type')}\n dataReltioId=\"relation-type-selector\"\n selectionPopupTitle={i18n.text('Select relation types')}\n />\n );\n }\n);\n\nRelationTypesSelector.displayName = 'RelationTypesSelector';\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n mark: {\n color: 'red'\n }\n});\n","import React from 'react';\nimport {useStyles} from './styles';\n\nconst RequiredMark = () => {\n const styles = useStyles();\n\n return <span className={styles.mark}>*</span>;\n};\n\nexport default RequiredMark;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n profileBandNavigation: {\n marginBottom: '10px'\n },\n comments: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n});\n","import React, {memo, useMemo} from 'react';\nimport classnames from 'classnames';\nimport {\n CollaborationObjectTypes,\n createRelatedObjectUris,\n Entity,\n getEntityUriForLink,\n getProfileBandObjectIdsForCollaboration,\n HistorySlice\n} from '@reltio/mdm-sdk';\n\nimport ProfileBand from '../ProfileBand/ProfileBand';\nimport {ProfileBandNavigation} from '../ProfileBandNavigation';\nimport CommentsContainer from '../CommentsContainer/CommentsContainer';\nimport {CollaborationContextProvider} from '../../contexts';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA} from '../../constants';\nimport {useCollaboration} from '../../hooks';\nimport {ProfileBandHistory} from '../history';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n entity: Entity;\n className?: string;\n historySlice?: HistorySlice;\n};\n\nexport const ScreenProfileBand = memo(({entity, className, historySlice}: Props) => {\n const styles = useStyles();\n const objectIds = useMemo(() => getProfileBandObjectIdsForCollaboration(entity), [entity]);\n const collaboration = useCollaboration({objectIds});\n const entityUri = getEntityUriForLink(entity);\n\n return (\n <CollaborationContextProvider collaboration={collaboration}>\n <ProfileBand\n className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)}\n entity={historySlice?.aEntity || entity}\n >\n {historySlice ? (\n <ProfileBandHistory />\n ) : (\n <>\n <ProfileBandNavigation className={styles.profileBandNavigation} />\n <CommentsContainer\n className={styles.comments}\n uri={entityUri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </>\n )}\n </ProfileBand>\n </CollaborationContextProvider>\n );\n});\n\nScreenProfileBand.displayName = 'ScreenProfileBand';\n","import {makeStyles} from '@mui/styles';\n\nconst styles = makeStyles({\n value: {\n color: 'rgba(0, 0, 0, 0.87)'\n },\n placeholder: {\n color: 'rgba(0, 0, 0, 0.38)',\n fontSize: '14px !important'\n }\n});\n\nexport default styles;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@mui/material/Typography';\n\nimport useStyles from './styles';\n\nconst DropDownValue = ({selectProps: {menuIsOpen}, data: {label}}) => {\n const styles = useStyles();\n return (\n !menuIsOpen && (\n <Typography variant=\"body2\" classes={{root: styles.value}}>\n {label}\n </Typography>\n )\n );\n};\n\nDropDownValue.propTypes = {\n selectProps: PropTypes.shape({\n menuIsOpen: PropTypes.bool\n }),\n data: PropTypes.shape({\n label: PropTypes.string\n })\n};\n\nexport default DropDownValue;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@mui/material/Typography';\n\nimport useStyles from './styles';\n\nconst DropDownPlaceholder = (props) => {\n const styles = useStyles();\n const {innerProps = {}, children} = props;\n\n return (\n <Typography className={styles.placeholder} {...innerProps}>\n {children}\n </Typography>\n );\n};\n\nDropDownPlaceholder.propTypes = {\n children: PropTypes.node,\n innerProps: PropTypes.object,\n selectProps: PropTypes.object.isRequired\n};\n\nexport default DropDownPlaceholder;\n","import React, {memo} from 'react';\n\nimport DropDownSelector from '../DropDownSelector/DropDownSelector';\nimport DropDownValue from './DropDownValue';\nimport DropDownPlaceholder from './DropDownPlaceholder';\n\nconst components = {\n SingleValue: DropDownValue,\n Placeholder: DropDownPlaceholder\n};\n\nconst SimpleDropDownSelector = ({...otherProps}) => <DropDownSelector components={components} {...otherProps} />;\n\nexport default memo(SimpleDropDownSelector);\n","import React from 'react';\nimport {generateEntityUrlForOldMode, generatePivotingUrlForOldMode, generateTagUrlForOldMode} from '@reltio/mdm-sdk';\n\ntype GenerateEntityUrl = (params: {uiPath: string; uri: string; screen?: string}) => string;\ntype GeneratePivotingUrl = (params: {uiPath: string; uri: string; value: string}) => string;\ntype GenerateTagUrl = (params: {uiPath: string; tag: string; entityUri: string}) => string;\n\ntype UrlGenerators = {\n generateEntityUrl?: GenerateEntityUrl;\n generatePivotingUrl?: GeneratePivotingUrl;\n generateTagUrl?: GenerateTagUrl;\n};\n\nexport const UrlGeneratorsContext = React.createContext<UrlGenerators>({\n generateEntityUrl: generateEntityUrlForOldMode,\n generatePivotingUrl: generatePivotingUrlForOldMode,\n generateTagUrl: generateTagUrlForOldMode\n});\n\nUrlGeneratorsContext.displayName = 'UrlGeneratorsContext';\n","import React from 'react';\n\nexport const ViewIdContext = React.createContext<string>(null);\n\nViewIdContext.displayName = 'ViewIdContext';\n","import {useCallback} from 'react';\n\nimport {\n Relation,\n EditingConnection,\n isAvailableRelationBetweenEntities,\n Directions,\n getRelationType,\n removeEntityAttribute,\n addEntityAttributes,\n changeEntityAttribute,\n AttributeItem,\n Entity\n} from '@reltio/mdm-sdk';\n\nimport {pipe} from 'ramda';\nimport {useMdmMetadata} from '../contexts';\n\ntype EditRelationActions = {\n onChangeAttribute: (attribute: AttributeItem) => void;\n onAddAttributes: (attributes: AttributeItem[]) => void;\n onRemoveAttribute: (attributes: AttributeItem) => void;\n onChangeEntity: (entity: Entity) => void;\n onChangeRelationType: (value: {type: string; direction: string}) => void;\n};\n\ntype Props = {\n connection: EditingConnection;\n onConnectionChange: (connection: EditingConnection) => void;\n relatedEntity?: Entity;\n};\n\nexport const useEditableConnection = ({connection, onConnectionChange, relatedEntity}: Props): EditRelationActions => {\n const metadata = useMdmMetadata();\n\n const onRelationChange = useCallback(\n (relation: Relation) => onConnectionChange({...connection, relation}),\n [connection, onConnectionChange]\n );\n\n const handleAddAttributes = useCallback(pipe(addEntityAttributes(connection.relation), onRelationChange), [\n connection.relation,\n onRelationChange\n ]);\n\n const handleChangeAttribute = useCallback(pipe(changeEntityAttribute(connection.relation), onRelationChange), [\n connection.relation,\n onRelationChange\n ]);\n\n const handleRemoveAttribute = useCallback(pipe(removeEntityAttribute(connection.relation), onRelationChange), [\n connection.relation,\n onRelationChange\n ]);\n\n const handleChangeRelationType = useCallback(\n ({type, direction}) => {\n const newConnection: EditingConnection = {\n entity:\n connection.entity &&\n isAvailableRelationBetweenEntities(\n direction === Directions.OUT,\n connection.entity,\n relatedEntity,\n metadata,\n getRelationType(metadata, type)\n )\n ? connection.entity\n : null,\n relation: {\n ...connection.relation,\n attributes: {},\n type,\n direction\n }\n };\n\n onConnectionChange(newConnection);\n },\n [connection, onConnectionChange, relatedEntity, metadata]\n );\n\n const handleChangeEntity = useCallback(\n (entity) => onConnectionChange({...connection, entity}),\n [connection, onConnectionChange]\n );\n\n return {\n onAddAttributes: handleAddAttributes,\n onChangeAttribute: handleChangeAttribute,\n onRemoveAttribute: handleRemoveAttribute,\n onChangeEntity: handleChangeEntity,\n onChangeRelationType: handleChangeRelationType\n };\n};\n","import React from 'react';\n\nconst SvgNestedAttribute: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={24} height={24} viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M14 11v-1a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-1h-3v1a1 1 0 01-1 1H6a1 1 0 01-1-1v-4a1 1 0 011-1h4a1 1 0 011 1v1h3z\"\n fill=\"#000\"\n stroke=\"none\"\n strokeWidth={1}\n fillRule=\"evenodd\"\n />\n </svg>\n );\n};\n\nexport default SvgNestedAttribute;\n","import Graph from 'graphology';\nimport {\n always,\n append,\n chain,\n cond,\n either,\n equals,\n evolve,\n includes,\n map,\n pick,\n pipe,\n prop,\n propEq,\n reject,\n T,\n uniq,\n without\n} from 'ramda';\nimport {bidirectional} from 'graphology-shortest-path';\nimport {toUndirected} from 'graphology-operators';\nimport {\n getEndObjectUri,\n getRelationType,\n getStartObjectUri,\n HopEntity,\n HopRelation,\n HopsResponse,\n Metadata,\n Relation,\n TRelationType\n} from '@reltio/mdm-sdk';\n\nconst addRelationToHopsData = (data: HopsResponse, respondedRelation: Relation, metadata: Metadata): HopsResponse => {\n const startEntityUri = respondedRelation.startObject.objectURI;\n const endEntityUri = respondedRelation.endObject.objectURI;\n const nodeUris = [startEntityUri, endEntityUri];\n const entitiesUris = data.entities.map(prop('uri'));\n const relationType: TRelationType = getRelationType(metadata, respondedRelation.type);\n\n const extraEntityUri = nodeUris.find((node) => !includes(node, entitiesUris));\n const extraEntity =\n extraEntityUri &&\n (respondedRelation.startObject.objectURI === extraEntityUri\n ? respondedRelation.startObject\n : respondedRelation.endObject);\n\n const extraEntityFormatted = extraEntity && {\n type: extraEntity.type,\n label: extraEntity.label,\n uri: extraEntity.objectURI,\n traversedRelations: 0,\n untraversedRelations: 1\n };\n\n const relation: HopRelation = {\n ...pick(['uri', 'type', 'attributes', 'startDate', 'endDate', 'crosswalks', 'direction'], respondedRelation),\n startObject: pick(['objectURI', 'directionalLabel'], respondedRelation.startObject),\n endObject: pick(['objectURI', 'directionalLabel'], respondedRelation.endObject),\n direction: relationType?.direction\n };\n\n const updateTraversedRelationsCount = (entity) => {\n if (entity.uri === startEntityUri || entity.uri === endEntityUri) {\n return {\n ...entity,\n traversedRelations: entity.traversedRelations + 1\n };\n }\n return entity;\n };\n\n const newData = {\n entities: (extraEntityFormatted ? data.entities.concat([extraEntityFormatted]) : data.entities).map(\n updateTraversedRelationsCount\n ),\n relations: (data.relations || []).concat([relation])\n };\n\n return newData;\n};\n\nconst removeRelationFromHopsData = (\n entityUri: string,\n relationUri: string,\n graph: Graph,\n data: HopsResponse\n): {updatedData: HopsResponse; removedEntitiesUris: string[]} => {\n const relation = data.relations.find(propEq('uri', relationUri));\n const startNodeId: string = getStartObjectUri(relation);\n const endNodeId: string = getEndObjectUri(relation);\n const undirectedGraph = toUndirected(graph);\n const isolatedNodeId: string = cond([\n [() => !bidirectional(undirectedGraph, entityUri, startNodeId), always(startNodeId)],\n [() => !bidirectional(undirectedGraph, entityUri, endNodeId), always(endNodeId)],\n [T, always(null)]\n ])();\n\n const updateTraversedRelationsCount = (entity) => {\n if (entity.uri === startNodeId || entity.uri === endNodeId) {\n return {\n ...entity,\n traversedRelations: entity.traversedRelations - 1\n };\n }\n return entity;\n };\n\n const dataWithoutRelation: HopsResponse = evolve({\n entities: map(updateTraversedRelationsCount),\n relations: reject(propEq('uri', relationUri))\n })(data);\n const {updatedData, removedEntitiesUris} = isolatedNodeId\n ? removeIsolatedSubgraph(isolatedNodeId, dataWithoutRelation)\n : {\n updatedData: dataWithoutRelation,\n removedEntitiesUris: []\n };\n return {updatedData, removedEntitiesUris};\n};\n\nconst removeIsolatedSubgraph = (isolatedNodeId: string, data: HopsResponse) => {\n const isolatedRelations = findSubgraphRelations(isolatedNodeId, data);\n const isolatedEntitiesUris: string[] = pipe(\n getAllRelatedEntitiesUris,\n append(isolatedNodeId),\n uniq\n )(isolatedRelations);\n const updatedData: HopsResponse = evolve({\n relations: reject((relation) => isolatedRelations.includes(relation)),\n entities: reject((entity) => isolatedEntitiesUris.includes(entity.uri))\n })(data);\n return {\n updatedData,\n removedEntitiesUris: isolatedEntitiesUris\n };\n};\n\nconst findSubgraphRelations = (\n nodeId: string,\n data: HopsResponse,\n foundRelations: HopRelation[] = []\n): HopRelation[] => {\n const relations = data.relations\n .filter((relation) => !foundRelations.includes(relation))\n .filter(either(pipe(getStartObjectUri, equals(nodeId)), pipe(getEndObjectUri, equals(nodeId))));\n foundRelations.push(...relations);\n const relatedNodes: string[] = pipe(getAllRelatedEntitiesUris, without([nodeId]))(relations);\n relatedNodes.forEach((relatedNodeId) => findSubgraphRelations(relatedNodeId, data, foundRelations));\n return foundRelations;\n};\n\nconst getAllRelatedEntitiesUris = (relations: HopRelation[]): string[] =>\n pipe(\n chain((relation) => [getStartObjectUri(relation), getEndObjectUri(relation)]),\n uniq\n )(relations);\n\nconst mergeHopsData = (data: HopsResponse, newData: HopsResponse, hopsEntityUri: string) => {\n const {entities: hopsEntities = [], relations: hopsRelations = []} = newData;\n\n const newEntities = hopsEntities.reduce(\n (entities: HopEntity[], entity: HopEntity): HopEntity[] => {\n if (!entities.some(({uri}) => uri === entity.uri)) {\n entities.push(entity);\n } else if (entity.uri === hopsEntityUri) {\n const index = entities.findIndex(({uri}) => uri === hopsEntityUri);\n\n entities[index] = {\n ...entities[index],\n traversedRelations: entity.traversedRelations,\n untraversedRelations: entity.untraversedRelations\n };\n }\n return entities;\n },\n [...(data.entities || [])]\n );\n\n const newRelations = hopsRelations.reduce(\n (relations: HopRelation[], relation: HopRelation): HopRelation[] => {\n if (!relations.some(({uri}) => uri === relation.uri)) {\n relations.push(relation);\n }\n\n return relations;\n },\n [...(data.relations || [])]\n );\n\n return {\n entities: newEntities,\n relations: newRelations\n };\n};\n\nexport {addRelationToHopsData, removeRelationFromHopsData, mergeHopsData};\n","import Graph from 'graphology';\nimport {toUndirected} from 'graphology-operators';\nimport {bidirectional} from 'graphology-shortest-path';\nimport {uniq} from 'ramda';\nimport {HopsResponse, getLabel} from '@reltio/mdm-sdk';\nimport processResponseToGraph from './processResponseToGraph';\n\nexport const fillGraphWithHopsResponse = (graph: Graph, data: HopsResponse) => {\n const graphologyData = processResponseToGraph(data);\n graphologyData.nodes.forEach((node) => {\n if (!graph.hasNode(node.id)) {\n graph.addNode(node.id, {\n label: getLabel(node.name),\n entityTypeUri: node.entityTypeUri,\n traversedRelationsCount: node.traversedRelationsCount,\n untraversedRelationsCount: node.untraversedRelationsCount,\n x: 1,\n y: 1\n });\n }\n });\n graphologyData.edges.forEach((edge) => {\n const isSelfRelation = edge.from === edge.to;\n\n if (!graph.hasEdge(edge.key)) {\n graph.addEdgeWithKey(edge.key, edge.from, edge.to, {\n size: 1,\n color: 'rgba(0, 0, 0, 0.2)',\n forceLabel: isSelfRelation,\n loop: isSelfRelation,\n relationTypeUri: edge.relationTypeUri,\n direction: edge.direction\n });\n }\n });\n};\n\nexport const removeNodesFromGraph = (graph: Graph, nodesIdsToRemove?: string[]) => {\n (nodesIdsToRemove || []).forEach((id) => {\n graph.dropNode(id);\n });\n};\n\nconst getIsolatedNodeId = (undirectedGraph: Graph, firstNode: string, secondaryNode: string) => {\n return !bidirectional(undirectedGraph, firstNode, secondaryNode) ? secondaryNode : null;\n};\n\nconst findSubgraphNodes = (nodeId: string, graph: Graph, foundNodes: string[] = []): string[] => {\n const nodes = graph.neighbors(nodeId).filter((node) => !foundNodes.includes(node));\n foundNodes.push(...nodes);\n nodes.forEach((neighborNodeId) => findSubgraphNodes(neighborNodeId, graph, foundNodes));\n return foundNodes;\n};\n\nexport const getIsolatedNodes = (entityUri: string, mainNode: string, nodes: string[], graph: Graph) => {\n const undirectedGraph = toUndirected(graph);\n\n const dropEdge = (firstNode: string, secondNode: string) => {\n const edges = undirectedGraph.filterEdges(firstNode, secondNode, (x) => !!x);\n edges.forEach((edge) => undirectedGraph.dropEdge(edge));\n };\n\n nodes.forEach((node) => {\n dropEdge(mainNode, node);\n undirectedGraph.forEachNeighbor(node, (neighborNode) => {\n dropEdge(node, neighborNode);\n });\n });\n\n const isolatedNodes = [];\n undirectedGraph.nodes().forEach((node) => {\n if (getIsolatedNodeId(undirectedGraph, entityUri, node)) {\n isolatedNodes.push(node);\n }\n });\n\n return uniq(\n isolatedNodes.reduce(\n (nodes, isolatedNode) => findSubgraphNodes(isolatedNode, undirectedGraph, nodes),\n [...isolatedNodes]\n )\n );\n};\n","import {HopsResponse, RelationTypeDirection} from '@reltio/mdm-sdk';\nimport {Node, Edge, GraphologyGraphData} from '../types/graphDataTypes';\n\nconst processResponseToGraph = (data: HopsResponse): GraphologyGraphData => {\n const nodesSet = new Set<string>();\n const relationsSet = new Set<string>();\n data.entities.forEach((entity) => nodesSet.add(entity.uri));\n const filteredRelations =\n data.relations?.filter(\n (relation) => nodesSet.has(relation.startObject.objectURI) && nodesSet.has(relation.endObject.objectURI)\n ) || [];\n filteredRelations.forEach((relation) => {\n relationsSet.add(\n `${relation.startObject.objectURI}--${relation.endObject.objectURI}--${relation.uri}--${relation.type}--${relation.direction}`\n );\n });\n const nodes: Node[] = data.entities.map((entity) => ({\n id: entity.uri,\n name: entity.label,\n entityTypeUri: entity.type,\n traversedRelationsCount: entity.traversedRelations,\n untraversedRelationsCount: entity.untraversedRelations\n }));\n const edges: Edge[] = [];\n relationsSet.forEach((relationKey) => {\n const [from, to, key, relationTypeUri, direction] = relationKey.split('--');\n edges.push({from, to, key, relationTypeUri, direction: direction as RelationTypeDirection});\n });\n return {nodes, edges};\n};\n\nexport default processResponseToGraph;\n","import {useCallback, useEffect, useState, useContext} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Graph, {MultiGraph} from 'graphology';\nimport {difference, prop} from 'ramda';\nimport {\n Entity,\n getHops,\n getRequestErrorMessage,\n HopsResponse,\n isDataTenantEntity,\n isTempUri,\n getLastUriPart,\n createRelation,\n getEntity,\n removeRelation,\n Relation,\n Metadata,\n GraphLayout,\n isAbortError\n} from '@reltio/mdm-sdk';\nimport i18n from 'ui-i18n';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {usePrevious, useSafePromise, PageRequestsAbortingContext} from '@reltio/components';\n\nimport {GraphPathType, GraphState} from '../types/graphDataTypes';\nimport {addRelationToHopsData, removeRelationFromHopsData, mergeHopsData} from '../utils/hopsData';\nimport {fillGraphWithHopsResponse, getIsolatedNodes, removeNodesFromGraph} from '../utils/graph';\n\nexport const useGraphLoader = (\n entity: Entity,\n graphTypeUri?: string,\n layout?: GraphLayout\n): Pick<\n GraphState,\n | 'graphLoading'\n | 'data'\n | 'onAddRelation'\n | 'onDeleteRelation'\n | 'onCollapseEntity'\n | 'onExpandEntity'\n | 'graphologyGraph'\n> => {\n const [graphologyGraph, setGraphologyGraph] = useState<Graph>(null);\n const dispatch = useDispatch();\n const [data, setData] = useState<HopsResponse>(null);\n const [loading, setLoading] = useState(false);\n const entityUri = entity?.uri;\n const isDTEntity = isDataTenantEntity(entity);\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const safeLoadHopsPromise = useSafePromise();\n const safeLoadHopsForEntityPromise = useSafePromise();\n const isTreeLayout = layout === GraphLayout.TREE;\n const prevLayout = usePrevious(layout);\n const signal = useContext(PageRequestsAbortingContext);\n\n const isPrevAndCurrentLayoutTree = prevLayout === GraphLayout.TREE && isTreeLayout;\n\n const loadHopsForEntity = useCallback(\n (uri: string, deep = 1) => {\n return safeLoadHopsForEntityPromise(\n getHops({\n uri,\n deep,\n limitCreditsConsumption: true,\n graphTypes: graphTypeUri ? [getLastUriPart(graphTypeUri)] : null,\n activenessDate: null,\n max: graphTypeUri ? 200 : 3000,\n signal\n })\n );\n },\n [graphTypeUri, safeLoadHopsForEntityPromise, signal]\n );\n\n useEffect(() => {\n if (entityUri && !isTempUri(entityUri) && !isDTEntity && !isTreeLayout) {\n setLoading(true);\n safeLoadHopsPromise(\n getHops({\n uri: entityUri,\n deep: graphTypeUri ? 2 : 1,\n limitCreditsConsumption: true,\n graphTypes: graphTypeUri ? [getLastUriPart(graphTypeUri)] : null,\n activenessDate: null,\n max: graphTypeUri ? 200 : 3000,\n signal\n })\n )\n .then((data) => {\n const graph = new MultiGraph();\n fillGraphWithHopsResponse(graph, data);\n setGraphologyGraph(graph);\n setData(data);\n })\n .catch((error) => {\n console.warn(error);\n setData(null);\n if (!isAbortError(error)) {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n }\n })\n .finally(() => {\n setLoading(false);\n });\n }\n\n return () => {\n setGraphologyGraph(null);\n setData(null);\n setLoading(false);\n };\n }, [entityUri, isDTEntity, dispatch, graphTypeUri, isPrevAndCurrentLayoutTree]);\n\n const onAddRelation = useCallback(\n async ({startEntityUri, endEntityUri, relationType, attributes, startDate, endDate}) => {\n try {\n setLoading(true);\n const response = await createRelation({\n startEntityUri,\n endEntityUri,\n relationType,\n attributes,\n startDate,\n endDate\n });\n\n if (!response?.[0]?.successful) {\n throw response?.[0];\n }\n\n const respondedRelation: Relation = response[0].object;\n const relatedEntityUri =\n startEntityUri === entityUri\n ? respondedRelation.endObject.objectURI\n : respondedRelation.startObject.objectURI;\n\n const relatedEntity = await getEntity(relatedEntityUri, {select: 'label'} as any);\n\n if (startEntityUri === entityUri) {\n respondedRelation.endObject.label = relatedEntity.label;\n } else {\n respondedRelation.startObject.label = relatedEntity.label;\n }\n\n const newData = addRelationToHopsData(data, respondedRelation, metadata);\n fillGraphWithHopsResponse(graphologyGraph, newData);\n\n const extremities = [respondedRelation.startObject.objectURI, respondedRelation.endObject.objectURI];\n const entitiesUris = data.entities.map(prop('uri'));\n\n extremities.forEach((node) => {\n if (entitiesUris.includes(node)) {\n const traversedRelationsCount = graphologyGraph.getNodeAttribute(\n node,\n 'traversedRelationsCount'\n );\n graphologyGraph.setNodeAttribute(node, 'traversedRelationsCount', traversedRelationsCount + 1);\n }\n });\n\n setData(newData);\n } catch (error) {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [dispatch, data, graphologyGraph, metadata]\n );\n\n const onDeleteRelation = useCallback(\n (uri: string) => {\n setLoading(true);\n removeRelation(uri)\n .then(() => {\n const extremities = graphologyGraph.extremities(uri);\n extremities.forEach((node) => {\n const traversedRelationsCount = graphologyGraph.getNodeAttribute(\n node,\n 'traversedRelationsCount'\n );\n graphologyGraph.setNodeAttribute(node, 'traversedRelationsCount', traversedRelationsCount - 1);\n });\n graphologyGraph.dropEdge(uri);\n const {updatedData, removedEntitiesUris} = removeRelationFromHopsData(\n entityUri,\n uri,\n graphologyGraph,\n data\n );\n removeNodesFromGraph(graphologyGraph, removedEntitiesUris);\n setData(updatedData);\n })\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [dispatch, graphologyGraph, entityUri, data]\n );\n\n const onCollapseEntity = useCallback(\n (uri: string, path: GraphPathType) => {\n const {nodes = []} = path;\n\n const neighbors = difference(graphologyGraph.neighbors(uri), nodes);\n const nodesToHide = getIsolatedNodes(entityUri, uri, neighbors, graphologyGraph);\n nodesToHide.forEach((node) => {\n if (node !== entityUri && node !== uri) {\n graphologyGraph.setNodeAttribute(node, 'hidden', true);\n }\n });\n },\n [entityUri, graphologyGraph]\n );\n\n const onExpandEntity = useCallback(\n (uri: string) => {\n if (uri && !isTempUri(uri) && !isDTEntity) {\n const untraversedRelationsCount = graphologyGraph.getNodeAttribute(uri, 'untraversedRelationsCount');\n\n const neighbors = graphologyGraph.neighbors(uri);\n neighbors.forEach((node) => {\n graphologyGraph.setNodeAttribute(node, 'hidden', false);\n });\n\n if (untraversedRelationsCount > 0) {\n setLoading(true);\n loadHopsForEntity(uri)\n .then((newData) => {\n const mergedData = mergeHopsData(data, newData, uri);\n\n fillGraphWithHopsResponse(graphologyGraph, newData);\n const loadedEntity = newData.entities.find((entity) => entity.uri === uri);\n graphologyGraph.setNodeAttribute(\n uri,\n 'untraversedRelationsCount',\n loadedEntity.untraversedRelations\n );\n graphologyGraph.setNodeAttribute(\n uri,\n 'traversedRelationsCount',\n loadedEntity.traversedRelations\n );\n\n setData(mergedData);\n })\n .catch((error) => {\n console.warn(error);\n if (!isAbortError(error)) {\n dispatch(\n ui.actions.errorSet(\n getRequestErrorMessage(error, i18n.text('Something went wrong'))\n )\n );\n }\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }\n },\n [data, dispatch, graphologyGraph, isDTEntity, loadHopsForEntity]\n );\n\n return {\n graphLoading: loading,\n data,\n graphologyGraph,\n onAddRelation,\n onDeleteRelation,\n onCollapseEntity,\n onExpandEntity\n };\n};\n","import {useEffect, useState, useRef, useCallback} from 'react';\nimport {useDispatch} from 'react-redux';\nimport {propEq} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Entity, getEntity, getRequestErrorMessage, HopsResponse} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\n\nimport {GraphState} from '../types/graphDataTypes';\n\nconst MAX_CACHE_SIZE = 50;\n\nconst addToEntitiesMap = (entitiesMap, entity) => {\n const newEntitiesMap = {\n ...entitiesMap,\n [entity?.uri]: entity\n };\n const keys = Object.keys(newEntitiesMap);\n if (keys.length > MAX_CACHE_SIZE) {\n delete newEntitiesMap[keys[0]];\n }\n return newEntitiesMap;\n};\n\nexport const useSelectedEntity = (\n entity: Entity,\n data: HopsResponse\n): Pick<GraphState, 'selectedEntity' | 'onEntitySelect' | 'selectedEntityLoading'> => {\n const safePromise = useSafePromise();\n const dispatch = useDispatch();\n const [selectedEntity, setSelectedEntity] = useState<Entity>(null);\n const entitiesMap = useRef<Record<string, Entity>>({});\n const [loading, setLoading] = useState(false);\n\n const getCachedEntity = useCallback((uri) => {\n const cachedEntity = entitiesMap.current[uri];\n return cachedEntity\n ? Promise.resolve(cachedEntity)\n : getEntity(uri).then((entity) => {\n entitiesMap.current = addToEntitiesMap(entitiesMap.current, entity);\n return entity;\n });\n }, []);\n\n const onEntitySelect = useCallback(\n (selectedEntityUri) => {\n const briefEntityInfo = data?.entities?.find(propEq('uri', selectedEntityUri));\n if (briefEntityInfo) {\n setSelectedEntity(briefEntityInfo);\n }\n setLoading(true);\n safePromise(getCachedEntity(selectedEntityUri))\n .then(setSelectedEntity)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n })\n .finally(() => {\n setLoading(false);\n });\n },\n [dispatch, data, safePromise, getCachedEntity]\n );\n\n useEffect(() => {\n if (entity?.uri) {\n entitiesMap.current = addToEntitiesMap({}, entity);\n onEntitySelect(entity.uri);\n }\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const isActualSelectedEntity = data?.entities.find((entity) => selectedEntity?.uri === entity.uri);\n if (!isActualSelectedEntity) {\n if (entity?.uri) {\n entitiesMap.current = addToEntitiesMap({}, entity);\n onEntitySelect(entity.uri);\n } else {\n entitiesMap.current = {};\n setSelectedEntity(null);\n }\n }\n }, [data]); //eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n selectedEntityLoading: loading,\n selectedEntity,\n onEntitySelect\n };\n};\n","export const ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport {either, equals, filter, identity, map, pipe, prop, sort, uniqBy, zipObj, ifElse, includes, T} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n EntitiesMap,\n getEndObjectUri,\n getEntityTypeLabel,\n getLabel,\n getRelationTypeLabelFromMetadata,\n getStartObjectUri,\n HopEntity,\n HopRelation,\n HopsResponse,\n Metadata,\n utils,\n getRelation,\n Relation,\n updateRelation,\n getRequestErrorMessage\n} from '@reltio/mdm-sdk';\n\nimport mdm, {ui} from '@reltio/mdm-module';\nimport {useRelationshipTableFilters} from './useRelationshipTableFilters';\nimport {RelationshipRow, RelationshipTableState} from '../types/graphDataTypes';\nimport {ROWS_PER_PAGE_OPTIONS} from '../constants';\n\nimport i18n from 'ui-i18n';\n\nconst getSecondEntityUri = (firstEntityUri: string, relation: HopRelation) => {\n const startEntityUri = getStartObjectUri(relation);\n const endEntityUri = getEndObjectUri(relation);\n return startEntityUri === firstEntityUri ? endEntityUri : startEntityUri;\n};\n\nconst getRelationTypeLabel = (metadata: Metadata, relation: HopRelation, entityUri: string) => {\n const {startObject, endObject, type} = relation;\n const {directionalLabel} = getStartObjectUri(relation) === entityUri ? startObject : endObject;\n return directionalLabel || getRelationTypeLabelFromMetadata(metadata, type);\n};\n\ntype Props = {\n data: HopsResponse;\n selectedEntityUri: string;\n mainEntityUri: string;\n graphTypeUri: string;\n};\n\nexport const useRelationshipTable = ({\n data,\n selectedEntityUri,\n mainEntityUri,\n graphTypeUri\n}: Props): RelationshipTableState => {\n const [sorting, setSorting] = useState({\n field: '',\n order: 'asc'\n });\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [editingRelations, setEditingRelations] = useState<Array<{initialRelation: Relation; relation: Relation}>>(\n []\n );\n const [loading, setLoading] = useState(false);\n const dispatch = useDispatch();\n const metadata = useSelector(mdm.selectors.getMetadata);\n\n const entitiesMap: EntitiesMap<HopEntity> = useMemo(() => {\n const entities = data?.entities || [];\n return zipObj(entities.map(prop('uri')), entities);\n }, [data?.entities]);\n\n const allRowsData: RelationshipRow[] = useMemo(\n () =>\n pipe(\n filter(\n either(\n pipe(getStartObjectUri, equals(selectedEntityUri)),\n pipe(getEndObjectUri, equals(selectedEntityUri))\n )\n ),\n uniqBy(prop('uri')),\n map((relation: HopRelation) => {\n const entity = entitiesMap[getSecondEntityUri(selectedEntityUri, relation)];\n return {\n relation,\n entity,\n entityLabel: getLabel(entity.label),\n entityTypeLabel: getEntityTypeLabel(metadata, entity),\n relationTypeLabel: getRelationTypeLabel(metadata, relation, entity.uri)\n };\n })\n )(data?.relations || []),\n [data, selectedEntityUri, entitiesMap, metadata]\n );\n\n const {\n searchText,\n onChangeSearchText,\n filters,\n onFilter,\n relationTypesOptions,\n entityTypesOptions\n } = useRelationshipTableFilters(allRowsData);\n\n const filteredRowsData: RelationshipRow[] = useMemo(\n () =>\n pipe(\n filter(({entityLabel, entity, relation}: RelationshipRow) => {\n const {entityTypesUris, relationTypesUris} = filters;\n return (\n utils.strings.search(entityLabel, searchText) &&\n ifElse(prop('length'), includes(relation.type), T)(relationTypesUris) &&\n ifElse(prop('length'), includes(entity.type), T)(entityTypesUris)\n );\n }),\n sorting.field\n ? sort((a: RelationshipRow, b: RelationshipRow) =>\n utils.strings.sort(sorting.order, a[sorting.field], b[sorting.field])\n )\n : identity\n )(allRowsData),\n [allRowsData, sorting, searchText, filters]\n );\n\n const pagedRowsData: RelationshipRow[] = useMemo(\n () => filteredRowsData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage),\n [filteredRowsData, page, rowsPerPage]\n );\n\n const onStartRelationEditing = useCallback(\n (uri: string) => {\n setLoading(true);\n getRelation(uri)\n .then((relation) => {\n setEditingRelations((prev) => [...prev, {initialRelation: relation, relation}]);\n })\n .catch((error) => {\n dispatch(\n ui.actions.errorSet(\n getRequestErrorMessage(error, i18n.text(\"Can't load relationship's attributes\"))\n )\n );\n })\n .finally(() => setLoading(false));\n },\n [dispatch]\n );\n\n const onUpdateEditingRelation = useCallback((relation: Relation) => {\n setEditingRelations((prev) =>\n prev.map((rel) => (rel.relation.uri === relation.uri ? {...rel, relation} : rel))\n );\n }, []);\n\n useEffect(() => {\n setPage(0);\n onChangeSearchText('');\n }, [selectedEntityUri, graphTypeUri, onChangeSearchText, onFilter]);\n\n useEffect(() => {\n onFilter({entityTypesUris: [], relationTypesUris: []});\n }, [graphTypeUri, mainEntityUri, onFilter]);\n\n useEffect(() => {\n setPage(0);\n }, [sorting, searchText, filters]);\n\n const onCancelRelationEditing = useCallback((uri: string) => {\n setEditingRelations((prev) => prev.filter((rel) => rel.relation.uri !== uri));\n }, []);\n\n const onSaveEditingRelation = useCallback(\n (oldRelation: Relation, newRelation: Relation) => {\n setLoading(true);\n updateRelation({\n oldRelation,\n newRelation\n })\n .then(() => {\n onCancelRelationEditing(newRelation.uri);\n })\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text(\"Can't edit relationship\"))));\n })\n .finally(() => setLoading(false));\n },\n [onCancelRelationEditing, dispatch]\n );\n\n return {\n rowsData: pagedRowsData,\n onSort: setSorting,\n sorting: sorting,\n searchText,\n onChangeSearchText,\n filters,\n onFilter,\n entityTypesOptions,\n relationTypesOptions,\n editingRelations,\n onStartRelationEditing,\n onCancelRelationEditing,\n onUpdateEditingRelation,\n total: filteredRowsData.length,\n page: page,\n rowsPerPage: rowsPerPage,\n onPageChange: setPage,\n onRowsPerPageChange: setRowsPerPage,\n onSaveEditingRelation,\n loading\n };\n};\n","import {useState, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pipe, map, uniq, concat, __} from 'ramda';\nimport {getRelationType, getEntityType, Metadata, TEntityType, TRelationType} from '@reltio/mdm-sdk';\nimport {Filters, RelationshipRow} from '../types/graphDataTypes';\n\nexport const useRelationshipTableFilters = (allRowsData: RelationshipRow[]) => {\n const [searchText, setSearchText] = useState('');\n const [filters, setFilters] = useState<Filters>({entityTypesUris: [], relationTypesUris: []});\n\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const entityTypesOptions: TEntityType[] = useMemo(\n () =>\n pipe(\n map(({entity}) => entity.type),\n concat(__, filters.entityTypesUris),\n uniq,\n map(getEntityType(metadata))\n )(allRowsData),\n [allRowsData, metadata, filters.entityTypesUris]\n );\n const relationTypesOptions: TRelationType[] = useMemo(\n () =>\n pipe(\n map(({relation}) => relation.type),\n concat(__, filters.relationTypesUris),\n uniq,\n map(getRelationType(metadata))\n )(allRowsData),\n [allRowsData, metadata, filters.relationTypesUris]\n );\n\n return {\n searchText,\n onChangeSearchText: setSearchText,\n filters,\n onFilter: setFilters,\n entityTypesOptions,\n relationTypesOptions\n };\n};\n","import React from 'react';\n\nimport {GraphState} from '../types/graphDataTypes';\n\nexport const GraphStateContext = React.createContext<GraphState>({\n graphLoading: false,\n data: null,\n graphologyGraph: null,\n selectedEntityLoading: false,\n selectedEntity: null,\n onEntitySelect: () => {},\n relationshipTable: {},\n onCollapseEntity: () => {},\n onExpandEntity: () => {},\n layout: null,\n setLayout: () => {}\n});\n\nGraphStateContext.displayName = 'GraphStateContext';\n","import {makeStyles} from '@mui/styles';\n\nconst border = '1px solid rgba(0, 0, 0, 0.05)';\n\nexport const useStyles = makeStyles({\n table: {\n flex: 1,\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n },\n tableBody: {\n height: '100%',\n overflow: 'auto'\n },\n tableBodyWrapper: {\n height: '100%',\n overflow: 'hidden'\n },\n tableRowWrapper: {\n borderBottom: border\n },\n tableRow: {\n display: 'flex',\n alignItems: 'center',\n '& > div': {\n flexShrink: 0\n }\n },\n editingRow: {\n paddingTop: '8px',\n paddingBottom: '8px'\n },\n headRow: {\n borderBottom: border\n }\n});\n","import React, {memo} from 'react';\nimport classnames from 'classnames';\nimport {toggleSortOrder} from '@reltio/components';\n\nimport {ColumnsDataItem, Sorting} from './types';\nimport {useStyles} from './styles';\n\ntype Props = {\n columnsData: ColumnsDataItem[];\n sorting: Sorting;\n onSort?: ({field, order}: {field: string; order: string}) => void;\n};\n\nconst TableHead = ({columnsData, sorting, onSort}: Props) => {\n const styles = useStyles();\n return (\n <div className={classnames(styles.tableRow, styles.headRow)}>\n {columnsData.map((columnData) => {\n const {id, sortable, headCellRenderer, columnClassName} = columnData;\n const HeadCellRenderer = headCellRenderer;\n const sortHandler = () => {\n onSort({\n field: id,\n order: sorting.field === id ? toggleSortOrder(sorting.order) : 'asc'\n });\n };\n const sortingProps = sortable ? {sortField: sorting.field, sortOrder: sorting.order, sortHandler} : {};\n return (\n <div key={id} className={columnClassName}>\n <HeadCellRenderer headCellData={columnData} {...sortingProps} />\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default memo(TableHead);\n","import React, {ElementType, forwardRef, memo, useCallback, useImperativeHandle, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {AutoSizeList} from '@reltio/components';\n\nimport {ColumnsDataItem, RowsDataItem, Sorting} from './types';\nimport TableHead from './TableHead';\nimport {useStyles} from './styles';\n\ntype Props = {\n classes?: {\n tableRowWrapper?: string;\n tableRow?: string;\n };\n columnsData?: ColumnsDataItem[];\n rowsData: RowsDataItem[];\n sorting?: Sorting;\n onSort?: ({field, order}: {field: string; order: string}) => void;\n getRowKey?: (index: number, data: unknown) => string;\n ExpandedRowRenderer?: ElementType;\n defaultRowHeight?: number;\n};\n\nconst CollapsibleTable = forwardRef(\n (\n {classes, columnsData, rowsData, sorting, onSort, getRowKey, ExpandedRowRenderer, defaultRowHeight}: Props,\n ref\n ) => {\n const styles = useStyles();\n const [dimensions, setDimensions] = useState({\n width: 0,\n height: 0\n });\n\n const renderRow = useCallback(\n ({data, index}) => {\n const item = data[index];\n return (\n <div className={classnames(styles.tableRowWrapper, classes?.tableRowWrapper)}>\n <div\n className={classnames(styles.tableRow, classes?.tableRow, {\n [styles.editingRow]: item.expanded\n })}\n >\n {columnsData.map(({id, rowCellValueRenderer, columnClassName}) => {\n const Renderer = rowCellValueRenderer;\n return (\n <div key={id} className={columnClassName}>\n <Renderer value={item[id]} rowValue={item} />\n </div>\n );\n })}\n </div>\n {item.expanded && ExpandedRowRenderer && (\n <ExpandedRowRenderer open={item.expanded} rowValue={item} />\n )}\n </div>\n );\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [columnsData, ExpandedRowRenderer]\n );\n\n const onTableBodyResize = useCallback((width, height) => {\n setDimensions({width, height});\n }, []);\n\n const listRef = useRef(null);\n\n useImperativeHandle(ref, () => ({\n resetScrollbarPosition: () => {\n listRef.current?.scrollTo(0);\n }\n }));\n\n return (\n <div className={styles.table}>\n <TableHead columnsData={columnsData} sorting={sorting} onSort={onSort} />\n <div className={styles.tableBodyWrapper}>\n <ReactResizeDetector handleHeight handleWidth onResize={onTableBodyResize} />\n <div className={styles.tableBody}>\n <AutoSizeList\n listRef={listRef}\n width={dimensions.width}\n height={dimensions.height}\n data={rowsData}\n defaultItemSize={defaultRowHeight}\n itemKey={getRowKey}\n showNotMeasuredItems\n >\n {renderRow}\n </AutoSizeList>\n </div>\n </div>\n </div>\n );\n }\n);\n\nexport default memo(CollapsibleTable);\n","import {makeStyles} from '@mui/styles';\n\nexport const collapsibleTableRowClassName = 'collapsibleTableRow';\nexport const hoverBackground = 'rgba(238, 238, 238, 1)';\n\nexport const useStyles = makeStyles({\n tableWithPagination: {\n flex: 1,\n overflow: 'hidden',\n paddingRight: '1px',\n display: 'flex',\n flexDirection: 'column'\n },\n tableContainer: {\n flex: 1,\n overflow: 'hidden'\n },\n profileColumn: {\n minWidth: '180px',\n flex: 3\n },\n relationshipTypeColumn: {\n minWidth: '70px',\n flex: 1\n },\n entityTypeColumn: {\n minWidth: '70px',\n flex: 1\n },\n row: {\n position: 'relative',\n '&:hover': {\n background: hoverBackground\n }\n }\n});\n","import {makeStyles} from '@mui/styles';\nimport {collapsibleTableRowClassName, hoverBackground} from '../styles';\n\nconst textOverflow = {\n content: '\"\"',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '40px',\n height: '100%',\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n pointerEvents: 'none'\n};\n\nconst hoverRule = `.${collapsibleTableRowClassName}:hover &`;\n\nconst textOverflowWithHover = {\n ...textOverflow,\n [hoverRule]: {\n background: `linear-gradient(to right, rgba(238, 238, 238, 0), ${hoverBackground} 100%)`\n }\n};\n\nexport const useStyles = makeStyles((theme) => ({\n headCell: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n height: '33px',\n padding: '6px 0 6px 16px',\n '&>div': {\n flexDirection: 'row'\n },\n '&>div>span[role=button]': {\n width: 'calc(100% + 49px)'\n }\n },\n headLabel: {\n color: theme.palette.text.primary,\n fontSize: '12px',\n fontWeight: 500,\n lineHeight: '16px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n '&:after': {\n ...textOverflow,\n right: '25px',\n width: '20px'\n }\n },\n defaultCell: {\n position: 'relative',\n color: theme.palette.text.primary,\n fontSize: '13px',\n fontWeight: 'normal',\n lineHeight: '15px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n padding: '6px 16px',\n '&:after': textOverflowWithHover\n },\n clickable: {\n cursor: 'pointer'\n },\n profileCell: {\n paddingTop: '3px',\n paddingBottom: '4px'\n },\n controlsCell: {\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n flexShrink: 0,\n top: 0,\n right: '9px',\n visibility: 'hidden',\n [hoverRule]: {\n visibility: 'visible',\n background: hoverBackground\n }\n },\n editingMode: {\n visibility: 'visible'\n },\n hidden: {\n visibility: 'hidden'\n },\n editButton: {\n marginRight: '7px'\n },\n entityAvatar: {\n width: '20px',\n height: '20px',\n marginRight: '8px'\n },\n actionButtons: {\n display: 'flex',\n justifyContent: 'flex-end',\n margin: '0 8px 10px',\n\n '& > button': {\n fontSize: '14px',\n lineHeight: '16px',\n marginLeft: '8px',\n padding: '10px 8px',\n backgroundColor: 'rgba(98, 2, 238, 0)'\n }\n },\n expandedRow: {\n padding: '0 16px 6px',\n fontSize: '13px'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {ExpandedValueTooltip} from '@reltio/components';\n\nimport {ColumnsDataItem} from '../../CollapsibleTable/types';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n headCellData: ColumnsDataItem;\n};\n\nconst HeadCellRenderer = ({className, headCellData, ...otherProps}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.headCell, className)}>\n <DefaultHeadCellRenderer\n {...otherProps}\n headCellData={{\n ...headCellData,\n label: (\n <ExpandedValueTooltip value={headCellData.label}>\n <div className={styles.headLabel}>{headCellData.label}</div>\n </ExpandedValueTooltip>\n )\n }}\n />\n </div>\n );\n};\n\nexport default HeadCellRenderer;\n","import React, {memo, ReactNode} from 'react';\nimport classnames from 'classnames';\nimport {ExpandedValueTooltip} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n value?: ReactNode | string;\n tooltip?: string;\n className?: string;\n onClick?: () => void;\n};\n\nconst DefaultCellRenderer = ({value = '', tooltip, onClick, className}: Props) => {\n const styles = useStyles();\n tooltip = tooltip || (value as string);\n return (\n <ExpandedValueTooltip value={tooltip}>\n <div\n className={classnames(styles.defaultCell, className, {[styles.clickable]: !!onClick})}\n onClick={onClick}\n >\n {value}\n </div>\n </ExpandedValueTooltip>\n );\n};\n\nexport default memo(DefaultCellRenderer);\n","import React from 'react';\nimport {EntityAvatar, withContext} from '@reltio/components';\nimport classnames from 'classnames';\n\nimport DefaultCellRenderer from './DefaultCellRenderer';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {RelationshipRow} from '../../../../../types/graphDataTypes';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: string;\n className?: string;\n rowValue: RelationshipRow;\n onClick?: (entityUri: string) => void;\n};\n\nexport const ProfileCellRenderer = ({value, rowValue: {entity}, className, onClick}: Props) => {\n const styles = useStyles();\n const cellValue = (\n <>\n <EntityAvatar entity={entity} avatarClassName={styles.entityAvatar} />\n {value}\n </>\n );\n return (\n <DefaultCellRenderer\n value={cellValue}\n tooltip={value}\n className={classnames(styles.profileCell, className)}\n onClick={() => onClick(entity.uri)}\n />\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({onEntitySelect}) => ({\n onClick: onEntitySelect\n }),\n ProfileCellRenderer\n);\n","import React, {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Button from '@mui/material/Button';\nimport {equals} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {EditingConnection, Relation, validateConnectionRelation} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {withContext, ConnectionEditor, useEditableConnection} from '@reltio/components';\n\nimport {RelationshipRow} from '../../../../../types/graphDataTypes';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n open: boolean;\n rowValue: RelationshipRow;\n editingRelationObject?: {initialRelation: Relation; relation: Relation};\n onUpdateEditingRelation?: (relation: Relation) => void;\n onCancelRelationEditing?: (uri: string) => void;\n onSaveEditingRelation?: (oldRelation: Relation, newRelation: Relation) => void;\n loading?: boolean;\n};\n\nexport const ExpandedRowRenderer = ({\n open,\n editingRelationObject,\n onUpdateEditingRelation,\n onCancelRelationEditing,\n onSaveEditingRelation\n}: Props) => {\n const dispatch = useDispatch();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const {relation: editingRelation, initialRelation} = editingRelationObject;\n const hasChanges = useMemo(() => !equals(initialRelation, editingRelation), [editingRelation, initialRelation]);\n const styles = useStyles();\n const onUpdateConnection = useCallback(\n ({relation}: EditingConnection) => onUpdateEditingRelation(relation),\n [onUpdateEditingRelation]\n );\n\n const handleCancelRelationEditing = useCallback(\n () => onCancelRelationEditing(editingRelation.uri),\n [onCancelRelationEditing, editingRelation.uri]\n );\n const connection = useMemo(() => ({relation: editingRelation}), [editingRelation]);\n const {onAddAttributes, onChangeAttribute, onRemoveAttribute} = useEditableConnection({\n connection,\n onConnectionChange: onUpdateConnection\n });\n\n const validate = (relation: Relation) => {\n const errors = validateConnectionRelation(metadata, {relation: {object: relation}});\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n };\n\n const onSave = () => {\n if (validate(editingRelation)) {\n onSaveEditingRelation(initialRelation, editingRelation);\n }\n };\n\n return open ? (\n <div className={styles.expandedRow}>\n <ConnectionEditor\n connection={connection}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onRemoveAttribute={onRemoveAttribute}\n />\n <div className={styles.actionButtons}>\n <Button onClick={handleCancelRelationEditing}>{i18n.text('Cancel')}</Button>\n <Button color=\"primary\" disabled={!hasChanges} onClick={onSave}>\n {i18n.text('Save')}\n </Button>\n </div>\n </div>\n ) : null;\n};\n\nexport default withContext(\n GraphStateContext,\n ({relationshipTable}, props) => ({\n editingRelationObject: relationshipTable.editingRelations.find(\n (rel) => rel.initialRelation.uri === props?.rowValue.relation?.uri\n ),\n onUpdateEditingRelation: relationshipTable.onUpdateEditingRelation,\n onCancelRelationEditing: relationshipTable.onCancelRelationEditing,\n onSaveEditingRelation: relationshipTable.onSaveEditingRelation\n }),\n ExpandedRowRenderer\n);\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pick} from 'ramda';\nimport {ConfirmationDialog, withContext} from '@reltio/components';\n\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\n\ntype Props = {\n uri: string;\n open: boolean;\n onClose: () => void;\n onDeleteRelation?: (uri) => void;\n};\n\nconst DeleteRelationDialog = ({uri, open, onClose, onDeleteRelation}: Props) => {\n return (\n <ConfirmationDialog\n open={open}\n title={i18n.text('Do you want to make a clean break?')}\n content={i18n.text(\n 'To end this relationship, click Delete Relationship. To keep the connection, click Cancel.'\n )}\n saveCaption={i18n.text('Delete relationship')}\n discardCaption={i18n.text('Cancel')}\n onDiscard={onClose}\n onSave={() => {\n onDeleteRelation(uri);\n onClose();\n }}\n />\n );\n};\n\nexport default withContext(GraphStateContext, pick(['onDeleteRelation']), DeleteRelationDialog);\n","import React, {memo, useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nimport DeleteRelationDialog from '../../../DeleteRelationDialog/DeleteRelationDialog';\n\ntype Props = {\n uri: string;\n};\n\nconst DeleteRelationButton = memo(({uri}: Props) => {\n const [open, setOpen] = useState(false);\n const onOpen = useCallback(() => setOpen(true), []);\n const onClose = useCallback(() => setOpen(false), []);\n return (\n <>\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size={'XXS'}\n tooltipTitle={i18n.text('Delete')}\n data-reltio-id=\"reltio-delete-relation-button\"\n onClick={onOpen}\n />\n <DeleteRelationDialog open={open} onClose={onClose} uri={uri} />\n </>\n );\n});\n\nDeleteRelationButton.displayName = 'DeleteRelationButton';\n\nexport default DeleteRelationButton;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {SmallIconButtonWithTooltip, withContext} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {checkMetadataForUpdate, checkMetadataForDelete, getRelationType, Mode} from '@reltio/mdm-sdk';\nimport EditIcon from '@mui/icons-material/Edit';\n\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {RelationshipRow} from '../../../../../types/graphDataTypes';\nimport DeleteRelationButton from './components/DeleteRelationButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n rowValue: RelationshipRow;\n className?: string;\n onEdit?: (uri: string) => void;\n isEditing?: boolean;\n};\n\nconst ControlsCellRenderer = ({\n rowValue: {\n relation: {uri, type}\n },\n className,\n onEdit,\n isEditing\n}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationType = getRelationType(metadata, type);\n const canEdit = checkMetadataForUpdate(Mode.Editing, relationType);\n const canDelete = checkMetadataForDelete(Mode.Editing, relationType);\n return (\n <div className={classnames(styles.controlsCell, className, {[styles.editingMode]: isEditing})}>\n {canEdit && (\n <SmallIconButtonWithTooltip\n className={classnames(styles.editButton, {[styles.hidden]: isEditing})}\n icon={EditIcon}\n size={'XXS'}\n tooltipTitle={i18n.text('Edit')}\n data-reltio-id=\"reltio-edit-relationship-button\"\n onClick={() => onEdit(uri)}\n />\n )}\n {canDelete && <DeleteRelationButton uri={uri} />}\n </div>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({relationshipTable: {onStartRelationEditing, editingRelations}}, props) => ({\n onEdit: onStartRelationEditing,\n isEditing: editingRelations.some((rel) => rel.initialRelation.uri === props?.rowValue.relation?.uri)\n }),\n ControlsCellRenderer\n);\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {BasicTablePagination, EmptyStub, LinearLoadIndicator, withContext} from '@reltio/components';\nimport classnames from 'classnames';\n\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport {RelationshipRow, RelationshipTableState} from '../../../../types/graphDataTypes';\nimport CollapsibleTable from '../CollapsibleTable/CollapsibleTable';\nimport HeadCellRenderer from './cell-renderers/HeadCellRenderer';\nimport DefaultCellRenderer from './cell-renderers/DefaultCellRenderer';\nimport ProfileCellRenderer from './cell-renderers/ProfileCellRenderer';\nimport ExpandedRowRenderer from './cell-renderers/ExpandedRowRenderer';\nimport ControlsCellRenderer from './cell-renderers/ControlsCellRenderer';\nimport {ROWS_PER_PAGE_OPTIONS} from '../../../../constants';\nimport {collapsibleTableRowClassName, useStyles} from './styles';\n\nexport const getRowKey = (index: number, data: RelationshipRow[]) => {\n const row = data[index];\n return row.relation.uri || `${index}`;\n};\n\nconst RelationshipTable = ({\n rowsData,\n sorting,\n onSort,\n total,\n page,\n rowsPerPage,\n onPageChange,\n onRowsPerPageChange,\n editingRelations,\n loading\n}: RelationshipTableState) => {\n const styles = useStyles();\n\n const columnsData = useMemo(\n () => [\n {\n id: 'entityLabel',\n label: i18n.text('Profile'),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: ProfileCellRenderer,\n sortable: true,\n columnClassName: styles.profileColumn\n },\n {\n id: 'relationTypeLabel',\n label: i18n.text('Relationship type'),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellRenderer,\n sortable: true,\n columnClassName: styles.relationshipTypeColumn\n },\n {\n id: 'entityTypeLabel',\n label: i18n.text('Entity Type'),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellRenderer,\n sortable: true,\n columnClassName: styles.entityTypeColumn\n },\n {\n id: 'controls',\n label: '',\n headCellRenderer: EmptyStub,\n rowCellValueRenderer: ControlsCellRenderer\n }\n ],\n [styles]\n );\n\n const tableRef = useRef(null);\n\n useEffect(() => {\n tableRef.current?.resetScrollbarPosition();\n }, [rowsData]);\n\n const rowsDataWithExpandedInfo = useMemo(\n () =>\n rowsData.map((row) =>\n editingRelations?.some((rel) => rel.initialRelation.uri === row?.relation?.uri)\n ? {...row, expanded: true}\n : row\n ),\n [rowsData, editingRelations]\n );\n\n const tableClasses = useMemo(\n () => ({\n tableRow: classnames(styles.row, collapsibleTableRowClassName)\n }),\n [styles]\n );\n\n return (\n <div className={styles.tableWithPagination}>\n <div className={styles.tableContainer}>\n <CollapsibleTable\n ref={tableRef}\n columnsData={columnsData}\n rowsData={rowsDataWithExpandedInfo}\n sorting={sorting}\n onSort={onSort}\n getRowKey={getRowKey}\n ExpandedRowRenderer={ExpandedRowRenderer}\n defaultRowHeight={28}\n classes={tableClasses}\n />\n </div>\n {total > ROWS_PER_PAGE_OPTIONS[0] && (\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n onChangeRowsPerPage={onRowsPerPageChange}\n page={page}\n onChangePage={onPageChange}\n basicTableRef={tableRef}\n />\n )}\n {loading && <LinearLoadIndicator />}\n </div>\n );\n};\n\nexport default withContext(GraphStateContext, ({relationshipTable}) => ({...relationshipTable}), RelationshipTable);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n inactiveSearchIcon: {\n color: theme.palette.text.secondary\n },\n activeSearchIcon: {\n color: theme.palette.text.primary\n },\n input: {\n fontSize: '14px',\n '&::placeholder': {\n color: `${theme.palette.text.secondary} !important`,\n opacity: 1\n }\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, pick, prop} from 'ramda';\nimport {SearchInput, withContext} from '@reltio/components';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {useStyles} from './styles';\nimport {RelationshipTableState} from '../../../../../types/graphDataTypes';\n\ntype Props = Partial<Pick<RelationshipTableState, 'searchText' | 'onChangeSearchText'>>;\n\nconst RelationshipsSearchTextField = ({searchText, onChangeSearchText}: Props) => {\n const styles = useStyles();\n\n return (\n <SearchInput\n fullWidth\n height={40}\n autofocus={false}\n value={searchText}\n onSearch={onChangeSearchText}\n placeholder={i18n.text('Search profiles')}\n classes={{input: styles.input}}\n />\n );\n};\n\nexport default withContext(\n GraphStateContext,\n pipe(prop('relationshipTable'), pick(['searchText', 'onChangeSearchText'])),\n RelationshipsSearchTextField\n);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogPaper: {\n display: 'flex',\n flexDirection: 'column',\n padding: '12px 16px 8px'\n },\n title: {\n marginBottom: '21px',\n fontWeight: 500,\n fontSize: '20px',\n lineHeight: '23px',\n letterSpacing: '0.25px',\n color: theme.palette.text.primary\n },\n entityTypesSelector: {\n width: '468px',\n marginBottom: '20px'\n },\n relationTypesSelector: {\n width: '468px',\n marginBottom: '32px'\n },\n footer: {\n display: 'flex'\n },\n clearAllButton: {\n marginRight: 'auto'\n },\n cancelButton: {\n marginRight: '8px'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {pipe, pick, prop} from 'ramda';\nimport {EntityTypesSelector, RelationTypesSelector, withContext} from '@reltio/components';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport Typography from '@mui/material/Typography';\nimport {GraphStateContext} from '../../../../../contexts/GraphStateContext';\nimport {RelationshipTableState} from '../../../../../types/graphDataTypes';\nimport {useStyles} from './styles';\n\ntype Props = {\n open: boolean;\n onClose: () => void;\n} & Partial<Pick<RelationshipTableState, 'filters' | 'onFilter' | 'entityTypesOptions' | 'relationTypesOptions'>>;\n\nconst RelationshipsFiltersDialog = ({\n open,\n onClose,\n filters,\n onFilter,\n entityTypesOptions,\n relationTypesOptions\n}: Props) => {\n const styles = useStyles();\n\n const [localSelectedEntityTypes, setLocalSelectedEntityTypes] = useState([]);\n const [localSelectedRelationTypes, setLocalSelectedRelationTypes] = useState([]);\n\n const handleCancel = () => {\n setLocalSelectedEntityTypes(filters.entityTypesUris);\n setLocalSelectedRelationTypes(filters.relationTypesUris);\n onClose();\n };\n\n const handleApply = () => {\n onFilter({entityTypesUris: localSelectedEntityTypes, relationTypesUris: localSelectedRelationTypes});\n onClose();\n };\n\n const handleClear = () => {\n setLocalSelectedEntityTypes([]);\n setLocalSelectedRelationTypes([]);\n };\n\n useEffect(() => {\n setLocalSelectedEntityTypes(filters.entityTypesUris);\n setLocalSelectedRelationTypes(filters.relationTypesUris);\n }, [filters.entityTypesUris, filters.relationTypesUris]);\n\n return (\n <Dialog classes={{paper: styles.dialogPaper}} onClose={handleCancel} open={open}>\n <Typography className={styles.title}>{i18n.text('Filter')}</Typography>\n <EntityTypesSelector\n classes={{\n root: styles.entityTypesSelector\n }}\n entityTypes={entityTypesOptions}\n selectedEntityTypes={localSelectedEntityTypes}\n enableEmptyValueUnderline\n onChange={setLocalSelectedEntityTypes}\n />\n <RelationTypesSelector\n classes={{\n root: styles.relationTypesSelector\n }}\n relationTypes={relationTypesOptions}\n selectedRelationTypes={localSelectedRelationTypes}\n enableEmptyValueUnderline\n onChange={setLocalSelectedRelationTypes}\n />\n <div className={styles.footer}>\n <Button className={styles.clearAllButton} onClick={handleClear}>\n {i18n.text('Clear All')}\n </Button>\n <Button className={styles.cancelButton} onClick={handleCancel}>\n {i18n.text('Cancel')}\n </Button>\n <Button onClick={handleApply} color=\"primary\">\n {i18n.text('Apply')}\n </Button>\n </div>\n </Dialog>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n pipe(prop('relationshipTable'), pick(['onFilter', 'filters', 'entityTypesOptions', 'relationTypesOptions'])),\n RelationshipsFiltersDialog\n);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '16px',\n paddingRight: '2px'\n },\n iconButton: {\n marginLeft: '4px'\n },\n activeFiltersIcon: {\n color: theme.palette.primary.main\n },\n inactiveFiltersIcon: {\n color: theme.palette.text.secondary\n }\n}));\n","import React, {useState} from 'react';\nimport {pick, pipe, prop} from 'ramda';\nimport {withContext} from '@reltio/components';\nimport FilterListIcon from '@mui/icons-material/FilterList';\nimport IconButton from '@mui/material/IconButton';\nimport RelationshipsSearchTextField from './RelationshipsSearchTextField/RelationshipsSearchTextField';\nimport RelationshipsFiltersDialog from './RelationshipsFiltersDialog/RelationshipsFiltersDialog';\nimport {RelationshipTableState} from '../../../../types/graphDataTypes';\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport {useStyles} from './styles';\n\ntype Props = Partial<Pick<RelationshipTableState, 'filters'>>;\n\nconst RelationshipsFilters = ({filters}: Props) => {\n const styles = useStyles();\n const [open, setOpen] = useState(false);\n\n const handleOpenDialog = () => setOpen(true);\n const handleCloseDialog = () => setOpen(false);\n\n const {entityTypesUris, relationTypesUris} = filters;\n\n const hasAppliedFilters = entityTypesUris.length || relationTypesUris.length;\n\n return (\n <div className={styles.wrapper}>\n <RelationshipsSearchTextField />\n <IconButton\n data-reltio-id=\"reltio-filter-relationship-button\"\n className={styles.iconButton}\n onClick={handleOpenDialog}\n size=\"large\"\n >\n <FilterListIcon className={hasAppliedFilters ? styles.activeFiltersIcon : styles.inactiveFiltersIcon} />\n </IconButton>\n <RelationshipsFiltersDialog open={open} onClose={handleCloseDialog} />\n </div>\n );\n};\n\nexport default withContext(GraphStateContext, pipe(prop('relationshipTable'), pick(['filters'])), RelationshipsFilters);\n","import {generateNewRelationUri, EditingConnection} from '@reltio/mdm-sdk';\n\nexport const createNewConnection = (): EditingConnection => ({\n relation: {\n uri: generateNewRelationUri(),\n type: null,\n attributes: {}\n }\n});\n","import {useMemo} from 'react';\nimport {checkMetadataForCreate, getInOutRelationTypesForEntityTypeUri, Mode} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\nexport const useCreatableInOutRelationTypes = (entityTypeUri: string) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const {inRelations: inRelationTypes = [], outRelations: outRelationTypes = []} = useMemo(\n () => getInOutRelationTypesForEntityTypeUri(metadata, entityTypeUri, checkMetadataForCreate(Mode.Editing)),\n [metadata, entityTypeUri]\n );\n return {inRelationTypes, outRelationTypes};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n dialogPaper: {\n height: '600px',\n maxWidth: '600px'\n },\n dialogTitle: {\n padding: '12px 16px'\n },\n titleText: {\n color: theme.palette.text.primary,\n fontSize: '18px',\n letterSpacing: 0,\n lineHeight: '21px',\n fontWeight: 'bold'\n },\n content: {\n padding: '8px 16px 0px!important',\n borderBottom: '1px solid rgba(0, 0, 0, 0.12)'\n },\n attributeList: {\n paddingTop: '22px'\n }\n}));\n","import React, {useState, useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\n\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport {ConnectionEditor, useEditableConnection, withContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {Directions, EditingConnection, Entity, validateConnectionRelation} from '@reltio/mdm-sdk';\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport {GraphState} from '../../../../types/graphDataTypes';\nimport {createNewConnection} from '../../../../helpers/relationsHelpers';\nimport {useCreatableInOutRelationTypes} from './useCreatableInOutRelationTypes';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n selectedEntity?: Entity;\n open: boolean;\n onClose: () => void;\n onAddRelation?: GraphState['onAddRelation'];\n};\n\nconst GraphAddRelationDialog = ({selectedEntity, open, onClose, onAddRelation}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const [connection, setConnection] = useState<EditingConnection>({});\n const {relation, entity} = connection;\n const {type: relationTypeUri, direction} = relation || {};\n\n const [loading, setLoading] = useState(false);\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (open) {\n setConnection(createNewConnection());\n }\n }, [open]);\n\n const {inRelationTypes, outRelationTypes} = useCreatableInOutRelationTypes(selectedEntity?.type);\n\n const validate = useCallback(() => {\n const errors = validateConnectionRelation(metadata, {relation: {object: relation}});\n dispatch(profile.errors.actions.errorsSet(errors));\n return errors.length === 0;\n }, [relation, metadata, dispatch]);\n\n const handleAdd = () => {\n const {type: relationType, attributes = {}, startDate, endDate} = relation;\n const startEntityUri = direction === Directions.OUT ? selectedEntity.uri : entity.uri;\n const endEntityUri = direction === Directions.OUT ? entity.uri : selectedEntity.uri;\n\n if (validate()) {\n setLoading(true);\n onAddRelation({\n startEntityUri,\n endEntityUri,\n relationType,\n attributes,\n startDate,\n endDate\n })\n .then(() => {\n onClose();\n })\n .catch((e) => {\n console.warn(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n };\n\n const {onAddAttributes, onChangeAttribute, onRemoveAttribute, onChangeEntity, onChangeRelationType} =\n useEditableConnection({connection, onConnectionChange: setConnection, relatedEntity: selectedEntity});\n\n return (\n <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose} classes={{paper: styles.dialogPaper}}>\n <DialogTitle classes={{root: styles.dialogTitle}}>\n <Typography variant=\"subtitle1\" classes={{root: styles.titleText}}>\n {i18n.text('Add relationship')}\n </Typography>\n </DialogTitle>\n <DialogContent classes={{root: styles.content}}>\n <ConnectionEditor\n connection={connection}\n onAddAttributes={onAddAttributes}\n onChangeAttribute={onChangeAttribute}\n onRemoveAttribute={onRemoveAttribute}\n relatedEntity={selectedEntity}\n inRelationTypes={inRelationTypes}\n outRelationTypes={outRelationTypes}\n onChangeRelationType={onChangeRelationType}\n onChangeEntity={onChangeEntity}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{i18n.text('Cancel')}</Button>\n <Button\n disabled={!connection?.entity || !relationTypeUri || loading}\n color=\"primary\"\n onClick={handleAdd}\n >\n {i18n.text('Add')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({selectedEntity, onAddRelation}) => ({selectedEntity, onAddRelation}),\n GraphAddRelationDialog\n);\n","import React, {useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {pick} from 'ramda';\nimport AddIcon from '@mui/icons-material/Add';\nimport {ActionButton, ActionButtonMode, withContext} from '@reltio/components';\nimport {Entity} from '@reltio/mdm-sdk';\n\nimport {GraphStateContext} from '../../../../contexts/GraphStateContext';\nimport GraphAddRelationDialog from './GraphAddRelationDialog';\nimport {useCreatableInOutRelationTypes} from './useCreatableInOutRelationTypes';\n\ntype Props = {\n selectedEntity?: Entity;\n};\n\nconst GraphAddRelationButton = ({selectedEntity}: Props) => {\n const {inRelationTypes, outRelationTypes} = useCreatableInOutRelationTypes(selectedEntity?.type);\n const canAddSomeRelation = inRelationTypes.length + outRelationTypes.length > 0;\n const [openDialog, setOpenDialog] = useState(false);\n const handleClick = () => {\n setOpenDialog(true);\n };\n const onCancel = () => {\n setOpenDialog(false);\n };\n\n return (\n canAddSomeRelation && (\n <>\n <ActionButton\n data-reltio-id=\"reltio-add-relationship-button\"\n mode={ActionButtonMode.button}\n label={i18n.text('Add relationship')}\n icon={AddIcon}\n onClick={handleClick}\n />\n <GraphAddRelationDialog open={openDialog} onClose={onCancel} />\n </>\n )\n );\n};\n\nexport default withContext(GraphStateContext, pick(['selectedEntity']), GraphAddRelationButton);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n caption: {\n marginLeft: '16px',\n marginTop: '12px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '14px',\n fontSize: '16px',\n lineHeight: '24px'\n },\n wrapper: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n height: 0\n }\n});\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport i18n from 'ui-i18n';\nimport RelationshipTable from './components/RelationshipTable/RelationshipTable';\nimport RelationshipsFilters from './components/RelationshipsFilters/RelationshipsFilters';\nimport GraphAddRelationButton from './components/GraphAddRelationDialog/GraphAddRelationButton';\nimport {useStyles} from './styles';\n\nconst RightPanelRelationship = () => {\n const styles = useStyles();\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.caption}>\n <Typography variant=\"subtitle1\">{i18n.text('Relationships')}</Typography>\n <GraphAddRelationButton />\n </div>\n <RelationshipsFilters />\n <RelationshipTable />\n </div>\n );\n};\n\nexport default RightPanelRelationship;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n noShadowBlock: {\n boxShadow: 'none'\n },\n wrapper: {\n position: 'relative',\n paddingRight: '1px',\n overflow: 'auto'\n }\n});\n","import React from 'react';\nimport {pick} from 'ramda';\nimport {Entity} from '@reltio/mdm-sdk';\nimport {AttributesView, withContext, LinearLoadIndicator} from '@reltio/components';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\n\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n selectedEntity?: Entity;\n selectedEntityLoading?: boolean;\n};\n\nconst RightPanelEntityDetails = ({selectedEntity, selectedEntityLoading}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.wrapper}>\n {selectedEntityLoading && <LinearLoadIndicator />}\n <AttributesView\n entity={selectedEntity}\n caption={i18n.text('Entity details')}\n className={styles.noShadowBlock}\n />\n </div>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n pick(['selectedEntity', 'selectedEntityLoading']),\n RightPanelEntityDetails\n);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n link: {\n textDecoration: 'none',\n color: theme.palette.primary.main\n }\n}));\n","import React from 'react';\nimport {pick} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {Entity, getEntityUriForLink} from '@reltio/mdm-sdk';\nimport {EntityUriLink, ProfileBand, withContext} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n selectedEntity?: Entity;\n};\n\nconst RightPanelProfileBand = ({selectedEntity}: Props) => {\n const styles = useStyles();\n\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const selectedEntityUri = selectedEntity?.uri;\n\n const renderLabel = (label: string) => {\n if (entityUri === selectedEntityUri) return label;\n\n return (\n <EntityUriLink className={styles.link} value={getEntityUriForLink(selectedEntity)} screen=\"graph\">\n {label}\n </EntityUriLink>\n );\n };\n\n return <ProfileBand entity={selectedEntity} renderLabel={renderLabel} />;\n};\n\nexport default withContext(GraphStateContext, pick(['selectedEntity']), RightPanelProfileBand);\n","import React, {memo} from 'react';\nimport {isNil} from 'ramda';\nimport {RightPanelTab, SidePanel} from '@reltio/components';\nimport RightPanelProfileBand from '../RightPanelProfileBand/RightPanelProfileBand';\n\nexport enum ActivePanel {\n Relationship,\n EntityDetails\n}\n\ntype Props = {\n active?: number;\n tabs: RightPanelTab[];\n};\n\nexport const GraphRightSidePanel = memo(({active, tabs}: Props) => {\n const isOpen = !isNil(active);\n\n return (\n <SidePanel open={isOpen}>\n <RightPanelProfileBand />\n {tabs[active]?.content}\n </SidePanel>\n );\n});\n\nGraphRightSidePanel.displayName = 'GraphRightSidePanel';\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6 7v2h2V7H6zm0 4v2h2v-2H6zm0 4v2h2v-2H6zm4-8v2h8V7h-8zm10-2v5.02a6.52 6.52 0 012 2.01V3H2v18h11.028a6.52 6.52 0 01-2.009-2H4V5h16zm-9.503 8a6.497 6.497 0 011.31-2H10v2h.497zM10 15.5c0-.168.006-.335.019-.5H10v.5zm0 0c0 .516.06 1.018.173 1.5H10v-1.5zm10.3 2.39L23.42 21 22 22.42l-3.12-3.12c-.69.44-1.51.7-2.39.7-2.48 0-4.49-2.01-4.49-4.5s2.01-4.5 4.5-4.5 4.5 2.01 4.5 4.5c0 .88-.26 1.69-.7 2.39zm-3.8.11a2.5 2.5 0 000-5 2.5 2.5 0 000 5z\",\n fill: \"currentColor\"\n})));","import {useEffect, useRef, useCallback, useState} from 'react';\nimport {mergeLeft} from 'ramda';\nimport {useSigmaContext} from '@react-sigma/core';\nimport {getPixelRatio} from 'sigma/utils';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {Canvases, Renderers} from '../types/sigmaCustomRenderersTypes';\n\nconst createCanvasContext = (canvas: HTMLCanvasElement) => {\n const contextOptions = {preserveDrawingBuffer: false, antialias: false};\n return canvas.getContext('2d', contextOptions) as CanvasRenderingContext2D;\n};\n\nconst createCanvas = (id: string) => {\n const canvas = document.createElement('canvas');\n canvas.style.position = 'absolute';\n canvas.setAttribute('class', `sigma-${id}`);\n return canvas;\n};\n\nexport const useSigmaCustomRenderers = () => {\n const {container, sigma} = useSigmaContext();\n\n const [renderers, setRenderers] = useState<Renderers>({});\n\n const canvasesRef = useRef<Canvases>({});\n const widthRef = useRef<number>(0);\n const heightRef = useRef<number>(0);\n\n const addRenderers = useCallback((renderers: Renderers) => {\n setRenderers(mergeLeft(renderers));\n }, []);\n\n const resize = useCallback(() => {\n widthRef.current = container.offsetWidth;\n heightRef.current = container.offsetHeight;\n const pixelRatio = getPixelRatio();\n\n for (const id in canvasesRef.current) {\n const {canvasElement: canvas, context} = canvasesRef.current[id];\n\n canvas.style.width = widthRef.current + 'px';\n canvas.style.height = heightRef.current + 'px';\n\n canvas.setAttribute('width', widthRef.current * pixelRatio + 'px');\n canvas.setAttribute('height', heightRef.current * pixelRatio + 'px');\n\n if (pixelRatio !== 1) {\n context.scale(pixelRatio, pixelRatio);\n }\n }\n }, [container.offsetHeight, container.offsetWidth]);\n\n const afterRender = useCallback(() => {\n for (const id in renderers) {\n const {context} = canvasesRef.current[id];\n context.clearRect(0, 0, widthRef.current, heightRef.current);\n const {renderer} = renderers[id];\n renderer(context);\n }\n }, [renderers]);\n\n const beforeRender = useCallback(() => {\n for (const id in renderers) {\n const shouldCreateCanvas = isEmptyValue(canvasesRef.current[id]);\n\n if (!shouldCreateCanvas) continue;\n\n const {insertBefore} = renderers[id];\n const sigmaContainer = container.querySelector('.sigma-container');\n const canvas = createCanvas(id);\n const context = createCanvasContext(canvas);\n sigmaContainer.insertBefore(canvas, sigmaContainer.querySelector(`.sigma-${insertBefore}`));\n canvasesRef.current[id] = {canvasElement: canvas, context: context};\n resize();\n }\n }, [renderers, container, resize]);\n\n useEffect(() => {\n sigma.addListener('beforeRender', beforeRender);\n return () => {\n sigma.off('beforeRender', beforeRender);\n };\n }, [sigma, beforeRender]);\n\n useEffect(() => {\n sigma.addListener('afterRender', afterRender);\n return () => {\n sigma.off('afterRender', afterRender);\n };\n }, [sigma, afterRender]);\n\n useEffect(() => {\n sigma.addListener('resize', resize);\n return () => {\n sigma.off('resize', resize);\n };\n }, [sigma, resize]);\n\n useEffect(() => {\n const canvases = canvasesRef.current;\n\n return () => {\n for (const id in canvases) {\n const canvas = canvases[id];\n canvas.canvasElement.remove();\n delete canvases[id];\n }\n };\n }, []);\n\n return {addRenderers, canvases: canvasesRef.current};\n};\n","import {createContext, useContext} from 'react';\nimport {noop} from '@reltio/components';\nimport {Renderers, Canvases} from '../types/sigmaCustomRenderersTypes';\n\ntype Props = {\n addRenderers: (renderers: Renderers) => void;\n canvases: Canvases;\n};\n\nexport const SigmaCustomRenderersContext = createContext<Props>({\n addRenderers: noop,\n canvases: {}\n});\n\nexport const useSigmaCustomRenderers = () => {\n const sigmaCustomRenderers = useContext(SigmaCustomRenderersContext);\n return sigmaCustomRenderers;\n};\n\nSigmaCustomRenderersContext.displayName = 'SigmaCustomRenderersContext';\n","import React from 'react';\nimport {useSigmaCustomRenderers} from '../../hooks/useSigmaCustomRenderers';\nimport {SigmaCustomRenderersContext} from '../../contexts/SigmaCustomRenderersContext';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport const SigmaCustomRenderersContainer = ({children}: Props) => {\n const sigmaCustomRenderers = useSigmaCustomRenderers();\n return (\n <SigmaCustomRenderersContext.Provider value={sigmaCustomRenderers}>\n {children}\n </SigmaCustomRenderersContext.Provider>\n );\n};\n","/*\n * This file part of sigma/rendering/canvas/hover.ts with custom style\n */\nimport {Settings} from 'sigma/settings';\nimport {NodeDisplayData, PartialButFor} from 'sigma/types';\n\nconst PADDING = 2;\n\nexport const drawNodeBackground = (\n context: CanvasRenderingContext2D,\n data: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size' | 'label'>,\n settings: Settings,\n drawNodeArc = true\n): void => {\n context.fillStyle = '#FFF';\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 2;\n context.shadowBlur = 3;\n context.shadowColor = 'rgba(0,0,0,0.2)';\n\n if (typeof data.label === 'string') {\n const size = settings.labelSize + 2;\n const borderRadius = 2;\n\n const textWidth = context.measureText(data.label).width,\n boxWidth = Math.round(textWidth + 16),\n boxHeight = Math.round(size + 2 * PADDING),\n radius = Math.max(data.size, size / 2) + PADDING;\n\n const top = data.y - boxHeight / 2;\n const bottom = data.y + boxHeight / 2;\n const left = data.x + (drawNodeArc ? 0 : radius);\n const right = left + boxWidth + (drawNodeArc ? radius : 0);\n\n context.beginPath();\n context.moveTo(left, bottom - borderRadius);\n context.quadraticCurveTo(left, bottom, left + borderRadius, bottom);\n context.lineTo(right - borderRadius, bottom);\n context.quadraticCurveTo(right, bottom, right, bottom - borderRadius);\n context.lineTo(right, top + borderRadius);\n context.quadraticCurveTo(right, top, right - borderRadius, top);\n context.lineTo(left + borderRadius, top);\n context.quadraticCurveTo(left, top, left, top + borderRadius);\n context.closePath();\n context.fill();\n\n if (drawNodeArc) {\n context.shadowOffsetX = -2;\n context.shadowOffsetY = 0;\n context.beginPath();\n context.arc(data.x, data.y, radius, 0, Math.PI * 2);\n context.closePath();\n context.fill();\n }\n } else if (drawNodeArc) {\n context.beginPath();\n context.arc(data.x, data.y, data.size + PADDING, 0, Math.PI * 2);\n context.closePath();\n context.fill();\n }\n};\n","/*\n * This file copies sigma/rendering/canvas/label.ts with custom style\n */\nimport {Settings} from 'sigma/settings';\nimport {NodeDisplayData, PartialButFor} from 'sigma/types';\nimport {drawNodeBackground} from './nodeBackground';\n\nexport const drawLabel = (\n context: CanvasRenderingContext2D,\n data: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size' | 'label'>,\n settings: Settings,\n drawBackground = true\n): void => {\n if (!data.label) return;\n\n const size = settings.labelSize,\n font = settings.labelFont,\n weight = settings.labelWeight;\n\n if (drawBackground) {\n drawNodeBackground(context, data, settings, false);\n }\n\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n context.shadowBlur = 0;\n\n context.fillStyle = settings.labelColor?.attribute\n ? data[settings.labelColor.attribute] || settings.labelColor.color || '#000'\n : settings.labelColor.color;\n context.font = `${weight} ${size}px ${font}`;\n context.fillText(data.label, data.x + data.size + 11, data.y + size / 3);\n};\n","import {Settings} from 'sigma/settings';\nimport {NodeDisplayData, PartialButFor} from 'sigma/types';\nimport {drawLabel} from './label';\nimport {drawNodeBackground} from './nodeBackground';\n\nexport const drawHover = (\n context: CanvasRenderingContext2D,\n data: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size' | 'label'>,\n settings: Settings\n): void => {\n drawNodeBackground(context, data, settings, true);\n drawLabel(context, data, settings, false);\n};\n","/*\n * This class copies sigma/examples/custom-rendering/programs/node.border, but with a some\n * difference: The fragment shader (\"./node.border.frag.glsl\") draws a transparent\n * disc with a colored border. Size of border depends on inPath and highlighted props\n */\n\nimport {floatColor} from 'sigma/utils';\nimport {AbstractNodeProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\n\nimport {vertexShaderSource} from './shaders/node.border.vert.glsl';\nimport {fragmentShaderSource} from './shaders/node.border.frag.glsl';\nimport {NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 1; // number of vertices for a node\nconst ATTRIBUTES = 5; // number of attributes for one vertex\n\nexport default class NodeProgramBorder extends AbstractNodeProgram {\n borderSize: GLint; // GL variable for border size\n constructor(gl: WebGLRenderingContext) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n // Attribute Location\n this.borderSize = gl.getAttribLocation(this.program, 'a_borderSize');\n\n this.bind();\n }\n\n bind(): void {\n super.bind();\n\n const gl = this.gl;\n\n gl.enableVertexAttribArray(this.borderSize);\n gl.vertexAttribPointer(\n this.borderSize,\n 1,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 16\n );\n }\n\n process(data: NodeAttributes, hidden: boolean, offset: number): void {\n const array = this.array;\n let i = offset * POINTS * ATTRIBUTES;\n\n if (hidden || !data.inPath) {\n // draw border only for nodes with inPath or not hidden\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n return;\n }\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i] = data.highlighted ? 4 : 2; // size of border in pixels\n }\n\n render(params: RenderParams): void {\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio));\n gl.uniform1f(this.scaleLocation, params.scalingRatio);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n\n gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES);\n }\n}\n","/*\n * This file copies sigma/examples/custom-rendering/programs/node.border.vert.glsl, but with a some\n * difference: added calculation of v_borderRadius using a_borderSize variable\n */\n\nexport const vertexShaderSource = `\nattribute vec2 a_position;\nattribute float a_size;\nattribute vec4 a_color;\nattribute float a_borderSize;\n\nuniform float u_ratio;\nuniform float u_scale;\nuniform mat3 u_matrix;\n\nvarying vec4 v_color;\nvarying float v_border;\nvarying float v_borderRadius;\n\nconst float bias = 255.0 / 254.0;\nconst float radius = 0.5;\n\nvoid main() {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1);\n\n // Multiply the point size twice:\n // - x SCALING_RATIO to correct the canvas scaling\n // - x 2 to correct the formulae\n gl_PointSize = a_size * u_ratio * u_scale * 2.0;\n \n v_border = (1.0 / u_ratio) * (0.5 / a_size);\n v_borderRadius = radius - (radius * a_borderSize / a_size); // border radius in node's size (full size is 1)\n\n // Extract the color:\n v_color = a_color;\n v_color.a *= bias;\n}`;\n","/*\n * This file copies sigma/examples/custom-rendering/programs/node.border.frag.glsl, but with a some\n * difference: white color was changed to transparent and used border radius from v_borderRadius variable\n */\n\nexport const fragmentShaderSource = `\nprecision mediump float;\n\nvarying vec4 v_color; // base color of node\nvarying float v_border;\nvarying float v_borderRadius; // inner border radius\n\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0); // transparent color\nconst float radius = 0.5;\n\nvoid main(void) {\n float distToCenter = length(gl_PointCoord - vec2(0.5, 0.5)); // distance from current point to center of node\n\n if (distToCenter < v_borderRadius - v_border) // distance to inner border radius\n gl_FragColor = transparent;\n else if (distToCenter < v_borderRadius)\n gl_FragColor = mix(v_color, transparent, (v_borderRadius - distToCenter) / v_border);\n else if (distToCenter < radius - v_border) // distance to outer border radius\n gl_FragColor = v_color;\n else if (distToCenter < radius)\n gl_FragColor = mix(transparent, v_color, (radius - distToCenter) / v_border);\n else // points outside the button\n gl_FragColor = transparent;\n}\n`;\n","import {clearCrossOriginForCORSIfNotSameOrigin, ImageType} from './helpers/imageHelper';\n\n/*\n * ImageLoader is a part of sigma/rendering/webgl/programs/node.image\n * It loads images in one texture, which used for all nodes.\n */\n\nconst MAX_TEXTURE_SIZE = 128;\n\nexport class ImageLoader {\n rebindTextureFns: (() => void)[] = [];\n images: Record<string, ImageType> = {};\n textureImage: ImageData;\n hasReceivedImages = false;\n pendingImagesFrameID: number | undefined = undefined;\n constructor() {}\n\n /**\n * Helper to load an image:\n */\n loadImage = (id: string, imageSource: string): void => {\n if (this.images[id]) return;\n\n const image = new Image();\n image.addEventListener('load', () => {\n this.images[id] = {\n status: 'pending',\n image\n };\n\n if (typeof this.pendingImagesFrameID !== 'number') {\n this.pendingImagesFrameID = requestAnimationFrame(() => this.finalizePendingImages());\n }\n });\n image.addEventListener('error', () => {\n this.images[id] = {status: 'error'};\n });\n this.images[id] = {status: 'loading'};\n\n // Load image:\n clearCrossOriginForCORSIfNotSameOrigin(image, imageSource);\n // add ?not-from-cache parameter for loading image not from cache\n // because cached image does not contain cors headers\n // https://www.hacksoft.io/blog/handle-images-cors-error-in-chrome\n image.src = imageSource.startsWith('data:image') ? imageSource : imageSource + '?not-from-cache';\n };\n\n /**\n * Helper that takes all pending images and adds them into the texture:\n */\n finalizePendingImages = (): void => {\n this.pendingImagesFrameID = undefined;\n\n const pendingImages: {image: HTMLImageElement; id: string; size: number}[] = [];\n\n // List all pending images:\n for (const id in this.images) {\n const state = this.images[id];\n if (state.status === 'pending') {\n pendingImages.push({\n id,\n image: state.image,\n size: Math.min(state.image.width, state.image.height) || 1\n });\n }\n }\n\n // Add images to texture:\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = pendingImages.reduce(\n (iter, {size}) => iter + size,\n this.hasReceivedImages ? this.textureImage.width : 0\n );\n canvas.height = Math.max(\n this.hasReceivedImages ? this.textureImage.height : 0,\n ...pendingImages.map(({size}) => size)\n );\n\n let xOffset = 0;\n if (this.hasReceivedImages) {\n ctx.putImageData(this.textureImage, 0, 0);\n xOffset = this.textureImage.width;\n }\n pendingImages.forEach(({id, image, size}) => {\n const imageSizeInTexture = Math.min(MAX_TEXTURE_SIZE, size);\n\n // Crop image, to only keep the biggest square, centered:\n let dx = 0,\n dy = 0;\n if ((image.width || 0) > (image.height || 0)) {\n dx = (image.width - image.height) / 2;\n } else {\n dy = (image.height - image.width) / 2;\n }\n ctx.drawImage(image, dx, dy, size, size, xOffset, 0, imageSizeInTexture, imageSizeInTexture);\n\n // Update image state:\n this.images[id] = {\n status: 'ready',\n x: xOffset,\n y: 0,\n width: imageSizeInTexture,\n height: imageSizeInTexture\n };\n\n xOffset += imageSizeInTexture;\n });\n\n this.textureImage = ctx.getImageData(0, 0, canvas.width, canvas.height);\n this.hasReceivedImages = true;\n this.rebindTextureFns.forEach((fn) => fn());\n };\n}\n","import {Coordinates, Dimensions} from 'sigma/types';\n\ntype ImageLoading = {status: 'loading'};\ntype ImageError = {status: 'error'};\ntype ImagePending = {status: 'pending'; image: HTMLImageElement};\ntype ImageReady = {status: 'ready'} & Coordinates & Dimensions;\nexport type ImageType = ImageLoading | ImageError | ImagePending | ImageReady;\n\nexport const clearCrossOriginForCORSIfNotSameOrigin = (img: HTMLImageElement, url: string): void => {\n if (new URL(url, window.location.href).origin !== window.location.origin) {\n img.crossOrigin = '';\n }\n};\n","/*\n * This class copies sigma/rendering/webgl/programs/node.image, but with a some\n * difference: it can change color of picture for inactive state\n * Program rendering nodes using GL_POINTS, but that draws an image on top of\n * the classic colored disc.\n */\nimport {vertexShaderSource} from './shaders/node.image.vert.glsl';\nimport {fragmentShaderSource} from './shaders/node.image.frag.glsl';\n\nimport {AbstractNodeProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\nimport Sigma from 'sigma/sigma';\nimport {floatColor} from 'sigma/utils';\nimport {svg2Url} from '@reltio/mdm-sdk';\nimport {DEFAULT_PROFILE_IMAGE} from '../icons/no_photo.inline.svg';\nimport {ImageLoader} from './image';\nimport {NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 1;\nconst ATTRIBUTES = 9;\n\nconst defaultImage = {id: 'defaultImage', path: svg2Url(DEFAULT_PROFILE_IMAGE)};\n\n/*\n * To share the texture between the program instances of the graph and the\n * hovered nodes (to prevent some flickering, mostly), this program must be\n * \"built\" for each sigma instance:\n */\nexport default class NodeImageProgram extends AbstractNodeProgram {\n imageLoader: ImageLoader;\n texture: WebGLTexture;\n textureLocation: GLint;\n atlasLocation: WebGLUniformLocation;\n latestRenderParams?: RenderParams;\n inactive: GLint;\n\n constructor(gl: WebGLRenderingContext, renderer: Sigma) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n this.imageLoader = new ImageLoader();\n\n this.imageLoader.rebindTextureFns.push(() => {\n if (this && this.rebindTexture) this.rebindTexture();\n if (renderer && renderer.refresh) renderer.refresh();\n });\n\n this.imageLoader.textureImage = new ImageData(1, 1);\n\n // Attribute Location\n this.textureLocation = gl.getAttribLocation(this.program, 'a_texture');\n this.inactive = gl.getAttribLocation(this.program, 'a_inactive');\n\n // Uniform Location\n const atlasLocation = gl.getUniformLocation(this.program, 'u_atlas');\n if (atlasLocation === null) throw new Error('NodeProgramImage: error while getting atlasLocation');\n this.atlasLocation = atlasLocation;\n\n // Initialize WebGL texture:\n this.texture = gl.createTexture() as WebGLTexture;\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 0]));\n\n this.imageLoader.loadImage(defaultImage.id, defaultImage.path);\n\n this.bind();\n }\n\n bind(): void {\n super.bind();\n\n const gl = this.gl;\n\n gl.enableVertexAttribArray(this.textureLocation);\n gl.enableVertexAttribArray(this.inactive);\n\n gl.vertexAttribPointer(this.inactive, 1, gl.FLOAT, false, this.attributes * Float32Array.BYTES_PER_ELEMENT, 16);\n\n gl.vertexAttribPointer(\n this.textureLocation,\n 4,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 20\n );\n }\n\n process(data: NodeAttributes, hidden: boolean, offset: number): void {\n const array = this.array;\n let i = offset * POINTS * ATTRIBUTES;\n\n const imageSource = data.image;\n let imageState = imageSource && this.imageLoader.images[imageSource];\n if (typeof imageSource === 'string' && !imageState) {\n this.imageLoader.loadImage(imageSource, imageSource);\n }\n\n if (hidden) {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n // Texture:\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n return;\n }\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i++] = data.inactive ? 1 : 0; // inactive property\n\n // Reference texture:\n if (!imageState || imageState.status !== 'ready') {\n imageState = this.imageLoader.images[defaultImage.id];\n }\n\n if (imageState && imageState.status === 'ready') {\n const {width, height} = this.imageLoader.textureImage;\n array[i++] = imageState.x / width;\n array[i++] = imageState.y / height;\n array[i++] = imageState.width / width;\n array[i++] = imageState.height / height;\n } else {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n }\n }\n\n render(params: RenderParams): void {\n if (this.hasNothingToRender()) return;\n\n this.latestRenderParams = params;\n\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio));\n gl.uniform1f(this.scaleLocation, params.scalingRatio);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1i(this.atlasLocation, 0);\n\n gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES);\n }\n\n rebindTexture() {\n const gl = this.gl;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.imageLoader.textureImage);\n gl.generateMipmap(gl.TEXTURE_2D);\n\n if (this.latestRenderParams) {\n this.bind();\n this.bufferData();\n this.render(this.latestRenderParams);\n }\n }\n}\n","export const DEFAULT_PROFILE_IMAGE = `\n<svg width=\"400px\" height=\"400px\" viewBox=\"0 0 400 400\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Group</title>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"Group\" fill-rule=\"nonzero\">\n <rect id=\"Rectangle\" fill=\"#DFE5E9\" x=\"0\" y=\"0\" width=\"400\" height=\"400\"></rect>\n <path d=\"M0,387.023257 L0,399.918908 L400,399.918908 L400,386.023594 C366.631,377.336524 321.866,364.269931 315.979,359.161654 C308.985,353.083704 270.481,310.508063 270.481,310.508063 L270.481,286.186267 C270.481,286.186267 284.478,266.204006 284.478,261.854473 C284.478,257.515936 285.353,246.219746 291.481,241.011503 C297.61,235.792263 311.607,211.471466 312.481,206.253226 C313.355,201.043983 319.484,188.009379 312.481,185.400259 C305.478,182.801135 307.236,173.244359 308.984,168.026119 C310.733,162.817875 319.484,139.355788 322.981,133.277838 C326.488,127.199888 312.481,108.956041 312.481,108.956041 C312.481,108.956041 294.978,80.2857109 245.975,53.3547939 C196.971,26.4138803 168.967,42.9283105 168.967,42.9283105 L161.964,60.3024507 C161.964,60.3024507 138.341,64.6409874 123.46,77.6765909 C108.589,90.7121943 99.837,106.346921 98.963,115.903698 C98.088,125.460475 103.334,159.339048 105.966,164.557289 C108.589,169.765532 112.96,185.400259 112.96,185.400259 C112.96,185.400259 108.589,183.670842 105.966,188.879085 C103.334,194.097325 112.085,218.419122 112.96,220.159535 C113.834,221.897949 114.718,238.403382 119.963,237.532676 C125.218,236.663969 130.463,251.42799 130.463,251.42799 C130.463,251.42799 143.596,271.41125 144.47,275.759783 C145.344,280.09832 147.967,307.039233 147.967,307.039233 L126.967,331.36103 L102.46,355.682827 C102.459,355.682827 34.042,375.886013 0,387.023257 Z\" id=\"Path\" fill=\"#B3BCC4\"></path>\n <path d=\"M0,387.023257 L0,399.918908 L400,399.918908 L400,386.023594 C366.631,377.336524 321.866,364.269931 315.979,359.161654 C308.985,353.083704 270.481,310.508063 270.481,310.508063 L270.481,286.186267 C270.481,286.186267 284.478,266.204006 284.478,261.854473 C284.478,257.515936 285.353,246.219746 291.481,241.011503 C297.61,235.792263 311.607,211.471466 312.481,206.253226 C313.355,201.043983 319.484,188.009379 312.481,185.400259 C305.478,182.801135 307.236,173.244359 308.984,168.026119 C310.733,162.817875 319.484,139.355788 322.981,133.277838 C326.488,127.199888 312.481,108.956041 312.481,108.956041 C312.481,108.956041 294.978,80.2857109 245.975,53.3547939 C196.971,26.4138803 168.967,42.9283105 168.967,42.9283105 L161.964,60.3024507 C161.964,60.3024507 138.341,64.6409874 123.46,77.6765909 C108.589,90.7121943 99.837,106.346921 98.963,115.903698 C98.088,125.460475 103.334,159.339048 105.966,164.557289 C108.589,169.765532 112.96,185.400259 112.96,185.400259 C112.96,185.400259 108.589,183.670842 105.966,188.879085 C103.334,194.097325 112.085,218.419122 112.96,220.159535 C113.834,221.897949 114.718,238.403382 119.963,237.532676 C125.218,236.663969 130.463,251.42799 130.463,251.42799 C130.463,251.42799 143.596,271.41125 144.47,275.759783 C145.344,280.09832 147.967,307.039233 147.967,307.039233 L126.967,331.36103 L102.46,355.682827 C102.459,355.682827 34.042,375.886013 0,387.023257 Z\" id=\"Path\" fill=\"#B3BCC4\"></path>\n <path d=\"M5.68434189e-14,387.023257 L5.68434189e-14,399.918908 L400,399.918908 L400,386.023594 C366.631,377.336524 321.866,364.269931 315.979,359.161654 C308.985,353.083704 270.481,310.508063 270.481,310.508063 L270.481,286.186267 C270.481,286.186267 284.478,266.204006 284.478,261.854473 C284.478,257.515936 285.353,246.219746 291.481,241.011503 C297.61,235.792263 311.607,211.471466 312.481,206.253226 C313.355,201.043983 319.484,188.009379 312.481,185.400259 C305.478,182.801135 307.236,173.244359 308.984,168.026119 C310.733,162.817875 319.484,139.355788 322.981,133.277838 C326.488,127.199888 312.481,108.956041 312.481,108.956041 C312.481,108.956041 294.978,80.2857109 245.975,53.3547939 C196.971,26.4138803 168.967,42.9283105 168.967,42.9283105 L161.964,60.3024507 C161.964,60.3024507 138.341,64.6409874 123.46,77.6765909 C108.589,90.7121943 99.837,106.346921 98.963,115.903698 C98.088,125.460475 103.334,159.339048 105.966,164.557289 C108.589,169.765532 112.96,185.400259 112.96,185.400259 C112.96,185.400259 108.589,183.670842 105.966,188.879085 C103.334,194.097325 112.085,218.419122 112.96,220.159535 C113.834,221.897949 114.718,238.403382 119.963,237.532676 C125.218,236.663969 130.463,251.42799 130.463,251.42799 C130.463,251.42799 143.596,271.41125 144.47,275.759783 C145.344,280.09832 147.967,307.039233 147.967,307.039233 L126.967,331.36103 L102.46,355.682827 C102.459,355.682827 34.042,375.886013 5.68434189e-14,387.023257 Z\" id=\"Path\" fill=\"#B3BCC4\"></path>\n </g>\n </g>\n</svg>\n`;\n","/*\n * This file copies sigma/examples/custom-rendering/programs/node.image.vert.glsl, but with a some\n * difference: white color was changed to transparent and used border radius from v_borderRadius variable\n */\nexport const vertexShaderSource = `\nattribute vec2 a_position;\nattribute float a_size;\nattribute vec4 a_color;\nattribute vec4 a_texture;\nattribute float a_inactive;\n\nuniform float u_ratio;\nuniform float u_scale;\nuniform mat3 u_matrix;\n\nvarying float v_border;\nvarying float v_inactive;\nvarying vec4 v_color;\nvarying vec4 v_texture;\n\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1);\n\n // Multiply the point size twice:\n // - x SCALING_RATIO to correct the canvas scaling\n // - x 2 to correct the formulae\n gl_PointSize = a_size * u_ratio * u_scale * 2.0;\n\n v_border = (1.0 / u_ratio) * (0.5 / a_size);\n\n // Extract the color:\n v_color = a_color;\n v_color.a *= bias;\n\n // Pass the texture coordinates:\n v_texture = a_texture;\n\n // Pass inactive property\n v_inactive = a_inactive;\n}`;\n","export const fragmentShaderSource = `\nprecision mediump float;\n\nvarying float v_border;\nvarying float v_inactive;\nvarying vec4 v_color;\nvarying vec4 v_texture;\n\nuniform sampler2D u_atlas;\n\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\nconst float radius = 0.5;\n\n// convert color to gray\nvec4 toGrayscale(in vec4 color)\n{\n float average = (color.r + color.g + color.b) / 3.0;\n return vec4(average, average, average, 1.0);\n}\n\nvoid main(void) {\n vec4 color;\n\n // set texel as color of point\n if (v_texture.w > 0.0) {\n vec4 texel = texture2D(u_atlas, v_texture.xy + gl_PointCoord * v_texture.zw, -1.0);\n color = vec4(mix(v_color, texel, texel.a).rgb, max(texel.a, v_color.a));\n } else {\n color = v_color;\n }\n\n // convert color to gray\n if (v_inactive > 0.0) {\n color = toGrayscale(color);\n }\n\n // distance from point to center of node\n float dist = length(gl_PointCoord - vec2(0.5, 0.5));\n\n if (dist < radius - v_border) // points inside node\n gl_FragColor = color;\n else if (dist < radius) // border of node\n gl_FragColor = mix(transparent, color, (radius - dist) / v_border);\n else // points outside node\n gl_FragColor = transparent;\n}`;\n","export const vertexShaderSource = `\nattribute vec2 a_position;\nattribute float a_size;\nattribute vec4 a_color;\nattribute float a_buttonSize;\nattribute vec2 a_normals;\nattribute vec4 a_texture;\n\nuniform float u_ratio;\nuniform float u_scale;\nuniform mat3 u_matrix;\nuniform float u_sqrtZoomRatio;\nuniform float u_correctionRatio;\n\nvarying float v_border;\nvarying vec4 v_texture;\nvarying vec4 v_color;\n\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n float normalLength = length(a_normals);\n vec2 unitNormal = (a_normals) / normalLength;\n\n float pixelsThickness = max(normalLength, 1.0 * u_sqrtZoomRatio);\n float webGLThickness = pixelsThickness * u_correctionRatio;\n float adaptedWebGLThickness = webGLThickness * u_sqrtZoomRatio;\n\n // Move the point\n float adaptedWebGLNodeRadius = a_size * 2.0 * u_correctionRatio * u_sqrtZoomRatio;\n vec2 compensationVector = vec2(-unitNormal.y, unitNormal.x) * (adaptedWebGLNodeRadius);\n\n // Set position\n gl_Position = vec4((u_matrix * vec3(a_position + compensationVector, 1)).xy, 0, 1);\n\n // Multiply the point size twice:\n // - x SCALING_RATIO to correct the canvas scaling\n // - x 2 to correct the formulae\n gl_PointSize = a_buttonSize * u_ratio * u_scale * 2.0;\n\n v_border = (1.0 / u_ratio) * (0.5 / a_size);\n\n // Extract the color:\n v_color = a_color;\n v_color.a *= bias;\n\n // Pass the texture coordinates:\n v_texture = a_texture;\n}`;\n","import {vertexShaderSource} from './shaders/node.buttons.vert.glsl';\nimport {fragmentShaderSource} from './shaders/node.buttons.frag.glsl';\n\nimport Sigma from 'sigma/sigma';\nimport {AbstractNodeProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\nimport {floatColor} from 'sigma/utils';\nimport {svg2Url} from '@reltio/mdm-sdk';\nimport {EXPAND_ICON} from '../icons/expandIcon.inline.svg';\nimport {COLLAPSE_ICON} from '../icons/collapseIcon.inline.svg';\nimport {ImageLoader} from './image';\nimport {NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 2; // number of button for 1 node\nconst ATTRIBUTES = 11; // number of attributes for one button\n\n// images for buttons\nconst defaultImages = [\n {id: 'expandIcon', path: svg2Url(EXPAND_ICON)},\n {id: 'collapseIcon', path: svg2Url(COLLAPSE_ICON)}\n];\n\nexport default class NodeButtonsProgram extends AbstractNodeProgram {\n imageLoader: ImageLoader;\n texture: WebGLTexture;\n textureLocation: GLint;\n buttonSize: GLint; // buttons size\n normals: GLint; // normals to calculate positions of buttons\n correctionRatioLocation: WebGLUniformLocation;\n sqrtZoomRatioLocation: WebGLUniformLocation;\n atlasLocation: WebGLUniformLocation;\n latestRenderParams?: RenderParams;\n\n constructor(gl: WebGLRenderingContext, renderer: Sigma) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n this.imageLoader = new ImageLoader();\n\n this.imageLoader.rebindTextureFns.push(() => {\n if (this && this.rebindTexture) this.rebindTexture();\n if (renderer && renderer.refresh) renderer.refresh();\n });\n\n this.imageLoader.textureImage = new ImageData(1, 1);\n\n // Attribute Location\n this.textureLocation = gl.getAttribLocation(this.program, 'a_texture');\n this.buttonSize = gl.getAttribLocation(this.program, 'a_buttonSize');\n this.normals = gl.getAttribLocation(this.program, 'a_normals');\n\n // Uniform Location\n const correctionRatioLocation = gl.getUniformLocation(this.program, 'u_correctionRatio');\n if (correctionRatioLocation === null)\n throw new Error('NodeButtonsProgram: error while getting correctionRatioLocation');\n this.correctionRatioLocation = correctionRatioLocation;\n\n const sqrtZoomRatioLocation = gl.getUniformLocation(this.program, 'u_sqrtZoomRatio');\n if (sqrtZoomRatioLocation === null)\n throw new Error('NodeButtonsProgram: error while getting sqrtZoomRatioLocation');\n this.sqrtZoomRatioLocation = sqrtZoomRatioLocation;\n\n const atlasLocation = gl.getUniformLocation(this.program, 'u_atlas');\n if (atlasLocation === null) throw new Error('NodeButtonsProgram: error while getting atlasLocation');\n this.atlasLocation = atlasLocation;\n\n // Initialize WebGL texture:\n this.texture = gl.createTexture() as WebGLTexture;\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 0]));\n\n defaultImages.map((image) => this.imageLoader.loadImage(image.id, image.path));\n\n this.bind();\n }\n\n bind(): void {\n super.bind();\n\n const gl = this.gl;\n\n gl.enableVertexAttribArray(this.buttonSize);\n gl.enableVertexAttribArray(this.normals);\n gl.enableVertexAttribArray(this.textureLocation);\n\n gl.vertexAttribPointer(\n this.buttonSize,\n 1,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 16\n );\n gl.vertexAttribPointer(this.normals, 2, gl.FLOAT, false, this.attributes * Float32Array.BYTES_PER_ELEMENT, 20);\n gl.vertexAttribPointer(\n this.textureLocation,\n 4,\n gl.FLOAT,\n false,\n this.attributes * Float32Array.BYTES_PER_ELEMENT,\n 28\n );\n }\n\n process(data: NodeAttributes, hidden: boolean, offset: number): void {\n const array = this.array;\n let i = offset * POINTS * ATTRIBUTES;\n const hideButtons = hidden || (data.inactive && !data.highlighted);\n\n // Computing normals\n const [dx, dy] = data.buttonOffset || [0, 0];\n\n let len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n\n n1 = dy * len;\n n2 = dx * len;\n }\n\n // Expand button\n\n if (hideButtons || !data.showExpand) {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n // Texture:\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n } else {\n const expandImageState = this.imageLoader.images['expandIcon'];\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i++] = data.buttonSize || 0; // button radius\n array[i++] = n1; // normals\n array[i++] = -n2;\n\n // Reference texture:\n if (expandImageState && expandImageState.status === 'ready') {\n const {width, height} = this.imageLoader.textureImage;\n array[i++] = expandImageState.x / width;\n array[i++] = expandImageState.y / height;\n array[i++] = expandImageState.width / width;\n array[i++] = expandImageState.height / height;\n } else {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n }\n }\n\n // Collapse button\n\n // don't show button\n if (hideButtons || !data.showCollapse) {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n // Texture:\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n } else {\n const collapseImageState = this.imageLoader.images['collapseIcon'];\n\n array[i++] = data.x; // position of center\n array[i++] = data.y;\n array[i++] = data.size; // size\n array[i++] = floatColor(data.color); // color\n array[i++] = data.buttonSize || 0; // button radius\n array[i++] = -n1; // normals\n array[i++] = -n2;\n\n // Reference texture:\n if (collapseImageState && collapseImageState.status === 'ready') {\n const {width, height} = this.imageLoader.textureImage;\n array[i++] = collapseImageState.x / width;\n array[i++] = collapseImageState.y / height;\n array[i++] = collapseImageState.width / width;\n array[i++] = collapseImageState.height / height;\n } else {\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n array[i++] = 0;\n }\n }\n }\n\n render(params: RenderParams): void {\n if (this.hasNothingToRender()) return;\n\n this.latestRenderParams = params;\n\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio));\n gl.uniform1f(this.scaleLocation, params.scalingRatio);\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1f(this.sqrtZoomRatioLocation, Math.sqrt(params.ratio));\n gl.uniform1f(this.correctionRatioLocation, params.correctionRatio);\n gl.uniform1i(this.atlasLocation, 1);\n\n gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES);\n }\n\n rebindTexture() {\n const gl = this.gl;\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.imageLoader.textureImage);\n gl.generateMipmap(gl.TEXTURE_2D);\n\n if (this.latestRenderParams) {\n this.bind();\n this.bufferData();\n this.render(this.latestRenderParams);\n }\n }\n}\n","export const EXPAND_ICON = `<svg width=\"32\" height=\"32\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"white\"/>\n<circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"black\" stroke-opacity=\"0.541176\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.80013 7.20003V4H7.20013L7.20013 7.20003H4V8.80003H7.20013L7.20013 12H8.80013V8.80003H12V7.20003H8.80013Z\" fill=\"black\" fill-opacity=\"0.541176\"/>\n</svg>`;\n","export const COLLAPSE_ICON = `<svg width=\"32\" height=\"32\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"white\"/>\n<circle cx=\"8\" cy=\"8\" r=\"7.5\" stroke=\"black\" stroke-opacity=\"0.541176\"/>\n<path d=\"M4 7.20004H12V8.80004H4V7.20004Z\" fill=\"black\" fill-opacity=\"0.541176\"/>\n</svg>\n`;\n","export const fragmentShaderSource = `\nprecision mediump float;\n\nvarying float v_border;\nvarying vec4 v_texture;\n\nuniform sampler2D u_atlas;\n\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\nconst vec4 black = vec4(0.0, 0.0, 0.0, 1.0);\nconst float bias = 255.0 / 254.0;\nconst float radius = 0.5;\n\nvoid main(void) {\n vec4 color;\n float distToCenter = length(gl_PointCoord - vec2(0.5, 0.5));\n\n // set texel as color of point\n if (v_texture.w > 0.0) {\n vec4 texel = texture2D(u_atlas, v_texture.xy + gl_PointCoord * v_texture.zw, -1.0);\n color = vec4(mix(black, texel, texel.a).rgb, max(texel.a, bias));\n } else {\n color = black;\n }\n\n if (distToCenter < radius - v_border) // points inside button\n gl_FragColor = color;\n else if (distToCenter < radius) // border of button\n gl_FragColor = mix(transparent, color, (0.5 - distToCenter) / v_border);\n else // points outside button\n gl_FragColor = transparent;\n}`;\n","/**\n * This class extends src/rendering/webgl/programs/edge.arrowHead.ts for arrowSizeRatio support\n */\nimport SigmaEdgeArrowHeadProgram from 'sigma/rendering/webgl/programs/edge.arrowHead';\nimport {floatColor} from 'sigma/utils';\nimport {EdgeAttributes, NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 3,\n ATTRIBUTES = 9,\n STRIDE = POINTS * ATTRIBUTES;\n\nexport default class EdgeArrowHeadProgram extends SigmaEdgeArrowHeadProgram {\n process(\n sourceData: NodeAttributes,\n targetData: NodeAttributes,\n data: EdgeAttributes,\n hidden: boolean,\n offset: number\n ): void {\n if (hidden) {\n for (let i = offset * STRIDE, l = i + STRIDE; i < l; i++) this.array[i] = 0;\n\n return;\n }\n // Our changes - added arrowSizeRatio support\n const arrowSizeRatio = data.arrowSizeRatio || 1;\n const thickness = data.size * arrowSizeRatio || 1,\n radius = targetData.size || 1,\n x1 = sourceData.x,\n y1 = sourceData.y,\n x2 = targetData.x,\n y2 = targetData.y,\n color = floatColor(data.color);\n\n // Computing normals\n const dx = x2 - x1,\n dy = y2 - y1;\n\n let len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n\n n1 = -dy * len * thickness;\n n2 = dx * len * thickness;\n }\n\n let i = POINTS * ATTRIBUTES * offset;\n\n const array = this.array;\n\n // First point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 1;\n array[i++] = 0;\n array[i++] = 0;\n\n // Second point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 0;\n array[i++] = 1;\n array[i++] = 0;\n\n // Third point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = radius;\n array[i++] = color;\n array[i++] = 0;\n array[i++] = 0;\n array[i] = 1;\n }\n}\n","import {EdgeAttributes, NodeAttributes} from '../../types/graphDataTypes';\nimport EdgeArrowHeadProgram from './edge.arrowHead';\n\nexport default class EdgeReversedArrowHeadProgram extends EdgeArrowHeadProgram {\n process(\n sourceData: NodeAttributes,\n targetData: NodeAttributes,\n data: EdgeAttributes,\n hidden: boolean,\n offset: number\n ): void {\n super.process(targetData, sourceData, data, hidden, offset);\n }\n}\n","/**\n * This class copies src/rendering/webgl/programs/edge.clamped.ts, but with a some difference:\n * implemented arrowSizeRatio edge attribute, forwarded it to shaders as a_arrowSizeRatio\n * implemented 'doubleArrow' edge type support\n */\n\nimport {floatColor, canUse32BitsIndices} from 'sigma/utils';\nimport {AbstractEdgeProgram} from 'sigma/rendering/webgl/programs/common/edge';\nimport fragmentShaderSource from 'sigma/rendering/webgl/shaders/edge.frag.glsl';\nimport {RenderParams} from 'sigma/rendering/webgl/programs/common/program';\n\nimport {vertexShaderSource} from './shaders/edge.clamped.vert.glsl';\nimport {EdgeAttributes, NodeAttributes} from '../../types/graphDataTypes';\n\nconst POINTS = 4,\n ATTRIBUTES = 7,\n STRIDE = POINTS * ATTRIBUTES;\n\nexport default class EdgeClampedProgram extends AbstractEdgeProgram {\n IndicesArray: Uint32ArrayConstructor | Uint16ArrayConstructor;\n indicesArray: Uint32Array | Uint16Array;\n indicesBuffer: WebGLBuffer;\n indicesType: GLenum;\n positionLocation: GLint;\n colorLocation: GLint;\n normalLocation: GLint;\n radiusLocation: GLint;\n arrowSizeRatioLocation: GLint; // our change\n matrixLocation: WebGLUniformLocation;\n sqrtZoomRatioLocation: WebGLUniformLocation;\n correctionRatioLocation: WebGLUniformLocation;\n canUse32BitsIndices: boolean;\n\n constructor(gl: WebGLRenderingContext) {\n super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES);\n\n // Initializing indices buffer\n const indicesBuffer = gl.createBuffer();\n if (indicesBuffer === null) throw new Error('EdgeClampedProgram: error while getting resolutionLocation');\n this.indicesBuffer = indicesBuffer;\n\n // Locations:\n this.positionLocation = gl.getAttribLocation(this.program, 'a_position');\n this.colorLocation = gl.getAttribLocation(this.program, 'a_color');\n this.normalLocation = gl.getAttribLocation(this.program, 'a_normal');\n this.radiusLocation = gl.getAttribLocation(this.program, 'a_radius');\n this.arrowSizeRatioLocation = gl.getAttribLocation(this.program, 'a_arrowSizeRatio'); // our change\n\n // Uniform locations\n const matrixLocation = gl.getUniformLocation(this.program, 'u_matrix');\n if (matrixLocation === null) throw new Error('EdgeClampedProgram: error while getting matrixLocation');\n this.matrixLocation = matrixLocation;\n\n const sqrtZoomRatioLocation = gl.getUniformLocation(this.program, 'u_sqrtZoomRatio');\n if (sqrtZoomRatioLocation === null)\n throw new Error('EdgeClampedProgram: error while getting cameraRatioLocation');\n this.sqrtZoomRatioLocation = sqrtZoomRatioLocation;\n\n const correctionRatioLocation = gl.getUniformLocation(this.program, 'u_correctionRatio');\n if (correctionRatioLocation === null)\n throw new Error('EdgeClampedProgram: error while getting viewportRatioLocation');\n this.correctionRatioLocation = correctionRatioLocation;\n\n // Enabling the OES_element_index_uint extension\n // NOTE: on older GPUs, this means that really large graphs won't\n // have all their edges rendered. But it seems that the\n // `OES_element_index_uint` is quite everywhere so we'll handle\n // the potential issue if it really arises.\n // NOTE: when using webgl2, the extension is enabled by default\n this.canUse32BitsIndices = canUse32BitsIndices(gl);\n this.IndicesArray = this.canUse32BitsIndices ? Uint32Array : Uint16Array;\n this.indicesArray = new this.IndicesArray();\n this.indicesType = this.canUse32BitsIndices ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT;\n\n this.bind();\n }\n\n bind(): void {\n const gl = this.gl;\n\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n\n // Bindings\n gl.enableVertexAttribArray(this.positionLocation);\n gl.enableVertexAttribArray(this.normalLocation);\n gl.enableVertexAttribArray(this.colorLocation);\n gl.enableVertexAttribArray(this.radiusLocation);\n gl.enableVertexAttribArray(this.arrowSizeRatioLocation); // our change\n\n gl.vertexAttribPointer(\n this.positionLocation,\n 2,\n gl.FLOAT,\n false,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 0\n );\n gl.vertexAttribPointer(this.normalLocation, 2, gl.FLOAT, false, ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT, 8);\n gl.vertexAttribPointer(\n this.colorLocation,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 16\n );\n gl.vertexAttribPointer(\n this.radiusLocation,\n 1,\n gl.FLOAT,\n false,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 20\n );\n // our change\n gl.vertexAttribPointer(\n this.arrowSizeRatioLocation,\n 1,\n gl.FLOAT,\n false,\n ATTRIBUTES * Float32Array.BYTES_PER_ELEMENT,\n 24\n );\n }\n\n process(\n sourceData: NodeAttributes,\n targetData: NodeAttributes,\n data: EdgeAttributes,\n hidden: boolean,\n offset: number\n ): void {\n if (hidden) {\n for (let i = offset * STRIDE, l = i + STRIDE; i < l; i++) this.array[i] = 0;\n return;\n }\n const arrowSizeRatio = data.arrowSizeRatio || 1; // our change\n\n const thickness = data.size || 1,\n x1 = sourceData.x,\n y1 = sourceData.y,\n x2 = targetData.x,\n y2 = targetData.y,\n //our change - added sourceRadius\n sourceRadius = data.type === 'doubleArrow' ? sourceData.size || 1 : 0,\n targetRadius = targetData.size || 1,\n color = floatColor(data.color);\n\n // Computing normals\n const dx = x2 - x1,\n dy = y2 - y1;\n\n let len = dx * dx + dy * dy,\n n1 = 0,\n n2 = 0;\n\n if (len) {\n len = 1 / Math.sqrt(len);\n\n n1 = -dy * len * thickness;\n n2 = dx * len * thickness;\n }\n\n let i = POINTS * ATTRIBUTES * offset;\n\n const array = this.array;\n\n // First point\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color;\n array[i++] = -sourceRadius;\n array[i++] = arrowSizeRatio;\n\n // First point flipped\n array[i++] = x1;\n array[i++] = y1;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = color;\n array[i++] = sourceRadius;\n array[i++] = arrowSizeRatio;\n\n // Second point\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = n1;\n array[i++] = n2;\n array[i++] = color;\n array[i++] = targetRadius;\n array[i++] = arrowSizeRatio;\n\n // Second point flipped\n array[i++] = x2;\n array[i++] = y2;\n array[i++] = -n1;\n array[i++] = -n2;\n array[i++] = color;\n array[i++] = -targetRadius;\n array[i] = arrowSizeRatio;\n }\n\n computeIndices(): void {\n const l = this.array.length / ATTRIBUTES;\n const size = l + l / 2;\n const indices = new this.IndicesArray(size);\n\n for (let i = 0, c = 0; i < l; i += 4) {\n indices[c++] = i;\n indices[c++] = i + 1;\n indices[c++] = i + 2;\n indices[c++] = i + 2;\n indices[c++] = i + 1;\n indices[c++] = i + 3;\n }\n\n this.indicesArray = indices;\n }\n\n bufferData(): void {\n super.bufferData();\n\n // Indices data\n const gl = this.gl;\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indicesArray, gl.STATIC_DRAW);\n }\n\n render(params: RenderParams): void {\n if (this.hasNothingToRender()) return;\n\n const gl = this.gl;\n\n const program = this.program;\n gl.useProgram(program);\n\n // Binding uniforms\n gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix);\n gl.uniform1f(this.sqrtZoomRatioLocation, Math.sqrt(params.ratio));\n gl.uniform1f(this.correctionRatioLocation, params.correctionRatio);\n\n // Drawing:\n gl.drawElements(gl.TRIANGLES, this.indicesArray.length, this.indicesType, 0);\n }\n}\n","/*\n * This file copies sigma/src/rendering/webgl/shaders/edge.clamped.vert.glsl, but with a some\n * difference: added calculation of arrowSizeCoefficient using a_arrowSizeRatio attribute\n */\n\nexport const vertexShaderSource = `\nattribute vec4 a_color;\nattribute vec2 a_normal;\nattribute vec2 a_position;\nattribute float a_radius;\nattribute float a_arrowSizeRatio;\n\nuniform mat3 u_matrix;\nuniform float u_sqrtZoomRatio;\nuniform float u_correctionRatio;\n\nvarying vec4 v_color;\nvarying vec2 v_normal;\nvarying float v_thickness;\n\nconst float minThickness = 1.7;\nconst float bias = 255.0 / 254.0;\nconst float arrowHeadLengthThicknessRatio = 2.5;\n\nvoid main() {\n float normalLength = length(a_normal);\n vec2 unitNormal = a_normal / normalLength;\n\n // These first computations are taken from edge.vert.glsl. Please read it to\n // get better comments on what's happening:\n float pixelsThickness = max(normalLength, minThickness * u_sqrtZoomRatio);\n float webGLThickness = pixelsThickness * u_correctionRatio;\n float adaptedWebGLThickness = webGLThickness * u_sqrtZoomRatio;\n\n // our change - apply a_arrowSizeRatio depending on current zoom and minThickness\n float arrowSizeCoefficient = min(a_arrowSizeRatio, a_arrowSizeRatio / (u_sqrtZoomRatio * minThickness));\n\n // Here, we move the point to leave space for the arrow head:\n float direction = sign(a_radius);\n float adaptedWebGLNodeRadius = direction * a_radius * 2.0 * u_correctionRatio * u_sqrtZoomRatio;\n\n float adaptedWebGLArrowHeadLength = adaptedWebGLThickness * 2.0 * arrowHeadLengthThicknessRatio * arrowSizeCoefficient;\n\n\n vec2 compensationVector = vec2(-direction * unitNormal.y, direction * unitNormal.x) * (adaptedWebGLNodeRadius + adaptedWebGLArrowHeadLength);\n\n // Here is the proper position of the vertex\n gl_Position = vec4((u_matrix * vec3(a_position + unitNormal * adaptedWebGLThickness + compensationVector, 1)).xy, 0, 1);\n\n v_thickness = webGLThickness / u_sqrtZoomRatio;\n\n v_normal = unitNormal;\n v_color = a_color;\n v_color.a *= bias;\n}`;\n","import React, {useMemo} from 'react';\nimport {MultiGraph} from 'graphology';\nimport {SigmaContainer} from '@react-sigma/core';\nimport '@react-sigma/core/lib/react-sigma.min.css';\nimport {createNodeCompoundProgram} from 'sigma/rendering/webgl/programs/common/node';\nimport {createEdgeCompoundProgram} from 'sigma/rendering/webgl/programs/common/edge';\nimport LineEdgeProgram from 'sigma/rendering/webgl/programs/edge';\nimport {SigmaCustomRenderersContainer} from '../SigmaCustomRenderers/SigmaCustomRenderersContainer';\nimport {drawHover} from '../../rendering/canvas/hover';\nimport {drawLabel} from '../../rendering/canvas/label';\nimport NodeProgramBorder from '../../rendering/webgl/node.border';\nimport NodeImageProgram from '../../rendering/webgl/node.image';\nimport NodeButtonsProgram from '../../rendering/webgl/node.buttons';\nimport EdgeArrowHeadProgram from '../../rendering/webgl/edge.arrowHead';\nimport EdgeReversedArrowHeadProgram from '../../rendering/webgl/edge.reversedArrowHead';\nimport EdgeClampedProgram from '../../rendering/webgl/edge.clamped';\n\ntype Props = {\n children: React.ReactElement;\n};\n\nexport const SigmaGraphContainer = ({children}: Props) => {\n const initialSettings = useMemo(\n () => ({\n allowInvalidContainer: true,\n defaultNodeType: 'image',\n hoverRenderer: drawHover,\n labelRenderer: drawLabel,\n nodeProgramClasses: {\n image: createNodeCompoundProgram([NodeImageProgram, NodeProgramBorder, NodeButtonsProgram])\n },\n edgeProgramClasses: {\n line: LineEdgeProgram,\n arrow: createEdgeCompoundProgram([EdgeClampedProgram, EdgeArrowHeadProgram]),\n doubleArrow: createEdgeCompoundProgram([\n EdgeClampedProgram,\n EdgeArrowHeadProgram,\n EdgeReversedArrowHeadProgram\n ])\n },\n labelFont: 'Roboto',\n labelSize: 13,\n labelColor: {\n color: 'rgba(0, 0, 0, 0.87)'\n }\n }),\n []\n );\n\n return (\n <SigmaContainer graph={MultiGraph} style={{background: 'transparent'}} settings={initialSettings}>\n <SigmaCustomRenderersContainer>{children}</SigmaCustomRenderersContainer>\n </SigmaContainer>\n );\n};\n","import {RelationTypeDirection} from '@reltio/mdm-sdk';\nimport Graph from 'graphology';\nimport {bidirectional} from 'graphology-shortest-path';\nimport {GraphPathType} from '../types/graphDataTypes';\n\nconst directionTypes = {\n [RelationTypeDirection.bidirectional]: 'doubleArrow',\n [RelationTypeDirection.directed]: 'arrow',\n [RelationTypeDirection.undirected]: 'line'\n};\n\nexport const directionTypeToEdgeType = (directionType: RelationTypeDirection) =>\n directionTypes[directionType] || 'line';\n\nexport const mouseIsOnNode = (mouseX: number, mouseY: number, nodeX: number, nodeY: number, size: number): boolean => {\n return (\n mouseX > nodeX - size &&\n mouseX < nodeX + size &&\n mouseY > nodeY - size &&\n mouseY < nodeY + size &&\n Math.sqrt(Math.pow(mouseX - nodeX, 2) + Math.pow(mouseY - nodeY, 2)) < size\n );\n};\n\nexport const getMousePos = (canvas: HTMLCanvasElement, event: MouseEvent) => {\n const rect = canvas.getBoundingClientRect();\n const x = ((event.clientX - rect.left) / (rect.right - rect.left)) * canvas.width;\n const y = ((event.clientY - rect.top) / (rect.bottom - rect.top)) * canvas.height;\n return {x, y};\n};\n\nexport const edgePathFromNodePath = (graph: Graph, nodes: string[], isDirected = false): string[] => {\n const edges = [];\n const searchFn = isDirected ? 'findOutEdge' : 'findEdge';\n if (nodes) {\n nodes.forEach((startNode, index, array) => {\n const secondNode = array[index + 1];\n\n if (secondNode) {\n edges.push(graph[searchFn](startNode, secondNode, (x) => !!x));\n }\n });\n }\n return edges;\n};\n\ntype GetPathToNodeProps = {\n graph: Graph;\n undirectedGraph: Graph;\n selectedNode: string;\n rootNodeUri: string;\n};\n\nexport const getPathToNode = ({\n graph,\n undirectedGraph,\n selectedNode,\n rootNodeUri\n}: GetPathToNodeProps): GraphPathType => {\n if (graph && undirectedGraph && rootNodeUri && selectedNode && rootNodeUri !== selectedNode) {\n try {\n const nodes = bidirectional(undirectedGraph, rootNodeUri, selectedNode);\n const edges = edgePathFromNodePath(graph, nodes);\n return nodes ? {edges, nodes} : {};\n } catch (e) {\n //if there is no node, we return empty object\n }\n }\n return {};\n};\n","import {NodeDisplayData, PartialButFor} from 'sigma/types';\nimport {EdgeAttributes} from '../../types/graphDataTypes';\n\nconst ARROW_SCALE = 0.4;\nconst LOOP_SCALE = 0.6;\nconst ARROW_SIZE_RATIO_SCALE = 2.2;\n\nconst getSelfLoopControlPoints = (x: number, y: number, size: number, a = 0) => {\n return {\n x1: x - (size + a) * 7,\n y1: y,\n x2: x,\n y2: y + (size + a) * 7\n };\n};\n\nconst getArrowPoints = (x: number, y: number, d: number, sX: number, sY: number, size: number, aSize: number) => {\n const aX = x + ((sX - x) * (d - aSize - size)) / d;\n const aY = y + ((sY - y) * (d - aSize - size)) / d;\n const vX = ((sX - x) * aSize) / d;\n const vY = ((sY - y) * aSize) / d;\n return {aX, aY, vX, vY};\n};\n\nconst getFirstArrowPoints = (\n cp: ReturnType<typeof getSelfLoopControlPoints>,\n sX: number,\n sY: number,\n size: number,\n aSize: number\n) => {\n const d = Math.sqrt(Math.pow(sX - cp.x1, 2) + Math.pow(sY - cp.y1, 2));\n return getArrowPoints(cp.x2, cp.y2, d, sX, sY, size, aSize);\n};\n\nconst getSecondArrowPoints = (\n cp: ReturnType<typeof getSelfLoopControlPoints>,\n sX: number,\n sY: number,\n size: number,\n aSize: number\n) => {\n const d = Math.sqrt(Math.pow(sX - cp.x1, 2) + Math.pow(sY - cp.y1, 2));\n return getArrowPoints(cp.x1, cp.y1, d, sX, sY, size, aSize);\n};\n\nconst drawArrow = (context: CanvasRenderingContext2D, aX: number, aY: number, vX: number, vY: number) => {\n context.beginPath();\n context.moveTo(aX + vX, aY + vY);\n context.lineTo(aX + vY * ARROW_SCALE, aY - vX * ARROW_SCALE);\n context.lineTo(aX - vY * ARROW_SCALE, aY + vX * ARROW_SCALE);\n context.lineTo(aX + vX, aY + vY);\n context.closePath();\n context.fill();\n};\n\nconst drawSelfRelationLoop = (\n context: CanvasRenderingContext2D,\n edgeData: EdgeAttributes,\n sourceData: PartialButFor<NodeDisplayData, 'x' | 'y' | 'size'>\n): Path2D => {\n const {size, color, arrowSizeRatio = 1} = edgeData;\n const sX = sourceData.x;\n const sY = sourceData.y;\n const sSize = sourceData.size;\n const scale = sSize * LOOP_SCALE;\n const cp = getSelfLoopControlPoints(sX, sY, scale);\n\n context.strokeStyle = color;\n context.lineWidth = size;\n\n const bezier = new Path2D();\n\n if (edgeData.type === 'arrow' || edgeData.type === 'doubleArrow') {\n context.fillStyle = color;\n if (edgeData.type === 'doubleArrow') {\n const firstArrowPoints = getFirstArrowPoints(\n cp,\n sX,\n sY,\n sSize,\n size * arrowSizeRatio * ARROW_SIZE_RATIO_SCALE\n );\n drawArrow(context, firstArrowPoints.aX, firstArrowPoints.aY, firstArrowPoints.vX, firstArrowPoints.vY);\n bezier.moveTo(firstArrowPoints.aX, firstArrowPoints.aY);\n } else {\n bezier.moveTo(sX, sY);\n }\n const secondArrowPoints = getSecondArrowPoints(\n cp,\n sX,\n sY,\n sSize,\n size * arrowSizeRatio * ARROW_SIZE_RATIO_SCALE\n );\n bezier.bezierCurveTo(cp.x2, cp.y2, cp.x1, cp.y1, secondArrowPoints.aX, secondArrowPoints.aY);\n context.stroke(bezier);\n drawArrow(context, secondArrowPoints.aX, secondArrowPoints.aY, secondArrowPoints.vX, secondArrowPoints.vY);\n } else {\n bezier.moveTo(sX, sY);\n bezier.bezierCurveTo(cp.x1, cp.y1, cp.x2, cp.y2, sX, sY);\n context.stroke(bezier);\n }\n\n return bezier;\n};\n\nexport {drawSelfRelationLoop};\n","import {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {memoizeWith} from 'ramda';\nimport {useLoadGraph, useRegisterEvents, useSetSettings, useSigma} from '@react-sigma/core';\nimport Graph from 'graphology';\nimport {animateNodes} from 'sigma/utils/animate';\nimport {toUndirected} from 'graphology-operators';\nimport {\n Entity,\n HopsResponse,\n RelationTypeDirection,\n getRelationType,\n getLabel,\n getEntityImage,\n getRelationTypePropWithInheritance\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {\n EdgeAttributes,\n Filters,\n GraphologyLayout,\n GraphologyWorkerLayoutConstructor,\n GraphPathType,\n NodeAttributes\n} from '../types/graphDataTypes';\nimport {directionTypeToEdgeType, getPathToNode, mouseIsOnNode} from '../utils/graphLayout';\nimport {useSelfRelationLoopsRenderer} from './useSelfRelationLoopsRenderer';\nimport {useTooltipRenderer} from './useTooltipRenderer';\n\nconst memoizedGetEntityImage = memoizeWith((metadata, storagePath, entity) => entity.type, getEntityImage);\n\nconst SELECTED_NODE: Partial<NodeAttributes> = {\n size: 24,\n buttonSize: 8,\n buttonOffset: [19, 19]\n};\n\nconst DEFAULT_NODE: Partial<NodeAttributes> = {\n size: 12,\n buttonSize: 6,\n buttonOffset: [8, 13]\n};\n\nconst WORKER_LAYOUT_ANIMATION_DURATION = 5000;\nconst SYNC_LAYOUT_ANIMATION_DURATION = 1000;\n\ntype Props = {\n data: HopsResponse;\n graph: Graph;\n syncLayout?: GraphologyLayout<Record<string, unknown>>;\n workerLayout?: GraphologyWorkerLayoutConstructor<Record<string, unknown>>;\n layoutSettings?: Record<string, unknown>;\n isDirected?: boolean;\n selectedNode: string;\n onNodeClick: (node: string) => void;\n onNodeCollapse: (node: string, path: GraphPathType) => void;\n onNodeExpand: (node: string) => void;\n filters?: Filters;\n};\n\nexport const useGraphLayout = ({\n data,\n graph,\n syncLayout,\n workerLayout,\n layoutSettings,\n selectedNode,\n isDirected = false,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n}: Props): void => {\n const sigma = useSigma();\n const loadGraph = useLoadGraph();\n const registerEvents = useRegisterEvents();\n const setSettings = useSetSettings();\n\n const {selfRelationsPathsMap, selfRelationLoopsCanvas} = useSelfRelationLoopsRenderer(graph);\n const hoveredEdge = useTooltipRenderer(graph, selfRelationLoopsCanvas, selfRelationsPathsMap);\n\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath) || '';\n\n const [hoveredNode, setHoveredNode] = useState<string>(undefined);\n const [undirectedGraph, setUndirectedGraph] = useState<Graph>(null);\n const [selectedPath, setSelectedPath] = useState<GraphPathType>({});\n\n const entityUri = entity?.uri;\n\n useEffect(() => {\n sigma.getCamera().setState({ratio: 1.2});\n }, [graph, sigma]);\n\n useEffect(() => {\n setUndirectedGraph(toUndirected(graph));\n loadGraph(graph);\n if (syncLayout) {\n const positions = syncLayout(sigma.getGraph(), layoutSettings);\n animateNodes(sigma.getGraph(), positions, {duration: SYNC_LAYOUT_ANIMATION_DURATION});\n }\n if (workerLayout) {\n const worker = new workerLayout(sigma.getGraph(), layoutSettings);\n worker.start();\n const timer = setTimeout(() => {\n worker.stop();\n }, WORKER_LAYOUT_ANIMATION_DURATION);\n return () => {\n clearTimeout(timer);\n worker.kill();\n };\n }\n }, [data, graph, syncLayout, workerLayout, sigma, layoutSettings, loadGraph, isDirected]);\n\n useEffect(() => {\n const pathToNode = getPathToNode({\n graph: sigma.getGraph(),\n undirectedGraph,\n selectedNode,\n rootNodeUri: entityUri\n });\n setSelectedPath(pathToNode);\n }, [selectedNode, entityUri, sigma, undirectedGraph]);\n\n useEffect(() => {\n registerEvents({\n enterNode: ({node}) => {\n setHoveredNode(node);\n },\n leaveNode: () => {\n setHoveredNode(undefined);\n },\n clickNode: ({node}) => {\n onNodeClick(node);\n },\n click: (event) => {\n const findClosestNode = ({x, y}) => {\n const coordForGraph = sigma.viewportToGraph({x, y});\n const graph = sigma.getGraph();\n const closestNodes = graph\n .nodes()\n .map((nodeId) => {\n const attrs = graph.getNodeAttributes(nodeId);\n const distance =\n Math.pow(coordForGraph.x - attrs.x, 2) + Math.pow(coordForGraph.y - attrs.y, 2);\n return {nodeId, distance, hidden: attrs.hidden};\n })\n .sort((a, b) => a.distance - b.distance)\n .filter(({hidden}) => !hidden);\n\n return closestNodes.length > 0 ? closestNodes[0].nodeId : null;\n };\n\n const nodeId = findClosestNode(event);\n\n if (!nodeId) return;\n\n const closestNode = sigma.getNodeDisplayData(nodeId) as NodeAttributes;\n\n const center = sigma.framedGraphToViewport({\n x: closestNode.x,\n y: closestNode.y\n });\n\n const dx = sigma.scaleSize(closestNode.buttonOffset[0]);\n const dy = sigma.scaleSize(closestNode.buttonOffset[1]);\n const buttonSize = sigma.scaleSize(closestNode.buttonSize);\n\n const isExpandClicked = mouseIsOnNode(event.x, event.y, center.x + dx, center.y - dy, buttonSize);\n const isCollapseClicked = mouseIsOnNode(event.x, event.y, center.x + dx, center.y + dy, buttonSize);\n\n if (closestNode.showExpand && isExpandClicked) {\n onNodeExpand(nodeId);\n onNodeClick(nodeId);\n }\n\n if (closestNode.showCollapse && isCollapseClicked) {\n const pathToNode = getPathToNode({\n graph: sigma.getGraph(),\n undirectedGraph,\n selectedNode: nodeId,\n rootNodeUri: entityUri\n });\n onNodeCollapse(nodeId, pathToNode);\n onNodeClick(nodeId);\n }\n }\n });\n }, [sigma, registerEvents, onNodeClick, onNodeCollapse, onNodeExpand, entityUri, undirectedGraph]);\n\n useEffect(() => {\n const graph = sigma.getGraph();\n let selectedNodeNeighbours: string[] | undefined;\n try {\n selectedNodeNeighbours = graph.neighbors(selectedNode);\n } catch (e) {\n //do nothing\n }\n\n setSettings({\n nodeReducer: (node: string, data: NodeAttributes) => {\n const {entityTypesUris = []} = filters || {};\n const pathToIcon = memoizedGetEntityImage(metadata, absoluteImagePath, {type: data.entityTypeUri});\n\n const neighbors = graph.neighbors(node);\n const hiddenNeighborsCount = neighbors\n .map((nodeId) => graph.getNodeAttribute(nodeId, 'hidden'))\n .filter((x) => !!x).length;\n\n const isNodeInPath = (selectedPath.nodes || []).includes(node);\n const isHoveredNode = hoveredNode === node;\n const isRootNode = node === entityUri;\n const isSelectedNode = node === selectedNode;\n const isInactiveNode =\n selectedNodeNeighbours &&\n !selectedNodeNeighbours.includes(node) &&\n selectedNode !== node &&\n selectedNode !== entityUri &&\n !isNodeInPath;\n const isHiddenNode =\n ![selectedNode, entityUri].includes(node) &&\n entityTypesUris.length > 0 &&\n !entityTypesUris.includes(data.entityTypeUri);\n\n const nodeProps = node === selectedNode ? SELECTED_NODE : DEFAULT_NODE;\n\n const newData: NodeAttributes = {\n ...data,\n ...nodeProps,\n color: '#0072CE',\n image: pathToIcon,\n showExpand: data.untraversedRelationsCount > 0 || hiddenNeighborsCount > 0,\n showCollapse: data.traversedRelationsCount > 1 && neighbors.length - hiddenNeighborsCount > 1\n };\n\n if (isNodeInPath || isSelectedNode || isRootNode) {\n newData.inPath = true;\n newData.color = isRootNode ? '#00FFFF' : data.color;\n } else if (isInactiveNode) {\n newData.label = !isHoveredNode ? '' : data.label;\n newData.inactive = true;\n }\n\n if (isHoveredNode) {\n newData.highlighted = true;\n }\n\n if (isHiddenNode) {\n newData.hidden = true;\n }\n\n return newData;\n },\n edgeReducer: (edge: string, data: EdgeAttributes) => {\n const {relationTypesUris = []} = filters || {};\n const newData: EdgeAttributes = {...data, hidden: false};\n const isEdgeInPath = (selectedPath.edges || []).includes(edge);\n const relationType = getRelationType(metadata, data.relationTypeUri);\n const relationTypeColor = getRelationTypePropWithInheritance(metadata, relationType, 'typeColor');\n const selectedNodeIsNotRoot = selectedNode && selectedNode !== entityUri;\n const isHiddenEdge =\n (selectedNodeIsNotRoot && !graph.hasExtremity(edge, selectedNode) && !isEdgeInPath) ||\n (relationTypesUris.length > 0 && !relationTypesUris.includes(data.relationTypeUri));\n\n if (relationTypeColor) {\n newData.color = relationTypeColor;\n }\n\n if (hoveredEdge === edge) {\n newData.hovered = true;\n }\n\n if (isHiddenEdge) {\n newData.hidden = true;\n }\n\n if (isDirected) {\n newData.arrowSizeRatio = 4;\n }\n\n if (isEdgeInPath) {\n newData.color = '#0072CE';\n newData.size = 4;\n newData.arrowSizeRatio = isDirected ? 1.4 : data.arrowSizeRatio;\n }\n\n newData.type = directionTypeToEdgeType(isDirected ? data.direction : RelationTypeDirection.undirected);\n newData.relationLabel = getLabel(relationType?.label);\n\n return newData;\n },\n enableEdgeHoverEvents: true\n });\n }, [\n sigma,\n setSettings,\n hoveredNode,\n selectedNode,\n selectedPath,\n entityUri,\n metadata,\n absoluteImagePath,\n isDirected,\n filters,\n hoveredEdge\n ]);\n};\n","import {useEffect, useRef} from 'react';\nimport Graph from 'graphology';\nimport {useSigma} from '@react-sigma/core';\nimport {useSigmaCustomRenderers} from '../contexts/SigmaCustomRenderersContext';\nimport {drawSelfRelationLoop} from '../rendering/canvas/selfRelationLoop';\nimport {EdgeAttributes, NodeAttributes} from '../types/graphDataTypes';\n\nexport const useSelfRelationLoopsRenderer = (graph: Graph) => {\n const sigma = useSigma();\n const {addRenderers: addCustomRenderers, canvases} = useSigmaCustomRenderers();\n const selfRelationsPathsMap = useRef<Record<string, Path2D>>({});\n const {selfRelationLoops: selfRelationLoopsCanvas} = canvases;\n\n useEffect(() => {\n addCustomRenderers({\n selfRelationLoops: {\n renderer: (context) => {\n graph.forEachEdge((edgeId, edgeData, sourceId) => {\n if (edgeData.loop) {\n delete selfRelationsPathsMap.current[edgeId];\n\n const edgeDisplayData = sigma.getEdgeDisplayData(edgeId) as EdgeAttributes;\n const sourceDisplayData = sigma.getNodeDisplayData(sourceId) as NodeAttributes;\n\n const isHidden = edgeDisplayData.hidden || sourceDisplayData.hidden;\n\n if (isHidden) return;\n\n const path = drawSelfRelationLoop(\n context,\n {\n ...edgeDisplayData,\n size: sigma.scaleSize(edgeDisplayData.size)\n },\n {\n ...sourceDisplayData,\n ...sigma.framedGraphToViewport(sourceDisplayData),\n size: sigma.scaleSize(sourceDisplayData.size)\n }\n );\n\n selfRelationsPathsMap.current[edgeId] = path;\n }\n });\n },\n insertBefore: 'edges'\n }\n });\n }, [addCustomRenderers, graph, sigma]);\n\n return {selfRelationsPathsMap: selfRelationsPathsMap.current, selfRelationLoopsCanvas};\n};\n","import {useEffect, useState, useRef} from 'react';\nimport Graph from 'graphology';\nimport {useRegisterEvents, useSigma} from '@react-sigma/core';\nimport {useSigmaCustomRenderers} from '../contexts/SigmaCustomRenderersContext';\nimport {getMousePos} from '../utils/graphLayout';\nimport {EdgeAttributes, NodeAttributes} from '../types/graphDataTypes';\nimport {drawTooltip} from '../rendering/canvas/tooltip';\nimport {Canvas} from '../types/sigmaCustomRenderersTypes';\n\ntype PointerCoordinates = {\n x: number;\n y: number;\n};\n\nexport const useTooltipRenderer = (\n graph: Graph,\n selfRelationLoopsCanvas: Canvas,\n selfRelationsPathsMap: Record<string, Path2D>\n) => {\n const sigma = useSigma();\n const registerEvents = useRegisterEvents();\n const {addRenderers: addCustomRenderers} = useSigmaCustomRenderers();\n\n const pointerCoordinates = useRef<PointerCoordinates>({x: 0, y: 0});\n\n const [hoveredNormalEdge, setHoveredNormalEdge] = useState<string>(null);\n const [hoveredSelfRelationEdge, setHoveredSelfRelationEdge] = useState<string>(null);\n\n const hoveredEdge = hoveredNormalEdge || hoveredSelfRelationEdge;\n\n useEffect(() => {\n registerEvents({\n enterEdge: ({edge}) => {\n setHoveredNormalEdge(edge);\n },\n leaveEdge: () => {\n setHoveredNormalEdge(null);\n },\n mousemove: (event) => {\n pointerCoordinates.current.x = event.x;\n pointerCoordinates.current.y = event.y;\n\n if (!selfRelationLoopsCanvas) return;\n\n const {context, canvasElement} = selfRelationLoopsCanvas;\n const {x, y} = getMousePos(canvasElement, event.original);\n\n for (const id in selfRelationsPathsMap) {\n const path = selfRelationsPathsMap[id];\n if (context.isPointInStroke(path, x, y)) {\n setHoveredSelfRelationEdge(id);\n break;\n } else {\n setHoveredSelfRelationEdge(null);\n }\n }\n }\n });\n }, [sigma, registerEvents, selfRelationLoopsCanvas, selfRelationsPathsMap]);\n\n useEffect(() => {\n addCustomRenderers({\n tooltips: {\n renderer: (context) => {\n graph.forEachEdge((edgeId, _edgeData, sourceId) => {\n const edgeDisplayData = sigma.getEdgeDisplayData(edgeId) as EdgeAttributes;\n const sourceDisplayData = sigma.getNodeDisplayData(sourceId) as NodeAttributes;\n if (!edgeDisplayData.hovered || sourceDisplayData.highlighted) return;\n const {x, y} = pointerCoordinates.current;\n const yOffset = 15;\n drawTooltip(context, x, y - yOffset, edgeDisplayData.relationLabel);\n });\n },\n insertBefore: 'mouse'\n }\n });\n }, [addCustomRenderers, graph, sigma]);\n\n return hoveredEdge;\n};\n","const drawRoundedRect = (\n context: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number\n) => {\n context.beginPath();\n context.moveTo(x, y + radius);\n context.arcTo(x, y + height, x + radius, y + height, radius);\n context.arcTo(x + width, y + height, x + width, y + height - radius, radius);\n context.arcTo(x + width, y, x + width - radius, y, radius);\n context.arcTo(x, y, x, y + radius, radius);\n context.fill();\n};\n\nconst drawTooltip = (context: CanvasRenderingContext2D, centerX: number, centerY: number, text: string) => {\n context.font = 'normal 10px Roboto';\n context.textAlign = 'center';\n context.textBaseline = 'middle';\n\n const xPadding = 8;\n const width = context.measureText(text).width + xPadding * 2;\n const height = 24;\n const radius = 4;\n\n const x = centerX - width / 2;\n const y = centerY - height / 2;\n\n context.fillStyle = 'rgba(0, 0, 0, 0.54)';\n drawRoundedRect(context, x, y, width, height, radius);\n\n context.fillStyle = '#fff';\n context.fillText(text, x + width / 2, y + height / 2);\n};\n\nexport {drawTooltip};\n","import {useMemo} from 'react';\nimport circular from 'graphology-layout/circular';\nimport forceAtlas2 from 'graphology-layout-forceatlas2';\nimport FA2Layout from 'graphology-layout-forceatlas2/worker';\nimport Graph from 'graphology';\nimport {difference, prop} from 'ramda';\nimport {HopsResponse, GraphLayout} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, usePrevious} from '@reltio/components';\n\nimport {useGraphLayout} from '../../hooks/useGraphLayout';\nimport {GraphPathType, Filters} from '../../types/graphDataTypes';\n\ntype CircleLayoutProps = {\n data: HopsResponse;\n graph: Graph;\n selectedNode: string;\n onNodeClick: (node: string) => void;\n onNodeCollapse: (node: string, path: GraphPathType) => void;\n onNodeExpand: (node: string) => void;\n layout: GraphLayout;\n filters?: Filters;\n};\n\nexport const CircleLayout = ({\n data,\n graph,\n selectedNode,\n layout,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n}: CircleLayoutProps) => {\n const prevData: HopsResponse = usePrevious(data);\n\n useDidUpdateEffect(() => {\n if (prevData) {\n const newNodesIds = difference(data.entities.map(prop('uri')), prevData.entities.map(prop('uri')));\n if (newNodesIds.length) {\n const tempGraph = graph.copy();\n circular.assign(tempGraph);\n newNodesIds.forEach((id) => {\n graph.setNodeAttribute(id, 'x', tempGraph.getNodeAttribute(id, 'x'));\n graph.setNodeAttribute(id, 'y', tempGraph.getNodeAttribute(id, 'y'));\n });\n }\n }\n }, [data]);\n\n const layoutSettings = useMemo(() => {\n circular.assign(graph);\n return {\n settings: {\n ...forceAtlas2.inferSettings(graph),\n gravity: 1\n }\n };\n }, [graph]);\n\n useGraphLayout({\n workerLayout: FA2Layout,\n layoutSettings,\n data,\n graph,\n selectedNode,\n onNodeClick,\n isDirected: layout === GraphLayout.DIRECTED_NETWORK,\n onNodeCollapse,\n onNodeExpand,\n filters\n });\n\n return null;\n};\n\nexport default CircleLayout;\n","import Graph from 'graphology';\nimport {GraphologyGraphData, Node, Edge, NodesHierarchy} from '../../types/graphDataTypes';\n\nconst getFirstLvlNodes = (edgesWithoutLoops: Edge[], nodes: Node[], selectedNode: string): Set<string> => {\n const firstLvlNodesIds = new Set<string>();\n nodes.forEach((node) => {\n if (!edgesWithoutLoops.some((edge) => edge.to === node.id)) {\n firstLvlNodesIds.add(node.id);\n }\n });\n if (!firstLvlNodesIds.size) {\n firstLvlNodesIds.add(selectedNode);\n }\n return firstLvlNodesIds;\n};\n\nconst canFindChildNodes = (nodesIds: Set<string>, edgesWithoutLoops: Edge[], processedNodes) => {\n const children = new Set<string>();\n nodesIds.forEach((nodeId) => {\n edgesWithoutLoops.forEach((edge) => {\n if (edge.from === nodeId && !processedNodes.has(edge.to)) {\n children.add(edge.to);\n }\n });\n });\n return !!children.size;\n};\n\nconst findChildNodeIds = (\n parentNodes: Set<string>,\n nodesArr: NodesHierarchy,\n processedNodes: Set<string>,\n edgesWithoutLoops: Edge[]\n): NodesHierarchy => {\n const currentLvlNodeIds = new Set<string>();\n if (!nodesArr.length) {\n nodesArr.push(Array.from(parentNodes));\n }\n parentNodes.forEach((nodeId) => {\n processedNodes.add(nodeId);\n edgesWithoutLoops.forEach((edge) => {\n if (edge.from === nodeId && !parentNodes.has(edge.to) && !processedNodes.has(edge.to)) {\n currentLvlNodeIds.add(edge.to);\n }\n });\n });\n if (currentLvlNodeIds.size) {\n nodesArr.push(Array.from(currentLvlNodeIds));\n }\n\n if (canFindChildNodes(currentLvlNodeIds, edgesWithoutLoops, processedNodes)) {\n return findChildNodeIds(currentLvlNodeIds, nodesArr, processedNodes, edgesWithoutLoops);\n } else return nodesArr;\n};\n\nconst splitLongLevels = (\n nodes: string[],\n finalHierarchyNodesArr: NodesHierarchy,\n nodesHierarchy: NodesHierarchy,\n level: number,\n maxQuantityNodesOnOneLvl: number\n): NodesHierarchy => {\n if (nodes.length <= maxQuantityNodesOnOneLvl) {\n finalHierarchyNodesArr[level] = [...nodes];\n }\n if (nodes.length > maxQuantityNodesOnOneLvl) {\n const extraNodes = nodes.slice(maxQuantityNodesOnOneLvl);\n const remainingNodes = nodes.slice(0, maxQuantityNodesOnOneLvl);\n\n finalHierarchyNodesArr[level] = remainingNodes;\n finalHierarchyNodesArr[level + 1] = nodesHierarchy[level + 1]\n ? [...nodesHierarchy[level + 1], ...extraNodes]\n : extraNodes;\n }\n if (finalHierarchyNodesArr[level + 1] || nodesHierarchy[level + 1]) {\n level++;\n const nodes = finalHierarchyNodesArr[level] || nodesHierarchy[level];\n return splitLongLevels(nodes, finalHierarchyNodesArr, nodesHierarchy, level, maxQuantityNodesOnOneLvl);\n } else {\n return finalHierarchyNodesArr;\n }\n};\n\nexport const buildHierarchyNodes = (\n graphData: GraphologyGraphData,\n selectedNode: string,\n maxQuantityNodesOnOneLvl = 10\n): NodesHierarchy => {\n const nodes = graphData.nodes;\n const edgesWithoutLoops = graphData.edges.filter((edge) => edge.from !== edge.to);\n const firstLvlNodeIds = getFirstLvlNodes(edgesWithoutLoops, nodes, selectedNode);\n\n const nodesHierarchy = findChildNodeIds(firstLvlNodeIds, [], new Set<string>(), edgesWithoutLoops);\n const finalHierarchyNodesArr = splitLongLevels(nodesHierarchy[0], [], nodesHierarchy, 0, maxQuantityNodesOnOneLvl);\n\n return finalHierarchyNodesArr;\n};\n\nexport const extractDataFromGraph = (graph: Graph): GraphologyGraphData => {\n const nodes = graph.nodes().map((id) => ({id, name: ''} as Node));\n const edges = graph.mapEdges((edge, attributes, source, target) => ({\n from: source,\n to: target,\n key: edge,\n relationTypeUri: attributes.relationTypeUri,\n direction: attributes.direction\n }));\n return {nodes, edges};\n};\n","import {GraphLayout} from '@reltio/mdm-sdk';\nimport {NodesHierarchy} from '../../types/graphDataTypes';\n\nconst X_MARGIN = 10;\nconst Y_MARGIN = 10;\n\ntype CalculateYPosProps = {\n quantityAtLvl: number;\n rowNumber: number;\n isEvenItem: boolean;\n layout: GraphLayout;\n shouldUseCheckboardPattern: boolean;\n};\n\nexport const calculateYPos = ({\n quantityAtLvl,\n rowNumber,\n isEvenItem,\n layout,\n shouldUseCheckboardPattern\n}: CalculateYPosProps) => {\n const isVerticalHierarchy = layout === GraphLayout.VERTICAL_TB;\n const hasSingleNodeAtLvl = quantityAtLvl === 1;\n return shouldUseCheckboardPattern && isVerticalHierarchy && isEvenItem && !hasSingleNodeAtLvl\n ? rowNumber * Y_MARGIN + Y_MARGIN / 2\n : rowNumber * Y_MARGIN;\n};\n\ntype CalculateXPosProps = {\n quantityAtLvl: number;\n posAtLvl: number;\n max: number;\n isEvenRow: boolean;\n layout: GraphLayout;\n shouldUseCheckboardPattern: boolean;\n};\n\nexport const calculateXPos = ({\n quantityAtLvl,\n posAtLvl,\n max,\n isEvenRow,\n layout,\n shouldUseCheckboardPattern\n}: CalculateXPosProps) => {\n const isHorizontalHierarchy = layout === GraphLayout.HORIZONTAL_LR;\n const hasSingleNodeAtLvl = quantityAtLvl === 1;\n const hasMaxNodesAtLvl = quantityAtLvl === max;\n\n if (hasMaxNodesAtLvl) {\n return shouldUseCheckboardPattern && isEvenRow && isHorizontalHierarchy\n ? posAtLvl * X_MARGIN + X_MARGIN / 2\n : posAtLvl * X_MARGIN;\n }\n\n if (hasSingleNodeAtLvl) {\n return ((max - 1) * X_MARGIN) / 2;\n }\n\n return (((max - 1) * X_MARGIN) / (quantityAtLvl + 1)) * (posAtLvl + 1);\n};\n\nexport const getAngleOfRotation = (layout: GraphLayout) => {\n switch (layout) {\n case GraphLayout.VERTICAL_TB:\n return 180;\n case GraphLayout.HORIZONTAL_LR:\n return 270;\n }\n};\n\nexport const getMaxLvlSize = (hierarchyNodes: NodesHierarchy) => {\n const sizes = hierarchyNodes.map((nodes) => nodes.length);\n return Math.max(...sizes);\n};\n\nexport const isSimpleGraph = (nodesLength: number) => nodesLength < 100;\n\nexport const getMaxQuantityNodesOnOneLvl = (nodesLength: number, layout: GraphLayout) => {\n if (isSimpleGraph(nodesLength)) {\n return 10;\n }\n\n const multiplier = layout === GraphLayout.VERTICAL_TB ? 1.5 : 0.7;\n return Math.round(Math.sqrt(nodesLength) * multiplier);\n};\n","import {useCallback} from 'react';\nimport Graph from 'graphology';\nimport {rotation} from 'graphology-layout';\nimport {HopsResponse, GraphLayout} from '@reltio/mdm-sdk';\nimport {Filters, GraphPathType} from '../../types/graphDataTypes';\nimport {buildHierarchyNodes, extractDataFromGraph} from './buildHierarchy';\nimport {useGraphLayout} from '../../hooks/useGraphLayout';\nimport {\n calculateXPos,\n calculateYPos,\n getAngleOfRotation,\n getMaxLvlSize,\n getMaxQuantityNodesOnOneLvl,\n isSimpleGraph\n} from './calculations';\n\ntype HierarchyLayoutProps = {\n data: HopsResponse;\n graph: Graph;\n selectedNode: string;\n layout: GraphLayout;\n onNodeClick: (node: string) => void;\n onNodeCollapse: (node: string, path: GraphPathType) => void;\n onNodeExpand: (node: string) => void;\n filters?: Filters;\n};\n\nexport const HierarchyLayout = ({\n data,\n graph,\n selectedNode,\n layout,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n}: HierarchyLayoutProps) => {\n const hierarchicalLayout = useCallback(\n (graph: Graph) => {\n const tempGraph = graph.copy();\n const angleOfRotation = getAngleOfRotation(layout);\n const graphData = extractDataFromGraph(tempGraph);\n const nodesLength = graphData.nodes.length;\n const shouldUseCheckboardPattern = !isSimpleGraph(nodesLength);\n const maxQuantityNodesOnOneLvl = getMaxQuantityNodesOnOneLvl(nodesLength, layout);\n const nodesHierarchy = buildHierarchyNodes(graphData, selectedNode, maxQuantityNodesOnOneLvl);\n const maxLvlSize = getMaxLvlSize(nodesHierarchy);\n for (let i = 0; i < nodesHierarchy.length; ++i) {\n const isEvenRow = i % 2 === 0;\n const quantityAtLvl = nodesHierarchy[i].length;\n\n for (let j = 0; j < quantityAtLvl; ++j) {\n const isEvenItem = j % 2 === 0;\n\n const xPos = calculateXPos({\n quantityAtLvl,\n posAtLvl: j,\n max: maxLvlSize,\n isEvenRow,\n layout,\n shouldUseCheckboardPattern\n });\n\n const yPos = calculateYPos({\n quantityAtLvl,\n rowNumber: i,\n isEvenItem,\n layout,\n shouldUseCheckboardPattern\n });\n\n tempGraph.setNodeAttribute(nodesHierarchy[i][j], 'x', xPos);\n tempGraph.setNodeAttribute(nodesHierarchy[i][j], 'y', yPos);\n }\n }\n rotation.assign(tempGraph, angleOfRotation, {degrees: true});\n return tempGraph.reduceNodes(\n (result, id, {x, y}) => ({\n ...result,\n [id]: {x, y}\n }),\n {}\n );\n },\n [layout, selectedNode]\n );\n\n useGraphLayout({\n syncLayout: hierarchicalLayout,\n data,\n graph,\n selectedNode,\n onNodeClick,\n onNodeCollapse,\n onNodeExpand,\n filters\n });\n\n return null;\n};\n\nexport default HierarchyLayout;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n graphTypeSelector: {\n minWidth: '200px',\n backgroundColor: '#FAFAFA',\n opacity: 1,\n height: '40px'\n },\n filledInputRoot: {\n borderRadius: '4px'\n },\n valueContainer: {\n width: 'auto',\n marginLeft: '16px'\n }\n});\n","import {DropDownSelector, withContext} from '@reltio/components';\nimport i18n from 'ui-i18n';\nimport React, {useMemo} from 'react';\nimport {useStyles} from './styles';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\nimport {GraphState} from '../../types/graphDataTypes';\nimport {Entity, getGraphTypesForEntityType} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = Partial<Pick<GraphState, 'graphTypeUri' | 'setGraphTypeUri'>>;\n\nconst GraphTypeSelector = ({graphTypeUri, setGraphTypeUri}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n const graphTypeOptions = useMemo(\n () => [\n {label: i18n.text('All'), value: null},\n ...getGraphTypesForEntityType(metadata, entity.type).map(({uri, label}) => ({value: uri, label}))\n ],\n [entity, metadata]\n );\n const value = useMemo(\n () => graphTypeOptions.find((opt) => opt.value === graphTypeUri),\n [graphTypeOptions, graphTypeUri]\n );\n return (\n <DropDownSelector\n classes={{valueContainer: styles.valueContainer}}\n className={styles.graphTypeSelector}\n height={42}\n label={i18n.text('Graph type')}\n value={value}\n options={graphTypeOptions}\n onChange={(opt) => setGraphTypeUri(opt.value)}\n TextFieldProps={{\n InputProps: {\n disableUnderline: true,\n classes: {\n root: styles.filledInputRoot\n }\n }\n }}\n />\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({graphTypeUri, setGraphTypeUri}) => ({\n setGraphTypeUri,\n graphTypeUri\n }),\n GraphTypeSelector\n);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n graphLayoutSelector: {\n minWidth: '202px',\n backgroundColor: '#FAFAFA',\n opacity: 1,\n marginLeft: '10px'\n },\n\n filledInputRoot: {\n borderRadius: '4px',\n height: '42px'\n }\n});\n","import React, {memo} from 'react';\nimport i18n from 'ui-i18n';\nimport {propEq} from 'ramda';\nimport {DropDownSelector} from '@reltio/components';\nimport {GraphLayout} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n value: GraphLayout;\n onChangeHandler: (value: GraphLayout) => void;\n graphTypeUri?: string;\n};\n\nconst GraphLayoutSelector = ({value, onChangeHandler, graphTypeUri}: Props) => {\n const styles = useStyles();\n const layouts = [\n {label: i18n.text('Simple network'), value: GraphLayout.SIMPLE_NETWORK},\n {label: i18n.text('Vertical hierarchy'), value: GraphLayout.VERTICAL_TB},\n {label: i18n.text('Horizontal hierarchy'), value: GraphLayout.HORIZONTAL_LR},\n {label: i18n.text('Directed network'), value: GraphLayout.DIRECTED_NETWORK},\n {label: i18n.text('Tree'), value: GraphLayout.TREE}\n ];\n const options = graphTypeUri ? layouts : layouts.filter((layout) => layout.value !== GraphLayout.TREE);\n return (\n <DropDownSelector\n className={styles.graphLayoutSelector}\n label={i18n.text('Graph layout')}\n value={layouts.find(propEq('value', value))}\n options={options}\n onChange={(value) => onChangeHandler(value.value)}\n TextFieldProps={{\n InputProps: {\n disableUnderline: true,\n classes: {\n root: styles.filledInputRoot\n }\n }\n }}\n />\n );\n};\n\nexport default memo(GraphLayoutSelector);\n","import React, {useCallback} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {useSigma} from '@react-sigma/core';\n\nconst SigmaGraphResizer = () => {\n const sigma = useSigma();\n const onResize = useCallback(() => {\n sigma.refresh();\n }, [sigma]);\n return <ReactResizeDetector handleWidth onResize={onResize} />;\n};\n\nexport default SigmaGraphResizer;\n","import {makeStyles} from '@mui/styles';\n\nconst boxShadow = '0 1px 1px rgba(0,0,0,0.14), 0 2px 1px rgba(0,0,0,0.12), 0 1px 3px rgba(0,0,0,0.2)';\n\nconst buttonStyle = {\n background: '#FFFFFF',\n boxShadow,\n width: '28px',\n height: '28px'\n};\n\nexport const useStyles = makeStyles({\n container: {\n display: 'flex',\n alignItems: 'center'\n },\n maxButton: {\n ...buttonStyle,\n borderRadius: '2px 4px 4px 2px'\n },\n minButton: {\n ...buttonStyle,\n borderRadius: '4px 2px 2px 4px'\n },\n thumb: {\n boxShadow,\n borderRadius: '2px',\n width: '8px',\n height: '28px',\n marginLeft: '5px',\n color: 'rgba(0,0,0,0.54)',\n backgroundColor: '#FFFFFF',\n '&.MuiSlider-thumb.Mui-focusVisible, &:hover': {\n boxShadow: boxShadow\n },\n '&:before': {\n boxShadow: 'none'\n }\n },\n thumbIcon: {\n transform: 'rotate(90deg)'\n },\n icon: {\n width: '18px',\n height: '18px'\n },\n rail: {\n opacity: 1,\n height: '4px',\n paddingRight: '10px',\n marginTop: '1px'\n },\n sliderRoot: {\n color: '#EDEDED',\n marginRight: '10px',\n height: '2px'\n }\n});\n","import React, {useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {clamp} from 'ramda';\nimport {useCamera, useRegisterEvents, useSigma, useSetSettings} from '@react-sigma/core';\nimport AddIcon from '@mui/icons-material/Add';\nimport RemoveIcon from '@mui/icons-material/Remove';\nimport Slider, {SliderThumb, SliderProps} from '@mui/material/Slider';\nimport IconButton from '@mui/material/IconButton';\n\nimport {useStyles} from './styles';\n\nconst percentsToRatio = (percent: number): number => Math.pow(100 / percent, 2);\nconst ratioToPercents = (ratio: number): number => 100 / Math.sqrt(ratio);\n\nconst ZoomSliderThumb = (props: {children: React.ReactNode} & SliderProps['componentsProps']['thumb']) => {\n const {children, ...other} = props;\n const styles = useStyles();\n return (\n <SliderThumb {...other}>\n {children}\n <RemoveIcon className={classnames(styles.icon, styles.thumbIcon)} />\n </SliderThumb>\n );\n};\n\ntype Props = {\n className?: string;\n max: number;\n min: number;\n};\n\nconst ZoomSlider = ({className, max, min}: Props) => {\n const styles = useStyles();\n\n const setSettings = useSetSettings();\n const registerEvents = useRegisterEvents();\n const camera = useSigma().getCamera();\n const {zoomIn, zoomOut} = useCamera({factor: 1.2});\n const [value, setValue] = useState(clamp(min, max, ratioToPercents(camera.getState().ratio)));\n\n const maxCameraRatio = useMemo(() => (min > 0 ? percentsToRatio(min) : null), [min]);\n const minCameraRatio = useMemo(() => (max > 0 ? percentsToRatio(max) : null), [max]);\n\n useEffect(() => {\n setSettings({\n maxCameraRatio,\n minCameraRatio\n });\n\n return () => {\n setSettings({\n maxCameraRatio: null,\n minCameraRatio: null\n });\n };\n }, [setSettings, minCameraRatio, maxCameraRatio]);\n\n useEffect(() => {\n registerEvents({\n updated: (event) => setValue(ratioToPercents(event.ratio))\n });\n }, [registerEvents]);\n\n const handleChange = (event, newValue) =>\n camera.setState({ratio: camera.getBoundedRatio(percentsToRatio(newValue))});\n\n return (\n <div className={classnames(styles.container, className)}>\n <IconButton className={styles.minButton} onClick={() => zoomOut()} size=\"large\">\n <RemoveIcon className={styles.icon} />\n </IconButton>\n <Slider\n slots={{\n thumb: ZoomSliderThumb\n }}\n slotProps={{\n thumb: {\n className: styles.thumb\n }\n }}\n classes={{root: styles.sliderRoot, rail: styles.rail}}\n track={false}\n value={value}\n min={min}\n max={max}\n onChange={handleChange}\n />\n <IconButton className={styles.maxButton} onClick={() => zoomIn()} size=\"large\">\n <AddIcon className={styles.icon} />\n </IconButton>\n </div>\n );\n};\n\nexport default ZoomSlider;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n button: {\n background: '#FFFFFF',\n boxShadow: '0 1px 1px rgba(0,0,0,0.14), 0 2px 1px rgba(0,0,0,0.12), 0 1px 3px rgba(0,0,0,0.2)',\n width: '28px',\n height: '28px',\n borderRadius: '4px'\n },\n icon: {\n width: '18px',\n height: '18px'\n }\n});\n","import React from 'react';\nimport {useCamera} from '@react-sigma/core';\nimport MyLocationIcon from '@mui/icons-material/MyLocation';\nimport IconButton from '@mui/material/IconButton';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n node: string;\n};\n\nconst GotoButton = ({node}: Props) => {\n const styles = useStyles();\n const {gotoNode} = useCamera();\n\n return (\n <IconButton className={styles.button} onClick={() => gotoNode(node)} size=\"large\">\n <MyLocationIcon className={styles.icon} />\n </IconButton>\n );\n};\n\nexport default GotoButton;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n hierarchyTree: {\n position: 'relative',\n width: 'calc(100% - 190px)',\n margin: '80px 95px 0',\n height: 'calc(100% - 100px)'\n }\n});\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {propEq} from 'ramda';\nimport {Entity, getGraphTypesForEntityType, ProfileViewTypes} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {HierarchyTreeView} from '@reltio/profile';\nimport {useStyles} from './styles';\n\ntype Props = {\n graphTypeUri: string;\n};\n\nconst TreeLayout = ({graphTypeUri}: Props) => {\n const styles = useStyles();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n const caption = getGraphTypesForEntityType(metadata, entity.type).find(propEq('uri', graphTypeUri))?.label;\n const config = useMemo(\n () => ({\n id: '___graphView___',\n class: ProfileViewTypes.HierarchyTree,\n graph: {\n type: graphTypeUri\n },\n caption\n }),\n [caption, graphTypeUri]\n );\n return <HierarchyTreeView config={config} className={styles.hierarchyTree} isGraphView={true} />;\n};\n\nexport default TreeLayout;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n height: '100%',\n position: 'relative'\n },\n selectors: {\n display: 'flex',\n position: 'absolute',\n top: '12px',\n right: '16px',\n zIndex: 2\n },\n graph: {\n height: 'calc(100% - 5px)'\n },\n rightBottomControls: {\n position: 'absolute',\n zIndex: 100,\n right: '18px',\n bottom: '16px',\n display: 'flex',\n width: '200px'\n },\n zoomSlider: {\n flexGrow: 1,\n marginRight: '8px'\n }\n});\n","import React from 'react';\nimport Graph from 'graphology';\nimport {withContext} from '@reltio/components';\nimport {HopsResponse, GraphLayout} from '@reltio/mdm-sdk';\nimport {SigmaGraphContainer} from '../SigmaGraphContainer/SigmaGraphContainer';\nimport CircleLayout from '../CircleLayout/CircleLayout';\nimport HierarchyLayout from '../HierarchyLayout/HierarchyLayout';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\nimport {Filters, GraphPathType} from '../../types/graphDataTypes';\nimport GraphTypeSelector from '../GraphTypeSelector/GraphTypeSelector';\nimport GraphLayoutSelector from '../GraphLayoutSelector/GraphLayoutSelector';\nimport SigmaGraphResizer from '../SigmaGraphResizer/SigmaGraphResizer';\nimport ZoomSlider from '../ZoomSlider/ZoomSlider';\nimport GotoButton from '../GotoButton/GotoButton';\nimport TreeLayout from '../TreeLayout/TreeLayout';\nimport {useStyles} from './styles';\n\ntype Props = {\n data?: HopsResponse;\n graph?: Graph;\n selectedNode?: string;\n onNodeSelect?: (uri: string) => void;\n onNodeCollapse?: (uri: string, path: GraphPathType) => void;\n onNodeExpand?: (uri: string) => void;\n filters?: Filters;\n graphTypeUri?: string;\n layout?: GraphLayout;\n setLayout?: (layout: GraphLayout) => void;\n};\n\nconst GraphArea = ({\n data,\n graph,\n selectedNode,\n onNodeSelect,\n onNodeCollapse,\n onNodeExpand,\n filters,\n graphTypeUri,\n layout,\n setLayout\n}: Props) => {\n const styles = useStyles();\n\n const commonProps = {\n data,\n graph,\n selectedNode,\n layout,\n onNodeClick: onNodeSelect,\n onNodeCollapse,\n onNodeExpand,\n filters\n };\n return (\n <div className={styles.wrapper}>\n <div className={styles.selectors}>\n <GraphTypeSelector />\n <GraphLayoutSelector value={layout} onChangeHandler={setLayout} graphTypeUri={graphTypeUri} />\n </div>\n <div className={styles.graph}>\n {layout === GraphLayout.TREE ? (\n <TreeLayout graphTypeUri={graphTypeUri} />\n ) : (\n graph && (\n <SigmaGraphContainer>\n <>\n <SigmaGraphResizer />\n {layout === GraphLayout.SIMPLE_NETWORK || layout === GraphLayout.DIRECTED_NETWORK ? (\n <CircleLayout {...commonProps} />\n ) : (\n <HierarchyLayout {...commonProps} />\n )}\n <div className={styles.rightBottomControls}>\n <ZoomSlider className={styles.zoomSlider} min={30} max={300} />\n <GotoButton node={selectedNode} />\n </div>\n </>\n </SigmaGraphContainer>\n )\n )}\n </div>\n </div>\n );\n};\n\nexport default withContext(\n GraphStateContext,\n ({\n data,\n graphologyGraph,\n selectedEntity,\n onEntitySelect,\n onCollapseEntity,\n onExpandEntity,\n relationshipTable: {filters},\n graphTypeUri,\n layout,\n setLayout\n }) => ({\n data,\n graph: graphologyGraph,\n selectedNode: selectedEntity?.uri,\n onNodeSelect: onEntitySelect,\n onNodeCollapse: onCollapseEntity,\n onNodeExpand: onExpandEntity,\n filters,\n graphTypeUri,\n layout,\n setLayout\n }),\n GraphArea\n);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n overflowX: 'hidden',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n graphWrapper: {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1\n },\n graphContainer: {\n display: 'flex',\n overflow: 'hidden',\n flexGrow: 1\n },\n '@global div[role=tooltip]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n },\n '@global div[role=presentation]': {\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif'\n }\n}));\n","import React, {memo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pluck} from 'ramda';\nimport mdm from '@reltio/mdm-module';\nimport {Entity, GraphLayout} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator, ProfileResizablePanes, ScreenProfileBand} from '@reltio/components';\n\nimport {useGraphState} from '../../hooks/useGraphState';\nimport {useGraphRightSidePanelElements} from '../../hooks/useGraphRightSidePanelElements';\nimport {GraphStateContext} from '../../contexts/GraphStateContext';\nimport {GraphRightSidePanel} from '../GraphRightSidePanel/GraphRightSidePanel';\nimport GraphArea from '../GraphArea/GraphArea';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n graphTypeUri?: string;\n graphLayout?: GraphLayout;\n};\n\nconst perspectiveId = 'graph';\n\nconst GraphPerspectiveView = memo(({graphTypeUri, graphLayout}: Props) => {\n const styles = useStyles();\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const graphState = useGraphState(entity, graphTypeUri, graphLayout);\n const {graphLoading, layout} = graphState;\n\n const buttonsDisabled = layout === GraphLayout.TREE;\n const {tabs} = useGraphRightSidePanelElements();\n\n return (\n <GraphStateContext.Provider value={graphState}>\n <div className={styles.perspectiveView}>\n {graphLoading && <LinearLoadIndicator />}\n {entity?.uri && (\n <div className={styles.graphContainer}>\n <ProfileResizablePanes\n disabled={buttonsDisabled}\n perspectiveId={perspectiveId}\n buttonsProps={pluck('buttonProps', tabs)}\n >\n <div className={styles.graphWrapper}>\n <ScreenProfileBand entity={entity} />\n <GraphArea />\n </div>\n <GraphRightSidePanel tabs={tabs} />\n </ProfileResizablePanes>\n </div>\n )}\n </div>\n </GraphStateContext.Provider>\n );\n});\n\nGraphPerspectiveView.displayName = 'GraphPerspectiveView';\n\nexport default GraphPerspectiveView;\n","import {Entity, GraphLayout} from '@reltio/mdm-sdk';\nimport {GraphState} from '../types/graphDataTypes';\nimport {useGraphLoader} from './useGraphLoader';\nimport {useSelectedEntity} from './useSelectedEntity';\nimport {useRelationshipTable} from './useRelationshipTable';\nimport {useGraphType} from './useGraphType';\nimport {useGraphLayoutSelector} from './useGraphLayoutSelector';\n\nexport const useGraphState = (entity: Entity, initialGraphTypeUri?: string, graphLayout?: GraphLayout): GraphState => {\n const {layout, setLayout} = useGraphLayoutSelector(graphLayout);\n const {graphTypeUri, setGraphTypeUri} = useGraphType(entity, initialGraphTypeUri, setLayout);\n\n const {graphLoading, data, graphologyGraph, onAddRelation, onDeleteRelation, onCollapseEntity, onExpandEntity} =\n useGraphLoader(entity, graphTypeUri, layout);\n const {selectedEntity, onEntitySelect, selectedEntityLoading} = useSelectedEntity(entity, data);\n const relationshipTable = useRelationshipTable({\n data,\n selectedEntityUri: selectedEntity?.uri,\n mainEntityUri: entity?.uri,\n graphTypeUri\n });\n\n return {\n graphLoading,\n data,\n graphologyGraph,\n selectedEntity,\n selectedEntityLoading,\n graphTypeUri,\n relationshipTable,\n layout,\n onAddRelation,\n onDeleteRelation,\n onCollapseEntity,\n onExpandEntity,\n onEntitySelect,\n setGraphTypeUri,\n setLayout\n };\n};\n","import {useState, useEffect} from 'react';\nimport {GraphLayout} from '@reltio/mdm-sdk';\nimport {GraphState} from '../types/graphDataTypes';\n\nexport const useGraphLayoutSelector = (graphLayout?: GraphLayout): Pick<GraphState, 'layout' | 'setLayout'> => {\n const [layout, setLayout] = useState<GraphLayout>(GraphLayout.SIMPLE_NETWORK);\n\n useEffect(() => {\n const isCorrectGraphLayout = Object.values(GraphLayout).some((layout) => graphLayout === layout);\n if (isCorrectGraphLayout) {\n setLayout(graphLayout);\n }\n }, [graphLayout]);\n\n return {\n layout,\n setLayout\n };\n};\n","import {Entity, getGraphTypesForEntityType, GraphLayout} from '@reltio/mdm-sdk';\nimport {useEffect, useState} from 'react';\n\nimport mdm from '@reltio/mdm-module';\nimport {useSelector} from 'react-redux';\nimport {GraphState} from '../types/graphDataTypes';\n\nexport const useGraphType = (\n entity: Entity,\n initialGraphTypeUri?: string,\n setLayout?: (GraphLayout) => void\n): Pick<GraphState, 'graphTypeUri' | 'setGraphTypeUri'> => {\n const [graphTypeUri, setGraphTypeUri] = useState<string>(null);\n\n const onSetGraphTypeUri = (graphTypeUri) => {\n setGraphTypeUri(graphTypeUri);\n if (!graphTypeUri) {\n setLayout(GraphLayout.SIMPLE_NETWORK);\n }\n };\n const metadata = useSelector(mdm.selectors.getMetadata);\n useEffect(() => {\n const isCorrectGraphType = getGraphTypesForEntityType(metadata, entity.type).some(\n ({uri}) => initialGraphTypeUri === uri\n );\n if (isCorrectGraphType) {\n setGraphTypeUri(initialGraphTypeUri);\n }\n }, [initialGraphTypeUri, entity, metadata]);\n\n return {graphTypeUri, setGraphTypeUri: onSetGraphTypeUri};\n};\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\nimport RightPanelRelationship from '../components/RightPanelRelationship/RightPanelRelationship';\nimport RightPanelEntityDetails from '../components/RightPanelEntityDetails/RightPanelEntityDetails';\nimport {ActivePanel} from '../components/GraphRightSidePanel/GraphRightSidePanel';\nimport RelationshipIcon from '../components/GraphRightSidePanel/icons/relationship-icon.svg';\nimport {RightPanelTab} from '@reltio/components';\n\nexport const useGraphRightSidePanelElements = (): {tabs: RightPanelTab[]} => {\n const tabs = useMemo(\n () => [\n {\n buttonProps: {\n id: ActivePanel.Relationship,\n icon: RelationshipIcon,\n tooltipTitle: i18n.text('Relationship'),\n showForDisabled: true\n },\n content: <RightPanelRelationship />\n },\n {\n buttonProps: {\n id: ActivePanel.EntityDetails,\n icon: InfoOutlinedIcon,\n tooltipTitle: i18n.text('Entity Details'),\n showForDisabled: true\n },\n content: <RightPanelEntityDetails />\n }\n ],\n []\n );\n\n return {tabs};\n};\n","import React from 'react';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport {ErrorPopup} from '@reltio/components';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\nimport {GraphLayout} from '@reltio/mdm-sdk';\nimport GraphPerspectiveView from './components/GraphPerspectiveView/GraphPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'graph',\n disableGlobal: true,\n seed: 'grp'\n});\n\ntype Props = {\n graphTypeUri?: string;\n graphLayout?: GraphLayout;\n};\n\nconst GraphPerspective = ({graphTypeUri, graphLayout}: Props) => {\n return (\n <StylesProvider generateClassName={generateClassName}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <GraphPerspectiveView graphTypeUri={graphTypeUri} graphLayout={graphLayout} />\n <ErrorPopup showErrorFromStore={true} />\n </LocalizationProvider>\n </StylesProvider>\n );\n};\n\nexport default GraphPerspective;\n","import {GraphView} from '@reltio/graph';\n\nexport default GraphView;\n"],"names":["props","width","height","viewBox","xmlns","d","fill","stroke","strokeWidth","fillRule","x","y","rx","useStyles","makeStyles","container","paddingLeft","listItem","paddingTop","paddingBottom","transition","background","outline","listItemFocus","icon","opacity","flexShrink","marginRight","marginLeft","recommendedIcon","logoIcon","itemAfter","position","right","top","pointerEvents","itemText","padding","margin","fontSize","letterSpacing","whiteSpace","checkbox","checked","marginWrapper","display","alignItems","defaultCursor","cursor","itemTooltip","marginText","itemTextWrapper","attrType","styles","Icon","type","DataTypes","NestedAttrIcon","ReferenceAttrIcon","SimpleAttrIcon","getIconForAttrType","className","RecommendedIconWithTooltip","withTooltip","transform","cx","cy","r","memo","groupId","data","isFocused","isRequired","label","labelInText","level","onClick","noop","hideCheckBox","hideIcon","notSelectable","disableHorizontalScrollbar","style","subItemMargin","LogoIcon","disableNonSelectable","disableGutters","isButton","isNested","showLogoIcon","ExpandedValueTooltip","value","placement","MenuItem","classnames","undefined","dense","disabled","classes","focusVisible","selected","tabIndex","Checkbox","disableRipple","Marginator","tooltipTitle","i18n","showForDisabled","renderIcon","ListItemText","primary","RequiredMark","item","overflow","defaultItemSize","children","itemKey","showNotMeasuredItems","listRef","listRefProp","rowHeightsCache","useRef","rowHeights","setRowHeights","useState","applyRowHeights","useCallback","debounce","current","getItemKeyFromData","index","localListRef","resetAfterIndex","Row","useMemo","key","visibility","handleHeight","onResize","_","cacheRowHeight","ref","itemCount","length","itemData","itemSize","getItemKey","marginBottom","ConnectionEditor","connection","relatedEntity","inRelationTypes","outRelationTypes","showEmptyEditors","entityErrorMessage","onChangeAttribute","onRemoveAttribute","onAddAttributes","onChangeRelationType","onChangeEntity","relation","entity","attributes","uri","relationUri","relationTypeUri","direction","isRelationTypeSelected","Boolean","metadata","useMdmMetadata","globalSearchRequestOptions","useMdmGlobalSearchRequestOptions","attributeListEntity","getActivenessAttributes","relationAttrTypes","getRelationAttributesList","availableEntityTypeUris","getSuitableEntityTypeUrisForRelationTypes","Directions","getRelationType","uniq","concat","selectorCompatibleRelation","relationType","selectorCompatibleEntity","entityUri","entityType","entityLabel","getLabel","availableInRelationTypes","filter","isAvailableRelationBetweenEntities","availableOutRelationTypes","useEffect","getDefaultRelationTypeObject","useDidUpdateEffect","handleChangeRelationType","ConnectionRelationTypeSelector","onChange","ErrorWrapper","errorMessage","EntitySelector","entityTypesUris","max","mode","Mode","onCreate","attributeTypesSelectionStrategy","AttributesList","attrTypes","parentUri","onDeleteAttribute","useMenuStyles","theme","addLabel","fontWeight","color","palette","main","textOverflow","borderTop","backgroundColor","addIcon","useSingleValueStyles","singleValue","lineHeight","marginTop","Menu","selectProps","createLabel","inputValue","components","MenuWithPopper","prop","Add","propTypes","PropTypes","SingleValue","menuIsOpen","innerProps","Typography","control","dropdownIndicator","boxSizing","valueContainer","formControl","filledInputRoot","filledInputUnderline","inputLabel","customStyles","menu","baseStyles","borderRadius","boxShadow","menuList","maxHeight","group","input","option","overloadMenuListStyle","withoutLabelInputStyle","DropDownSelector","getOptions","options","identity","onClear","textFieldInputRef","TextFieldProps","otherProps","underlineStyle","useInputStyles","open","setOpen","inputRef","SelectComponent","AsyncSelect","Select","showIndicatorSeparator","IndicatorSeparator","EmptyStub","ClearIndicator","handleCreate","overloadStylesIfGroup","overloadStylesIfNoLabel","isEmpty","mergedStyles","mergedClasses","placeholder","defaultOptions","defaultTo","loadOptions","cacheOptions","DropdownIndicator","LoadingIndicator","menuPlacement","variant","size","root","path","inputProps","InputProps","underline","isEmptyValue","focused","InputLabelProps","shrink","onMenuOpen","onMenuClose","DropDownSelectorType","EntityTypesSelector","entityTypes","selectedEntityTypes","single","enableEmptyValueUnderline","ListLabelProps","items","isAvailableEntityType","selectedItemsUris","dataReltioId","selectionPopupTitle","displayName","EntityUriLink","forwardRef","screen","shouldOpenInNewTab","viewId","useContext","ViewIdContext","generateEntityUrl","UrlGeneratorsContext","openEntity","useMdmAction","uiPath","useMdmUiPath","handleClick","e","stopPropagation","preventDefault","href","target","listLabelContainer","justifyContent","listLabel","visibleItemsLabel","flex","flexBasis","hiddenCount","findFirstOverflowItemIndex","list","labelEl","childNodes","clientLeft","clientWidth","textNode","Array","from","range","document","createRange","setStart","setEnd","endOffset","rangeWidth","getBoundingClientRect","getListLabel","join","getListLabelWidth","maxWidth","isNil","ListLabel","labelRef","hiddenItemsCount","setHiddenItemsCount","itemsCount","overflowItemsCount","firstOverflowItemIndex","countOverflowItems","Math","countHiddenItems","hasHiddenItems","slice","Tooltip","title","getItemSize","always","SelectMetadataTypesList","selectedItems","onItemClick","focusIndex","VirtualGroupedList","renderItem","isSelected","find","AttributeListItem","Highlighter","text","highlight","filterText","fixedTitle","inputText","flexGrow","emptyInput","disabledInput","disabledPointer","disabledUnderline","inputRoot","paddingRight","borderBottomStyle","MetadataTypesSelector","isPopupOpen","setIsPopupOpen","openPopup","closePopup","setFilterText","clearFilterText","handleClose","pipe","filteredItems","utils","map","selectedLabels","propEq","handleListItemClick","handleSearchOnEnter","includes","handleKeyDown","useKeyboardNavigation","onSelectFocusedItem","onClose","rootRef","rootWidth","containerWidth","noTypesSelected","TextField","startAdornment","endAdornment","SmallIconButton","ArrowDropDown","iconClassName","readOnly","disableUnderline","SelectionPopup","anchorEl","onSearch","containerHeight","searchInputOnKeyDown","transformOrigin","horizontal","vertical","anchorOrigin","PaperProps","withMuiSkin","RelationTypesSelector","relationTypes","selectedRelationTypes","isAvailableRelationType","mark","profileBandNavigation","comments","ScreenProfileBand","historySlice","objectIds","getProfileBandObjectIdsForCollaboration","collaboration","useCollaboration","getEntityUriForLink","CollaborationContext","ProfileBand","COMMENTS_CONTAINER_VISIBILITY_AREA","aEntity","ProfileBandHistory","ProfileBandNavigation","CommentsContainer","relatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","objectType","DropDownValue","DropDownPlaceholder","Placeholder","React","generateEntityUrlForOldMode","generatePivotingUrl","generatePivotingUrlForOldMode","generateTagUrl","generateTagUrlForOldMode","useEditableConnection","onConnectionChange","onRelationChange","handleAddAttributes","addEntityAttributes","handleChangeAttribute","changeEntityAttribute","handleRemoveAttribute","removeEntityAttribute","newConnection","findSubgraphRelations","nodeId","foundRelations","relations","either","getStartObjectUri","equals","getEndObjectUri","push","relatedNodes","getAllRelatedEntitiesUris","without","forEach","relatedNodeId","chain","fillGraphWithHopsResponse","graph","graphologyData","nodesSet","Set","relationsSet","entities","add","has","startObject","objectURI","endObject","nodes","id","name","entityTypeUri","traversedRelationsCount","traversedRelations","untraversedRelationsCount","untraversedRelations","edges","relationKey","to","split","processResponseToGraph","node","hasNode","addNode","edge","isSelfRelation","hasEdge","addEdgeWithKey","forceLabel","loop","findSubgraphNodes","foundNodes","neighbors","neighborNodeId","useGraphLoader","graphTypeUri","layout","graphologyGraph","setGraphologyGraph","dispatch","useDispatch","setData","loading","setLoading","isDTEntity","isDataTenantEntity","useSelector","mdmModule","safeLoadHopsPromise","useSafePromise","safeLoadHopsForEntityPromise","isTreeLayout","GraphLayout","prevLayout","usePrevious","signal","PageRequestsAbortingContext","isPrevAndCurrentLayoutTree","loadHopsForEntity","deep","getHops","limitCreditsConsumption","graphTypes","getLastUriPart","activenessDate","isTempUri","then","MultiGraph","catch","error","console","warn","isAbortError","ui","getRequestErrorMessage","finally","onAddRelation","async","startEntityUri","endEntityUri","startDate","endDate","response","createRelation","successful","respondedRelation","object","relatedEntityUri","getEntity","select","newData","nodeUris","entitiesUris","extraEntityUri","extraEntity","extraEntityFormatted","pick","addRelationToHopsData","extremities","getNodeAttribute","setNodeAttribute","onDeleteRelation","removeRelation","dropEdge","updatedData","removedEntitiesUris","startNodeId","endNodeId","undirectedGraph","toUndirected","isolatedNodeId","cond","bidirectional","T","dataWithoutRelation","evolve","reject","isolatedRelations","isolatedEntitiesUris","append","removeIsolatedSubgraph","removeRelationFromHopsData","nodesIdsToRemove","dropNode","removeNodesFromGraph","onCollapseEntity","difference","mainNode","firstNode","secondNode","filterEdges","forEachNeighbor","neighborNode","isolatedNodes","secondaryNode","getIsolatedNodeId","reduce","isolatedNode","getIsolatedNodes","onExpandEntity","mergedData","hopsEntityUri","hopsEntities","hopsRelations","some","findIndex","mergeHopsData","loadedEntity","graphLoading","addToEntitiesMap","entitiesMap","newEntitiesMap","keys","Object","ROWS_PER_PAGE_OPTIONS","getRelationTypeLabel","directionalLabel","getRelationTypeLabelFromMetadata","useRelationshipTable","selectedEntityUri","mainEntityUri","sorting","setSorting","field","order","page","setPage","rowsPerPage","setRowsPerPage","editingRelations","setEditingRelations","mdm","zipObj","allRowsData","uniqBy","firstEntityUri","getSecondEntityUri","entityTypeLabel","getEntityTypeLabel","relationTypeLabel","searchText","onChangeSearchText","filters","onFilter","relationTypesOptions","entityTypesOptions","setSearchText","setFilters","relationTypesUris","__","getEntityType","useRelationshipTableFilters","filteredRowsData","ifElse","sort","a","b","pagedRowsData","onStartRelationEditing","getRelation","prev","initialRelation","onUpdateEditingRelation","rel","onCancelRelationEditing","onSaveEditingRelation","oldRelation","newRelation","updateRelation","rowsData","onSort","total","onPageChange","onRowsPerPageChange","GraphStateContext","selectedEntityLoading","selectedEntity","onEntitySelect","relationshipTable","setLayout","border","table","flexDirection","tableBody","tableBodyWrapper","tableRowWrapper","borderBottom","tableRow","editingRow","headRow","columnsData","columnData","sortable","headCellRenderer","columnClassName","HeadCellRenderer","sortingProps","sortField","sortOrder","sortHandler","toggleSortOrder","headCellData","CollapsibleTable","getRowKey","ExpandedRowRenderer","defaultRowHeight","dimensions","setDimensions","renderRow","expanded","rowCellValueRenderer","Renderer","rowValue","onTableBodyResize","useImperativeHandle","resetScrollbarPosition","scrollTo","handleWidth","AutoSizeList","hoverBackground","tableWithPagination","tableContainer","profileColumn","minWidth","relationshipTypeColumn","entityTypeColumn","row","content","hoverRule","textOverflowWithHover","headCell","headLabel","defaultCell","clickable","profileCell","controlsCell","editingMode","hidden","editButton","entityAvatar","actionButtons","expandedRow","DefaultHeadCellRenderer","tooltip","withContext","cellValue","EntityAvatar","avatarClassName","editingRelationObject","editingRelation","hasChanges","onUpdateConnection","handleCancelRelationEditing","Button","errors","validateConnectionRelation","profile","validate","ConfirmationDialog","saveCaption","discardCaption","onDiscard","onSave","DeleteRelationButton","onOpen","DeleteIcon","onEdit","isEditing","canEdit","checkMetadataForUpdate","canDelete","checkMetadataForDelete","EditIcon","ProfileCellRenderer","DefaultCellRenderer","ControlsCellRenderer","tableRef","rowsDataWithExpandedInfo","tableClasses","BasicTablePagination","count","rowsPerPageOptions","onChangeRowsPerPage","onChangePage","basicTableRef","LinearLoadIndicator","inactiveSearchIcon","secondary","activeSearchIcon","SearchInput","fullWidth","autofocus","dialogPaper","entityTypesSelector","relationTypesSelector","footer","clearAllButton","cancelButton","localSelectedEntityTypes","setLocalSelectedEntityTypes","localSelectedRelationTypes","setLocalSelectedRelationTypes","handleCancel","Dialog","paper","wrapper","iconButton","activeFiltersIcon","inactiveFiltersIcon","hasAppliedFilters","IconButton","FilterList","useCreatableInOutRelationTypes","inRelations","outRelations","getInOutRelationTypesForEntityTypeUri","checkMetadataForCreate","dialogTitle","titleText","attributeList","setConnection","generateNewRelationUri","DialogTitle","DialogContent","DialogActions","canAddSomeRelation","openDialog","setOpenDialog","ActionButton","ActionButtonMode","AddIcon","caption","noShadowBlock","AttributesView","link","textDecoration","renderLabel","ActivePanel","GraphRightSidePanel","active","tabs","isOpen","SidePanel","_extends","assign","i","arguments","source","prototype","hasOwnProperty","call","apply","this","clipRule","createCanvasContext","canvas","getContext","preserveDrawingBuffer","antialias","createCanvas","createElement","setAttribute","SigmaCustomRenderersContext","createContext","addRenderers","canvases","useSigmaCustomRenderers","SigmaCustomRenderersContainer","sigmaCustomRenderers","sigma","useSigmaContext","renderers","setRenderers","canvasesRef","widthRef","heightRef","mergeLeft","resize","offsetWidth","offsetHeight","pixelRatio","getPixelRatio","canvasElement","context","scale","afterRender","clearRect","renderer","beforeRender","insertBefore","sigmaContainer","querySelector","addListener","off","remove","Provider","drawNodeBackground","settings","drawNodeArc","fillStyle","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","labelSize","textWidth","measureText","boxWidth","round","boxHeight","radius","bottom","left","beginPath","moveTo","quadraticCurveTo","lineTo","closePath","arc","PI","drawLabel","drawBackground","font","labelFont","weight","labelWeight","labelColor","attribute","fillText","drawHover","NodeProgramBorder","AbstractNodeProgram","constructor","gl","super","borderSize","getAttribLocation","program","bind","enableVertexAttribArray","vertexAttribPointer","FLOAT","Float32Array","BYTES_PER_ELEMENT","process","offset","array","inPath","floatColor","highlighted","render","params","useProgram","uniform1f","ratioLocation","sqrt","ratio","scaleLocation","scalingRatio","uniformMatrix3fv","matrixLocation","matrix","drawArrays","POINTS","ImageLoader","rebindTextureFns","images","textureImage","hasReceivedImages","pendingImagesFrameID","loadImage","imageSource","image","Image","img","addEventListener","status","requestAnimationFrame","finalizePendingImages","URL","window","location","origin","crossOrigin","src","startsWith","pendingImages","state","min","ctx","iter","xOffset","putImageData","imageSizeInTexture","dx","dy","drawImage","getImageData","fn","defaultImage","svg2Url","NodeImageProgram","imageLoader","texture","textureLocation","atlasLocation","latestRenderParams","inactive","rebindTexture","refresh","ImageData","getUniformLocation","Error","createTexture","bindTexture","TEXTURE_2D","texImage2D","RGBA","UNSIGNED_BYTE","Uint8Array","imageState","hasNothingToRender","uniform1i","activeTexture","TEXTURE0","generateMipmap","bufferData","defaultImages","NodeButtonsProgram","buttonSize","normals","correctionRatioLocation","sqrtZoomRatioLocation","hideButtons","buttonOffset","len","n1","n2","showExpand","expandImageState","showCollapse","collapseImageState","correctionRatio","TEXTURE1","EdgeArrowHeadProgram","SigmaEdgeArrowHeadProgram","sourceData","targetData","l","arrowSizeRatio","thickness","x1","y1","x2","y2","EdgeReversedArrowHeadProgram","EdgeClampedProgram","AbstractEdgeProgram","fragmentShaderSource","IndicesArray","indicesArray","indicesBuffer","indicesType","positionLocation","colorLocation","normalLocation","radiusLocation","arrowSizeRatioLocation","canUse32BitsIndices","createBuffer","Uint32Array","Uint16Array","UNSIGNED_INT","UNSIGNED_SHORT","bindBuffer","ELEMENT_ARRAY_BUFFER","sourceRadius","targetRadius","computeIndices","indices","c","STATIC_DRAW","drawElements","TRIANGLES","SigmaGraphContainer","initialSettings","allowInvalidContainer","defaultNodeType","hoverRenderer","labelRenderer","nodeProgramClasses","createNodeCompoundProgram","edgeProgramClasses","line","LineEdgeProgram","arrow","createEdgeCompoundProgram","doubleArrow","directionTypes","RelationTypeDirection","mouseIsOnNode","mouseX","mouseY","nodeX","nodeY","pow","getPathToNode","selectedNode","rootNodeUri","searchFn","startNode","edgePathFromNodePath","ARROW_SCALE","getArrowPoints","sX","sY","aSize","aX","aY","vX","vY","drawArrow","memoizedGetEntityImage","memoizeWith","storagePath","getEntityImage","SELECTED_NODE","DEFAULT_NODE","useGraphLayout","syncLayout","workerLayout","layoutSettings","isDirected","onNodeClick","onNodeCollapse","onNodeExpand","useSigma","loadGraph","useLoadGraph","registerEvents","useRegisterEvents","setSettings","useSetSettings","selfRelationsPathsMap","selfRelationLoopsCanvas","addCustomRenderers","selfRelationLoops","forEachEdge","edgeId","edgeData","sourceId","edgeDisplayData","getEdgeDisplayData","sourceDisplayData","getNodeDisplayData","sSize","cp","getSelfLoopControlPoints","strokeStyle","lineWidth","bezier","Path2D","firstArrowPoints","getFirstArrowPoints","secondArrowPoints","getSecondArrowPoints","bezierCurveTo","drawSelfRelationLoop","scaleSize","framedGraphToViewport","useSelfRelationLoopsRenderer","hoveredEdge","pointerCoordinates","hoveredNormalEdge","setHoveredNormalEdge","hoveredSelfRelationEdge","setHoveredSelfRelationEdge","enterEdge","leaveEdge","mousemove","event","rect","clientX","clientY","getMousePos","original","isPointInStroke","tooltips","_edgeData","hovered","centerX","centerY","textAlign","textBaseline","xPadding","arcTo","drawRoundedRect","drawTooltip","relationLabel","useTooltipRenderer","absoluteImagePath","hoveredNode","setHoveredNode","setUndirectedGraph","selectedPath","setSelectedPath","getCamera","setState","positions","getGraph","animateNodes","duration","worker","start","timer","setTimeout","stop","clearTimeout","kill","pathToNode","enterNode","leaveNode","clickNode","click","coordForGraph","viewportToGraph","closestNodes","attrs","getNodeAttributes","distance","findClosestNode","closestNode","center","isExpandClicked","isCollapseClicked","selectedNodeNeighbours","nodeReducer","pathToIcon","hiddenNeighborsCount","isNodeInPath","isHoveredNode","isRootNode","isSelectedNode","isInactiveNode","isHiddenNode","edgeReducer","isEdgeInPath","relationTypeColor","getRelationTypePropWithInheritance","isHiddenEdge","hasExtremity","directionType","enableEdgeHoverEvents","prevData","newNodesIds","tempGraph","copy","circular","forceAtlas2","gravity","FA2Layout","getFirstLvlNodes","edgesWithoutLoops","firstLvlNodesIds","findChildNodeIds","parentNodes","nodesArr","processedNodes","currentLvlNodeIds","nodesIds","canFindChildNodes","splitLongLevels","finalHierarchyNodesArr","nodesHierarchy","maxQuantityNodesOnOneLvl","extraNodes","remainingNodes","calculateYPos","quantityAtLvl","rowNumber","isEvenItem","shouldUseCheckboardPattern","isVerticalHierarchy","Y_MARGIN","calculateXPos","posAtLvl","isEvenRow","isHorizontalHierarchy","X_MARGIN","isSimpleGraph","nodesLength","hierarchicalLayout","angleOfRotation","getAngleOfRotation","graphData","mapEdges","extractDataFromGraph","multiplier","getMaxQuantityNodesOnOneLvl","firstLvlNodeIds","buildHierarchyNodes","maxLvlSize","hierarchyNodes","sizes","getMaxLvlSize","j","xPos","yPos","rotation","degrees","reduceNodes","result","graphTypeSelector","setGraphTypeUri","graphTypeOptions","getGraphTypesForEntityType","opt","graphLayoutSelector","onChangeHandler","layouts","buttonStyle","maxButton","minButton","thumb","thumbIcon","rail","sliderRoot","percentsToRatio","percent","ratioToPercents","ZoomSliderThumb","other","Slider","Remove","camera","zoomIn","zoomOut","useCamera","factor","setValue","clamp","getState","maxCameraRatio","minCameraRatio","updated","slots","slotProps","track","newValue","getBoundedRatio","button","gotoNode","MyLocation","hierarchyTree","config","class","ProfileViewTypes","isGraphView","selectors","zIndex","rightBottomControls","zoomSlider","onNodeSelect","commonProps","perspectiveView","fontFamily","overflowX","overflowY","default","graphWrapper","graphContainer","GraphPerspectiveView","graphLayout","graphState","initialGraphTypeUri","isCorrectGraphLayout","values","useGraphLayoutSelector","useGraphType","safePromise","setSelectedEntity","getCachedEntity","cachedEntity","Promise","resolve","briefEntityInfo","isActualSelectedEntity","useSelectedEntity","useGraphState","buttonsDisabled","buttonProps","Relationship","RelationshipIcon","EntityDetails","InfoOutlinedIcon","ProfileResizablePanes","perspectiveId","buttonsProps","pluck","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","StylesProvider","LocalizationProvider","dateAdapter","AdapterMoment","ErrorPopup","showErrorFromStore"],"sourceRoot":""}