@reltio/remotes 1.4.1189 → 1.4.1193

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/2498.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"2498.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/AttributeSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributeSelector/AttributeSelector.tsx","webpack://@reltio/remotes/../components/src/components/CollapseButton/styles.ts","webpack://@reltio/remotes/../components/src/components/CollapseButton/CollapseButton.tsx","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","webpack://@reltio/remotes/../components/src/components/ReactSelect/CreatableSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/Option.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/index.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/MultiSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/index.js","webpack://@reltio/remotes/../components/src/components/UserSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/UserSelector/UserSelector.tsx","webpack://@reltio/remotes/../components/src/components/activityLog/types/ActivityTypes.ts","webpack://@reltio/remotes/../components/src/components/activityLog/utils/activities.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/CustomDateRangeEditor.tsx","webpack://@reltio/remotes/../components/src/types/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileAttributesView/ProfileAttributesView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/contexts/SingleAttributeContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/SingleAttributeHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/hooks/helpers/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/SingleAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/SingleAttributeReadableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/SingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useSingleAttributeLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/RelationsViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/ImportDTContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/hooks/useImportFromDTLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/MultipleImportIcon.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/ImportFromDT.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/RelationsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/RelationTooltip.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationInfo.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/SuggestedButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/EditableRelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/permissions.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/relation.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/RelationArrowButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/SecondLevelWrapper.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSecondLevelConnections.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/RelationsEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/RelationAttributes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/ShowDetailsButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/RelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/ratings.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/Ratings.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/RatingsButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/RelationComplexItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationsList.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSuggestedRelations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/RelationsContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/RelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/filters.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/contexts/TableAttributeContext.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/helpers/tableAttributeHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/RowCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/EditButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/AttributeTable.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/AttributeEditing.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/hooks/useEditableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/ConfigContext.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/Node.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/node-content-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/index.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/tree-node-data-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/Sandbox/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withResizableHandle.tsx","webpack://@reltio/remotes/../profile/src/components/views/styles.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/useMarkers.js","webpack://@reltio/remotes/../profile/src/components/EntityMapView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/ImageLineCaption.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeViewEditableContent/ImageAttributeViewEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ActionButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/MatchCard.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ProfilePotentialMatchesView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewsFactory.tsx","webpack://@reltio/remotes/../profile/src/components/views/StubView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/ProfileSingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/hooks/useSingleAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/ProfileTableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/Sandbox/CustomView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/EntityMapView/EntityMapView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewComponent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/ProfileLayoutItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/ProfileLayout.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/suggest.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/copy.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowButton/WorkflowButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/CollaborationList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/WorkflowList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/CollaborationIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationButton/CollaborationButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/ErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/Error.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/ProfileErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/Notification.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/Notifications.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/ProfilePerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/TagListHeader.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/TagProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTagsProvider.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/TagPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTag.ts","webpack://@reltio/remotes/../profile/src/perspectives/TagPerspective.tsx"],"sourcesContent":["import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n },\n noOptionsMessage: {\n fontSize: '14px'\n }\n});\n","import React, {useCallback, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe, defaultTo} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {AttributeOption} from '../../types';\nimport mdmModule from '@reltio/mdm-module';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n entityType: TEntityType;\n selectedAttributes: AttributeOption[];\n className?: string;\n onChange?: (attributes: AttributeOption[]) => void;\n title?: string;\n disableUnderline?: boolean;\n menuPlacement?: string;\n};\n\nconst AttributeSelector = ({\n entityType,\n selectedAttributes,\n className,\n onChange,\n title,\n disableUnderline,\n menuPlacement = 'bottom'\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n\n const prepareItems = useCallback(\n (data: AttributeType[], level = 0, prevLabel = ''): AttributeOption[] => {\n return data.reduce((acc, item) => {\n if (item.hidden) return acc;\n const chipLabel = `${prevLabel && prevLabel + ' / '}${item.label}`;\n acc.push({\n label: item.label,\n value: item.uri,\n attrType: item,\n chipLabel,\n level\n });\n const subAttributes = getAttributeTypeSubAttributes(metadata, item);\n return acc.concat(subAttributes ? prepareItems(subAttributes, level + 1, chipLabel) : []);\n }, []);\n },\n [metadata]\n );\n\n const options = useMemo(() => prepareItems(entityType?.attributes || []), [entityType, prepareItems]);\n\n const CustomOption = ({isFocused, isSelected, data, label, innerProps}: OptionProps<AttributeOption, true>) => (\n <div {...innerProps}>\n <AttributeListItem\n checked={isSelected}\n level={data.level}\n data={data}\n label={label}\n labelInText={label}\n isFocused={isFocused}\n />\n </div>\n );\n\n const CustomMultiValue = ({data, ...props}: MultiValueProps<AttributeOption>) => (\n <MultiValue {...props}>{data.chipLabel}</MultiValue>\n );\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {title || i18n.text('Attribute')}\n </Typography>\n <MultiSelect\n value={selectedAttributes}\n options={options}\n TextFieldProps={{\n InputProps: {disableUnderline},\n classes: {root: styles.dropDownInput}\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n MultiValue: CustomMultiValue,\n Option: CustomOption\n }}\n onChange={pipe(defaultTo([]), onChange)}\n styles={customStyles}\n classes={styles}\n menuPlacement={menuPlacement}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n collapseButton: {\n cursor: 'pointer'\n },\n expandLess: {\n transform: 'rotate( -180deg )'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport {useStyles} from './styles';\n\ntype SmallIconButtonWithTooltipProps = React.ComponentPropsWithoutRef<typeof SmallIconButtonWithTooltip>;\n\ntype Props = Omit<SmallIconButtonWithTooltipProps, 'tooltipTitle'> & {\n isOpen?: boolean;\n tooltipTitle?: string;\n};\n\nconst CollapseButton = ({isOpen = false, tooltipTitle, ...otherProps}: Props) => {\n const styles = useStyles();\n const buttonProps = {\n icon: ExpandMore,\n className: styles.collapseButton,\n iconClassName: classnames({[styles.expandLess]: isOpen})\n };\n const tooltipProps = {\n tooltipTitle: tooltipTitle\n };\n return <SmallIconButtonWithTooltip {...buttonProps} {...tooltipProps} {...otherProps} />;\n};\n\nexport default CollapseButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flex: 1\n },\n input: {\n height: '100%',\n paddingLeft: '12px',\n paddingRight: '8px',\n fontSize: '14px'\n },\n inputNumber: {\n minWidth: '60px',\n marginRight: 10,\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n inputUnit: {\n width: '100%'\n }\n});\n","import React from 'react';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport capitalize from '@material-ui/core/utils/capitalize';\nimport {TextField as TextField} from '@material-ui/core';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = [\n i18n.text('minutes'),\n i18n.text('hours'),\n i18n.text('days'),\n i18n.text('weeks'),\n i18n.text('months'),\n i18n.text('years')\n];\n\nconst DateIntervalSelector = ({interval: [value, unit], onChange, onFocus}: Props) => {\n const styles = useStyles();\n const getIntervalFromValue = (newValue: number) => [newValue, unit];\n const getIntervalFromUnit = ({value: newUnit}: {value: string}) => [value, newUnit];\n const onNumberChange = pipe(getValue, parseInt, getIntervalFromValue, onChange);\n const onUnitChange = pipe(getIntervalFromUnit, onChange);\n return (\n <div className={styles.root}>\n <TextField\n type=\"number\"\n value={value || ''}\n onChange={onNumberChange}\n inputProps={{min: 1, onFocus: onFocus}}\n InputProps={{classes: {root: styles.input}}}\n className={styles.inputNumber}\n />\n <SimpleDropDownSelector\n label={''}\n placeholder={capitalize(unit)}\n className={styles.inputUnit}\n value={{value: unit, label: capitalize(unit)}}\n options={periods.map((value) => ({\n value,\n label: capitalize(value)\n }))}\n onChange={onUnitChange}\n TextFieldProps={{\n inputProps: {onFocus: onFocus},\n InputProps: {classes: {root: styles.input}}\n }}\n />\n </div>\n );\n};\n\nexport default DateIntervalSelector;\n","import CreatableSelect from 'react-select/creatable';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(CreatableSelect);\n","import {MenuItem as MenuItem} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport ExpandedValueTooltip from '../../../ExpandedValueTooltip/ExpandedValueTooltip';\n\nexport default function Option(props) {\n const {\n innerProps,\n innerRef,\n children,\n isFocused,\n isSelected,\n selectProps: {classes},\n label\n } = props;\n\n return (\n <MenuItem\n className={classNames(classes.option, {[classes['option--selected']]: isSelected})}\n ref={innerRef}\n selected={isFocused}\n component=\"div\"\n {...innerProps}\n >\n <Checkbox color=\"primary\" checked={isSelected} />\n <ExpandedValueTooltip value={label}>\n <div className={classes['option--item']}>{children}</div>\n </ExpandedValueTooltip>\n </MenuItem>\n );\n}\n\nOption.propTypes = {\n children: PropTypes.node,\n innerProps: PropTypes.shape({\n id: PropTypes.string.isRequired,\n key: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n onMouseMove: PropTypes.func.isRequired,\n onMouseOver: PropTypes.func.isRequired,\n tabIndex: PropTypes.number.isRequired\n }).isRequired,\n innerRef: PropTypes.oneOfType([\n PropTypes.oneOf([null]),\n PropTypes.func,\n PropTypes.shape({\n current: PropTypes.any.isRequired\n })\n ]),\n isFocused: PropTypes.bool.isRequired,\n isSelected: PropTypes.bool.isRequired,\n label: PropTypes.string,\n selectProps: PropTypes.shape({\n classes: PropTypes.shape({\n option: PropTypes.string\n })\n })\n};\n","import Option from './Option';\n\nconst components = {\n Option\n};\n\nexport default components;\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {omit} from 'ramda';\nimport CreatableSelect from '../CreatableSelect';\nimport Select from '../Select';\nimport AsyncSelect from '../AsyncSelect';\nimport multiSelectComponents from './components';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {mergeClasses} from '../../../core/utils';\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n top: 6,\n left: 16\n },\n placeholder: (props) => ({\n display: !props.placeholder || props.label ? 'none' : undefined\n }),\n 'option--selected': {\n fontWeight: 400\n },\n clearIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n },\n dropdownIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n }\n}));\n\nlet id = 0;\nconst getInputId = () => `custom-select-${id++}`;\n\nfunction MultiSelect(props) {\n const {\n label,\n creatable,\n getOptions,\n loadingIndicator,\n components: componentsProp,\n classes: classesProp,\n styles: stylesProp,\n onChange: onChangeProp,\n onInputChange: onInputChangeProp,\n menuPlacement = 'auto',\n ...reactSelectProps\n } = props;\n\n const SelectComponent = creatable ? CreatableSelect : getOptions ? AsyncSelect : Select;\n\n const [inputValue, setInputValue] = useState('');\n const multiSelectClasses = useStyles(omit(['classes'], props));\n const inputId = getInputId();\n\n const components = {\n ...multiSelectComponents,\n ...componentsProp\n };\n\n const classes = mergeClasses(multiSelectClasses, classesProp);\n\n function handleInputChange(value, {action}) {\n onInputChangeProp(value, {action});\n if (action !== 'set-value') {\n setInputValue(value);\n }\n }\n\n function handleChange(value, actionMeta) {\n onChangeProp(value, actionMeta);\n if (actionMeta.action === 'create-option') {\n setInputValue('');\n onInputChangeProp('', {action: 'input-change'});\n }\n }\n\n const styles = {\n indicatorSeparator: (base) => ({\n ...base,\n margin: '10px 0'\n }),\n loadingIndicator: (base) => ({\n ...base,\n display: loadingIndicator ? base.display : 'none'\n }),\n loadingMessage: (base) => ({\n ...base,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif'\n }),\n ...stylesProp\n };\n\n const labelProps = label\n ? {\n inputId,\n TextFieldProps: {\n label,\n InputLabelProps: {\n htmlFor: inputId,\n shrink: props.value && props.value.length ? true : undefined,\n className: classes.label\n },\n ...props.TextFieldProps\n }\n }\n : {};\n\n return (\n <SelectComponent\n isMulti\n inputId={inputId}\n inputValue={inputValue}\n onChange={handleChange}\n onInputChange={handleInputChange}\n closeMenuOnSelect={false}\n hideSelectedOptions={false}\n classes={classes}\n components={components}\n styles={styles}\n menuPlacement={menuPlacement}\n loadOptions={getOptions}\n {...labelProps}\n {...reactSelectProps}\n />\n );\n}\n\nMultiSelect.defaultProps = {\n creatable: false,\n cacheOptions: true,\n components: {},\n classes: {},\n placeholder: '',\n loadingIndicator: false,\n onInputChange: () => {},\n onChange: () => {}\n};\n\nMultiSelect.propTypes = {\n /**\n * Async creatable multi select with optional placeholder, shrink-label, non-closing menu and options with checkboxes.\n * Based on react-select/creatable and react-select/async.\n * See react-select docs: https://react-select.com\n *\n * Below are listed only props used in the MultiSelect component. Check https://react-select.com/props first.\n * */\n\n /** Ability to create values. React-select/async-creatable is used internally */\n creatable: PropTypes.bool,\n /** True for enabling cache. Recommended. */\n cacheOptions: PropTypes.bool,\n defaultOptions: PropTypes.bool,\n /** Array of selected options. */\n value: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n /** Way to receive updated values */\n onChange: PropTypes.func,\n /** Way to receive updated inputValue */\n onInputChange: PropTypes.func,\n /** Input placeholder. Will not be shown if the label prop is specified */\n placeholder: PropTypes.string,\n /** Floating label from @material-ui/core/TextField component */\n label: PropTypes.string,\n /** Enable to show default react-select's indicator */\n loadingIndicator: PropTypes.bool,\n /** You could redefine any of these components */\n components: PropTypes.shape({\n ClearIndicator: PropTypes.func,\n Control: PropTypes.func,\n DropdownIndicator: PropTypes.func,\n DownChevron: PropTypes.func,\n CrossIcon: PropTypes.func,\n Group: PropTypes.func,\n GroupHeading: PropTypes.func,\n IndicatorsContainer: PropTypes.func,\n IndicatorSeparator: PropTypes.func,\n Input: PropTypes.func,\n LoadingIndicator: PropTypes.func,\n Menu: PropTypes.func,\n MenuList: PropTypes.func,\n MenuPortal: PropTypes.func,\n LoadingMessage: PropTypes.func,\n NoOptionsMessage: PropTypes.func,\n MultiValue: PropTypes.func,\n MultiValueContainer: PropTypes.func,\n MultiValueLabel: PropTypes.func,\n MultiValueRemove: PropTypes.func,\n Option: PropTypes.func,\n Placeholder: PropTypes.func,\n SelectContainer: PropTypes.func,\n SingleValue: PropTypes.func,\n ValueContainer: PropTypes.func\n }),\n /** Classes are passed to mui skin components. Provided classes will be merged with existing ones. */\n classes: PropTypes.shape({\n control: PropTypes.string,\n valueContainer: PropTypes.string,\n multiValue: PropTypes.string,\n noOptionsMessage: PropTypes.string,\n singleValue: PropTypes.string,\n placeholder: PropTypes.string,\n menu: PropTypes.string,\n clearIndicator: PropTypes.string,\n dropdownIndicator: PropTypes.string,\n option: PropTypes.string,\n 'option--selected': PropTypes.string,\n label: PropTypes.string\n }),\n /**\n * React-select's way to customise style. Could be used to style default react-select components.\n * In other cases better to use classes and components props\n * */\n styles: PropTypes.shape({\n clearIndicator: PropTypes.func,\n container: PropTypes.func,\n control: PropTypes.func,\n dropdownIndicator: PropTypes.func,\n group: PropTypes.func,\n groupHeading: PropTypes.func,\n indicatorsContainer: PropTypes.func,\n indicatorSeparator: PropTypes.func,\n input: PropTypes.func,\n loadingIndicator: PropTypes.func,\n loadingMessage: PropTypes.func,\n menu: PropTypes.func,\n menuList: PropTypes.func,\n menuPortal: PropTypes.func,\n multiValue: PropTypes.func,\n multiValueLabel: PropTypes.func,\n multiValueRemove: PropTypes.func,\n noOptionsMessage: PropTypes.func,\n option: PropTypes.func,\n placeholder: PropTypes.func,\n singleValue: PropTypes.func,\n valueContainer: PropTypes.func\n }),\n /** Props from https://material-ui.com/api/text-field/ */\n TextFieldProps: PropTypes.object /* eslint-disable-line react/forbid-prop-types */,\n getOptions: PropTypes.func,\n menuPlacement: PropTypes.string,\n menuPortalTarget: PropTypes.object,\n getOptionValue: PropTypes.func,\n isSearchable: PropTypes.bool,\n inputRef: PropTypes.shape({current: PropTypes.object})\n};\n\nexport default MultiSelect;\n","import MultiSelect from './MultiSelect';\n\nexport default MultiSelect;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n loadingMessage: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n }\n});\n","import React, {useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck, prop} from 'ramda';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, User, utils} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n selectedUsers: string[];\n onChange: (activities: string[]) => void;\n className?: string;\n disableUnderline?: boolean;\n};\n\nconst UserSelector = ({selectedUsers, onChange, className, disableUnderline}: Props) => {\n const styles = useStyles();\n\n const valueToOption = (value: string) => ({value, label: value});\n const prepareValues = (values: string[]) => values.map(valueToOption);\n const filterUsers = (inputValue) => (users) =>\n inputValue ? users.filter((username) => utils.strings.search(username, inputValue)) : users;\n\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n\n const cachedRequest = useRef<Promise<{array: User[]}>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(\n pipe(prop('array'), pluck('username'), filterUsers(inputValue), prepareValues)\n );\n };\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {i18n.text('User')}\n </Typography>\n <MultiSelect\n value={prepareValues(selectedUsers)}\n onChange={pipe(defaultTo([]), pluck('value'), onChange)}\n defaultOptions={true}\n getOptions={getOptions}\n TextFieldProps={{\n InputProps: {disableUnderline},\n className: styles.dropDownInput\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default UserSelector;\n","export enum ActivityTypes {\n MODEL_UPDATED = 'MODEL_UPDATED',\n ENTITY_REMOVED = 'ENTITY_REMOVED',\n ENTITY_CREATED = 'ENTITY_CREATED',\n ENTITY_CHANGED = 'ENTITY_CHANGED',\n ENTITIES_MERGED = 'ENTITIES_MERGED',\n ENTITIES_SPLITTED = 'ENTITIES_SPLITTED',\n ENTITY_LOST_MERGE = 'ENTITY_LOST_MERGE',\n RELATIONSHIP_CREATED = 'RELATIONSHIP_CREATED',\n RELATIONSHIP_REMOVED = 'RELATIONSHIP_REMOVED',\n RELATIONSHIP_CHANGED = 'RELATIONSHIP_CHANGED',\n POTENTIAL_MATCHES_FOUND = 'POTENTIAL_MATCHES_FOUND',\n NOT_MATCHES_SET = 'NOT_MATCHES_SET',\n NOT_MATCHES_RESET = 'NOT_MATCHES_RESET',\n PERIODIC_TASK_SCHEDULED = 'PERIODIC_TASK_SCHEDULED',\n ENTITIES_MERGED_MANUALLY = 'ENTITIES_MERGED_MANUALLY',\n POTENTIAL_MATCHES_REMOVED = 'POTENTIAL_MATCHES_REMOVED',\n ENTITIES_MERGED_ON_THE_FLY = 'ENTITIES_MERGED_ON_THE_FLY',\n USER_LOGIN = 'USER_LOGIN',\n USER_LOGOUT = 'USER_LOGOUT',\n USER_SEARCH = 'USER_SEARCH',\n USER_PROFILE_VIEW = 'USER_PROFILE_VIEW',\n COMMENT_ADDED = 'COMMENT_ADDED',\n COMMENT_UPDATED = 'COMMENT_UPDATED',\n COMMENT_DELETED = 'COMMENT_DELETED',\n ANALYTICS_ATTRIBUTES_CHANGED = 'ANALYTICS_ATTRIBUTES_CHANGED',\n SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE = 'SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE',\n GROUP_CREATED = 'GROUP_CREATED',\n GROUP_REMOVED = 'GROUP_REMOVED',\n GROUP_CHANGED = 'GROUP_CHANGED'\n}\n","import {groupBy, ifElse, map, path, pipe, propOr, values, is, isNil, includes} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ActivityData, ActivityTypes, DeltaValue} from '../types';\n\nconst getItemDataType = path(['data', 'type']);\n\nexport const getActivityType = (activity: ActivityData) => {\n const {items, label} = activity;\n const [firstItem] = items || [];\n return getItemDataType(firstItem) || label;\n};\n\nexport const isValidActivityType = (type: string): boolean => pipe(values, includes(type))(ActivityTypes);\n\nexport const isValidActivity = pipe(getActivityType, isValidActivityType);\n\nexport const splitActivityByType = (activity: ActivityData) => {\n return pipe(\n propOr([], 'items'),\n groupBy(getItemDataType),\n values,\n ifElse(\n ({length}) => length > 1,\n map((items) => ({\n ...activity,\n items,\n itemsTotal: items.length\n })),\n () => [activity]\n )\n )(activity);\n};\n\nexport const stringifyDeltaValue = (delta: string | Record<string, DeltaValue[]> | DeltaValue | DeltaValue[]) => {\n if (isNil(delta)) {\n return '';\n } else if (typeof delta === 'string') {\n return delta;\n } else if (Array.isArray(delta)) {\n return delta.map(stringifyDeltaValue).join(', ');\n } else if (is(Object, delta)) {\n return 'value' in delta ? stringifyDeltaValue(delta.value) : stringifyDeltaValue(Object.values(delta));\n } else {\n return delta.toString();\n }\n};\n\nexport const getActivityLabel = (type: ActivityTypes) => {\n const labels = {\n [ActivityTypes.COMMENT_ADDED]: i18n.text('Comment added'),\n [ActivityTypes.COMMENT_DELETED]: i18n.text('Comment deleted'),\n [ActivityTypes.COMMENT_UPDATED]: i18n.text('Comment updated'),\n [ActivityTypes.ENTITIES_MERGED]: i18n.text('Profile merged'),\n [ActivityTypes.ENTITIES_MERGED_MANUALLY]: i18n.text('Profile merged manually'),\n [ActivityTypes.ENTITIES_MERGED_ON_THE_FLY]: i18n.text('Profile merged on the fly'),\n [ActivityTypes.ENTITIES_SPLITTED]: i18n.text('Profile un-merged'),\n [ActivityTypes.ENTITY_CHANGED]: i18n.text('Profile updated'),\n [ActivityTypes.ENTITY_CREATED]: i18n.text('Profile created'),\n [ActivityTypes.ENTITY_LOST_MERGE]: i18n.text('Profile lost merge'),\n [ActivityTypes.ENTITY_REMOVED]: i18n.text('Profile removed'),\n [ActivityTypes.GROUP_CHANGED]: i18n.text('Group updated'),\n [ActivityTypes.GROUP_CREATED]: i18n.text('Group created'),\n [ActivityTypes.GROUP_REMOVED]: i18n.text('Group removed'),\n [ActivityTypes.MODEL_UPDATED]: i18n.text('Model was updated'),\n [ActivityTypes.NOT_MATCHES_RESET]: i18n.text('Not matches reset'),\n [ActivityTypes.NOT_MATCHES_SET]: i18n.text('Not matches set'),\n [ActivityTypes.PERIODIC_TASK_SCHEDULED]: i18n.text('Periodic task was scheduled'),\n [ActivityTypes.POTENTIAL_MATCHES_FOUND]: i18n.text('Potential matches found'),\n [ActivityTypes.POTENTIAL_MATCHES_REMOVED]: i18n.text('Potential matches removed'),\n [ActivityTypes.RELATIONSHIP_CHANGED]: i18n.text('Relationship updated'),\n [ActivityTypes.RELATIONSHIP_CREATED]: i18n.text('Relationship created'),\n [ActivityTypes.RELATIONSHIP_REMOVED]: i18n.text('Relationship removed'),\n [ActivityTypes.USER_LOGIN]: i18n.text('Logged in'),\n [ActivityTypes.USER_LOGOUT]: i18n.text('Logged out'),\n [ActivityTypes.USER_PROFILE_VIEW]: i18n.text('Profile viewed'),\n [ActivityTypes.USER_SEARCH]: i18n.text('Searched'),\n [ActivityTypes.ANALYTICS_ATTRIBUTES_CHANGED]: i18n.text('Analytics attribute changed'),\n [ActivityTypes.SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE]: i18n.text('SFDC connector synchronization issue')\n };\n return labels[type] || '';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n dropdownIndicator: {\n transition: 'transform .15s ease'\n },\n inputRoot: {\n fontSize: '14px',\n height: 46\n },\n input: {\n padding: '0 12px 0'\n },\n dateOptionLabel: {\n minWidth: '100px'\n },\n paper: {\n minWidth: '112px'\n }\n});\n","import React, {useCallback, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {isNil} from 'ramda';\nimport {DataTypes, formatDataTypeValue} from '@reltio/mdm-sdk';\n\nimport {TextField as TextField} from '@material-ui/core';\nimport {Menu as Menu} from '@material-ui/core';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\nimport {useStyles} from './styles';\n\ntype DateValues = [Date, Date];\ntype Props = {\n values: DateValues;\n onChange: (values: DateValues) => void;\n onFocus?: () => void;\n};\n\nconst localeFormat = moment.localeData().longDateFormat('L');\n\nconst formatValue = (value: Date, placeholder: string) => {\n return isNil(value)\n ? `${placeholder}`\n : `${formatDataTypeValue({dataTypeDefinition: {type: DataTypes.TYPE_ACTIVENESS_DATE}}, value)}`;\n};\n\nconst CustomDateRangeEditor = ({values, onChange, onFocus}: Props) => {\n const placeholder = localeFormat;\n const inputRef = useRef(null);\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n\n const onApply = (values: DateValues) => {\n onChange(values);\n setOpen(false);\n };\n\n const handleToggle = useCallback(() => {\n setOpen((open) => !open);\n onFocus();\n }, [onFocus]);\n\n const onCancel = () => {\n setOpen(false);\n };\n\n return (\n <div className={styles.root}>\n <TextField\n fullWidth\n value={values.map((value) => formatValue(value, placeholder)).join(' \\u2014 ')}\n onClick={handleToggle}\n variant=\"filled\"\n ref={inputRef}\n InputProps={{\n endAdornment: (\n <DropdownIndicatorWithIconButton\n selectProps={{classes: styles, menuIsOpen: open}}\n innerProps={{}}\n />\n ),\n disableUnderline: isNil(values),\n readOnly: true,\n classes: {\n root: styles.inputRoot,\n input: styles.input\n }\n }}\n InputLabelProps={{\n shrink: false\n }}\n placeholder={i18n.text(`${placeholder} \\u2014 ${placeholder}`)}\n />\n <Menu\n variant=\"menu\"\n open={open}\n autoFocus={false}\n classes={{paper: styles.paper}}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n elevation={2}\n getContentAnchorEl={null}\n MenuListProps={{\n autoFocusItem: open,\n style: {width: '100%'}\n }}\n >\n <DateRangePicker\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values={values}\n onCancel={onCancel}\n onApply={onApply}\n type={DataTypes.TYPE_ACTIVENESS_DATE}\n />\n </Menu>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type ReltioGridLayoutItem = {\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n isStatic?: boolean;\n autosizing?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType: AttributeType;\n entityTypeUri: string;\n fieldName: string;\n groupName: string;\n title: string;\n uri: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n","import React from 'react';\nimport {AttributesView} from '@reltio/components';\nimport {AttributeViewConfig} from '../../types';\n\ntype ProfileAttributesViewProps = {\n config: AttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileAttributesView = ({className, config}: ProfileAttributesViewProps) => {\n return (\n <AttributesView\n className={className}\n caption={config.caption}\n excludeUris={config.excludeUris}\n includeUris={config.includeUris}\n attributesCount={config.attributesCount}\n pinnedAttributes={config.pinnedAttributes}\n />\n );\n};\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const SingleAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n showInactive?: boolean;\n toggleShowInactive?: (checked: boolean) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n attributeType: AttributeType;\n totalNonVisibleValues: number;\n nonVisibleValues: AttributeValue[];\n }>(null);\n\nSingleAttributeContext.displayName = 'SingleAttributeContext';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)',\n width: '36px'\n },\n popupContent: {\n paddingTop: '19px',\n paddingBottom: '23px',\n paddingLeft: '23px',\n paddingRight: '23px',\n maxWidth: '180px',\n width: '40%'\n },\n checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\n\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <Button ref={buttonRef} classes={{root: classnames(styles.triggerButton, className)}} onClick={togglePopup}>\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive}\n onChange={(e) => toggleShowInactive(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive values')}\n />\n </Popover>\n </>\n );\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n ovIcon: {\n marginTop: '2px',\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, HideOnShrink, ExpandableSearchInput, VerticalDivider, OvIcon} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n caption: string;\n totalVisibleValues: number;\n showInactiveValuesMenu: boolean;\n};\n\nexport const SingleAttributeHeader = ({caption, totalVisibleValues, showInactiveValuesMenu}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, setSearchQuery, setPage, totalNonVisibleValues, nonVisibleValues, attributeType} = useContext(\n SingleAttributeContext\n );\n\n const handleChangeSearchQuery = (query: string) => {\n setSearchQuery(query);\n setPage(0);\n };\n\n return (\n <FacetViewHeader title={i18n.text(caption)} className={styles.root}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {i18n.number(totalVisibleValues)}{' '}\n {totalVisibleValues === 1 ? i18n.text('item') : i18n.text('items')}\n </Typography>\n </HideOnShrink>\n {\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </FacetViewHeader>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 -16px 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px 8px 0'\n }\n}));\n","import {equals, filter, identity, is, lensPath, omit, over, pipe, unless} from 'ramda';\nimport {\n AttributeValue,\n cleanAttributesWith,\n Entity,\n findAttributeValuesByTypeUri,\n getAttributeSource,\n getLastUriPart,\n isOv,\n Metadata,\n utils\n} from '@reltio/mdm-sdk';\n\nexport const getAttributeNameFromAttributeUri = getLastUriPart;\n\nexport const search = (value: AttributeValue['value'], searchQuery: string) => {\n switch (typeof value) {\n case 'object':\n return Object.values(value).some((value: AttributeValue[]) => {\n return value.some(({value}) => {\n return search(value, searchQuery);\n });\n });\n default:\n return utils.strings.search(String(value), searchQuery);\n }\n};\n\ntype Config = {\n metadata: Metadata;\n entity: Entity;\n attributeTypeUri: string;\n defaultMaxValues?: number;\n offset?: number;\n searchQuery?: string;\n};\n\nexport const getPagedLocalEntity = async ({\n metadata,\n entity,\n attributeTypeUri,\n defaultMaxValues = Infinity,\n offset = 0,\n searchQuery = ''\n}: Config) => {\n const values = pipe(\n findAttributeValuesByTypeUri,\n filter(({value}) => search(value, searchQuery))\n )(metadata, entity, attributeTypeUri);\n const ovValues = filter(isOv, values);\n\n return {\n [getAttributeSource(attributeTypeUri)]: {\n [getAttributeNameFromAttributeUri(attributeTypeUri)]: ovValues.slice(offset, offset + defaultMaxValues),\n paging: {\n [attributeTypeUri]: {\n totalOvValues: ovValues.length,\n totalValues: values.length\n }\n }\n }\n };\n};\n\nexport const areValuesEqual = (value1: AttributeValue, value2: AttributeValue): boolean => {\n const cleanser =\n is(Object, value1.value) || is(Object, value2.value)\n ? over(\n lensPath(['value']),\n cleanAttributesWith({\n valueTransformer: unless(isOv, omit(['value'])),\n deleteEmptyComplex: true\n })\n )\n : identity;\n return equals(cleanser(value1), cleanser(value2));\n};\n","import React, {useCallback, useContext, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, cond, map, pathOr, pipe, prop, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport classnames from 'classnames';\nimport {CardinalityMessage, EditableAttribute, ErrorMessage, ViewIdContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n AttributeValue,\n checkCanCreateAttribute,\n createNewAttribute,\n Entity,\n getAttributeOwnError,\n getAttributePagerActiveTypeErrorMessage,\n getAttributeSource,\n isComplexAttribute,\n isEmptyValue,\n isOv,\n isTempUri,\n AttributeItem\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\nimport {areValuesEqual} from '../../../hooks/helpers';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n parentUri: string;\n showInactive: boolean;\n noDataText: string;\n};\n\nconst emptyArray = [];\n\nexport const SingleAttributeEditableContent = ({values, attributeType, parentUri, showInactive, noDataText}: Props) => {\n const styles = useStyles();\n\n const {uri: attributeTypeUri, required: isRequired, cardinality, name} = attributeType;\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, parentUri, attributeType)\n );\n const errorMessage = useSelector((state) =>\n getAttributePagerActiveTypeErrorMessage(parentUri, attributeType, mdmModule.selectors.getProfileErrors(state))\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n const attributeSource = getAttributeSource(attributeType);\n const entityValuesUris: string[] = pipe(pathOr(emptyArray, [attributeSource, name]), map(prop('uri')))(entity);\n const modifiedEntityValues: AttributeValue[] = pathOr(emptyArray, [attributeSource, name], modifiedEntity);\n const modifiedEntityValuesUris: string[] = modifiedEntityValues.map(prop('uri'));\n const showEmptyEditors = isTempUri(entity.uri);\n\n const emptyEditorValue = useRef<AttributeValue>(\n createNewAttribute({\n parentUri,\n attributeType\n })\n );\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = isRequired && isModifiedEntityValuesEmpty;\n\n const newValues = showEmpty\n ? [emptyEditorValue.current]\n : modifiedEntityValues.filter(pipe(prop('uri'), isTempUri));\n\n const onAddAttributes = useCallback(\n (params: AttributeItem[]) =>\n pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n const onAdd = useCallback(() => {\n const attribute: AttributeItem = {\n parentUri,\n attributeType\n };\n\n return onAddAttributes(\n showEmpty && !isComplexAttribute(attributeType.type) ? [attribute, attribute] : [attribute]\n );\n }, [onAddAttributes, parentUri, attributeType, showEmpty]);\n\n const canCreate = checkCanCreateAttribute({attributeType, mode});\n\n const commonProps = {\n attributeType: attributeType,\n errors,\n crosswalks: modifiedEntity.crosswalks,\n mode,\n onAddAttributes,\n onChangeAttribute,\n onDeactivateError,\n showNonOv: showInactive\n };\n const isEmptyAttributeList = newValues.length === 0 && values.length === 0;\n return (\n <div>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {newValues.map((value, idx) => (\n <EditableAttribute\n key={value.uri}\n {...commonProps}\n attributeValue={value}\n lazy={showEmpty && !isRequired}\n showEmptyEditors={showEmptyEditors}\n ownError={getAttributeOwnError(value, idx, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n />\n ))}\n {newValues.length > 0 && values.length > 0 && <Divider className={styles.divider} />}\n {values.map((originalValue) => {\n const modifiedEntityValue = modifiedEntityValues.find(propEq('uri', originalValue.uri));\n const value = modifiedEntityValue || originalValue;\n const deleted = entityValuesUris.includes(value.uri) && !modifiedEntityValuesUris.includes(value.uri);\n const edited = !deleted && modifiedEntityValue && !areValuesEqual(modifiedEntityValue, originalValue);\n const state = cond([\n [always(deleted), always('deleted')],\n [always(edited), always('edited')]\n ])();\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <EditableAttribute\n {...commonProps}\n attributeValue={value}\n ownError={getAttributeOwnError(value, null, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n state={state}\n />\n </div>\n );\n })}\n {isEmptyAttributeList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n ovFalse: theme.inactive\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {ReadOnlyAttribute} from '@reltio/components';\nimport {AttributeType, AttributeValue, isOv} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n showInactive: boolean;\n};\n\nexport const SingleAttributeReadableContent = ({values, attributeType, showInactive}: Props) => {\n const styles = useStyles();\n\n return (\n <>\n {values.map((value) => {\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <ReadOnlyAttribute\n attributeValue={value}\n attributeType={attributeType}\n showNonOv={showInactive}\n />\n </div>\n );\n })}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {PivotingAttribute} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, LinearLoadIndicator, PivotingAttributeContext} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeViewConfig} from '../../../../types';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport {SingleAttributeEditableContent} from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const SingleAttributeView = ({config, className}: Props) => {\n const {caption, max, showInactiveValuesMenu} = config;\n\n const styles = useStyles();\n\n const {values, totalVisibleValues, page, setPage, isLoading, hasPaging, attributeType, showInactive} = useContext(\n SingleAttributeContext\n );\n\n const entityUri = useSelector(mdm.selectors.getEntityUri);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const hasValues = values.length !== 0;\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const renderContent = () => {\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (attributeType) {\n if (isViewMode && hasValues) {\n const props = {\n values,\n attributeType,\n showInactive\n };\n return <SingleAttributeReadableContent {...props} />;\n } else if (isEditableMode) {\n const props = {\n values,\n attributeType,\n parentUri: entityUri,\n showInactive,\n noDataText\n };\n return <SingleAttributeEditableContent {...props} />;\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n\n return (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={classnames(styles.root, className)}>\n <SingleAttributeHeader\n totalVisibleValues={totalVisibleValues}\n caption={caption}\n showInactiveValuesMenu={showInactiveValuesMenu}\n />\n <Box className={styles.content}>{renderContent()}</Box>\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n page={page}\n rowsPerPage={max}\n rowsPerPageOptions={[]}\n onChangePage={setPage}\n classes={{root: styles.pagination}}\n />\n )}\n </BasicView>\n </PivotingAttributeContext.Provider>\n );\n};\n","import {useCallback, useState, useEffect, useMemo, useRef} from 'react';\nimport {ifElse, prop, always, has, pathOr, path, partition, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n isDataTenantEntity,\n getPagedEntity,\n getAttributeSource,\n AttributeValue,\n SearchFilter,\n findAttributeTypeByUri,\n isReadableAttribute,\n isTempUri,\n isOv,\n findAttributeValues,\n isFirstLevelAttributeUri\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useSafePromise, useDidUpdateEffect} from '@reltio/components';\nimport {getPagedLocalEntity, getAttributeNameFromAttributeUri} from './helpers';\nimport {SingleAttributeViewConfig} from '../../types';\n\ntype Params = {\n filters?: SearchFilter[];\n searchQuery?: string;\n sorting?: {\n field: string;\n order: string;\n };\n page: number;\n showInactive: boolean;\n};\n\nexport const useSingleAttributeLoader = (\n config: SingleAttributeViewConfig,\n params: Params,\n canShowHistoryDiff: boolean\n) => {\n const {attributeUri, max = 15} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const [values, setValues] = useState([]);\n const [paging, setPaging] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n const attributeValuesRef = useRef<AttributeValue[]>(null);\n\n const dispatch = useDispatch();\n const apiPath = useSelector(mdm.selectors.getApiPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n const entitySelector = canShowHistoryDiff ? mdm.selectors.getEntityWithDiff : mdm.selectors.getEntityWithoutDiff;\n const entity = useSelector(entitySelector);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const diff = useSelector(mdm.selectors.getHistoryDiff);\n\n const parentUri = entity.uri;\n const attributeTypeName = getAttributeNameFromAttributeUri(attributeUri);\n const attributeTypeSource = getAttributeSource(attributeUri);\n attributeValuesRef.current = findAttributeValues(entity, parentUri, attributeTypeName);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const {globalFilter} = useSelector(mdm.selectors.getGlobalSearchRequestOptions);\n const {showInactive} = params;\n const loadAttributes = useCallback(() => {\n if (\n attributeType &&\n isReadableAttribute(attributeType) &&\n !isTempUri(parentUri) &&\n isFirstLevelAttributeUri(attributeUri)\n ) {\n setIsLoading(true);\n const {page, showInactive, ...rest} = params;\n const request = isDataTenantEntity(entity) || isHistoryModeEnabled ? getPagedLocalEntity : getPagedEntity;\n safePromise(\n request({\n metadata,\n entity,\n apiPath,\n tenant,\n parentUri,\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n globalFilter,\n options: showInactive ? '' : undefined,\n ...rest\n })\n )\n .then((response) => {\n const attributes = path([attributeTypeSource], response);\n const values: AttributeValue[] = pathOr([], [attributeTypeName], attributes);\n if (!isHistoryModeEnabled) {\n dispatch(\n profile.actions.processNextPageOfAttributeValues({\n parentUri,\n attributeTypeUri: attributeUri,\n attributeTypeName,\n values\n })\n );\n }\n setValues(\n values.map((loadedValue) => {\n const valueFromEntity = attributeValuesRef.current?.find(propEq('uri', loadedValue.uri));\n return valueFromEntity || loadedValue;\n })\n );\n setPaging(path(['paging', attributeUri], attributes));\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setValues([]);\n setPaging(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n apiPath,\n parentUri,\n tenant,\n attributeUri,\n max,\n metadata,\n params,\n globalFilter,\n attributeType,\n isHistoryModeEnabled,\n diff\n ]);\n\n useEffect(() => {\n loadAttributes();\n }, [loadAttributes]);\n\n useDidUpdateEffect(() => {\n if (isViewMode) {\n loadAttributes();\n }\n }, [isViewMode]);\n const partitionByOv = partition(isOv);\n const [, nonOvValues] = partitionByOv(attributeValuesRef.current || []);\n const nonVisibleValues = showInactive ? [] : nonOvValues;\n const totalProp = showInactive ? 'totalValues' : 'totalOvValues';\n const totalVisibleValues = ifElse(has(totalProp), prop(totalProp), always(values.length))(paging);\n const hasPaging = max < totalVisibleValues;\n const totalNonVisibleValues = paging?.totalValues\n ? paging.totalValues - totalVisibleValues\n : nonVisibleValues.length;\n return {\n values,\n isLoading,\n hasPaging,\n totalVisibleValues,\n attributeType,\n totalNonVisibleValues,\n nonVisibleValues\n };\n};\n","import React from 'react';\nimport {RelationsViewState} from '../hooks/useRelationsState';\n\nexport const RelationsViewStateContext = React.createContext<RelationsViewState>(null);\n\nRelationsViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n button: {\n color: theme.palette.text.secondary,\n width: '36px',\n minWidth: '36px'\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n backgroundColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '13px 16px',\n fontSize: '0.85rem'\n },\n sortSelectorMenuItem: {\n fontSize: '0.85rem'\n },\n sortOrderButton: {\n flexShrink: 0,\n margin: '0 8px 0 7px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {DropDownEditor, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {Button as Button} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport {RelationsViewStateContext} from '../../../contexts/RelationsViewStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const {\n showInactive,\n toggleShowInactive,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions\n } = useContext(RelationsViewStateContext);\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n const hasSortOptions = !isEmptyValue(sortOptions);\n\n const isAsc = sortOrder === 'asc';\n\n return (\n <>\n <Button\n ref={buttonRef}\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={toggleShowInactive}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n {hasSortOptions && (\n <>\n <Divider className={styles.divider} />\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={sortOptions}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortOption}\n onChange={changeSortOption}\n MenuProps={{\n getContentAnchorEl: null,\n anchorOrigin: {vertical: 'bottom', horizontal: 'left'}\n }}\n />\n <SmallIconButtonWithTooltip\n tooltipTitle={isAsc ? i18n.text('Ascending') : i18n.text('Descending')}\n icon={isAsc ? ArrowUpwardIcon : ArrowDownwardIcon}\n onClick={toggleSortOrder}\n className={styles.sortOrderButton}\n size=\"L\"\n />\n </div>\n </>\n )}\n </Popover>\n </>\n );\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 6px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n }\n});\n","import React from 'react';\nimport {RelationsViewConfig} from '../../../types';\n\nexport const ImportDTContext = React.createContext<{\n reloadRelations: () => void;\n config: Pick<RelationsViewConfig, 'content' | 'importFromDT' | 'maxDtssImport'>;\n }>(null);\n","import {useSelector, useDispatch} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {useCallback, useContext, useEffect, useState} from 'react';\nimport {getRequestErrorMessage, hasNonImportedRelations, importDTConnections, isTempUri} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {ImportDTContext} from '../../../../contexts/ImportDTContext';\nimport i18n from 'ui-i18n';\n\nconst MAX = Math.pow(2, 31) - 1;\ntype Tenant = {id: string; label: string};\n\nexport const useImportFromDTLoader = () => {\n const dataTenants: Array<Tenant> = useSelector(mdmModule.selectors.getDataTenants);\n const dispatch = useDispatch();\n const {config, reloadRelations} = useContext(ImportDTContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const [tenants, setTenants] = useState<Array<Tenant>>([]);\n const [selectedTenant, setSelectedTenant] = useState<Tenant>(null);\n const dtssPath = useSelector(mdmModule.selectors.getDtssPath);\n const customerTenant = useSelector(mdmModule.selectors.getTenant);\n const content = [{...config.content, offset: 0, max: config.maxDtssImport ?? MAX}];\n\n const checkHasNonImportedConnections = useCallback(() => {\n setTenants([]);\n if (config.importFromDT && !isTempUri(entityUri)) {\n Promise.all(\n (dataTenants || []).map((tenant) =>\n hasNonImportedRelations({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: tenant.id\n }).then(({hasNonImportedConnections}) => ({\n ...tenant,\n hasNonImportedConnections\n }))\n )\n )\n .then((modifiedTenants) => modifiedTenants.filter((tenant) => tenant.hasNonImportedConnections))\n .then(setTenants);\n }\n }, [entityUri, dtssPath, customerTenant, config, dataTenants]);\n\n const onConfirmImport = useCallback(() => {\n importDTConnections({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: selectedTenant.id\n })\n .then(() => {\n reloadRelations();\n checkHasNonImportedConnections();\n })\n .catch((error) =>\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))))\n );\n setSelectedTenant(null);\n }, [\n entityUri,\n dtssPath,\n customerTenant,\n config,\n checkHasNonImportedConnections,\n reloadRelations,\n selectedTenant,\n setSelectedTenant\n ]);\n\n useEffect(() => {\n checkHasNonImportedConnections();\n }, [checkHasNonImportedConnections]);\n const onCancelConfirmation = useCallback(() => setSelectedTenant(null), []);\n const onImportClick = useCallback((tenant: Tenant) => setSelectedTenant(tenant), []);\n return {\n tenants,\n selectedTenant,\n onConfirmImport,\n onCancelConfirmation,\n onImportClick\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tenant: {\n backgroundColor: '#0000EE',\n cursor: 'pointer',\n position: 'absolute',\n top: '8px',\n left: '22px',\n width: '10px',\n height: '10px',\n color: 'white',\n fontSize: '10px',\n fontWeight: 'bold',\n userSelect: 'text',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n button: {\n position: 'relative'\n },\n badge: {\n fontSize: '10px',\n height: '14px',\n minWidth: '14px',\n width: '14px',\n fontWeight: 'bold',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px',\n top: '4px'\n }\n}));\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {Badge as Badge} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ninterface Props {\n label: number | string;\n}\n\nexport const MultipleImportIcon = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Badge\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n badgeContent={label}\n >\n <CloudDownloadIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {useImportFromDTLoader} from './hooks/useImportFromDTLoader';\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {ConfirmationDialog} from '@reltio/components';\nimport {MultipleImportIcon} from './MultipleImportIcon';\n\nexport const ImportFromDT = () => {\n const {tenants, selectedTenant, onConfirmImport, onCancelConfirmation, onImportClick} = useImportFromDTLoader();\n const styles = useStyles();\n const oneTenant = tenants.length === 1;\n const labelOnButton = oneTenant\n ? tenants[0].label.indexOf('DT:') === 0\n ? tenants[0].label[3]\n : tenants[0].label[0]\n : tenants.length;\n return (\n <>\n {!!tenants.length && (\n <>\n {oneTenant ? (\n <div className={styles.button}>\n <SmallIconButtonWithTooltip\n size={'L'}\n icon={CloudDownloadIcon}\n tooltipTitle={i18n.text('Import connections from ${label}', {label: tenants[0].label})}\n onClick={() => onImportClick(tenants[0])}\n />\n <div className={classnames(styles.tenant)}>{labelOnButton}</div>\n </div>\n ) : (\n <DropDownMenuButton\n menuId={'importDT-table-actions'}\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n tooltipTitle: i18n.text('Import connections'),\n size: 'L',\n // eslint-disable-next-line react/display-name\n icon: () => <MultipleImportIcon label={labelOnButton} />\n }}\n menuItems={tenants.map((tenant) => ({\n onClick: () => {\n onImportClick(tenant);\n },\n text: tenant.label\n }))}\n />\n )}\n <ConfirmationDialog\n open={!!selectedTenant}\n title={i18n.text('Confirmation')}\n content={i18n.text('Import connections from ${label}?', {label: selectedTenant?.label})}\n discardCaption={i18n.text('Cancel')}\n saveCaption={i18n.text('Import')}\n onDiscard={onCancelConfirmation}\n onSave={onConfirmImport}\n />\n </>\n )}\n </>\n );\n};\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, FacetViewHeader, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport FilterButton from './FilterButton/FilterButton';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {useStyles} from './styles';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n return (\n <FacetViewHeader title={title || ''} className={styles.header}>\n {total > 0 && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} items', {count: total})\n : i18n.text('${count} item', {count: total})}\n </Typography>\n </HideOnShrink>\n )}\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </FacetViewHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltip: theme.tooltip,\n tooltipContent: {\n minWidth: '165px',\n padding: '4px 2px 2px'\n },\n label: {\n fontSize: '11px',\n lineHeight: '13px',\n fontWeight: 500,\n margin: 0,\n color: 'white'\n },\n secondaryLabel: {\n color: 'rgba(255, 255, 255, 0.7)',\n fontSize: '10px',\n marginTop: '4px',\n fontWeight: 500,\n lineHeight: '11px'\n },\n progress: {\n marginTop: '4px',\n color: '#FFFFFF'\n }\n}));\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {isNil, ifElse} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ConnectionEntity,\n getDataTenantEntitySecondaryLabel,\n getEntitySecondaryLabel,\n isDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst PROGRESS_ICON_SIZE = 16;\n\ntype Props = {\n label: string;\n entity?: ConnectionEntity;\n children: React.ReactElement;\n};\n\nconst RelationTooltip = ({label, entity, children, ...tooltipProps}: Props) => {\n const styles = useStyles();\n const safePromise = useSafePromise();\n const tenant = useSelector(mdm.selectors.getTenant);\n const dtssPath = useSelector(mdm.selectors.getDtssPath) as string;\n const [isLoading, setIsLoading] = useState(false);\n const [secondaryLabel, setSecondaryLabel] = useState<string>(null);\n\n useEffect(() => {\n setSecondaryLabel(null);\n }, [entity]);\n\n const onOpen = useCallback(() => {\n if (entity?.entityUri && isNil(secondaryLabel)) {\n const request = ifElse(\n isDataTenantEntity,\n (entity: ConnectionEntity) =>\n getDataTenantEntitySecondaryLabel({\n entityUri: entity.entityUri,\n dataTenant: entity.dataTenant,\n customerTenant: tenant,\n dtssPath\n }),\n (entity: ConnectionEntity) => getEntitySecondaryLabel(entity.entityUri)\n );\n\n setIsLoading(true);\n safePromise(request(entity))\n .then(({secondaryLabel}) => {\n setSecondaryLabel(secondaryLabel);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [dtssPath, entity, tenant, safePromise, secondaryLabel]);\n\n const tooltipContent = (\n <div className={styles.tooltipContent}>\n <div className={styles.label}>{label}</div>\n {isLoading && <CircularProgress size={PROGRESS_ICON_SIZE} classes={{colorPrimary: styles.progress}} />}\n {secondaryLabel && <div className={styles.secondaryLabel}>{secondaryLabel}</div>}\n </div>\n );\n\n return (\n <Tooltip\n onOpen={onOpen}\n title={tooltipContent}\n disableFocusListener\n classes={{tooltip: styles.tooltip}}\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default RelationTooltip;\n","import {\n Connection,\n Metadata,\n getEntityType,\n getLabel,\n getEntityUriForLink,\n getRelationTypeLabelFromMetadata\n} from '@reltio/mdm-sdk';\n\nexport const useRelationInfo = (connection: Connection, metadata: Metadata) => {\n const {entity, relation} = connection;\n const entityType = getEntityType(metadata, entity?.entityType) as string;\n const entityLabel = getLabel(entity?.entityLabel) as string;\n const preparedUri = getEntityUriForLink({uri: entity?.entityUri, dataTenant: entity?.dataTenant}) as string;\n const relationLabel =\n relation?.relationLabel || (getRelationTypeLabelFromMetadata(metadata, relation?.relationType) as string);\n\n return {\n entityType,\n entityLabel,\n preparedUri,\n relationLabel\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button, {ButtonProps} from '@material-ui/core/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n acceptRelation: () => void;\n ignoreRelation: () => void;\n};\n\nexport const SuggestedButtons = ({acceptRelation, ignoreRelation, ...props}: Props & ButtonProps) => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Button onClick={acceptRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Accept')}\n </Button>\n <Button onClick={ignoreRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Ignore')}\n </Button>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n\n marginBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '24px',\n padding: '0 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n editButtonsContent: {\n marginLeft: 'auto',\n flex: '0 0 40px'\n },\n editButtons: {\n padding: 0\n },\n removed: {\n color: theme.palette.text.secondary,\n textDecoration: 'line-through'\n },\n editedLabel: {\n fontStyle: 'italic',\n color: theme.palette.text.secondary,\n margin: '0 5px'\n }\n}));\n","import React, {memo, useCallback} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {Connection, Metadata, isActiveObject, Mode, checkRemoved, checkEdited, checkIgnored} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, EntityUriLink, SmallIconButtonWithTooltip} from '@reltio/components';\nimport RelationTooltip from '../RelationTooltip/RelationTooltip';\nimport {useRelationInfo} from '../../hooks/useRelationInfo';\nimport {checkRelationPermission} from '../../helpers/permissions';\nimport {SuggestedButtons} from '../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n onRemoveRelation: (relationUri: string) => void;\n onEditRelation: (connection: Connection) => void;\n onAcceptRelation?: (connection: Connection) => void;\n onIgnoreRelation?: (connection: Connection) => void;\n metadata: Metadata;\n showControls: boolean;\n renderRelationArrowButton?: () => React.ReactNode;\n};\n\nconst EditableRelationItem = memo(\n ({\n connection,\n metadata,\n showControls,\n onRemoveRelation,\n onEditRelation,\n onAcceptRelation,\n onIgnoreRelation,\n renderRelationArrowButton\n }: Props) => {\n const styles = useStyles();\n\n const {entity, relation} = connection;\n const removed = checkRemoved(connection);\n const edited = checkEdited(connection);\n const ignored = checkIgnored(connection);\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode: Mode.Editing,\n onRemoveRelation,\n onEditRelation,\n metadata,\n connection\n });\n\n const handleRemoveRelation = useCallback(() => onRemoveRelation(connection.relation.relationUri), [\n onRemoveRelation,\n connection\n ]);\n\n const handleEditRelation = useCallback(() => onEditRelation(connection), [onEditRelation, connection]);\n\n const handleAcceptRelation = useCallback(() => {\n onAcceptRelation(connection);\n }, [onAcceptRelation, connection]);\n\n const handleIgnoreRelation = useCallback(() => onIgnoreRelation(connection), [onIgnoreRelation, connection]);\n\n const editButtonsContent =\n (canRemove || canUpdate) && showControls && !connection.suggested ? (\n <>\n {canUpdate && (\n <SmallIconButtonWithTooltip\n icon={EditIcon}\n size=\"XS\"\n onClick={handleEditRelation}\n tooltipTitle={i18n.text('Edit')}\n />\n )}\n {canRemove && (\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size=\"XS\"\n onClick={handleRemoveRelation}\n tooltipTitle={i18n.text('Remove')}\n />\n )}\n </>\n ) : undefined;\n\n const suggustedButtonsContent = connection.suggested ? (\n <SuggestedButtons\n acceptRelation={handleAcceptRelation}\n ignoreRelation={handleIgnoreRelation}\n size=\"small\"\n disabled={ignored}\n />\n ) : undefined;\n const captionText = ignored ? i18n.text('ignored') : i18n.text('edited');\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.removed]: removed || ignored}\n )}\n >\n <div className={styles.row}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {(edited || ignored) && (\n <Typography variant=\"caption\" className={styles.editedLabel}>\n ({captionText})\n </Typography>\n )}\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n\n <div className={styles.editButtonsContent}>{editButtonsContent}</div>\n {suggustedButtonsContent}\n </div>\n </div>\n );\n }\n);\n\nEditableRelationItem.displayName = 'EditableRelationItem';\n\nexport default EditableRelationItem;\n","import {checkMetadataForDelete, checkMetadataForUpdate, checkRemoved, getRelationType, Mode} from '@reltio/mdm-sdk';\n\nexport const checkRelationPermission = ({metadata, mode, connection, onRemoveRelation, onEditRelation}) => {\n const isEditableMode = mode === Mode.Editing || mode === Mode.Suggesting;\n if (isEditableMode && connection) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n","import {Directions, wrapInArrayIfNeeded, InOutRelation} from '@reltio/mdm-sdk';\n\nexport const getFirstRelationTypeObject = (inRelations: InOutRelation, outRelations: InOutRelation) => {\n const prepareRelation = (direction, relations) => {\n const relationsArr = relations ? wrapInArrayIfNeeded(relations) : [];\n return relationsArr.map((relation) => ({\n type: relation,\n direction: direction === Directions.IN ? Directions.IN : Directions.OUT\n }));\n };\n return prepareRelation(Directions.IN, inRelations).concat(prepareRelation(Directions.OUT, outRelations))[0];\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {checkNew, Connection} from '@reltio/mdm-sdk';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n connection: Connection;\n config: RelationsViewConfig;\n showSecondLevel: boolean;\n};\n\nexport const RelationArrowButton = ({onClick, connection, config, showSecondLevel}: Props) => {\n const styles = useStyles();\n const {parentEntityUri} = connection;\n const {contentSecondLevel} = config;\n\n const props = {\n onClick,\n className: styles.arrowIcon\n };\n\n if (parentEntityUri || !contentSecondLevel || checkNew(connection)) {\n return null;\n }\n\n return showSecondLevel ? <ArrowDropDownIcon {...props} /> : <ArrowRightIcon {...props} />;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n row: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n secondLevelContent: {\n paddingLeft: '24px'\n }\n});\n","import React, {useContext, useMemo} from 'react';\nimport {Connection, ActivityFilter, getEntitiesMapForConnections} from '@reltio/mdm-sdk';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useSecondLevelConnections} from '../../hooks/useSecondLevelConnections';\nimport {RelationArrowButton} from '../RelationArrowButton/RelationArrowButton';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {useStyles} from './styles';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {EntitiesMapContext} from '@reltio/components';\n\ntype Props = {\n config: RelationsViewConfig;\n connection: Connection;\n children: (render: () => React.ReactNode) => React.ReactNode;\n};\n\nexport const SecondLevelWrapper = ({config, connection, children}: Props) => {\n const styles = useStyles();\n\n const {showInactive} = useContext(RelationsViewStateContext);\n\n const {\n connections,\n showSecondLevel,\n toggleShowSecondLevel,\n loadRelations,\n loading,\n total\n } = useSecondLevelConnections({\n config,\n connection,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const renderRelationArrowButton = () => {\n return (\n <RelationArrowButton\n onClick={toggleShowSecondLevel}\n connection={connection}\n config={config}\n showSecondLevel={showSecondLevel}\n />\n );\n };\n\n return (\n <>\n {children(renderRelationArrowButton)}\n {showSecondLevel && (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <div className={styles.secondLevelContent}>\n <RelationsContent\n isLoading={loading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n parentEntityUri={connection.entity.entityUri}\n />\n </div>\n </EntitiesMapContext.Provider>\n )}\n </>\n );\n};\n","import {useState, useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Connection, getRelationsForEntity, ActivityFilter, GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationsViewConfig} from '../../../types';\n\ntype Params = {\n config: RelationsViewConfig;\n connection: Connection;\n relationActivityFilter: ActivityFilter;\n};\n\nexport const useSecondLevelConnections = ({config, connection, relationActivityFilter}: Params) => {\n const dispatch = useDispatch();\n\n const [showSecondLevel, setShowSecondLevel] = useState(false);\n const [loading, setLoading] = useState(false);\n const [total, setTotal] = useState(0);\n\n const {contentSecondLevel} = config;\n const {entity} = connection;\n\n const connections =\n (useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id, entity.entityUri)\n ) as Connection[]) || [];\n\n const {activityFilter}: GlobalSearchRequestOptions =\n useSelector(mdmModule.selectors.getGlobalSearchRequestOptions) || {};\n\n const loadRelations = useCallback(() => {\n const requestConfig = {\n ...contentSecondLevel,\n returnObjects: true,\n returnDates: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n }\n };\n\n setLoading(true);\n\n getRelationsForEntity(entity.entityUri, [requestConfig]).then((response) => {\n const {connections, total} = response[0];\n\n if (connections) {\n dispatch(\n profile.relations.actions.secondLevelRelationsLoaded({\n connections,\n parentEntityUri: entity.entityUri,\n id: config.id\n })\n );\n }\n\n setTotal(total);\n setLoading(false);\n });\n }, [config.id, contentSecondLevel, dispatch, entity.entityUri, activityFilter, relationActivityFilter]);\n\n const toggleShowSecondLevel = useCallback(() => {\n if (!showSecondLevel && !connection.connections) {\n loadRelations();\n }\n\n setShowSecondLevel((show) => !show);\n }, [loadRelations, connection.connections, showSecondLevel]);\n\n return {connections, showSecondLevel, toggleShowSecondLevel, loadRelations, loading, total};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '16px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 0 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, partition, evolve, always, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Connection, isTempUri, Mode, createNewConnectionWithDefaultRelationType, checkNew} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationEditor} from '@reltio/components';\nimport EditableRelationItem from '../EditableRelationItem/EditableRelationItem';\nimport {RelationsViewConfig} from '../../../../types';\nimport {getFirstRelationTypeObject} from '../../helpers/relation';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\nimport {useStyles} from './styles';\n\nexport type Props = {\n className?: string;\n noDataText: string;\n connections: Array<Connection>;\n config: RelationsViewConfig;\n mode: Mode;\n parentEntityUri?: string;\n};\n\nconst RelationsEditableContent = ({className, connections = [], config, mode, noDataText, parentEntityUri}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const entity = useSelector(mdmModule.selectors.getEntity);\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const dispatch = useDispatch();\n const styles = useStyles();\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({config, mode, metadata, parentEntityUri});\n pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch, parentEntityUri]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n dispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n dispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n const content = config.content;\n const defaultRelationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const onAcceptRelation = useCallback(\n (connection) => {\n const connectionWithDefaultRelationType = pipe(\n omit(['suggested']),\n evolve({\n relation: {\n relationType: always(defaultRelationTypeObject.type),\n object: evolve({type: always(defaultRelationTypeObject.type), attributes: always(null)})\n }\n })\n )(connection);\n dispatch(profile.relations.actions.addRelation(config.id, connectionWithDefaultRelationType));\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const onIgnoreRelation = useCallback(\n (connection) => {\n dispatch(\n profile.relations.actions.ignoreRelation(config.id, {\n relationType: defaultRelationTypeObject.type,\n relationDirection: defaultRelationTypeObject.direction,\n entityUri: connection.entity.entityUri,\n relationUri: connection.relation.relationUri\n })\n );\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const [newConnections, currentConnections] = partition(checkNew, connections);\n const canAddRelations = entity && checkIfCanAddRelations;\n\n const isEmptyRelationList = newConnections.length === 0 && currentConnections.length === 0;\n\n const getRelationEditableContent = (connection: Connection) => {\n const openedRelation = relationsToEdit.find(\n (openedRelation) => openedRelation?.relation?.relationUri === connection?.relation?.relationUri\n );\n const showControls = !config.allowOnlyCreateNew || checkNew(connection);\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n return openedRelation ? (\n <RelationEditor connection={openedRelation} config={config} mode={mode} metadata={metadata} />\n ) : (\n <EditableRelationItem\n renderRelationArrowButton={renderRelationArrowButton}\n connection={connection}\n metadata={metadata}\n showControls={showControls}\n onRemoveRelation={onRemoveRelation}\n onEditRelation={pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)}\n onAcceptRelation={onAcceptRelation}\n onIgnoreRelation={onIgnoreRelation}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n };\n\n const shouldShowAddRelationButton =\n canAddRelations && (!relationToAdd || (relationToAdd && relationToAdd.parentEntityUri === parentEntityUri));\n\n const shouldShowRelationEditorToAdd = relationToAdd && relationToAdd.parentEntityUri === parentEntityUri;\n\n return (\n <div className={className}>\n {shouldShowAddRelationButton && (\n <Button color=\"primary\" onClick={onAddRelation} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {shouldShowRelationEditorToAdd && (\n <RelationEditor connection={relationToAdd} config={config} mode={mode} metadata={metadata} />\n )}\n {newConnections.map(getRelationEditableContent)}\n {newConnections.length > 0 && currentConnections.length > 0 && <Divider className={styles.divider} />}\n {currentConnections.map(getRelationEditableContent)}\n {isEmptyRelationList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n attributesList: {\n paddingLeft: '46px',\n paddingRight: '16px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n }\n}));\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n CollaborationObjectTypes,\n Connection,\n createRelatedObjectUris,\n Entity,\n getActivenessAttributes,\n getAttributesListForReadMode,\n getAttributeValuesUris,\n getRelationAttributesList,\n isEmptyValue,\n Metadata\n} from '@reltio/mdm-sdk';\nimport {CollaborationContext, ReadOnlyAttributesList, RelatedObjectUrisContext} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {isEmpty} from 'ramda';\n\ntype Props = {\n connection: Connection;\n className?: string;\n};\n\nexport const RelationAttributes = ({connection, className}: Props) => {\n const styles = useStyles();\n\n const {relation} = connection;\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relation?.relationType) as AttributeType[],\n [relation?.relationType, metadata]\n );\n\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...profile.relations.selectors.getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection?.relation || {})\n }),\n [connection]\n );\n\n const attributesList = useMemo(\n () => getAttributesListForReadMode(firstLevelRelationAttrTypes, attributeListEntity as Entity),\n [firstLevelRelationAttrTypes, attributeListEntity]\n );\n\n const showAttributesList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n const objectIds = useMemo(() => getAttributeValuesUris(attributeListEntity.attributes), [attributeListEntity]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n !isEmpty(objectIds) && getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const additionalRelatedObjectUris = useMemo(\n () => createRelatedObjectUris(CollaborationObjectTypes.RELATION, {entityUri: currentEntityUri, connection}),\n [connection, currentEntityUri]\n );\n\n return showAttributesList ? (\n <RelatedObjectUrisContext.Provider value={additionalRelatedObjectUris}>\n <ReadOnlyAttributesList\n className={classnames(styles.attributesList, className)}\n entity={attributeListEntity}\n attrTypes={firstLevelRelationAttrTypes}\n />\n </RelatedObjectUrisContext.Provider>\n ) : (\n <div className={classnames(styles.attributesList, className)}>{i18n.text('No attributes')}</div>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport InfoIconSelected from '@material-ui/icons/InfoRounded';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\ntype Props = {\n show: boolean;\n onToggle: () => void;\n className?: string;\n};\n\nexport const ShowDetailsButton = ({show, onToggle, className}: Props) => {\n return (\n <SmallIconButtonWithTooltip\n className={className}\n tooltipTitle={\n show\n ? i18n.text('Hide attributes of the relationship')\n : i18n.text('Show attributes of the relationship')\n }\n tooltipPlacement=\"bottom-end\"\n size=\"XXS\"\n icon={show ? InfoIconSelected : InfoIcon}\n onClick={onToggle}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string; suggested: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '16px',\n padding: '3px 11px 3px 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n wordBreak: 'break-all',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n showDetails: {\n marginLeft: 'auto',\n paddingRight: '5px'\n },\n attributesList: {\n paddingLeft: '46px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n },\n suggestedWrapper: {\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n marginLeft: 'auto',\n alignItems: 'center',\n '& + $showDetails': {\n marginLeft: '4px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n },\n labelWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n}));\n","import React, {memo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n Connection,\n Metadata,\n isActiveObject,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {useStyles} from './styles';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\n\ntype Props = {\n connection: Connection;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nconst RelationItem = memo(({connection, renderRelationArrowButton, acceptRelation, ignoreRelation}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n const {entity, relation} = connection;\n const [showDetails, setShowDetails] = useState(false);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.suggestedWrapper]: isSuggested}\n )}\n >\n <div className={classnames(styles.row, COMMENTS_CONTAINER_VISIBILITY_AREA)}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <div className={styles.labelWrapper}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n </div>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n size=\"small\"\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetails}\n />\n )}\n </div>\n </div>\n {showDetails && <RelationAttributes connection={connection} />}\n </div>\n );\n});\n\nRelationItem.displayName = 'RelationItem';\n\nexport default RelationItem;\n","import {pluck, mean, pipe, defaultTo} from 'ramda';\nimport {Rating} from '@reltio/mdm-sdk';\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n return pipe(pluck('value'), mean, defaultTo(0))(ratings);\n};\n\nexport const getCountOfLikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 5).length;\n};\n\nexport const getCountOfDislikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 1).length;\n};\n\nexport const calcWidthOfLikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfLikes(ratings) / ratings.length) * 100 + '%';\n};\n\nexport const calcWidthOfDislikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfDislikes(ratings) / ratings.length) * 100 + '%';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end'\n },\n averageRating: {\n marginBottom: '7px',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '19px',\n color: theme.palette.text.primary\n },\n scale: {\n display: 'flex',\n marginBottom: '6px',\n width: '128px',\n height: '4px'\n },\n likesScale: {\n height: '100%',\n backgroundColor: '#8CC152'\n },\n dislikesScale: {\n height: '100%',\n backgroundColor: 'rgb(255, 112, 112)'\n },\n counts: {\n display: 'flex'\n },\n likesCount: {\n marginRight: '32px'\n },\n count: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n icon: {\n marginRight: '4px',\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.38)'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbDownIcon from '@material-ui/icons/ThumbDown';\nimport {\n calcAverageRating,\n calcWidthOfDislikesScale,\n calcWidthOfLikesScale,\n getCountOfDislikes,\n getCountOfLikes\n} from '../../../helpers/ratings';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, className}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, className)}>\n <Typography className={styles.averageRating}>{calcAverageRating(ratings).toFixed(1)}</Typography>\n <div className={styles.scale}>\n <div className={styles.likesScale} style={{width: calcWidthOfLikesScale(ratings)}} />\n <div className={styles.dislikesScale} style={{width: calcWidthOfDislikesScale(ratings)}} />\n </div>\n <div className={styles.counts}>\n <div className={classnames(styles.likesCount, styles.count)}>\n <ThumbUpIcon className={styles.icon} />\n {getCountOfLikes(ratings)}\n </div>\n <div className={styles.count}>\n <ThumbDownIcon className={styles.icon} />\n {getCountOfDislikes(ratings)}\n </div>\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex'\n },\n button: {\n fontSize: '14px',\n textTransform: 'none',\n color: theme.palette.text.secondary\n },\n likeButton: {\n marginLeft: '-12px',\n marginRight: '8px'\n },\n isActive: {\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {DropDownMenuButton} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n onAgree: () => void;\n onDisagree: (comment: string) => void;\n};\n\nexport const RatingsButtons = ({ratings, onAgree, onDisagree}: Props) => {\n const styles = useStyles();\n\n const username = useSelector(mdmModule.selectors.getUserName) as string;\n const ratingOfCurrentUser = ratings.find(({user}) => user === username);\n\n const menuItems = [\n {\n text: i18n.text('Has left the practice'),\n onClick: () => onDisagree(i18n.text('Has left the practice'))\n },\n {\n text: i18n.text('Has moved away'),\n onClick: () => onDisagree(i18n.text('Has moved away'))\n },\n {\n text: i18n.text('Has passed away'),\n onClick: () => onDisagree(i18n.text('Has passed away'))\n },\n {\n text: i18n.text('Has retired'),\n onClick: () => onDisagree(i18n.text('Has retired'))\n },\n {\n text: i18n.text('Other'),\n onClick: () => onDisagree(i18n.text('Other'))\n }\n ];\n\n return (\n <div className={styles.wrapper}>\n <Button\n onClick={onAgree}\n variant=\"text\"\n size=\"small\"\n className={classnames(styles.button, styles.likeButton, {\n [styles.isActive]: ratingOfCurrentUser?.value === 5\n })}\n >\n Agree\n </Button>\n <DropDownMenuButton\n buttonProps={{\n endIcon: <ArrowDropDownIcon />,\n variant: 'text',\n size: 'small',\n className: classnames(styles.button, {\n [styles.isActive]: ratingOfCurrentUser?.value === 1\n })\n }}\n buttonContent={ratingOfCurrentUser?.value === 1 ? ratingOfCurrentUser.comment : 'Disagree'}\n menuItems={menuItems}\n menuId=\"disagree-dropdown-menu-button\"\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {suggested: string}) => ({\n wrapper: {\n padding: '6px 16px 6px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n entityLabelContainer: {\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '18px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n alignSelf: 'center',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n }\n}));\n","import React, {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport {\n Metadata,\n Connection,\n rateRelation,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {Ratings} from '../Ratings/Ratings';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {RatingsButtons} from '../RatingsButtons/RatingsButtons';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n loadRelations: () => void;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation\n}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n\n const [showDetails, setShowDetails] = useState(false);\n\n const {entity, relation} = connection;\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityLabel, entityType, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const ratings = relation?.ratings || [];\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n\n const handleAgree = () => {\n rateRelation(relation?.relationUri, {\n comment: '',\n value: 5\n }).then(loadRelations);\n };\n\n const handleDisagree = (comment: string) => {\n rateRelation(relation?.relationUri, {\n comment,\n value: 1\n }).then(loadRelations);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n\n return (\n <div className={classnames(styles.wrapper, {[styles.suggestedWrapper]: isSuggested})}>\n <Box display=\"flex\" minHeight=\"44px\" className={COMMENTS_CONTAINER_VISIBILITY_AREA}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon entityType={entityType} className={styles.entityTypeIcon} />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\">\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n </EntityUriLink>\n {relationLabel && <span className={styles.relationLabel}>{relationLabel}</span>}\n {!isSuggested && (\n <RatingsButtons ratings={ratings} onAgree={handleAgree} onDisagree={handleDisagree} />\n )}\n </Box>\n </Box>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <>\n <Ratings ratings={ratings} className={styles.ratings} />\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetailsButton}\n />\n </>\n )}\n </div>\n </Box>\n {showDetails && <RelationAttributes connection={connection} className={styles.relationAttributes} />}\n </div>\n );\n};\n","import React, {useMemo, useContext, useEffect} from 'react';\nimport {Connection, getRelationshipsObjectIdsForCollaboration} from '@reltio/mdm-sdk';\nimport {CollaborationContext} from '@reltio/components';\nimport RelationItem from './RelationItem/RelationItem';\nimport {RelationComplexItem} from './RelationCompexItem/RelationComplexItem';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useSuggestedRelations} from '../../hooks/useSuggestedRelations';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\n\ntype Props = {\n className?: string;\n connections: Array<Connection>;\n loadRelations: () => void;\n config?: RelationsViewConfig;\n mainEnityUri?: string;\n};\n\nconst RelationsList = ({className, connections = [], loadRelations, config, mainEnityUri}: Props) => {\n const {isComplex, content} = config;\n const {ignoreRelation, acceptRelation} = useSuggestedRelations(content, loadRelations, mainEnityUri);\n\n const objectIds = useMemo(() => {\n return getRelationshipsObjectIdsForCollaboration(connections);\n }, [connections]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n return (\n <div className={className}>\n {connections.map((connection) => {\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n if (isComplex) {\n return (\n <RelationComplexItem\n loadRelations={loadRelations}\n connection={connection}\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }\n\n return (\n <RelationItem\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n connection={connection}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n })}\n </div>\n );\n};\n\nRelationsList.displayName = 'RelationsList';\n\nexport default RelationsList;\n","import {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {Connection, ignoreSuggestedRelation, createRelation, getRequestErrorMessage, Directions} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {getFirstRelationTypeObject} from '../helpers/relation';\nimport {RelationsContent} from '../../../types';\n\nexport const useSuggestedRelations = (content: RelationsContent, loadRelations: () => void, mainEnityUri: string) => {\n const relationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const dispatch = useDispatch();\n const ignoreRelation = (connection: Connection) => () => {\n const {entity} = connection;\n ignoreSuggestedRelation(mainEnityUri, {\n relatedEntityUri: entity.entityUri,\n relationType: relationTypeObject.type,\n relationDirection: relationTypeObject.direction\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n const acceptRelation = (connection: Connection) => () => {\n const {entity, relation} = connection;\n const {startDate, endDate} = relation;\n const isInDirection = relationTypeObject.direction === Directions.IN;\n const startEntityUri = isInDirection ? entity.entityUri : mainEnityUri;\n const endEntityUri = isInDirection ? mainEnityUri : entity.entityUri;\n createRelation({\n startEntityUri,\n endEntityUri,\n relationType: relationTypeObject.type,\n attributes: null,\n startDate,\n endDate\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n return {\n ignoreRelation,\n acceptRelation\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isEditableMode, Connection} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useStyles} from './styles';\n\ntype Props = {\n isLoading: boolean;\n config: RelationsViewConfig;\n loadRelations: () => void;\n connections: Connection[];\n total: number;\n parentEntityUri?: string;\n};\n\nexport const RelationsContent = ({isLoading, config, loadRelations, connections, total, parentEntityUri}: Props) => {\n const styles = useStyles();\n\n const {selectors} = mdmModule;\n const entity = useSelector(selectors.getEntity);\n const mode = useSelector(selectors.getMode);\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (isEditableMode(mode)) {\n return (\n <RelationsEditableContent\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n config={config}\n mode={mode}\n noDataText={noDataText}\n parentEntityUri={parentEntityUri}\n />\n );\n }\n\n if (total > 0) {\n return (\n <RelationsList\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n mainEnityUri={entity.uri}\n />\n );\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: 0\n },\n pagination: {\n height: '52px',\n flexGrow: 0,\n flexShrink: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, EntitiesMapContext, useRelationsLoader} from '@reltio/components';\nimport RelationsHeader from '../RelationsHeader/RelationsHeader';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ImportDTContext} from '../../contexts/ImportDTContext';\nimport {RelationsViewConfig} from '../../../../types';\nimport {buildRelationsFilter} from '../../helpers/filters';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {pick} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nconst RelationsView = ({config, className}: Props) => {\n const styles = useStyles();\n\n const {\n page,\n setPage,\n rowsPerPage,\n sortOrder,\n sortOption,\n showInactive,\n searchQuery,\n changeSearchQuery\n } = useContext(RelationsViewStateContext);\n const {selectors} = mdmModule;\n const connections = useSelector((state) =>\n selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(selectors.getEntity);\n const total = useSelector((state) => selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(selectors.getMode);\n const sorting = useMemo(\n () => ({\n order: sortOrder,\n field: sortOption\n }),\n [sortOrder, sortOption]\n );\n\n useEffect(() => {\n changeSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const filter = useMemo(() => buildRelationsFilter(searchQuery), [searchQuery]);\n\n const {isLoading, reload: loadRelations} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const importDTContextValue = useMemo(\n () => ({\n reloadRelations: loadRelations,\n config: pick(['content', 'importFromDT', 'maxDtssImport'], config)\n }),\n [loadRelations, config]\n );\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={className}>\n <div className={styles.container}>\n <ImportDTContext.Provider value={importDTContextValue}>\n <RelationsHeader title={config.caption} total={total} />\n </ImportDTContext.Provider>\n <div className={styles.content}>\n <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\n {total > rowsPerPage && (\n <BasicTablePagination\n classes={{root: styles.pagination}}\n count={total}\n rowsPerPageOptions={[]}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n />\n )}\n </div>\n </div>\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n\nRelationsView.displayName = 'RelationsView';\n\nexport {RelationsView};\n","import {FilterBuilder, Maybe, filterValueToQueryStringWithQuotes} from '@reltio/mdm-sdk';\n\nconst buildRelationsFilter = (searchQuery) => {\n const queryClause = Maybe.fromFalsy(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n return new FilterBuilder().addClause(queryClause).build();\n};\n\nexport {buildRelationsFilter};\n","import {useCallback, useMemo, useState} from 'react';\nimport {RelationsViewConfig, SortOrder} from '../../../types';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Option = {\n value: string;\n label: string;\n};\n\nexport type RelationsViewState = {\n searchQuery: string;\n changeSearchQuery: (value: string) => void;\n sortOrder: SortOrder;\n toggleSortOrder: () => void;\n sortOption?: string;\n changeSortOption: (option: string) => void;\n sortOptions: Option[];\n page: number;\n setPage: (page: number) => void;\n rowsPerPage: number;\n showInactive: boolean;\n toggleShowInactive: () => void;\n};\n\nconst useRelationsState = (config: RelationsViewConfig): RelationsViewState => {\n const sortOptions = useMemo(\n () =>\n Object.entries(config.sortOptions || {}).map(([key, value]) => ({\n value: key,\n label: value\n })),\n [config.sortOptions]\n );\n\n const rowsPerPage = config.max || DEFAULT_ROWS_PER_PAGE;\n const [page, setPage] = useState(0);\n const [sortOrder, setSortOrder] = useState(config.sortOrder || DEFAULT_SORT_ORDER);\n const [sortOption, setSortOption] = useState(sortOptions[0]?.value);\n const [searchQuery, setSearchQuery] = useState('');\n const [showInactive, setShowInactive] = useState(DEFAULT_SHOW_INACTIVE);\n\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n const toggleSortOrder = useCallback(() => {\n setPage(0);\n setSortOrder((order) => {\n return order === 'asc' ? 'desc' : 'asc';\n });\n }, []);\n\n const changeSortOption = useCallback((option: string) => {\n setPage(0);\n setSortOption(option);\n }, []);\n\n const changeSearchQuery = useCallback((value: string) => {\n setPage(0);\n setSearchQuery(value);\n }, []);\n\n return {\n searchQuery,\n changeSearchQuery,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions,\n page,\n setPage,\n rowsPerPage,\n showInactive,\n toggleShowInactive\n };\n};\n\nexport default useRelationsState;\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const TableAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n onSort: (payload) => void;\n onFilter: (payload) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n showTable: boolean;\n filters: {\n [key: string]: {\n filter: string;\n values: [string];\n };\n };\n sorting: {\n order: 'desc' | 'asc';\n field: string;\n };\n attributeType: AttributeType;\n }>(null);\n\nTableAttributeContext.displayName = 'SingleAttributeContext';\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles(() => ({\n tableContainer: {\n height: '477px',\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n },\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > div': removedStyle\n }\n}));\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {pipe, assoc, reduce, split, slice, map, path, uniqBy, prop} from 'ramda';\nimport {\n getReadableAttributesList,\n getOvAttributeValuesByPath,\n getAttrDataTypeDefinition,\n attributeUriToSearchUri,\n isAttributeSearchUri\n} from '@reltio/mdm-sdk';\nimport HeadCellRenderer from '../components/AttributeTable/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\n\nexport const getColumnsDataFromAttributes = pipe(\n map((attr) => ({\n id: attributeUriToSearchUri(attr.uri),\n label: attr.label,\n dataTypeDefinition: getAttrDataTypeDefinition(attr)\n })),\n uniqBy(prop('id'))\n);\n\nexport const getColumnsData = pipe(getReadableAttributesList, getColumnsDataFromAttributes);\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getAttributeValues = (attrPath, value) => pipe(path(['value']), getOvAttributeValuesByPath(attrPath))(value);\n\nconst getRowValueByColumnId = (columnId, value) => {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getAttributeValues(attrPath, value);\n};\n\nexport const getBasicTableRowsData = (values, columnsData) =>\n values.map((value) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, value), acc), {}),\n assoc('value', value)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (isAttributeSearchUri(columnId)) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellValueRenderer\n});\n\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React from 'react';\nimport {\n FacetViewHeader,\n ColumnsSettings,\n FilterButton,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {ColumnsDataType} from '../types';\n\ntype Props = {\n title: string;\n total: number;\n columnsData: ColumnsDataType;\n selectedColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n searchQuery: string;\n onChangeSearchQuery: (val: string) => void;\n filtersEnabled: boolean;\n onToggleFilters: () => void;\n};\nconst AttributeTableHeader = ({\n title,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns\n}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n </FacetViewHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport {withTableContext} from '@reltio/components';\n\ntype Props = {\n cell: {values: string[]};\n isSorted: boolean;\n CellValueRenderer: React.ElementType;\n isRemoved: boolean;\n};\nconst RowCellRenderer = ({cell, CellValueRenderer, isRemoved, isSorted, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nexport default withTableContext(({deletedUris}, {rowValue: {value}}) => ({\n isRemoved: Boolean(deletedUris.find((uri) => value.uri === uri))\n}))(RowCellRenderer);\n","import React from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\ntype Props = {\n onEdit?: () => void;\n onRemove?: () => void;\n};\n\nexport const EditButtons = ({onEdit, onRemove}: Props) => (\n <>\n {onEdit && (\n <SmallIconButtonWithTooltip tooltipTitle={i18n.text('Edit')} icon={EditIcon} size=\"L\" onClick={onEdit} />\n )}\n {onRemove && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Remove')}\n icon={DeleteIcon}\n size=\"L\"\n onClick={onRemove}\n />\n )}\n </>\n);\n\nexport default EditButtons;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport RowCellRenderer from './RowCellRenderer';\nimport {BasicTable, useConfigPermissions} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from '../../helpers/tableAttributeHelpers';\nimport {useStyles} from './styles';\nimport {\n AttributeValue,\n checkCanEditAttribute,\n checkCanDeleteAttribute,\n SearchFilter,\n isReltioCrosswalk,\n Entity,\n isEditableMode as checkIsEditableMode,\n AttributeItem\n} from '@reltio/mdm-sdk';\nimport {ColumnsDataType} from '../types';\nimport EditButtons from './EditButtons';\nimport {useSelector} from 'react-redux';\nimport {path, prop, pipe} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {SingleAttributeViewConfig} from '../../../../types';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n columnsData: ColumnsDataType;\n values: AttributeValue[];\n filters?: {\n [key: string]: SearchFilter;\n };\n onFilter?: (payload) => void;\n sorting?:\n | {\n field: string;\n order: string;\n }\n | undefined;\n onSort?: (payload) => void;\n config: SingleAttributeViewConfig;\n onEdit: React.Dispatch<AttributeValue>;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n deletedUris: string[];\n};\n\nconst AttributeTable = ({\n columnsData,\n values,\n sorting,\n onSort,\n filters,\n onFilter,\n config,\n onEdit,\n onDeleteAttribute,\n deletedUris\n}: Props) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(values, columnsData), [values, columnsData]);\n\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const {attributeType} = useContext(TableAttributeContext);\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n\n const {canUpdate, canDelete} = useConfigPermissions();\n\n const checkCanEdit = (attributeValue: AttributeValue) =>\n canUpdate(config) &&\n checkCanEditAttribute({\n attributeType,\n mode,\n attributeValue,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n const checkCanRemove = (attributeValue: AttributeValue) =>\n canDelete(config) &&\n checkCanDeleteAttribute({\n attributeType,\n mode,\n attributeValue,\n metadata,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n\n const hideRightContent = useMemo(\n () =>\n typeof hoverRowIndex === 'number' && isEditableMode\n ? deletedUris.includes(pipe(path([hoverRowIndex]), prop('uri'))(values))\n : true,\n [hoverRowIndex, deletedUris, values, isEditableMode]\n );\n const canRemove = typeof hoverRowIndex === 'number' && checkCanRemove(path([hoverRowIndex], values));\n const canEdit = typeof hoverRowIndex === 'number' && checkCanEdit(path([hoverRowIndex], values));\n\n const handleEditAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canEdit) return;\n onEdit(attributeValue);\n }, [onEdit, hoverRowIndex, values, canEdit]);\n\n const handleRemoveAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canRemove) return;\n const attribute: AttributeItem = {\n parentUri: entityUri,\n attributeType,\n uri: attributeValue.uri,\n value: attributeValue\n };\n onDeleteAttribute(attribute);\n setHoverRowIndex(null);\n }, [hoverRowIndex, values, onDeleteAttribute, canRemove, attributeType, entityUri]);\n\n const hoveredRowRightContent =\n !hideRightContent && (canRemove || canEdit) ? (\n <EditButtons\n onEdit={canEdit ? handleEditAttribute : undefined}\n onRemove={canRemove ? handleRemoveAttribute : undefined}\n />\n ) : undefined;\n const context = useMemo(() => ({deletedUris}), [deletedUris]);\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n renderRowCell={renderRowCell}\n onRowHover={setHoverRowIndex}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n context={context}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n />\n </div>\n );\n};\n\nexport default AttributeTable;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\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}));\n","import {Button as Button} from '@material-ui/core';\nimport React, {useCallback, useContext} from 'react';\nimport {useStyles} from './styles';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {AttributeValue, Entity, isTempUri, getAttributeOwnError, AttributeItem} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {EditableAttribute, ViewIdContext} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n hasChanges: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n onCancel: (attributeValue: AttributeValue) => void;\n onApply: (attributeValue: AttributeValue) => void;\n attributeValue: AttributeValue;\n};\n\nexport const AttributeEditing = ({\n onChangeAttribute,\n onCancel,\n onApply,\n onDeleteAttribute,\n hasChanges,\n attributeValue\n}: Props) => {\n const styles = useStyles();\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {attributeType} = useContext(TableAttributeContext);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n\n const onAddAttributes = useCallback(\n (params: AttributeItem[]) =>\n pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const showEmptyEditors = isTempUri(entityUri);\n\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\n );\n\n const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n return (\n <>\n <EditableAttribute\n expanded\n attributeValue={attributeValue}\n showEmptyEditors={showEmptyEditors}\n onDeleteAttribute={onDeleteAttribute}\n onDeactivateError={onDeactivateError}\n onChangeAttribute={onChangeAttribute}\n onAddAttributes={onAddAttributes}\n mode={mode}\n crosswalks={modifiedEntity.crosswalks}\n errors={errors}\n attributeType={attributeType}\n ownError={getAttributeOwnError(attributeValue, null, attributeType.uri, errors)}\n />\n <div className={styles.actionButtons}>\n <Button\n onClick={() => {\n onCancel(attributeValue);\n }}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n color=\"primary\"\n disabled={!hasChanges}\n onClick={() => {\n onApply(attributeValue);\n }}\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n flex: 1,\n overflow: 'auto'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n color: 'rgba(0,0,0,0.54)'\n },\n\n tableContainer: {\n height: '477px',\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n header: {\n padding: '0 4px 0 16px'\n },\n\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n editor: {\n padding: '4px 16px'\n }\n}));\n","import {useCallback, useContext, useState, useMemo, useEffect} from 'react';\nimport {\n AttributeValue,\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n NestedAttributeValue,\n AttributeItem\n} from '@reltio/mdm-sdk';\nimport {ViewIdContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {propEq, pathOr, pipe, map, prop, equals, both, not, without, filter} from 'ramda';\nimport {TableAttributeContext} from '../../../contexts/TableAttributeContext';\nimport {isTempUri, createDefaultValues} from '@reltio/mdm-sdk';\n\nconst emptyArray = [];\n\nexport const useEditableAttribute = () => {\n const [newAttributeUri, setNewAttributeUri] = useState<string>();\n const [originalValues, setOriginalValues] = useState<AttributeValue[]>([]);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n useEffect(() => {\n setOriginalValues([]);\n setNewAttributeUri(null);\n }, [mode]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const {attributeType, values} = useContext(TableAttributeContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => {\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n },\n [viewId, dispatch]\n );\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onAdd = useCallback(() => {\n const newAttribute = createNewAttribute({\n parentUri: entityUri,\n attributeType\n });\n setNewAttributeUri(newAttribute.uri);\n onChangeAttribute({\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: attributeType.attributes,\n parentUri: newAttribute.uri,\n mode,\n metadata\n }),\n attributeType\n });\n }, [entityUri, attributeType]);\n\n const onStartEditing = useCallback(\n (attributeValue: AttributeValue) => {\n setOriginalValues((prev) => {\n if (!prev.find(propEq('uri', attributeValue.uri))) {\n return [...prev, attributeValue];\n }\n return prev;\n });\n },\n [setOriginalValues]\n );\n\n const onCancel = useCallback(\n (attributeValue: AttributeValue) => {\n const editingValueOriginal = originalValues.find(propEq('uri', attributeValue.uri));\n if (editingValueOriginal) {\n const attributeItem = {\n ...attributeValue,\n value: editingValueOriginal,\n attributeType,\n uri: attributeValue.uri\n };\n setOriginalValues((prev) => without([editingValueOriginal], prev));\n onChangeAttribute(attributeItem);\n } else {\n const attributeItem = {\n value: attributeValue,\n attributeType,\n uri: attributeValue.uri\n };\n setNewAttributeUri(null);\n onDeleteAttribute(attributeItem);\n }\n },\n [onDeleteAttribute, onChangeAttribute, setOriginalValues, originalValues]\n );\n\n const onApply = useCallback(\n (attributeValue: AttributeValue) => {\n setNewAttributeUri(null);\n setOriginalValues((prev) => {\n const original = prev.find(propEq('uri', attributeValue.uri));\n return original ? without([original], prev) : prev;\n });\n },\n [setOriginalValues, setNewAttributeUri]\n );\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const isEditableMode = checkIsEditableMode(mode);\n const attributeSource = getAttributeSource(attributeType);\n\n const modifiedEntityValues: NestedAttributeValue[] = pathOr(\n emptyArray,\n [attributeSource, attributeType?.name],\n modifiedEntity\n );\n\n const modifiedValues = useMemo(() => {\n const newValues = modifiedEntityValues.filter(\n pipe(prop('uri'), both(isTempUri, pipe(equals(newAttributeUri), not)))\n );\n\n const oldValues = map(\n (originalValue) => modifiedEntityValues.find(propEq('uri', originalValue.uri)) || originalValue\n )(values);\n return [...newValues, ...oldValues].map((value) => originalValues.find(propEq('uri', value.uri)) ?? value);\n }, [modifiedEntityValues, originalValues, newAttributeUri, values]);\n\n const deletedUris = useMemo(\n () =>\n isEditableMode\n ? pipe(\n map(prop('uri')),\n filter((uri) => !modifiedEntityValues.find(propEq('uri', uri)))\n )(values)\n : [],\n [modifiedEntityValues, values]\n );\n\n const editingValues = modifiedEntityValues.filter(\n ({uri}) => uri === newAttributeUri || originalValues.find(propEq('uri', uri))\n );\n\n const checkHasChanges = (value) => originalValues.find(propEq('uri', value.uri)) !== value;\n\n return {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n };\n};\n","import React, {useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport {\n BasicView,\n BasicTablePagination,\n LinearLoadIndicator,\n FacetViewHeader,\n useConfigPermissions\n} from '@reltio/components';\nimport {SingleAttributeViewConfig} from '../../../../types';\nimport {propEq} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport AttributeTable from '../AttributeTable/AttributeTable';\nimport {getColumnsData} from '../../helpers/tableAttributeHelpers';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\n\nimport {useStyles} from './styles';\nimport {checkCanCreateAttribute, isEditableMode as checkIsEditableMode} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const TableAttributeView = ({config, className}: Props) => {\n const {caption, max} = config;\n const styles = useStyles();\n\n const {\n values,\n page,\n setPage,\n isLoading,\n searchQuery,\n setSearchQuery,\n visibleColumns,\n onFilter,\n onSort,\n onToggleFilters,\n onChangeColumns,\n filters,\n sorting,\n totalVisibleValues,\n hasPaging,\n attributeType,\n showTable\n } = useContext(TableAttributeContext);\n\n const allColumnsData = useMemo(() => getColumnsData(attributeType), [attributeType]);\n\n const {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n\n const preparedValues = isEditableMode ? modifiedValues : values;\n\n const {canCreate: hasConfigToCreate} = useConfigPermissions();\n\n const canCreate =\n hasConfigToCreate(config) &&\n attributeType &&\n checkCanCreateAttribute({attributeType, mode}) &&\n !editingValues.length;\n\n const visibleColumnsData = useMemo(() => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))), [\n visibleColumns,\n allColumnsData\n ]);\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n {showTable ? (\n <>\n <AttributeTableHeader\n title={caption}\n total={totalVisibleValues}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={onChangeColumns}\n searchQuery={searchQuery}\n onChangeSearchQuery={setSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={onToggleFilters}\n />\n <div style={{position: 'relative'}}>\n {isEditableMode && (\n <div className={styles.editor}>\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.addButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {editingValues.map((value) => (\n <AttributeEditing\n key={value.uri}\n attributeValue={value}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onCancel={onCancel}\n onApply={onApply}\n hasChanges={checkHasChanges(value)}\n />\n ))}\n </div>\n )}\n <AttributeTable\n columnsData={visibleColumnsData}\n config={config}\n values={preparedValues}\n filters={filters}\n onFilter={onFilter}\n sorting={sorting}\n onSort={onSort}\n onEdit={onStartEditing}\n onDeleteAttribute={onDeleteAttribute}\n deletedUris={deletedUris}\n />\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </>\n ) : (\n <>\n <FacetViewHeader title={caption} className={styles.header} />\n <Typography className={styles.noData}>{i18n.text('No data')}</Typography>\n </>\n )}\n </BasicView>\n );\n};\n","import {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pick, prop} from 'ramda';\nimport {Entity, getPathsTree, isTempUri, updateTreesWithNewEntity} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, useSafePromise} from '@reltio/components';\nimport {Response, Node} from '../types';\n\nlet nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n\nconst processResponse = (response: Response) => {\n const fakeRoot = {\n children: [] as Node[],\n nodeId: generateId()\n };\n if (response.parentPaths) {\n for (let i = 0; i < response.parentPaths.length; i++) {\n const path = response.parentPaths[i];\n let nextRoot = fakeRoot;\n for (let j = path.length - 1; j >= 0; j--) {\n const nextParent = path[j];\n const entity = response.entities[nextParent.entityUri];\n const isRoot = j === path.length - 1;\n const node: Node = {\n entity,\n children: [],\n nodeId: generateId(),\n expanded: true,\n rootIndex: isRoot ? i + 1 : undefined\n };\n if (isRoot) {\n node.root = isRoot;\n }\n nextRoot.children.push(node);\n nextRoot = node;\n }\n }\n }\n return fakeRoot.children;\n};\nexport const useLoadPaths = (entityUri: string, graphUri: string) => {\n const safePromise = useSafePromise();\n const [treeData, setTreeData] = useState<Node[]>([]);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n useDidUpdateEffect(() => {\n const forest = treeData\n .map((tree, index) => ({tree, index}))\n .reduce((acc, tree) => ({...acc, [tree.index]: {root: tree.tree}}), {});\n const newTrees = updateTreesWithNewEntity(pick(['uri', 'label', 'secondaryLabel', 'type'], entity), forest);\n setTreeData(newTrees.map(prop('root')));\n }, [entity?.updatedTime]);\n useEffect(() => {\n if (!isTempUri(entityUri)) {\n safePromise(getPathsTree({uri: entityUri, graphUri}))\n .then(processResponse)\n .then(setTreeData)\n .catch((e) => {\n console.warn(e);\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n return {treeData, setTreeData};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n minHeight: '15px',\n color: theme.palette.secondary.main,\n lineHeight: '15px'\n },\n link: {\n cursor: 'pointer',\n color: theme.palette.secondary.main,\n lineHeight: '15px'\n },\n selected: {\n fontWeight: 'bold'\n },\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px',\n marginLeft: '8px'\n },\n header: {\n padding: '0 4px 0 16px'\n },\n treeContainer: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '372px',\n maxHeight: '507px',\n overflow: 'auto'\n },\n tree: {\n flexGrow: 1,\n height: 0\n },\n buttonsContainer: {\n flexShrink: 0,\n marginLeft: 'auto',\n '& > * + *': {\n marginLeft: '-4px'\n }\n },\n button: {\n padding: '8px'\n }\n}));\n","import React from 'react';\nimport {HierarchyPathsViewConfig} from '../../types';\n\nexport const ConfigContext = React.createContext<HierarchyPathsViewConfig>(null);\n","import React, {memo, useCallback, useContext} from 'react';\nimport classnames from 'classnames';\nimport {Avatar as Avatar} from '@material-ui/core';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm, {ui} from '@reltio/mdm-module';\nimport {ConfigContext} from './ConfigContext';\nimport {getAbsoluteImageUrl, getEntityType, getPropWithInheritance, getEntityLink} from '@reltio/mdm-sdk';\nimport {Link} from '@reltio/components';\nimport {Node as NodeType} from './types';\n\nconst onImageLoadFail = (e) => {\n e.target.src = DEFAULT_ICON;\n};\n\ntype Props = {\n node?: NodeType;\n};\n\nexport const Node = ({node}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const uri = node.entity.uri;\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const config = useContext(ConfigContext);\n const uiPath = useSelector(mdm.selectors.getUIPath);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n const entityLink = getEntityLink({uiPath, uri});\n const isSelected = uri === currentEntityUri;\n const onTitleClick = useCallback(() => {\n dispatch(ui.actions.openEntity({uri, viewId: config.id}));\n }, [dispatch, config, uri]);\n const {\n entity: {label: title},\n nodeId\n } = node;\n const entityType = getEntityType(metadata, node.entity.type) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n const icon = entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n return (\n <div className={styles.wrapper} data-node-id={nodeId}>\n <div className={styles.container}>\n <Avatar className={classnames(styles.avatar)} src={icon || DEFAULT_ICON} onError={onImageLoadFail} />\n <span className={classnames(styles.link, {[styles.selected]: isSelected})}>\n <Link to={entityLink} onClick={onTitleClick}>\n {title}\n </Link>\n </span>\n </div>\n </div>\n );\n};\n\nexport default memo(Node);\n","export const getNodeKey = ({node}) => node.nodeId;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n lineBlock: {\n height: '100%',\n position: 'relative',\n display: 'inline-block'\n },\n lineChildren: {\n height: '100%',\n position: 'absolute',\n display: 'inline-block'\n },\n rootIndex: {\n display: 'flex',\n alignItems: 'center',\n color: 'rgba(0,0,0,0.54)',\n height: '100%'\n },\n verticalLine: {\n width: '1px',\n left: '50%',\n top: 0,\n height: '50%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n horizontalLineRight: {\n height: '1px',\n top: '14px',\n left: '50%',\n width: '24%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n node: {\n minWidth: '100%',\n position: 'relative',\n textAlign: 'left',\n padding: '0 24px 0 18px',\n boxSizing: 'border-box',\n whiteSpace: 'normal',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n }\n },\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n row: {\n display: 'flex'\n },\n rowContents: {\n position: 'relative',\n borderLeft: 'none',\n paddingLeft: '4px',\n flex: '1 1 auto',\n width: 0,\n display: 'flex',\n verticalAlign: 'middle',\n boxSizing: 'border-box'\n },\n buttonWrapper: {\n display: 'flex',\n paddingTop: '13px',\n width: '12px',\n cursor: 'pointer'\n },\n collapsedButton: {\n transform: 'rotate(-90deg)'\n },\n expandedButton: {\n transform: 'rotate(0deg)'\n },\n button: {\n transition: 'transform .15s ease',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid rgba(0, 0, 0, 0.54)'\n },\n rowTitle: {\n flex: '1 1 auto',\n width: 0,\n paddingRight: '11px'\n }\n}));\n","import React from 'react';\nimport {useStyles} from './styles';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\ntype Props = {\n treeIndex: number;\n scaffoldBlockPxWidth: number;\n node: Node;\n path: Array<string | number>;\n style?: Record<string, unknown>;\n title: React.ReactElement;\n toggleChildrenVisibility: (props) => void;\n};\n\nconst NodeRendererDefault = (props: Props) => {\n const {scaffoldBlockPxWidth, toggleChildrenVisibility, node, title, path, treeIndex, style, ...otherProps} = omit(\n [\n 'connectDragPreview',\n 'connectDragSource',\n 'isDragging',\n 'canDrop',\n 'canDrag',\n 'draggedNode',\n 'isSearchMatch',\n 'isSearchFocus',\n 'buttons',\n 'didDrop',\n 'children',\n 'treeId',\n 'isOver',\n 'parentNode',\n 'rowDirection'\n ],\n props\n );\n const nodeTitle = title;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility && !node.root && node.children && node.children.length > 0;\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n const styles = useStyles();\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && (\n <div style={{width: scaffoldBlockPxWidth - 2}} className={styles.lineChildren} />\n )}\n <div className={styles.row} style={style}>\n <div className={styles.rowContents}>\n {showToggleChildrenButton && (\n <div className={styles.buttonWrapper} onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n styles.button,\n node.expanded ? styles.expandedButton : styles.collapsedButton\n )}\n />\n </div>\n )}\n <div className={styles.rowTitle}>\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NodeRendererDefault;\n","import treeNodeRenderer from './tree-node-data-renderer';\nimport nodeContentRenderer from './node-content-renderer';\n\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\n\nexport const theme = {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import React from 'react';\nimport {useStyles} from './styles';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\nconst MIN_NODE_CONTENT_WIDTH = 250;\n\ntype Props = {\n scaffoldBlockPxWidth: number;\n lowerSiblingCounts: number[];\n\n node: Node;\n children: React.ReactElement;\n style?: Record<string, unknown>;\n};\n\nconst TreeNode = (props: Props) => {\n const {children, scaffoldBlockPxWidth, lowerSiblingCounts, node, ...otherProps} = omit(\n [\n 'listIndex',\n 'swapFrom',\n 'swapLength',\n 'swapDepth',\n 'draggedNode',\n 'getPrevRow',\n 'connectDropTarget',\n 'isOver',\n 'canDrop',\n 'treeIndex',\n 'treeId',\n 'path',\n 'rowDirection'\n ],\n props\n );\n const styles = useStyles();\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n scaffold.push(\n <div key={`pre_${1 + i}`} style={{width: scaffoldBlockPxWidth}} className={styles.lineBlock}>\n {node.root && <div className={styles.rootIndex}>{node.rootIndex}.</div>}\n {i === scaffoldBlockCount - 1 && i !== 0 && (\n <>\n <div className={styles.verticalLine} />\n <div className={styles.horizontalLineRight} />\n </>\n )}\n </div>\n );\n });\n\n const shift = node.root ? scaffoldBlockPxWidth - 4 : 0; //4px - shifting for rootIndex\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount - shift;\n const style = {left: scaffoldWidth, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n return (\n <div {...otherProps} className={styles.node} style={nodeStyle}>\n {scaffold}\n\n <div className={styles.nodeContent} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\",\n fillOpacity: \".54\"\n}, React.createElement(\"path\", {\n d: \"M14.5 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm4 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm-17 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM4 4a2 2 0 110-4 2 2 0 010 4zm1 16a2 2 0 110-4 2 2 0 010 4zm4.5-6a4.5 4.5 0 110-9 4.5 4.5 0 010 9zm0-2a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm6 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\",\n fill: \"#000\"\n}))));","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, SmallIconButtonWithTooltip} from '@reltio/components';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n title?: string;\n onGraphOpen: () => void;\n};\n\nconst HierarchyPathsHeader = ({title, onGraphOpen}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <div className={styles.buttonsContainer}>\n <SmallIconButtonWithTooltip\n className={styles.button}\n tooltipTitle={i18n.text('Show Graph')}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n </div>\n </FacetViewHeader>\n );\n};\n\nexport default HierarchyPathsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '21px'\n }\n}));\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n resizableHandleContainer: {\n position: 'relative',\n width: '100%',\n height: 'inherit'\n },\n resizableHandleVisibilityArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '24px',\n zIndex: 11,\n '&:hover $resizableHandle': {\n visibility: 'visible'\n },\n '.react-grid-item.static &:hover $resizableHandle': {\n visibility: 'hidden'\n }\n },\n resizableHandle: {\n position: 'absolute',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n top: '-3px',\n zIndex: 11,\n cursor: 'move',\n visibility: 'hidden'\n },\n dragIcon: {\n transform: 'translateX(-50%) rotate(90deg)',\n color: 'rgba(0, 0, 0, 0.3)'\n }\n});\n","import React, {ComponentType} from 'react';\nimport classnames from 'classnames';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\nimport {useStyles} from './styles';\n\nconst withResizableHandle = <P extends unknown>(Component: ComponentType<P>) => {\n const WithResizableHandle = (props: P) => {\n const styles = useStyles();\n return (\n <div className={styles.resizableHandleContainer}>\n <div className={styles.resizableHandleVisibilityArea}>\n <div className={classnames('viewDraggableHandle', styles.resizableHandle)}>\n <DragIndicatorIcon className={styles.dragIcon} />\n </div>\n </div>\n <Component {...props} />\n </div>\n );\n };\n\n WithResizableHandle.displayName = 'WithResizableHandle';\n return WithResizableHandle;\n};\n\nexport default withResizableHandle;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n stubView: {\n padding: '20px'\n },\n fullHeight: {\n height: '100%'\n },\n component: {\n boxSizing: 'border-box',\n overflow: 'auto',\n boxShadow: 'none',\n borderRadius: 'unset'\n }\n});\n","import {useEffect, useState} from 'react';\nimport {both, gt, lt, path, pipe} from 'ramda';\nimport {resolve} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nconst filterWrongLat = pipe(path(['point', 'lat']), both(gt(90), lt(-90)));\n\nexport const useMarkers = (entity, metadata, mapKey) => {\n const [markers, setMarkers] = useState([]);\n const [loading, setLoading] = useState(true);\n const safePromise = useSafePromise();\n useEffect(() => {\n setLoading(true);\n safePromise(resolve(metadata, [entity], mapKey))\n .then((markers) => {\n setMarkers(markers.filter(filterWrongLat));\n })\n .catch(() => {\n setMarkers([]);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [entity, metadata, mapKey, safePromise]);\n\n return {markers, loading};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n fullHeight: {\n height: '100%'\n },\n fullscreenBtn: {\n position: 'absolute',\n right: '5px',\n top: '5px',\n zIndex: 100\n }\n}));\n\nexport default useStyles;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n caption: {\n color: theme.palette.text.secondary,\n fontSize: '13px'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport useStyles from './styles';\n\ntype ImageLineCaptionProps = {\n totalImages: number;\n};\n\nexport const ImageLineCaption = ({totalImages}: ImageLineCaptionProps) => {\n const styles = useStyles();\n const photoWord = totalImages > 1 ? i18n.text('photos') : i18n.text('photo');\n return (\n <Typography variant=\"caption\" className={styles.caption}>\n {`${totalImages} ${photoWord}`}\n </Typography>\n );\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, pathOr} from 'ramda';\nimport {EditableImageAttributesLine} from '@reltio/components';\nimport {AttributeType, Entity, Paging, AttributeItem} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewConfig} from '../../../types';\nimport {IMAGE_SIZE} from '../ImageAttributeView';\nimport {ImageLineCaption} from '../ImageLineCaption/ImageLineCaption';\n\ntype ImageAttributeViewEditableContentProps = {\n config: ImageAttributeViewConfig;\n attributeType: AttributeType;\n paging?: Paging;\n requestNextPageOfAttributeValues?: (payload: RequestNextPageOfAttributeValuesPayload) => void;\n};\n\nexport const ImageAttributeViewEditableContent = ({\n config,\n attributeType,\n paging,\n requestNextPageOfAttributeValues\n}: ImageAttributeViewEditableContentProps) => {\n const dispatch = useDispatch();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const modifiedEntityValues = pathOr([], ['attributes', attributeType.name], modifiedEntity);\n const viewId = config.id;\n\n const onChangeAttribute = (params: AttributeItem) =>\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n\n const onDeleteAttribute = (params: AttributeItem) =>\n pipe(profile.actions.removeAttribute, dispatch)({...params, viewId});\n\n return (\n <>\n <EditableImageAttributesLine\n attributeValues={modifiedEntityValues}\n attributeType={attributeType}\n onDeleteAttribute={onDeleteAttribute}\n parentUri={modifiedEntity.uri}\n onChangeAttribute={onChangeAttribute}\n imageSize={IMAGE_SIZE}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={modifiedEntityValues.length} />\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: '8px 16px'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary\n }\n}));\n\nexport default useStyles;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pathOr, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {BasicView, FacetViewHeader, ImageAttributesLine} from '@reltio/components';\nimport {findAttributeTypeByUri, isEditableMode} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewConfig} from '../../types';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport useStyles from './styles';\n\ntype ImageAttributeViewProps = {\n config: ImageAttributeViewConfig;\n className?: string;\n};\n\nexport const IMAGE_SIZE = {\n imageMargin: 4,\n imageWidth: 162,\n imageHeight: 162\n};\n\nexport const ImageAttributeView = ({config, className}: ImageAttributeViewProps) => {\n const {attributeUri} = config;\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = findAttributeTypeByUri(metadata, attributeUri);\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const renderContent = () => {\n if (attributeType) {\n if (isEditableMode(mode)) {\n const props = {\n attributeType,\n config,\n paging,\n requestNextPageOfAttributeValues\n };\n return <ImageAttributeViewEditableContent {...props} />;\n }\n if (totalValues > 0) {\n const props = {\n attributeValues: entityValues,\n attributeType,\n imageSize: IMAGE_SIZE,\n paging,\n parentUri: entity.uri,\n requestNextPageOfAttributeValues\n };\n return (\n <>\n <ImageAttributesLine {...props} />\n <ImageLineCaption totalImages={totalValues} />\n </>\n );\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n return (\n <BasicView className={className}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.container}>{renderContent()}</div>\n </BasicView>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n matchesContainer: {\n position: 'relative'\n },\n footer: {\n display: 'flex',\n alignItems: 'end',\n flexGrow: 1,\n justifyContent: 'flex-start',\n borderTop: '1px solid rgba(0,0,0, 0.12)',\n padding: '8px 16px',\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: '0',\n lineHeight: '15px'\n },\n noData: {\n paddingLeft: '16px',\n paddingBottom: '16px',\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {getActionPermissionForMatch, PotentialMatch} from '@reltio/mdm-sdk';\nimport React, {useCallback, useContext, useMemo} from 'react';\nimport {ActionButtonMode, MergeButton, NotMatchButton, ViewIdContext} from '@reltio/components';\nimport {ProfilePotentialMatchesViewConfig} from '../../types';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n match: PotentialMatch;\n onStartRequest: () => void;\n onFinishRequest: () => void;\n};\nexport const ActionButtons = ({config, match, onStartRequest, onFinishRequest}: Props) => {\n const dispatch = useDispatch();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const {canMerge, canMark} = getActionPermissionForMatch(metadata, config, match.object, entity, match.matchRules);\n const entities = useMemo(() => {\n return [match.object];\n }, [match.object]);\n\n const actionButtonProps = {\n entity,\n entities,\n mode: ActionButtonMode.iconButton,\n onStartRequest\n };\n const viewId = useContext(ViewIdContext);\n const onMergeFinish = useCallback(() => {\n onFinishRequest();\n dispatch(profile.entity.actions.loadEntity({viewId, uri: entity.uri}));\n }, [dispatch, entity.uri, onFinishRequest, viewId]);\n return (\n <>\n {canMerge && <MergeButton {...actionButtonProps} onFinishRequest={onMergeFinish} />}\n {canMark && <NotMatchButton {...actionButtonProps} onFinishRequest={onFinishRequest} />}\n </>\n );\n};\n","import {\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n CommentsContainer,\n ProfileMatchCard,\n useMatchesLoader\n} from '@reltio/components';\nimport {CollaborationObjectTypes, createObjectIdForPM, createRelatedObjectUris, PotentialMatch} from '@reltio/mdm-sdk';\nimport {ActionButtons} from './ActionButtons';\nimport React from 'react';\nimport {ProfilePotentialMatchesViewConfig} from '../../types';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = Pick<ReturnType<typeof useMatchesLoader>, 'entitiesMap'> & {\n config: ProfilePotentialMatchesViewConfig;\n match: PotentialMatch;\n onFinishRequest: () => void;\n onStartRequest: () => void;\n};\n\nexport const MatchCard = ({config, entitiesMap, match, onFinishRequest, onStartRequest}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n return (\n <ProfileMatchCard\n match={match}\n entity={entity}\n entitiesMap={entitiesMap}\n metadata={metadata}\n className={COMMENTS_CONTAINER_VISIBILITY_AREA}\n >\n <CommentsContainer\n uri={createObjectIdForPM(entity.uri, match.object.uri)}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.POTENTIAL_MATCH, {\n entityUri: entity.uri,\n matchEntityUri: match.object.uri\n })}\n objectType={CollaborationObjectTypes.POTENTIAL_MATCH}\n />\n <ActionButtons\n match={match}\n config={config}\n onStartRequest={onStartRequest}\n onFinishRequest={onFinishRequest}\n />\n </ProfileMatchCard>\n );\n};\n","import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isEmpty, map} from 'ramda';\nimport {Link as Link} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n BasicView,\n CollaborationContext,\n EntitiesMapContext,\n FacetViewHeader,\n LinearLoadIndicator,\n useMatchesLoader,\n ViewIdContext\n} from '@reltio/components';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration\n} from '@reltio/mdm-sdk';\nimport {ProfilePotentialMatchesViewConfig} from '../../types';\nimport {useStyles} from './styles';\nimport {MatchCard} from './MatchCard';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n className?: string;\n};\n\nexport const DEFAULT_MATCHES_LIMIT = 3;\nexport const DEFAULT_OPTIONS = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\nexport const DEFAULT_SORTING = {order: 'asc', field: 'score'};\nenum ComponentStates {\n Loading,\n NoData,\n Loaded\n}\nexport const ProfilePotentialMatchesView = ({config, className}: Props) => {\n const styles = useStyles();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const entityUri = getEntityUriForLink(entity);\n\n const [isLoading, setIsLoading] = useState(false);\n const turnOnDisableSpinner = useCallback(() => {\n setIsLoading(true);\n }, []);\n const turnOffDisableSpinner = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const {matches, entitiesMap, loadMatches, total} = useMatchesLoader({\n enabled: !!entityUri,\n entity,\n options: DEFAULT_OPTIONS,\n filter: '',\n page: 0,\n sorting: DEFAULT_SORTING,\n rowsPerPage: DEFAULT_MATCHES_LIMIT,\n onStartLoading: turnOnDisableSpinner,\n onFinishLoading: turnOffDisableSpinner\n });\n const onFinishMatchAction = useCallback(() => {\n loadMatches();\n }, [loadMatches]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const openPotentialMatchPerspective = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'potentialMatches', viewId}));\n }, [dispatch, viewId]);\n\n const objectIds = useMemo(\n () => getPotentialMatchesObjectIdsForCollaboration(entityUri, map(getEntityUriFromMatchObject, matches)),\n [entityUri, matches]\n );\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const showSeeAll = total > DEFAULT_MATCHES_LIMIT && !isEmpty(matches);\n const getComponentState = () => {\n if (isLoading) {\n return ComponentStates.Loading;\n }\n if (isEmpty(matches)) {\n return ComponentStates.NoData;\n }\n return ComponentStates.Loaded;\n };\n const state = getComponentState();\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.matchesContainer}>\n {state === ComponentStates.Loading && <LinearLoadIndicator />}\n {state === ComponentStates.NoData && (\n <Typography className={styles.noData}>{i18n.text('No matches found')}</Typography>\n )}\n {state === ComponentStates.Loaded &&\n matches.map((match) => (\n <MatchCard\n config={config}\n entitiesMap={entitiesMap}\n match={match}\n onFinishRequest={onFinishMatchAction}\n onStartRequest={turnOnDisableSpinner}\n key={match.object.uri}\n />\n ))}\n </div>\n {showSeeAll && (\n <>\n <div className={styles.footer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n onClick={openPotentialMatchPerspective}\n underline=\"none\"\n >\n {i18n.text('See all')}\n </Link>\n </div>\n </>\n )}\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React, {lazy} from 'react';\nimport {Store} from 'redux';\nimport {CustomViewConfig, ProfileViewConfig, ProfileViewTypes} from '@reltio/mdm-sdk';\nimport {\n AttributeViewConfig,\n EntityMapViewConfig,\n ProfilePotentialMatchesViewConfig,\n RelationsViewConfig,\n ImageAttributeViewConfig,\n SingleAttributeViewConfig,\n HierarchyPathsViewConfig\n} from '../../types';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {CustomView} from '../Sandbox/CustomView';\nimport withResizableHandle from './HOCs/withResizableHandle';\nimport {StubView} from './StubView';\nimport EntityMapView from '../EntityMapView/EntityMapView';\nimport {ImageAttributeView} from '../ImageAttributeView/ImageAttributeView';\nimport {ProfilePotentialMatchesView} from '../ProfilePotentialMatchesView/ProfilePotentialMatchesView';\n\nconst ResizableStubView = withResizableHandle(StubView);\nexport const ResizableProfileAttributesView = withResizableHandle(ProfileAttributesView);\nexport const ResizableProfileSingleAttributeView = withResizableHandle(ProfileSingleAttributeView);\nexport const ResizableProfileTableAttributeView = withResizableHandle(ProfileTableAttributeView);\nexport const ResizableProfileRelationsView = withResizableHandle(ProfileRelationsView);\nexport const ResizableCustomView = withResizableHandle(CustomView);\nexport const ResizableHierarchyPathView = withResizableHandle(HierarchyPathsView);\nexport const ResizableProfilePotentialMatchesView = withResizableHandle(ProfilePotentialMatchesView);\n\nexport const ResizableHierarchyTreeView = lazy(() =>\n import('@reltio/hierarchy-tree').then((importedModule) => ({\n default: withResizableHandle(importedModule.HierarchyTreeView)\n }))\n);\n\nexport const ResizableRelationshipsTableView = lazy(() =>\n import('@reltio/relations-table').then((importedModule) => ({\n default: withResizableHandle(importedModule.RelationshipsTableView)\n }))\n);\nexport const ResizableEntityMapView = withResizableHandle(EntityMapView);\nexport const ResizableImageAttributeView = withResizableHandle(ImageAttributeView);\n\nexport type ViewComponentProps = {\n store: Store<unknown>;\n config:\n | ProfileViewConfig\n | AttributeViewConfig\n | SingleAttributeViewConfig\n | RelationsViewConfig\n | EntityMapViewConfig\n | ImageAttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n isAutosize?: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nclass ViewsFactory {\n static ViewTypes = ProfileViewTypes;\n static getComponentBy = (\n propName: string,\n {store, config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return <ResizableHierarchyTreeView config={config} store={store} className={className} />;\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <ResizableHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return <ResizableRelationshipsTableView config={config} store={store} className={className} />;\n case ViewsFactory.ViewTypes.Relations:\n return <ResizableProfileRelationsView config={config as RelationsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.Attributes:\n return <ResizableProfileAttributesView className={className} config={config as AttributeViewConfig} />;\n case ViewsFactory.ViewTypes.SingleAttributeView:\n return (\n <ResizableProfileSingleAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.TableAttributeView:\n return (\n <ResizableProfileTableAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.MapView:\n return (\n <ResizableEntityMapView\n config={config as EntityMapViewConfig}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.CustomView:\n return <ResizableCustomView config={config as CustomViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.ImageAttributeView:\n return (\n <ResizableImageAttributeView config={config as ImageAttributeViewConfig} className={className} />\n );\n case ViewsFactory.ViewTypes.PotentialMatchesView:\n return (\n <ResizableProfilePotentialMatchesView\n config={config as ProfilePotentialMatchesViewConfig}\n className={className}\n />\n );\n }\n };\n static getComponent = (props: ViewComponentProps) => {\n return (\n ViewsFactory.getComponentBy('class', props) ||\n ViewsFactory.getComponentBy('react-class', props) || <ResizableStubView className={props.className} />\n );\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {BasicView} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst StubView = ({className}: Props) => {\n const styles = useStyles();\n return (\n <BasicView className={classnames(styles.stubView, 'viewDraggableHandle', className)}>NOT IMPLEMENTED</BasicView>\n );\n};\n\nexport {StubView};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '../../types';\nimport {SingleAttributeContext} from './contexts/SingleAttributeContext';\nimport {SingleAttributeView} from './components/SingleAttributeView/SingleAttributeView';\nimport {useSingleAttribute} from './hooks/useSingleAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileSingleAttributeView = ({className, config}: Props) => {\n const singleAttribute = useSingleAttribute(config);\n\n return (\n <SingleAttributeContext.Provider value={singleAttribute}>\n <SingleAttributeView config={config} className={className} />\n </SingleAttributeContext.Provider>\n );\n};\n","import {useState, useMemo, useCallback} from 'react';\nimport {SingleAttributeViewConfig} from '../../../types';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\n\nexport const useSingleAttribute = (config: SingleAttributeViewConfig) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [page, setPage] = useState(0);\n const [showInactive, setShowInactive] = useState(false);\n const params = useMemo(() => ({page, searchQuery, showInactive}), [page, searchQuery, showInactive]);\n const attribute = useSingleAttributeLoader(config, params, true);\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n return {\n setSearchQuery,\n searchQuery,\n setPage,\n page,\n toggleShowInactive,\n showInactive,\n ...attribute\n };\n};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '../../types';\nimport {TableAttributeContext} from './contexts/TableAttributeContext';\nimport {useTableAttribute} from './hooks/useTableAttribute';\nimport {TableAttributeView} from './components/TableAttributeView/TableAttributeView';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileTableAttributeView = ({config, className}: Props) => {\n const tableAttribute = useTableAttribute(config);\n\n return (\n <TableAttributeContext.Provider value={tableAttribute}>\n {config && <TableAttributeView config={config} className={className} />}\n </TableAttributeContext.Provider>\n );\n};\n","import {useMemo, useReducer} from 'react';\nimport {reject, isNil, pipe, not, prop} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {findAttributeTypeByUri, isComplexAttribute} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useActions} from '@reltio/components';\nimport reducer, {actions} from './reducer';\nimport {SingleAttributeViewConfig} from '../../../types';\nimport {getColumnsData} from '../helpers/tableAttributeHelpers';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\nimport {buildMDMFilters} from './helpers';\n\nconst DEFAULT_COUNT_COLUMN = 5;\n\nexport const useTableAttribute = (config: SingleAttributeViewConfig) => {\n const {attributeUri} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const allColumnsData = useMemo(() => getColumnsData(attributeType), [attributeType]);\n const initialState = useMemo(\n () => ({\n searchQuery: '',\n filters: null,\n sorting: undefined,\n visibleColumns: allColumnsData\n .filter(pipe(prop('dataTypeDefinition'), isComplexAttribute, not))\n .map(({id}) => id)\n .slice(0, DEFAULT_COUNT_COLUMN),\n page: 0\n }),\n [allColumnsData]\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {searchQuery, filters, sorting, page} = state;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n\n const requestFilters = useMemo(() => {\n const mdmFilters = buildMDMFilters(allColumnsData, filters);\n return mdmFilters.length ? mdmFilters : null;\n }, [filters, allColumnsData]);\n\n const params = useMemo(() => reject(isNil, {filters: requestFilters, page, sorting, searchQuery}), [\n requestFilters,\n page,\n sorting,\n searchQuery\n ]);\n const {changeSearchQuery, changePage, toggleSort, changeFilter, toggleFilters, changeColumns} = useActions({\n actions,\n dispatch\n });\n const attribute = useSingleAttributeLoader(config, params, false);\n const showTable = Boolean(\n (attribute?.values?.length || requestFilters || searchQuery || isEditableMode) &&\n attributeType &&\n !attributeType.hidden\n );\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n showTable,\n ...attribute\n };\n};\n","import {propEq} from 'ramda';\nimport {Maybe} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, columnFilterToMdmFilter} from '@reltio/components';\n\nexport const buildMDMFilters = (columnsData: ColumnData[], filters: {[key: string]: ColumnFilter}) =>\n Maybe.fromNull(filters)\n .map((filters) =>\n Object.entries(filters).map(([columnId, columnFilter]) => {\n const columnData = columnsData.find(propEq('id', columnId));\n return columnFilterToMdmFilter(columnData, columnFilter);\n })\n )\n .orSome([]);\n","import React from 'react';\nimport RelationsView from './components/RelationsView';\nimport {RelationsViewStateContext} from './contexts/RelationsViewStateContext';\nimport useRelationsState from './hooks/useRelationsState';\nimport {RelationsViewConfig} from '../../types';\n\ntype Props = {\n config: RelationsViewConfig;\n onResize?: (width: number, height: number) => void;\n className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const relationsState = useRelationsState(config);\n return (\n <RelationsViewStateContext.Provider value={relationsState}>\n <RelationsView config={config} className={className} />\n </RelationsViewStateContext.Provider>\n );\n};\n","import React, {useRef, useEffect} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomViewConfig} from '@reltio/mdm-sdk';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {isNil, reject} from 'ramda';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: CustomViewConfig;\n className?: string;\n};\n\nexport const CustomView = ({config, className}: Props) => {\n const basicViewRef = useRef<HTMLDivElement>();\n const {height, width, tooltip: defaultTooltip} = config;\n const {html, visible, tooltip: updatedTooltip, customStyles} = useAPI(config);\n const styles = useStyles();\n const tooltip = updatedTooltip || defaultTooltip;\n useEffect(() => {\n if (basicViewRef.current && html) {\n basicViewRef.current.innerHTML = '';\n html.childNodes.forEach((child) => {\n basicViewRef.current.appendChild(child);\n });\n }\n }, [html]);\n if (!visible) return null;\n const style: {width?: number; height?: number} = reject(isNil, {width, height});\n const component = (\n <div ref={basicViewRef} style={{...style, ...customStyles}} className={classnames(styles.root, className)} />\n );\n return (\n <div className={styles.bodyWrapper}>{tooltip ? <Tooltip title={tooltip}>{component}</Tooltip> : component}</div>\n );\n};\n","import React, {useCallback} from 'react';\nimport {BasicView, ReactSortableTree} from '@reltio/components';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {Node} from './Node';\nimport {useStyles} from './styles';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyPathsViewConfig} from '../../types';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\nimport HierarchyPathsHeader from './HierarchyPathsHeader';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {treeData, setTreeData} = useLoadPaths(entityUri, config.graph.type);\n const styles = useStyles();\n const dispatch = useDispatch();\n const {id, graph} = config;\n const openGraph = useCallback(() => {\n dispatch(ui.actions.openGraph({viewId: id, graphType: graph.type}));\n }, [dispatch, id, graph]);\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: <Node node={rowInfo.node} />\n }),\n []\n );\n return (\n <BasicView className={className}>\n <HierarchyPathsHeader onGraphOpen={openGraph} title={config.caption} />\n <ConfigContext.Provider value={config}>\n <div className={styles.treeContainer}>\n <div className={styles.tree}>\n <ReactSortableTree\n isVirtualized={false}\n treeData={treeData}\n canDrag={false}\n theme={theme}\n generateNodeProps={generateNodeProps}\n onChange={setTreeData}\n getNodeKey={getNodeKey}\n />\n </div>\n </div>\n </ConfigContext.Provider>\n </BasicView>\n );\n};\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport FullscreenIcon from '@material-ui/icons/Fullscreen';\nimport FullscreenExitIcon from '@material-ui/icons/FullscreenExit';\nimport {BasicView, LinearLoadIndicator, ReltioMap} from '@reltio/components';\nimport {SmallIconButton} from '@reltio/components';\n\nimport {AttributeViewConfig} from '../../types';\nimport {useMarkers} from './useMarkers';\nimport useStyles from './styles';\n\ntype EntityMapViewProps = {\n config: AttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nexport const EntityMapView = ({config, isFullscreen, onToggleFullscreen, className}: EntityMapViewProps) => {\n const styles = useStyles();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const entity = useSelector(mdm.selectors.getEntity);\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n const {markers, loading} = useMarkers(entity, metadata, mapKey);\n const loadingElement = useMemo(\n () => (\n <div className={styles.fullHeight}>\n <LinearLoadIndicator />\n </div>\n ),\n [styles]\n );\n\n const defaultCenter = useMemo(() => ({lat: 0, lng: 0}), []);\n const mapOptions = useMemo(() => ({mapTypeControl: true}), []);\n\n return (\n mapKey && (\n <BasicView className={classnames(styles.root, className)}>\n {loading && <LinearLoadIndicator />}\n <SmallIconButton\n size=\"S\"\n icon={isFullscreen ? FullscreenExitIcon : FullscreenIcon}\n onClick={() => onToggleFullscreen(config.id)}\n className={styles.fullscreenBtn}\n />\n\n <ReltioMap\n loadingElement={loadingElement}\n defaultZoom={1}\n defaultCenter={defaultCenter}\n markers={markers}\n mapContainerClassName={styles.fullHeight}\n mapKey={mapKey}\n mapOptions={mapOptions}\n />\n </BasicView>\n )\n );\n};\n\nexport default EntityMapView;\n","import React, {memo, Suspense} from 'react';\nimport classnames from 'classnames';\nimport ViewsFactory, {ViewComponentProps} from './ViewsFactory';\nimport {useStyles} from './styles';\n\nconst Fallback = () => null;\n\nconst ViewComponent = memo(({config, store, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\n store,\n className: classnames(styles.component, {[styles.fullHeight]: !isAutosize}),\n isFullscreen,\n onToggleFullscreen\n })}\n </Suspense>\n );\n});\n\nViewComponent.displayName = 'ViewComponent';\n\nexport {ViewComponent};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {basicView: Record<string, string | number>}) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n }\n}));\n","import React, {ReactChildren, ReactNode, useContext} from 'react';\nimport {omit} from 'ramda';\nimport {ReactReduxContext} from 'react-redux';\nimport {ReactGridLayoutItem} from '@reltio/components';\nimport {CustomScript, CustomScriptPlatform, ProfileViewConfig} from '@reltio/mdm-sdk';\nimport {ViewComponent} from '../views/ViewComponent';\nimport ViewsFactory from '../views/ViewsFactory';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n layoutItemConfig: ReactGridLayoutItem;\n views: ProfileViewConfig[];\n className?: string;\n children?: ReactChildren;\n style?: Record<string, unknown>;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n AutosizeComponent?: ReactNode;\n};\n\nconst omittingProps = ['onConfigChanged', 'onRemove'];\n\nconst ProfileLayoutItem = ({\n layoutItemConfig,\n views,\n className,\n children: ResizeComponent,\n style,\n isFullscreen,\n onToggleFullscreen,\n AutosizeComponent,\n ...props\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n const styles = useStyles();\n\n const {store} = useContext(ReactReduxContext);\n if (!config) {\n return null;\n }\n const isCustomView = config.class === ViewsFactory.ViewTypes.CustomView;\n if (isCustomView && (config?.action as CustomScript)?.platform === CustomScriptPlatform.CLASSIC) {\n return null;\n }\n\n return (\n <div\n {...omit(omittingProps, props)}\n style={style}\n className={classnames(className, {[styles.item]: !isCustomView})}\n >\n <div className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}>\n {AutosizeComponent}\n <ViewComponent\n store={store}\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import React from 'react';\nimport {ReltioGridLayout} from '@reltio/components';\nimport {ProfileViewConfig} from '@reltio/mdm-sdk';\n\nimport {Layout} from '../../types';\nimport {ProfileLayoutItem} from '../ProfileLayoutItem';\n\ntype Props = {\n views: ProfileViewConfig[];\n layout?: Layout;\n layoutOptions?: Record<string, unknown>;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst ProfileLayout = ({views, layout, layoutOptions, onLayoutChanged}: Props) => {\n return (\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n layoutOptions={layoutOptions}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n />\n );\n};\n\nexport {ProfileLayout};\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: \"19\",\n height: \"17\",\n viewBox: \"0 0 19 17\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M14 17v2H4v-2h10zm6-4v2H4v-2l12.884.001H17l.116-.002L20 13zm-8.457-2H4V9h5.82a8.465 8.465 0 001.723 2zM9.139 6.178l-.289.733.035.088L4 7V5l5.713-.002c-.22.375-.412.768-.574 1.18zM17 2.82a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091 6.451 6.451 0 00-6-4.091zm0 6.815a2.728 2.728 0 010-5.455 2.728 2.728 0 010 5.455zm0-4.365c-.905 0-1.636.73-1.636 1.636 0 .906.73 1.637 1.636 1.637.905 0 1.636-.731 1.636-1.637 0-.905-.73-1.636-1.636-1.636z\",\n id: \"svg1467685497a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n transform: \"translate(-4 -2.5)\"\n}, React.createElement(\"mask\", {\n id: \"svg1467685497b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1467685497a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1467685497b)\",\n d: \"M0 0h24v24H0z\"\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 version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M20.222 6C21.21 6 22 6.8 22 7.778v12.444C22 21.2 21.209 22 20.222 22H7.778C6.79 22 6 21.2 6 20.222V7.778C6 6.8 6.791 6 7.778 6h12.444zM20 8H8v12h12V8zM4 18H2V4c0-1.1.9-2 2-2h14v2H4v14z\",\n id: \"svg2383396984a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2383396984b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2383396984a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2383396984b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n editingButtons: {\n display: 'flex',\n '& button + button': {\n width: '88px',\n marginLeft: '8px'\n }\n },\n searchResults: {\n width: '150px',\n height: '25px',\n backgroundColor: '#ccc'\n },\n comments: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '10px'\n }\n});\n","import {useCallback, useMemo} from 'react';\nimport {\n includes,\n pipe,\n isNil,\n propOr,\n filter,\n map,\n prop,\n cond,\n identity,\n omit,\n find,\n complement,\n when,\n either,\n pick,\n always,\n T\n} from 'ramda';\nimport {\n BaseCloneAction,\n CloneAction,\n Entity,\n getEntityType,\n isReference,\n isRelationWithEntityType,\n getRelationTypeUriFromAttrType\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\n\ntype Props = {\n cloneAction?: CloneAction[];\n onCloneDiscard: () => void;\n};\n\nexport const useCloneAction = ({cloneAction: cloneActionProp, onCloneDiscard}: Props) => {\n const entity: Entity = useSelector(mdm.selectors.getEntityWithoutDiff);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const dispatch = useDispatch();\n const entityTypeUri = entity?.type;\n const relationTypes = metadata.relationTypes;\n const isRelationSuitableForEntityType = useCallback(isRelationWithEntityType(metadata, entityTypeUri), [\n metadata,\n entityTypeUri\n ]);\n const entityType = getEntityType(metadata, entityTypeUri);\n const cloneAction = useMemo<BaseCloneAction>(\n () =>\n when(\n complement(isNil),\n pipe(\n find(pipe(propOr([], 'entityTypeUris'), either(includes(entityTypeUri), includes('*')))),\n when(complement(isNil), omit(['entityTypeUris']))\n )\n )(cloneActionProp),\n [cloneActionProp, entityTypeUri]\n );\n const onClone = useCallback(() => {\n if (cloneAction) {\n const modifiedRelationTypes: string[] = pipe(\n prop('relationshipTypesToCopy'),\n cond([\n [\n isNil,\n pipe(\n always(entityType),\n propOr([], 'attributes'),\n filter(isReference),\n map(getRelationTypeUriFromAttrType)\n )\n ],\n [\n includes('*'),\n pipe(always(relationTypes || []), map(prop('uri')), filter(isRelationSuitableForEntityType))\n ],\n [T, identity]\n ])\n )(cloneAction);\n dispatch(\n profile.entity.actions.entityCloneRequested({\n data: {\n ...pick(['attributeReplacementMapping'], cloneAction),\n relationshipTypesToCopy: modifiedRelationTypes\n },\n entityUri: entity.uri\n })\n );\n }\n onCloneDiscard();\n }, [cloneAction, onCloneDiscard, entityType, relationTypes, entity.uri, isRelationSuitableForEntityType]);\n return cloneAction ? onClone : undefined;\n};\n","import React, {useCallback, useMemo, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Box as Box} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport {SvgIcon as SvgIcon} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\n ModeTypes,\n Mode,\n isSuggestMode,\n isEditableMode,\n CollaborationObjectTypes,\n createRelatedObjectUris,\n Operation,\n ProfileBandConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n ProfileBand,\n ModeSwitcherSelect,\n CommentsContainer,\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n ProfileBandNavigation,\n ProfileBandHistory,\n ConfirmationDialog\n} from '@reltio/components';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\nimport {useCloneAction} from './hooks/useCloneAction';\n\ntype Props = {\n className?: string;\n profileBandConfig?: ProfileBandConfig;\n};\n\nconst SuggestIcon = (props) => (\n <SvgIcon {...props}>\n <SuggestSvg />\n </SvgIcon>\n);\n\nconst CopyIcon = (props) => (\n <SvgIcon {...props}>\n <CopySvg />\n </SvgIcon>\n);\n\ntype Group = {\n label: string;\n value: string;\n description: string;\n icon: React.ElementType;\n permission: string;\n onClick?: (value: string) => void;\n};\n\nconst filterGroupByPermissions = <T extends Group>(\n group: T[],\n entityType,\n isTempEntity: boolean,\n isWorkflowEnabled?: boolean,\n canStartProcessInstanceSearchQuery?: boolean\n): T[] =>\n group.filter(({value, permission}) => {\n if (isTempEntity && !isEditableMode(value)) return false;\n if ((!isWorkflowEnabled || !canStartProcessInstanceSearchQuery) && isSuggestMode(value)) return false;\n return checkMetadataPermission(permission, entityType);\n });\n\nconst hasOnlyReadPermission = (entityType) => {\n return (\n checkMetadataPermission(MetadataPermissions.READ, entityType) &&\n !checkMetadataPermission(MetadataPermissions.UPDATE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.DELETE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST, entityType)\n );\n};\n\nexport const PerspectiveProfileBand = ({className, profileBandConfig}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const canStartProcessInstanceSearchQuery = useSelector(mdm.selectors.getCanUserStartProcessFromQuery);\n const entity = useSelector(mdm.selectors.getEntityWithoutDiff) as Entity;\n const modifiedEntity = useSelector((state) => mdm.selectors.getModifiedEntity(state, entity.uri));\n const metadata = useSelector(mdm.selectors.getMetadata);\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const mode = useSelector(mdm.selectors.getMode) as Mode;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode) as boolean;\n const isViewMode = useSelector(mdm.selectors.getIsViewMode) as boolean;\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const profileOperation = useSelector(mdm.selectors.getProfileOperation);\n const entityTypeUri = entity?.type;\n const entityType = useMemo(() => getEntityType(metadata, entityTypeUri), [entityTypeUri, metadata]);\n const isOperationSaving = profileOperation === Operation.Saving;\n const isOperationCloning = profileOperation === Operation.Cloning;\n const isDisabledButtons = isOperationCloning || isOperationSaving;\n const [openCloneConfirmationDialog, setOpenCloneConfirmationDialog] = useState(false);\n const onCloneDiscard = useCallback(() => {\n setOpenCloneConfirmationDialog(false);\n }, []);\n const onClone = useCloneAction({cloneAction: profileBandConfig?.cloneAction, onCloneDiscard});\n const OPTIONS_GROUP = useMemo(\n () => [\n {\n label: i18n.text('Editing'),\n value: ModeTypes.EDITING,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: ModeTypes.SUGGESTING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: SuggestIcon,\n permission: 'INITIATE_CHANGE_REQUEST'\n },\n {\n label: i18n.text('Viewing'),\n value: ModeTypes.VIEWING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: VisibilityIcon,\n permission: 'READ'\n }\n ],\n []\n );\n\n const BUTTONS_GROUP = useMemo(\n () => [\n ...(onClone\n ? [\n {\n label: i18n.text('Clone'),\n value: 'Clone',\n description: i18n.text('Create a copy of the profile'),\n icon: CopyIcon,\n onClick: () => setOpenCloneConfirmationDialog(true),\n permission: 'CREATE'\n }\n ]\n : []),\n {\n label: i18n.text('Delete'),\n value: 'Delete',\n description: i18n.text('Permanently delete profile'),\n icon: DeleteIcon,\n onClick: () => {\n const conf = window.confirm(i18n.text('Are you sure you want to delete this?'));\n if (conf) {\n dispatch(profile.entity.actions.entityRemoveRequested({entityUri: entity.uri}));\n }\n },\n permission: 'DELETE'\n }\n ],\n [dispatch, entity.uri, onClone]\n );\n\n const shouldShowSelect = !isHistoryModeEnabled && !isDataTenantEntity(entity) && !hasOnlyReadPermission(entityType);\n\n const isTempEntity = isTempUri(entity?.uri);\n\n const accessibleOptionsGroup = useMemo(() => {\n return filterGroupByPermissions(\n OPTIONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [OPTIONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n const accessibleButtonsGroup = useMemo(() => {\n return filterGroupByPermissions(\n BUTTONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [BUTTONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n\n const handleChange = useCallback(\n (value: Mode) => {\n dispatch(profile.mode.actions.modeUpdated(value));\n },\n [dispatch]\n );\n\n const onCancel = useCallback(() => {\n dispatch(profile.mode.actions.modeCancelEditing());\n }, [dispatch]);\n\n const handleSave = useCallback(() => {\n dispatch(profile.actions.saveProfile());\n }, [dispatch]);\n\n return (\n <>\n <ProfileBand\n className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)}\n entity={isEditableMode && modifiedEntity ? modifiedEntity : entity}\n showEntityId={profileBandConfig?.showEntityId}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={3}>\n {isEditableMode && (\n <Box className={styles.editingButtons}>\n <Button\n variant=\"outlined\"\n onClick={onCancel}\n data-reltio-id=\"reltio-profile-cancel-editing\"\n disabled={isDisabledButtons}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-reltio-id=\"reltio-profile-save-profile\"\n onClick={handleSave}\n disabled={isDisabledButtons}\n >\n {isSuggestMode(mode) ? i18n.text('Suggest') : i18n.text('Save')}\n </Button>\n </Box>\n )}\n {isHistoryModeEnabled && isViewMode ? (\n <ProfileBandHistory />\n ) : (\n isViewMode && <ProfileBandNavigation />\n )}\n </Box>\n {shouldShowSelect && (\n <ModeSwitcherSelect\n optionsGroup={accessibleOptionsGroup}\n buttonsGroup={accessibleButtonsGroup}\n value={mode}\n onChange={handleChange}\n disabled={isDisabledButtons}\n />\n )}\n </Box>\n <Box className={styles.comments}>\n <CommentsContainer\n uri={entity.uri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri: entity.uri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </Box>\n </ProfileBand>\n {!!onClone && (\n <ConfirmationDialog\n open={openCloneConfirmationDialog}\n title={i18n.text('Do you want to create a clone of the profile?')}\n content={i18n.text(\n 'Cloning will create a copy of the current profile. You can modify the cloned profile in the next step. Are you sure you want to proceed?'\n )}\n onSave={onClone}\n onDiscard={onCloneDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n )}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n overflow: 'hidden',\n marginLeft: 'auto',\n flexShrink: 0\n },\n badge: {\n fontSize: '12px',\n height: '18px',\n minWidth: '18px',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px'\n }\n});\n","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@material-ui/icons/Inbox';\nimport {useStyles} from '../../styles';\n\nexport const WorkflowButton: VFC = () => {\n const {total} = useContext(WorkflowTasksContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={total}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n paddingRight: '12px'\n },\n showMoreLink: {\n display: 'flex',\n margin: '16px'\n },\n showMoreIcon: {\n fontSize: '1rem'\n }\n});\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, CollaborationItem, EntitiesMapContext, useCommentsEntitiesMap} from '@reltio/components';\nimport {Box as Box} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport {useStyles} from './styles';\n\nexport const CollaborationList = () => {\n const styles = useStyles();\n const {getComments, comments, pageToken} = useContext(CollaborationContext);\n const entityUri = useSelector(mdm.selectors.getEntityUriWithDataTenant);\n\n useEffect(() => {\n getComments(entityUri);\n }, [getComments, entityUri]);\n\n const handleShowMoreComments = () => {\n getComments(entityUri, pageToken);\n };\n\n const entitiesMap = useCommentsEntitiesMap(comments);\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <Box className={styles.wrapper}>\n {comments.map((comment) => {\n const {objectId, relatedObjectUris, objectType, commentId} = comment;\n return (\n <CollaborationItem\n key={commentId}\n uri={objectId}\n relatedObjectUris={relatedObjectUris}\n objectType={objectType}\n comment={comment}\n />\n );\n })}\n {pageToken && (\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.showMoreLink}\n onClick={handleShowMoreComments}\n underline=\"none\"\n >\n <KeyboardArrowDownIcon className={styles.showMoreIcon} />\n {i18n.text('Show more')}\n </Link>\n )}\n </Box>\n </EntitiesMapContext.Provider>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n position: 'relative',\n height: '100%'\n }\n});\n","import React, {useContext} from 'react';\nimport {LinearLoadIndicator, WorkflowTaskCard, WorkflowTasksContext} from '@reltio/components';\nimport {useStyles} from './styles';\n\nexport const WorkflowList = () => {\n const styles = useStyles();\n const {tasks, loading} = useContext(WorkflowTasksContext);\n\n return (\n <div className={styles.wrapper}>\n {loading && <LinearLoadIndicator />}\n {tasks &&\n tasks.map((task) => {\n return <WorkflowTaskCard key={task.taskId} task={task} />;\n })}\n </div>\n );\n};\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\",\n id: \"svg2697213709a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", {\n transform: \"translate(-2 -2)\"\n}, React.createElement(\"mask\", {\n id: \"svg2697213709b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2697213709a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2697213709b)\",\n d: \"M0 0h24v24H0z\"\n}))))));","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport CollaborationIcon from '../../icons/CollaborationIcon.svg';\nimport {CollaborationContext} from '@reltio/components';\nimport {calcTotalCommentItems} from '@reltio/mdm-sdk';\nimport {useStyles} from '../../styles';\n\nexport const CollaborationButton: VFC = () => {\n const {commentsMap} = useContext(CollaborationContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={calcTotalCommentItems(commentsMap)}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst WorkflowPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Ready to go with the flow?')}\n secondaryText={i18n.text(\n 'Suggest a change or submit a match review, and we’ll kick off a workflow task to get things going.'\n )}\n />\n);\n\nexport default WorkflowPanelEmptyState;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst CollaborationPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Care to join the conversation?')}\n secondaryText={i18n.text(\n 'Leave comments for team members anywhere in the Profile page, and we’ll record it here.'\n )}\n />\n);\n\nexport default CollaborationPanelEmptyState;\n","import React, {useCallback, useContext, useEffect, useState, VFC} from 'react';\nimport {pipe, propEq, reject, pluck} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CollaborationContext,\n SideButtonsPanel,\n SidePanelContentHeader,\n SidePanel,\n WorkflowTasksContext,\n AddWorkflowButton,\n HistoryView,\n HistoryHeader,\n HistoryPanelEmptyState,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport {calcTotalCommentItems, Entity, getEntityType, isTempUri, Metadata} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {WorkflowButton} from './components/WorkflowButton/WorkflowButton';\nimport {CollaborationList} from './components/CollaborationList/CollaborationList';\nimport {WorkflowList} from './components/WorkflowList/WorkflowList';\nimport {CollaborationButton} from './components/CollaborationButton/CollaborationButton';\nimport WorkflowPanelEmptyState from './components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport CollaborationPanelEmptyState from './components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\n\nimport {useStyles} from './styles';\n\nconst DEFAULT_PANEL_WIDTH = 480;\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History\n}\nconst getSecondTitle = (total: number): string => {\n if (total) {\n return total === 1 ? i18n.text('${total} item', {total}) : i18n.text('${total} items', {total});\n }\n};\n\nexport const RightSidePanel: VFC = () => {\n const styles = useStyles();\n const isWorkflowSideViewEnabled = useSelector(mdm.selectors.isWorkflowSideViewEnabled) as boolean;\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const isCollaborationSideViewEnabled = useSelector(mdm.selectors.isCollaborationSideViewEnabled) as boolean;\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) as boolean;\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const metadata: Metadata = useSelector(mdm.selectors.getMetadata);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const workflowTasksContext = useContext(WorkflowTasksContext);\n const collaborationContext = useContext(CollaborationContext);\n\n const [active, setActive] = useState<ActivePanel>(null);\n const toggleActive = useCallback((newId: ActivePanel): void => {\n setActive((active) => (active === newId ? null : newId));\n }, []);\n const resetActive = useCallback((): void => {\n setActive(null);\n }, []);\n const isOpen = active !== null;\n const isHistoryTabActive = active === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity, enabled: isHistoryEnabled});\n\n const enabledWorkflowButton = isWorkflowSideViewEnabled && isWorkflowEnabled && !isTempUri(entity?.uri);\n const enabledCollaborationButton = isCollaborationSideViewEnabled && isCollaborationEnabled;\n const collaborationTotal = calcTotalCommentItems(collaborationContext?.commentsMap);\n\n const elements = [\n {\n buttonProps: {\n id: ActivePanel.Workflow,\n icon: WorkflowButton,\n tooltipTitle: i18n.text('Workflow')\n },\n content: workflowTasksContext?.total ? <WorkflowList /> : <WorkflowPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Workflow'),\n secondTitle: getSecondTitle(workflowTasksContext?.total),\n rightContent: <AddWorkflowButton />\n },\n hidden: !enabledWorkflowButton\n },\n {\n buttonProps: {\n id: ActivePanel.Collaboration,\n icon: CollaborationButton,\n tooltipTitle: i18n.text('Collaboration')\n },\n content: collaborationTotal ? <CollaborationList /> : <CollaborationPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Collaboration'),\n secondTitle: getSecondTitle(collaborationTotal)\n },\n hidden: !enabledCollaborationButton\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entity?.uri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n ),\n headerProps: {\n content: (\n <HistoryHeader\n total={isProfilePersisted ? (historicUris?.length || 0) + 1 : undefined}\n entityType={getEntityType(metadata, entity?.type)}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n )\n }\n }\n ];\n\n const visibleElements = reject(propEq('hidden', true))(elements);\n\n useEffect(() => {\n if (elements[active]?.hidden) {\n resetActive();\n }\n }, [active, elements, resetActive, visibleElements]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen} width={DEFAULT_PANEL_WIDTH}>\n {!elements[active]?.hidden && (\n <>\n <SidePanelContentHeader {...elements[active]?.headerProps} onClose={resetActive} />\n {elements[active]?.content}\n </>\n )}\n </SidePanel>\n <SideButtonsPanel\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(elements)}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport {Accordion as Accordion} from '@material-ui/core';\nimport {AccordionSummary as AccordionSummary} from '@material-ui/core';\nimport {AccordionDetails as AccordionDetails} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\n","import {equals, identity, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n","import React, {memo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\n\nimport useStyles from '../styles';\n\nimport {getDisplayedErrorMessage, getDisplayedErrorPath} from '../helpers';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n return (\n <li>\n <span>{displayedMessage}</span>\n {displayedErrorPath && (\n <>\n <br />\n <span className={styles.parents}>{displayedErrorPath}</span>\n </>\n )}\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {partition} from 'ramda';\nimport ErrorIcon from '@material-ui/icons/Warning';\nimport WarningIcon from '@material-ui/icons/Error';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, isCriticalError} from '@reltio/mdm-sdk';\n\nimport useStyles from './styles';\n\nimport {ErrorsPanel} from './components/ErrorsPanel';\nimport {Error} from './components/Error';\nimport {useCachedErrors} from './useCachedErrors';\n\nexport const ProfileErrorsPanel = () => {\n const styles = useStyles();\n const allErrors = useSelector(mdmModule.selectors.getProfileErrors);\n const cachedAllErrors = useCachedErrors(allErrors);\n\n const [errors, warnings]: [AttributeError[], AttributeError[]] = useMemo(\n () => partition(isCriticalError, cachedAllErrors),\n [cachedAllErrors]\n );\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype Props = {\n maxWidth?: number;\n};\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 scrollWrapper: {\n flexGrow: 1,\n overflowY: 'auto'\n },\n emptyState: {\n backgroundColor: '#FAFAFA',\n height: '100%'\n },\n profileWrapper: ({maxWidth}: Props) => ({\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n maxWidth: maxWidth ? `${maxWidth}px` : '100%'\n }),\n profileContainer: {\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 {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n closeIcon: {\n paddingRight: '12px',\n boxSizing: 'content-box',\n '& path': {\n fill: '#fff'\n }\n },\n snackbar: {\n '& > div': {\n flexWrap: 'nowrap',\n alignItems: 'baseline'\n }\n }\n}));\n","import {Snackbar as Snackbar} from '@material-ui/core';\nimport {Portal as Portal} from '@material-ui/core';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {ConfirmationDialog, SmallIconButton} from '@reltio/components';\nimport {NotificationItem, Action} from './types';\nimport {useStyles} from './styles';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\n\ntype Props = {\n notification: NotificationItem;\n};\n\nconst AUTO_HIDE_DURATION = 5000;\n\nexport const Notification = ({notification}: Props) => {\n const styles = useStyles({});\n const dispatch = useDispatch();\n const autoCloseInterval: number = useSelector(mdmModule.selectors.getAutoCloseInterval);\n const autoHideDuration =\n notification.autoHideDuration || (autoCloseInterval && autoCloseInterval * 1000) || AUTO_HIDE_DURATION;\n const [action, setAction] = useState<Action>();\n const [show, setShow] = useState(true);\n const closeSnackbar = useCallback(\n (_e?: unknown, reason?: string) => {\n if (reason !== 'clickaway') {\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n setShow(false);\n }\n },\n [notification]\n );\n const onDiscard = useCallback(() => {\n action.cancelAction && dispatch(action.cancelAction);\n setAction(undefined);\n }, [action]);\n const onConfirm = useCallback(() => {\n dispatch(action.applyAction);\n setAction(undefined);\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n }, [action, notification]);\n\n const actions = (\n <>\n {notification.actions.map((action) => (\n <Button\n key={action.label}\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n if (action.needConfirmation) {\n setAction(action);\n } else {\n dispatch(action.applyAction);\n }\n setShow(false);\n }}\n >\n {action.label}\n </Button>\n ))}\n </>\n );\n const message = (\n <>\n <SmallIconButton className={styles.closeIcon} size=\"S\" icon={CloseIcon} onClick={closeSnackbar} />\n {notification.text}\n </>\n );\n\n return (\n <>\n <Portal container={document.body}>\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={show}\n classes={{root: styles.snackbar}}\n action={actions}\n onClose={closeSnackbar}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n message={message}\n />\n </Portal>\n <ConfirmationDialog\n open={!!action}\n title={action?.confirmationText}\n content={action?.confirmationDescription}\n onSave={onConfirm}\n onDiscard={onDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n </>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n if (!notifications) return null;\n return (\n <>\n {notifications.slice(-1).map((n) => (\n <Notification key={n.id} notification={n} />\n ))}\n </>\n );\n};\n","import React, {memo, useCallback, useContext, useEffect, useMemo, useState, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch, useSelector} from 'react-redux';\nimport hash from 'object-hash';\nimport {\n debounce,\n Entity,\n fixNonUniqViewsIds,\n getProfileObjectIdsForCollaboration,\n ProfilePerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent, profile} from '@reltio/mdm-module';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n UsersContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n useSavedStateForEntityType,\n useCollaboration,\n useUsers,\n useWorkflowTasks,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n PopupBoundariesContext\n} from '@reltio/components';\n\nimport {ProfileSavedState, Layout} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {ProfileErrorsPanel} from '../ProfileErrorsPanel';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\n\nimport {useStyles} from './styles';\nimport {Notifications} from '../Notifications';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n};\n\nconst SAVE_STATE_DEBOUNCE_DELAY = 1000;\nconst emptyState = {} as ProfileSavedState;\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState}: Props) => {\n const styles = useStyles({maxWidth: config?.maxWidth});\n const dispatch = useDispatch();\n const getSavedStateAndFix = useCallback(() => {\n return getSavedState().then((state) => (state.layout ? {} : state));\n }, [getSavedState]);\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const debouncedSaveState = useCallback(debounce(saveState, SAVE_STATE_DEBOUNCE_DELAY), [saveState]) as (\n state: Record<string, ProfileSavedState>\n ) => void;\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const entityTypeUri = entity ? entity.type : null;\n\n const {isLoaded, savedState = emptyState, updateSavedState} = useSavedStateForEntityType<ProfileSavedState>({\n getSavedState: getSavedStateAndFix,\n saveState: debouncedSaveState,\n entityTypeUri\n });\n const [layout, setLayout] = useState<Layout>([]);\n const [views, setViews] = useState<ProfilePerspectiveConfig['views']>([]);\n\n const configHash = useMemo(() => hash(config), [config]);\n\n const isHistoryActive = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const collaboration = useCollaboration({objectIds});\n const emptyCollaboration = useContext(CollaborationContext);\n const users = useUsers();\n const workflowTasks = useWorkflowTasks(config?.workflow);\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n useHistorySlice({entity, historyEvent});\n const historyDiff = useHistoryDiff();\n\n useEffect(() => {\n if (isLoaded) {\n const isConfigChanged = configHash !== savedState.configHash;\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds({\n views: isConfigChanged || !savedState.views ? config.views : savedState.views,\n layout: isConfigChanged ? config.layout : savedState.layout\n });\n setViews(fixedViews);\n setLayout(fixedLayout);\n }\n }, [isLoaded, savedState, entityTypeUri]); // eslint-disable-line\n\n useEffect(() => {\n dispatch(profile.views.actions.profileViewsSet(views));\n }, [dispatch, views]);\n\n useEffect(() => {\n if (config.sidePanelViews) {\n dispatch(profile.sidePanelViews.actions.sidePanelViewsLoaded(config.sidePanelViews));\n }\n }, [config]); // eslint-disable-line\n\n useEffect(() => {\n if (scrollWrapperRef.current) {\n scrollWrapperRef.current.scrollTop = 0;\n }\n }, [entity?.uri]);\n\n useProfileValidation();\n\n const handleLayoutChange = useCallback(\n (layout: Layout) => {\n updateSavedState({layout, views, configHash});\n setLayout(layout);\n },\n [updateSavedState, configHash, views]\n );\n const boundariesElement = scrollWrapperRef.current;\n\n const popupBoundariesValue = useMemo(\n () => ({\n element: boundariesElement,\n priority: ['top', 'bottom']\n }),\n [boundariesElement]\n );\n return (\n <ProfilePerspectiveViewContext.Provider value={true}>\n <UsersContext.Provider value={users}>\n <CollaborationContext.Provider value={isHistoryActive ? emptyCollaboration : collaboration}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <HistoryDiffContext.Provider value={historyDiff}>\n <div className={styles.perspectiveView}>\n {(!isLoaded || !entity?.uri) && <LinearLoadIndicator />}\n {isLoaded && entity?.uri ? (\n <div className={styles.profileContainer}>\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand profileBandConfig={config.profileBand} />\n {!isHistoryActive && <ProfileErrorsPanel />}\n <div ref={scrollWrapperRef} className={styles.scrollWrapper}>\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ProfileLayout\n layout={layout}\n onLayoutChanged={handleLayoutChange}\n views={views}\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n <RightSidePanel />\n </div>\n ) : (\n <div className={styles.emptyState}>\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n </div>\n )}\n <Notifications />\n </div>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContext.Provider>\n </UsersContext.Provider>\n </ProfilePerspectiveViewContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\n","import {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {debounce, Entity, isDataTenantEntity, isTempUri, Mode} from '@reltio/mdm-sdk';\n\nexport const useProfileValidation = () => {\n const dispatch = useDispatch();\n const isValidateReadMode: boolean = useSelector(mdmModule.selectors.getValidateReadMode);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity) || ({} as Entity);\n const {uri, updatedTime} = entity;\n const isDTEntity = isDataTenantEntity(entity);\n const mode: Mode = useSelector(mdmModule.selectors.getMode);\n const profileViews = useSelector(mdmModule.selectors.getProfileViews);\n const hasProfileViews = profileViews && profileViews.length > 0;\n\n const validate = useCallback(\n debounce((needDispatch: boolean) => {\n if (needDispatch) {\n dispatch(profile.actions.validateProfile());\n }\n }, 500),\n [dispatch]\n );\n\n useEffect(() => {\n const needDispatch =\n isValidateReadMode && !isDTEntity && uri && !isTempUri(uri) && mode === Mode.Viewing && hasProfileViews;\n validate(needDispatch);\n }, [validate, isDTEntity, isValidateReadMode, updatedTime, uri, mode, hasProfileViews]);\n};\n","import React, {useCallback, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport MomentUtils from '@date-io/moment';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {ErrorPopup, SandboxAPIContext, ViewIdContext} from '@reltio/components';\nimport {convertOldProfileConfig, ProfilePerspectiveConfig, promisifyCallback} from '@reltio/mdm-sdk';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: (clb: (state: Record<string, ProfileSavedState>) => void) => void;\n qxSandboxApi?: {\n getCurrentPerspectiveId: () => string;\n showPerspective: (perspective) => void;\n setEntityUri: (entityUri: string, listener: () => void) => void;\n };\n};\n\nconst ProfilePerspective = ({config, store, onResize = identity, saveState, getSavedState, qxSandboxApi}: Props) => {\n const getSavedStatePromisified: () => Promise<Record<string, ProfileSavedState>> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n\n const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {processedConfig && (\n <ProfilePerspectiveView\n config={processedConfig}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n )}\n <ErrorPopup showErrorFromStore={true} />\n </>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n titleContainer: {\n overflow: 'hidden',\n fontSize: '16px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n display: 'flex',\n minHeight: '48px',\n color: theme.palette.text.secondary\n },\n link: {\n fontSize: '16px',\n fontWeight: 'normal'\n },\n icon: {\n height: '18px',\n color: theme.palette.text.secondary\n },\n totalCaption: {\n lineHeight: 'inherit',\n fontSize: '14px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px'\n },\n totalNumber: {\n fontSize: '16px',\n color: 'rgba(0,0,0,0.87)',\n marginRight: '5px',\n fontWeight: 500\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {FacetViewHeader, Spacer, ViewIdContext} from '@reltio/components';\nimport {Link as Link} from '@material-ui/core';\nimport ArrowForwardIosRoundedIcon from '@material-ui/icons/ArrowForwardIosRounded';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n total?: number;\n};\n\nexport const TagListHeader = ({total = 0}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n\n const switchToProfile = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'profile', viewId}));\n }, [dispatch, viewId]);\n\n return (\n <FacetViewHeader title=\"\">\n <div className={styles.titleContainer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.link}\n onClick={switchToProfile}\n underline=\"none\"\n >\n {i18n.text('Profile')}\n </Link>\n <ArrowForwardIosRoundedIcon className={styles.icon} />\n {i18n.text('Tags')}\n </div>\n <Spacer />\n <Typography className={styles.totalCaption} variant=\"caption\">\n <span className={styles.totalNumber}>{i18n.number(total, '0,0')}</span>\n {i18n.text('total profiles')}\n </Typography>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n toolbar: {\n display: 'flex',\n flexShrink: 0,\n background: 'white',\n borderBottom: '1px solid rgba(0,0,0,0.1)',\n boxSizing: 'border-box',\n paddingLeft: '16px'\n },\n avatar: {\n color: 'rgba(0, 0, 0, 0.38)',\n marginRight: '12px'\n },\n label: {\n fontSize: '20px',\n letterSpacing: '0.25px',\n lineHeight: '1.2',\n fontWeight: 500,\n color: theme.palette.text.primary,\n wordBreak: 'break-word'\n }\n}));\n","import React from 'react';\nimport TagIcon from '@material-ui/icons/LocalOffer';\nimport {Toolbar as Toolbar} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype Props = {\n label: string;\n};\n\nexport const TagProfileBand = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Toolbar className={styles.toolbar}>\n <TagIcon className={styles.avatar} />\n <Typography variant=\"h6\" className={styles.label}>\n {label}\n </Typography>\n </Toolbar>\n );\n};\n","import {useCallback, useMemo} from 'react';\nimport {map, assoc} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse,\n SearchFilter,\n GlobalSearchRequestOptions,\n getDataTenantFromEntityUri\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n entityUri: string;\n tag: string;\n};\n\nexport const useTagsProvider = ({entityUri, tag}: Props) => {\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dtssPath: string = useSelector(mdmModule.selectors.getDtssPath);\n const dataTenant = useMemo(() => getDataTenantFromEntityUri(entityUri), [entityUri]);\n const filters: SearchFilter[] = useMemo(() => {\n return [\n {\n filter: 'equals',\n fieldName: 'tags',\n values: [tag]\n }\n ];\n }, [tag]);\n\n const isDT = !!dataTenant;\n\n const getEntities = useCallback(\n (filters: SearchFilter[] = [], options = {}): Promise<Entity[]> => {\n const requestOptions = {\n select: 'uri,label,type,secondaryLabel,defaultProfilePicValue,startDate,endDate',\n ...options\n };\n return isDT\n ? getFilteredEntitiesFromDataTenant({\n filters,\n options: requestOptions,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n }).then(map(assoc('dataTenant', dataTenant)))\n : getFilteredEntities(filters, requestOptions);\n },\n [isDT, dataTenant, tenant, dtssPath]\n );\n\n const requestEntities = useCallback(\n (max, offset): Promise<Entity[]> => {\n return getEntities(filters, {offset, max, ...globalSearchRequestOptions});\n },\n [filters, globalSearchRequestOptions, getEntities]\n );\n\n const requestTotal = useCallback((): Promise<number> => {\n const options = globalSearchRequestOptions;\n return (isDT\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n }, [filters, globalSearchRequestOptions, isDT, dataTenant, tenant, dtssPath]);\n\n return {requestEntities, requestTotal};\n};\n","import {makeStyles} from '@material-ui/core/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 overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n tagsContainer: {\n display: 'flex'\n },\n fullHeight: {\n flexGrow: 1,\n height: 0\n },\n tagsView: {\n margin: '16px',\n width: '100%',\n paddingTop: '4px'\n },\n listContainer: {\n flex: 1,\n display: 'flex',\n overflow: 'hidden',\n position: 'relative',\n flexDirection: 'column',\n minHeight: '4px'\n },\n entitiesList: {\n overflowY: 'auto',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0\n }\n}));\n","import React, {memo, useEffect, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdmModule from '@reltio/mdm-module';\nimport {GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, LinearLoadIndicator, ProfilesList} from '@reltio/components';\nimport {TagListHeader} from './components/TagListHeader';\nimport {TagProfileBand} from './components/TagProfileBand';\nimport {useTag} from './hooks/useTag';\n\nimport {useStyles} from './styles';\n\nconst ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n\ntype Props = {\n tag?: string;\n entityUri?: string;\n};\n\nconst TagPerspectiveView = memo(({tag, entityUri}: Props) => {\n const styles = useStyles();\n\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [page, setPage] = useState(0);\n\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n\n useEffect(() => {\n setPage(0);\n }, [tag, entityUri, globalSearchRequestOptions]);\n\n const {isLoading, total, entities} = useTag({tag, entityUri, page, rowsPerPage});\n const refScrollBlock = useRef(null);\n\n useEffect(() => {\n if (refScrollBlock.current) {\n refScrollBlock.current.scrollTop = 0;\n }\n }, [entities]);\n\n const hasPagination = total > ROWS_PER_PAGE_OPTIONS[0];\n\n return (\n <div className={styles.perspectiveView}>\n <TagProfileBand label={tag} />\n <div className={classnames(styles.tagsContainer, {[styles.fullHeight]: hasPagination})}>\n <BasicView className={styles.tagsView}>\n <TagListHeader total={total} />\n <div className={styles.listContainer}>\n {isLoading && <LinearLoadIndicator />}\n {total > 0 && (\n <div className={styles.entitiesList} ref={refScrollBlock}>\n <ProfilesList entities={entities} />\n </div>\n )}\n {hasPagination && (\n <div className={styles.pagination}>\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n onChangeRowsPerPage={setRowsPerPage}\n />\n </div>\n )}\n </div>\n </BasicView>\n </div>\n </div>\n );\n});\n\nTagPerspectiveView.displayName = 'TagPerspectiveView';\n\nexport {TagPerspectiveView};\n","import {useCallback, useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch} from 'react-redux';\nimport {useSafePromise} from '@reltio/components';\nimport {ui} from '@reltio/mdm-module';\nimport {Entity, getRequestErrorMessage} from '@reltio/mdm-sdk';\nimport {useTagsProvider} from './useTagsProvider';\n\ntype Props = {\n tag: string;\n entityUri: string;\n page: number;\n rowsPerPage: number;\n};\n\nexport const useTag = ({tag, entityUri, page = 0, rowsPerPage = 50}: Props) => {\n const dispatch = useDispatch();\n\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [total, setTotal] = useState<number>(0);\n const [entities, setEntities] = useState<Entity[]>([]);\n\n const {requestEntities, requestTotal} = useTagsProvider({entityUri, tag});\n\n const onError = useCallback(\n (e) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(e, i18n.text('Something went wrong'))));\n setTotal(0);\n },\n [dispatch]\n );\n\n useEffect(() => {\n safeRequestTotalPromise(requestTotal()).then(setTotal).catch(onError);\n }, [requestTotal, safeRequestTotalPromise, onError]);\n\n useEffect(() => {\n setIsLoading(true);\n safeRequestEntitiesPromise(requestEntities(rowsPerPage, page * rowsPerPage))\n .then(setEntities)\n .catch(onError)\n .finally(() => setIsLoading(false));\n }, [page, rowsPerPage, requestEntities, safeRequestEntitiesPromise, onError]);\n\n return {isLoading, total, entities};\n};\n","import React from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {TagPerspectiveConfig} from '@reltio/mdm-sdk';\nimport TagPerspectiveView from '../components/TagPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'tagPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: TagPerspectiveConfig;\n tag?: string;\n entityUri?: string;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, store, onResize = identity}: Props) => {\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <TagPerspectiveView tag={tag} entityUri={entityUri} />}\n <ErrorPopup showErrorFromStore={true} />\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default TagPerspective;\n"],"names":["customStyles","input","currentStyles","fontSize","menuPortal","zIndex","useStyles","makeStyles","root","flex","title","paddingBottom","paddingLeft","dropDownInput","width","justifyContent","backgroundColor","borderTop","option","height","noOptionsMessage","entityType","selectedAttributes","className","onChange","disableUnderline","menuPlacement","metadata","useSelector","mdmModule","styles","prepareItems","useCallback","data","level","prevLabel","reduce","acc","item","hidden","chipLabel","label","push","value","uri","attrType","subAttributes","getAttributeTypeSubAttributes","concat","options","useMemo","attributes","classnames","Typography","variant","i18n","MultiSelect","TextFieldProps","InputProps","classes","components","DropdownIndicator","DropdownIndicatorWithIconButton","MultiValue","props","Option","isFocused","isSelected","innerProps","AttributeListItem","checked","labelInText","pipe","defaultTo","menuPortalTarget","document","body","collapseButton","cursor","expandLess","transform","isOpen","tooltipTitle","otherProps","buttonProps","icon","ExpandMore","iconClassName","tooltipProps","SmallIconButton","display","paddingRight","inputNumber","minWidth","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","min","SimpleDropDownSelector","placeholder","capitalize","map","withMuiSkin","CreatableSelect","innerRef","children","selectProps","MenuItem","classNames","ref","selected","component","Checkbox","color","ExpandedValueTooltip","propTypes","PropTypes","id","key","onClick","onMouseMove","onMouseOver","tabIndex","isRequired","current","theme","top","left","undefined","fontWeight","clearIndicator","padding","spacing","margin","dropdownIndicator","creatable","getOptions","loadingIndicator","componentsProp","classesProp","stylesProp","onChangeProp","onInputChange","onInputChangeProp","reactSelectProps","SelectComponent","AsyncSelect","Select","inputValue","setInputValue","useState","multiSelectClasses","omit","inputId","multiSelectComponents","mergeClasses","indicatorSeparator","base","loadingMessage","fontFamily","labelProps","InputLabelProps","htmlFor","shrink","length","isMulti","actionMeta","action","closeMenuOnSelect","hideSelectedOptions","loadOptions","defaultProps","cacheOptions","defaultOptions","ClearIndicator","Control","DownChevron","CrossIcon","Group","GroupHeading","IndicatorsContainer","IndicatorSeparator","Input","LoadingIndicator","Menu","MenuList","MenuPortal","LoadingMessage","NoOptionsMessage","MultiValueContainer","MultiValueLabel","MultiValueRemove","Placeholder","SelectContainer","SingleValue","ValueContainer","control","valueContainer","multiValue","singleValue","menu","container","group","groupHeading","indicatorsContainer","menuList","multiValueLabel","multiValueRemove","getOptionValue","isSearchable","inputRef","selectedUsers","valueToOption","prepareValues","values","tenant","servicesPath","cachedRequest","useRef","pluck","getAllUsersForTenant","then","prop","users","filter","username","utils","filterUsers","ActivityTypes","getItemDataType","path","getActivityType","activity","items","firstItem","isValidActivity","includes","splitActivityByType","propOr","groupBy","ifElse","itemsTotal","stringifyDeltaValue","delta","isNil","Array","isArray","join","is","Object","toString","getActivityLabel","transition","inputRoot","dateOptionLabel","paper","localeFormat","moment","longDateFormat","open","setOpen","handleToggle","onCancel","fullWidth","formatDataTypeValue","dataTypeDefinition","DataTypes","formatValue","endAdornment","menuIsOpen","readOnly","autoFocus","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","elevation","getContentAnchorEl","MenuListProps","autoFocusItem","style","DateRangePicker","onApply","DateRangeTypes","RequestStates","SingleAttributeContext","React","displayName","triggerButton","popupContent","paddingTop","maxWidth","checkboxControlRoot","marginTop","marginLeft","checkboxControlLabel","checkboxControlCheckbox","buttonRef","setIsOpen","showInactive","toggleShowInactive","useContext","togglePopup","Button","Popover","FormControlLabel","e","target","totalCaption","lineHeight","letterSpacing","flexShrink","ovIcon","SingleAttributeHeader","caption","totalVisibleValues","showInactiveValuesMenu","searchQuery","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","attributeType","FacetViewHeader","HideOnShrink","widthToHide","VerticalDivider","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","moreButton","marginBottom","buttonLabel","divider","ovFalse","inactive","noData","palette","text","secondary","getAttributeNameFromAttributeUri","getLastUriPart","search","some","String","getPagedLocalEntity","async","entity","attributeTypeUri","defaultMaxValues","Infinity","offset","findAttributeValuesByTypeUri","ovValues","isOv","getAttributeSource","slice","paging","totalOvValues","totalValues","emptyArray","SingleAttributeEditableContent","parentUri","noDataText","required","cardinality","name","dispatch","useDispatch","viewId","ViewIdContext","modifiedEntity","state","errors","errorMessage","getAttributePagerActiveTypeErrorMessage","mode","attributeSource","entityValuesUris","pathOr","modifiedEntityValues","modifiedEntityValuesUris","showEmptyEditors","isTempUri","emptyEditorValue","createNewAttribute","isModifiedEntityValuesEmpty","isEmptyValue","showEmpty","newValues","onAddAttributes","params","profile","param","onChangeAttribute","onDeleteAttribute","onDeactivateError","onAdd","attribute","isComplexAttribute","canCreate","checkCanCreateAttribute","commonProps","crosswalks","showNonOv","isEmptyAttributeList","CardinalityMessage","ErrorMessage","message","Add","idx","attributeValue","lazy","ownError","getAttributeOwnError","Divider","originalValue","modifiedEntityValue","find","propEq","deleted","edited","value1","value2","cleanser","over","lensPath","cleanAttributesWith","valueTransformer","unless","deleteEmptyComplex","identity","equals","areValuesEqual","cond","always","SingleAttributeReadableContent","flexDirection","content","position","overflow","flexGrow","pagination","SingleAttributeView","config","max","page","isLoading","hasPaging","entityUri","mdm","isViewMode","isEditableMode","pivotingAttributes","hasValues","PivotingAttributeContext","BasicView","Box","LinearLoadIndicator","renderContent","BasicTablePagination","count","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","canShowHistoryDiff","attributeUri","setValues","setPaging","setIsLoading","safePromise","useSafePromise","attributeValuesRef","apiPath","entitySelector","isHistoryModeEnabled","diff","attributeTypeName","attributeTypeSource","findAttributeValues","findAttributeTypeByUri","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","request","isDataTenantEntity","getPagedEntity","response","loadedValue","finally","useEffect","useDidUpdateEffect","partitionByOv","partition","totalProp","has","RelationsViewStateContext","button","sortControls","alignItems","sortSelectorRoot","sortSelectorMenuItem","sortOrderButton","FilterButton","sortOrder","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","isAsc","DropDownEditor","entries","menuItem","MenuProps","ArrowUpwardIcon","ArrowDownwardIcon","size","header","ImportDTContext","MAX","Math","pow","userSelect","badge","badgePosition","right","MultipleImportIcon","Badge","anchorOriginTopRightRectangle","badgeContent","CloudDownload","ImportFromDT","tenants","selectedTenant","onConfirmImport","onCancelConfirmation","onImportClick","dataTenants","reloadRelations","setTenants","setSelectedTenant","dtssPath","customerTenant","maxDtssImport","checkHasNonImportedConnections","importFromDT","Promise","all","hasNonImportedRelations","dataTenant","hasNonImportedConnections","modifiedTenants","importDTConnections","catch","error","ui","getRequestErrorMessage","useImportFromDTLoader","oneTenant","labelOnButton","indexOf","CloudDownloadIcon","DropDownMenuButton","menuId","buttonComponent","SmallIconButtonWithTooltip","menuItems","ConfirmationDialog","discardCaption","saveCaption","onDiscard","onSave","total","changeSearchQuery","tooltip","tooltipContent","secondaryLabel","progress","setSecondaryLabel","onOpen","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","Tooltip","disableFocusListener","useRelationInfo","connection","relation","getEntityType","entityLabel","getLabel","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","relationType","SuggestedButtons","acceptRelation","ignoreRelation","alignSelf","row","minHeight","rowInactive","background","inactiveBackground","entityAvatar","entityLabelContainer","textDecoration","primary","main","editButtonsContent","editButtons","removed","editedLabel","fontStyle","EditableRelationItem","memo","showControls","onRemoveRelation","onEditRelation","onAcceptRelation","onIgnoreRelation","renderRelationArrowButton","checkRemoved","checkEdited","ignored","checkIgnored","isActive","isActiveObject","canRemove","canUpdate","Mode","isRemoved","relationTypeMetadata","getRelationType","checkMetadataForDelete","checkMetadataForUpdate","checkRelationPermission","handleRemoveRelation","relationUri","handleEditRelation","handleAcceptRelation","handleIgnoreRelation","suggested","EditIcon","DeleteIcon","suggustedButtonsContent","disabled","captionText","EntityTypeIcon","EntityUriLink","getFirstRelationTypeObject","inRelations","outRelations","prepareRelation","direction","relations","wrapInArrayIfNeeded","Directions","arrowIcon","RelationArrowButton","showSecondLevel","parentEntityUri","contentSecondLevel","checkNew","ArrowDropDown","ArrowRight","secondLevelContent","SecondLevelWrapper","connections","toggleShowSecondLevel","loadRelations","loading","relationActivityFilter","setShowSecondLevel","setLoading","setTotal","activityFilter","requestConfig","returnObjects","returnDates","activeness","ActivityFilter","getRelationsForEntity","show","useSecondLevelConnections","entitiesMap","getEntitiesMapForConnections","EntitiesMapContext","RelationsContent","relationToAdd","relationsToEdit","checkIfCanAddRelations","onAddRelation","newConnection","createNewConnectionWithDefaultRelationType","connectionToRemove","defaultRelationTypeObject","connectionWithDefaultRelationType","evolve","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","currentEntityUri","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","getActivenessAttributes","showAttributesList","getAttributesListForReadMode","objectIds","getAttributeValuesUris","getCommentsCount","CollaborationContext","isEmpty","additionalRelatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","RelatedObjectUrisContext","attrTypes","ShowDetailsButton","onToggle","tooltipPlacement","InfoIconSelected","InfoIcon","wordBreak","showDetails","suggestedWrapper","commentsContainer","additionalButtonsWrapper","labelWrapper","RelationItem","isSuggested","setShowDetails","relatedObjectUris","COMMENTS_CONTAINER_VISIBILITY_AREA","CommentsContainer","getConnectionRelationUriForLink","objectType","allowOnlyOneComment","getCountOfLikes","ratings","rating","getCountOfDislikes","calcWidthOfLikesScale","calcWidthOfDislikesScale","wrapper","averageRating","scale","likesScale","dislikesScale","counts","likesCount","Ratings","mean","calcAverageRating","toFixed","ThumbUp","ThumbDown","textTransform","likeButton","RatingsButtons","onAgree","onDisagree","ratingOfCurrentUser","user","endIcon","buttonContent","comment","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","list","selectors","getEntity","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","field","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","build","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","pick","Provider","TableAttributeContext","CHANGE_SEARCH_QUERY","actions","basicTableViewState","createStandardAction","reducer","payload","removedStyle","tableContainer","rowCell","headCell","pointerEvents","withFilterAtBottom","DefaultHeadCellRenderer","getColumnsDataFromAttributes","attr","attributeUriToSearchUri","getAttrDataTypeDefinition","uniqBy","getColumnsData","getReadableAttributesList","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","isAttributeSearchUri","attrPath","getBasicTableColumnsData","columnData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","DefaultCellValueRenderer","onChangeSearchQuery","filtersEnabled","onToggleFilters","columnsData","selectedColumns","onChangeColumns","enabled","ColumnsSettings","withTableContext","deletedUris","rowValue","Boolean","cell","CellValueRenderer","isSorted","index","onEdit","onRemove","onSort","filters","onFilter","tableRowsData","assoc","getOvAttributeValuesByPath","getAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","checkIsEditableMode","renderRowCell","hoverRowIndex","setHoverRowIndex","canDelete","useConfigPermissions","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","hoveredRowRightContent","context","BasicTable","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","actionButtons","AttributeEditing","hasChanges","expanded","addButton","editor","TableAttributeView","visibleColumns","showTable","allColumnsData","checkHasChanges","onStartEditing","modifiedValues","editingValues","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","newAttribute","createDefaultValues","attributeTypes","prev","editingValueOriginal","attributeItem","without","original","both","not","useEditableAttribute","preparedValues","hasConfigToCreate","visibleColumnsData","nodeCounter","generateId","processResponse","fakeRoot","nodeId","parentPaths","i","nextRoot","j","nextParent","entities","isRoot","node","rootIndex","link","avatar","treeContainer","maxHeight","tree","buttonsContainer","ConfigContext","onImageLoadFail","src","DEFAULT_ICON","Node","absoluteImagePath","uiPath","entityLink","getEntityLink","onTitleClick","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","Avatar","onError","Link","to","getNodeKey","lineBlock","lineChildren","verticalLine","horizontalLineRight","textAlign","boxSizing","whiteSpace","nodeContent","bottom","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","borderRight","rowTitle","nodeContentRenderer","scaffoldBlockPxWidth","toggleChildrenVisibility","treeIndex","nodeTitle","showToggleChildrenButton","treeNodeRenderer","lowerSiblingCounts","scaffoldBlockCount","scaffold","forEach","lowerSiblingCount","shift","scaffoldWidth","nodeStyle","rowHeight","slideRegionSize","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","viewBox","version","xmlns","stroke","strokeWidth","fill","fillRule","fillOpacity","d","onGraphOpen","ShowGraphIcon","bodyWrapper","resizableHandleContainer","resizableHandleVisibilityArea","visibility","resizableHandle","dragIcon","Component","WithResizableHandle","DragIndicator","stubView","fullHeight","boxShadow","borderRadius","filterWrongLat","gt","lt","fullscreenBtn","ImageLineCaption","totalImages","photoWord","ImageAttributeViewEditableContent","requestNextPageOfAttributeValues","attributeValues","imageSize","IMAGE_SIZE","imageMargin","imageWidth","imageHeight","matchesContainer","footer","ActionButtons","match","onStartRequest","onFinishRequest","canMerge","canMark","getActionPermissionForMatch","matchRules","actionButtonProps","ActionButtonMode","onMergeFinish","MergeButton","NotMatchButton","MatchCard","ProfileMatchCard","createObjectIdForPM","matchEntityUri","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","ComponentStates","ResizableStubView","withResizableHandle","ResizableProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","ResizableProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","ResizableProfileTableAttributeView","tableAttribute","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","reject","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","useTableAttribute","ResizableProfileRelationsView","relationsState","setSortOrder","setSortOption","useRelationsState","ResizableCustomView","basicViewRef","defaultTooltip","html","visible","updatedTooltip","useAPI","innerHTML","childNodes","child","appendChild","ResizableHierarchyPathView","treeData","setTreeData","graphUri","forest","newTrees","updateTreesWithNewEntity","updatedTime","getPathsTree","console","warn","useLoadPaths","graph","openGraph","graphType","generateNodeProps","rowInfo","ReactSortableTree","isVirtualized","canDrag","ResizableProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","mdmModuleUi","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","showSeeAll","Loading","NoData","Loaded","underline","ResizableHierarchyTreeView","importedModule","default","HierarchyTreeView","ResizableRelationshipsTableView","RelationshipsTableView","ResizableEntityMapView","isFullscreen","onToggleFullscreen","mapKey","markers","setMarkers","resolve","useMarkers","loadingElement","defaultCenter","lat","lng","mapOptions","mapTypeControl","FullscreenExitIcon","FullscreenIcon","ReltioMap","defaultZoom","mapContainerClassName","ResizableImageAttributeView","entityValues","ImageAttributesLine","ViewsFactory","ViewTypes","ProfileViewTypes","getComponentBy","propName","store","HierarchyTree","HierarchyPaths","RelationsTable","Relations","Attributes","MapView","CustomView","ImageAttributeView","PotentialMatchesView","getComponent","Fallback","ViewComponent","isAutosize","Suspense","fallback","basicView","fixedSizeContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","ReactReduxContext","isCustomView","class","platform","CustomScriptPlatform","ProfileLayout","layout","layoutOptions","onLayoutChanged","ReltioGridLayout","LayoutItem","draggableHandle","xmlnsXlink","xlinkHref","mask","editingButtons","searchResults","comments","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","profileOperation","entityTypeUri","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","relationTypes","isRelationSuitableForEntityType","isRelationWithEntityType","when","complement","either","modifiedRelationTypes","isReference","getRelationTypeUriFromAttrType","T","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","ModeTypes","description","CreateIcon","VisibilityIcon","BUTTONS_GROUP","window","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleChange","handleSave","ProfileBand","showEntityId","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","WorkflowButton","WorkflowTasksContext","Inbox","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","WorkflowList","tasks","task","WorkflowTaskCard","taskId","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","SidePanelEmptyState","secondaryText","ActivePanel","getSecondTitle","RightSidePanel","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isCollaborationEnabled","historyEvent","workflowTasksContext","collaborationContext","active","setActive","toggleActive","newId","resetActive","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","elements","Workflow","headerProps","mainTitle","secondTitle","rightContent","AddWorkflowButton","Collaboration","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","visibleElements","SidePanel","SidePanelContentHeader","SideButtonsPanel","buttonsProps","onButtonClick","activeIndexId","accordionSummaryHeight","defaultBorderStyle","accordion","borderBottom","accordionExpanded","accordionSummary","accordionSummaryHeading","typography","pxToRem","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","parents","errorsAccordion","borderColor","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","errorIcon","warningIcon","ErrorsPanel","panels","expandedPanelId","ErrorComponent","accordionClassName","accordionDetailsClassName","Accordion","square","AccordionSummary","expandIcon","AccordionDetails","clearError","Error","displayedMessage","ErrorType","ErrorSource","getDisplayedErrorMessage","displayedErrorPath","errorPath","AttributeValuePathItemType","getDisplayedErrorPath","ProfileErrorsPanel","cachedAllErrors","allErrors","cacheForAllErrors","errors1","errors2","areErrorsEqual","useCachedErrors","warnings","isCriticalError","setExpandedPanelId","number","panelId","event","isExpanded","perspectiveView","overflowX","overflowY","scrollWrapper","emptyState","profileWrapper","profileContainer","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","ProfilePerspectiveView","saveState","getSavedState","getSavedStateAndFix","scrollWrapperRef","debouncedSaveState","debounce","isLoaded","savedState","updateSavedState","useSavedStateForEntityType","setLayout","setViews","configHash","hash","isHistoryActive","getProfileObjectIdsForCollaboration","collaboration","useCollaboration","emptyCollaboration","useUsers","workflowTasks","useWorkflowTasks","workflow","useHistorySlice","historyDiff","useHistoryDiff","isConfigChanged","fixedViews","fixedLayout","fixNonUniqViewsIds","sidePanelViews","scrollTop","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","validate","needDispatch","useProfileValidation","handleLayoutChange","boundariesElement","popupBoundariesValue","element","priority","ProfilePerspectiveViewContext","UsersContext","profileBand","PopupBoundariesContext","EmptyState","LogoRenderer","EMPTY_STATE_ICONS","EMPTY_STATE_VARIANTS","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","onResize","qxSandboxApi","getSavedStatePromisified","promisifyCallback","processedConfig","convertOldProfileConfig","SandboxAPIContext","StylesProvider","MuiPickersUtilsProvider","MomentUtils","handleHeight","floor","ErrorPopup","showErrorFromStore","titleContainer","textOverflow","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","toolbar","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","ROWS_PER_PAGE_OPTIONS","TagPerspectiveView","tag","setRowsPerPage","globalSearchRequestOptions","safeRequestTotalPromise","safeRequestEntitiesPromise","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","json","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","onChangeRowsPerPage"],"sourceRoot":""}
1
+ {"version":3,"file":"2498.js","mappings":"yvBAEO,MAAMA,EAAe,CACxBC,MAAQC,GAAD,KAAwBA,EAAxB,CAAuCC,SAAU,SACxDC,WAAaF,GAAD,KAAwBA,EAAxB,CAAuCG,OAAQ,QAGlDC,GAAYC,EAAAA,EAAAA,GAAW,CAChCC,KAAM,CACFC,KAAM,GAEVC,MAAO,CACHC,cAAe,OACfC,YAAa,MACbT,SAAU,QAEdU,cAAe,CACXC,MAAO,OACPC,eAAgB,SAChBC,gBAAiB,sBACjBC,UAAW,OAEfC,OAAQ,CACJf,SAAU,OACVgB,OAAQ,QAEZC,iBAAkB,CACdjB,SAAU,UCDlB,MA6EA,EA7E0B,IAQb,IARc,WACvBkB,EADuB,mBAEvBC,EAFuB,UAGvBC,EAHuB,SAIvBC,EAJuB,MAKvBd,EALuB,iBAMvBe,EANuB,cAOvBC,EAAgB,UACP,EACT,MAAMC,GAAqBC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACjCC,EAASxB,IAETyB,GAAeC,EAAAA,EAAAA,cACjB,SAACC,GAAwE,IAAjDC,EAAiD,uDAAzC,EAAGC,EAAsC,uDAA1B,GAC3C,OAAOF,EAAKG,QAAO,CAACC,EAAKC,KACrB,GAAIA,EAAKC,OAAQ,OAAOF,EACxB,MAAMG,EAAa,GAAEL,GAAaA,EAAY,QAAQG,EAAKG,QAC3DJ,EAAIK,KAAK,CACLD,MAAOH,EAAKG,MACZE,MAAOL,EAAKM,IACZC,SAAUP,EACVE,UAAAA,EACAN,MAAAA,IAEJ,MAAMY,GAAgBC,EAAAA,EAAAA,KAA8BpB,EAAUW,GAC9D,OAAOD,EAAIW,OAAOF,EAAgBf,EAAae,EAAeZ,EAAQ,EAAGM,GAAa,MACvF,MAEP,CAACb,IAGCsB,GAAUC,EAAAA,EAAAA,UAAQ,IAAMnB,GAAaV,MAAAA,OAAA,EAAAA,EAAY8B,aAAc,KAAK,CAAC9B,EAAYU,IAmBvF,OACI,yBAAKR,UAAW6B,GAAAA,CAAWtB,EAAOtB,KAAMe,IACpC,kBAAC,EAAA8B,WAAD,CAAY9B,UAAWO,EAAOpB,MAAO4C,QAAS,aACzC5C,GAAS6C,IAAAA,KAAU,cAExB,kBAACC,EAAA,EAAD,CACIb,MAAOrB,EACP2B,QAASA,EACTQ,eAAgB,CACZC,WAAY,CAACjC,iBAAAA,GACbkC,QAAS,CAACnD,KAAMsB,EAAOjB,gBAE3B+C,WAAY,CACRC,kBAAmBC,EAAAA,EACnBC,WAlBS,QAAC,KAAC9B,GAAF,EAAW+B,E,kXAAX,oBACrB,kBAACD,EAAA,EAAeC,EAAQ/B,EAAKO,YAkBjByB,OAhCK,QAAC,UAACC,EAAD,WAAYC,EAAZ,KAAwBlC,EAAxB,MAA8BQ,EAA9B,WAAqC2B,GAAtC,SACjB,wBAASA,EACL,kBAACC,EAAA,EAAD,CACIC,QAASH,EACTjC,MAAOD,EAAKC,MACZD,KAAMA,EACNQ,MAAOA,EACP8B,YAAa9B,EACbyB,UAAWA,OA0BX1C,UAAUgD,EAAAA,EAAAA,OAAKC,EAAAA,EAAAA,WAAU,IAAKjD,GAC9BM,OAAQ9B,EACR2D,QAAS7B,EACTJ,cAAeA,EACfgD,iBAAkBC,SAASC,U,kGC/FpC,MAAMtE,GAAYC,E,SAAAA,GAAW,CAChCsE,eAAgB,CACZC,OAAQ,WAEZC,WAAY,CACRC,UAAW,uB,gNCMnB,MAaA,EAbuB,IAA0D,IAAzD,OAACC,GAAS,EAAV,aAAiBC,GAAwC,EAAvBC,E,kXAAuB,8BAC7E,MAAMrD,EAASxB,IACT8E,EAAc,CAChBC,KAAMC,EAAAA,EACN/D,UAAWO,EAAO+C,eAClBU,cAAenC,GAAAA,CAAW,CAAC,CAACtB,EAAOiD,YAAaE,KAE9CO,EAAe,CACjBN,aAAcA,GAElB,OAAO,kBAACO,EAAA,EAAD,KAAgCL,EAAiBI,EAAkBL,M,mICrBvE,MAAM7E,GAAYC,E,SAAAA,GAAW,CAChCC,KAAM,CACFkF,QAAS,OACTjF,KAAM,GAEVR,MAAO,CACHkB,OAAQ,OACRP,YAAa,OACb+E,aAAc,MACdxF,SAAU,QAEdyF,YAAa,CACTC,SAAU,OACVC,YAAa,GACb3E,OAAQ,OACRH,gBAAiB,uBAErB+E,UAAW,CACPjF,MAAO,UCLTkF,EAAU,CACZzC,IAAAA,KAAU,WACVA,IAAAA,KAAU,SACVA,IAAAA,KAAU,QACVA,IAAAA,KAAU,SACVA,IAAAA,KAAU,UACVA,IAAAA,KAAU,UAsCd,EAnC6B,IAAyD,IAAvD0C,UAAWtD,EAAOuD,GAAnB,SAA0B1E,EAA1B,QAAoC2E,GAAoB,EAClF,MAAMrE,EAASxB,IAGT8F,GAAiB5B,EAAAA,EAAAA,MAAK6B,EAAAA,GAAUC,UAFRC,GAAqB,CAACA,EAAUL,IAEQ1E,GAChEgF,GAAehC,EAAAA,EAAAA,OAFO,QAAE7B,MAAO8D,GAAT,QAAuC,CAAC9D,EAAO8D,KAE5BjF,GAC/C,OACI,yBAAKD,UAAWO,EAAOtB,MACnB,kBAAC,EAAAkG,UAAD,CACIC,KAAK,SACLhE,MAAOA,GAAS,GAChBnB,SAAU4E,EACVQ,WAAY,CAACC,IAAK,EAAGV,QAASA,GAC9BzC,WAAY,CAACC,QAAS,CAACnD,KAAMsB,EAAO7B,QACpCsB,UAAWO,EAAO8D,cAEtB,kBAACkB,EAAA,EAAD,CACIrE,MAAO,GACPsE,aAAaC,EAAAA,EAAAA,GAAWd,GACxB3E,UAAWO,EAAOiE,UAClBpD,MAAO,CAACA,MAAOuD,EAAMzD,OAAOuE,EAAAA,EAAAA,GAAWd,IACvCjD,QAAS+C,EAAQiB,KAAKtE,IAAD,CACjBA,MAAAA,EACAF,OAAOuE,EAAAA,EAAAA,GAAWrE,OAEtBnB,SAAUgF,EACV/C,eAAgB,CACZmD,WAAY,CAACT,QAASA,GACtBzC,WAAY,CAACC,QAAS,CAACnD,KAAMsB,EAAO7B,c,mGCjDxD,SAAeiH,E,QAAAA,GAAYC,EAAAA,I,mRCIZ,SAASlD,EAAOD,GAC3B,MAAM,WACFI,EADE,SAEFgD,EAFE,SAGFC,EAHE,UAIFnD,EAJE,WAKFC,EACAmD,aAAa,QAAC3D,GANZ,MAOFlB,GACAuB,EAEJ,OACI,kBAAC,EAAAuD,SAAD,GACIhG,UAAWiG,GAAAA,CAAW7D,EAAQzC,OAAQ,CAAC,CAACyC,EAAQ,qBAAsBQ,IACtEsD,IAAKL,EACLM,SAAUxD,EACVyD,UAAU,OACNvD,GAEJ,kBAAC,EAAAwD,SAAD,CAAUC,MAAM,UAAUvD,QAASH,IACnC,kBAAC2D,EAAA,EAAD,CAAsBnF,MAAOF,GACzB,yBAAKlB,UAAWoC,EAAQ,iBAAkB0D,KAM1DpD,EAAO8D,UAAY,CACfV,SAAUW,IAAAA,KACV5D,WAAY4D,IAAAA,MAAgB,CACxBC,GAAID,IAAAA,OAAAA,WACJE,IAAKF,IAAAA,OACLG,QAASH,IAAAA,KAAAA,WACTI,YAAaJ,IAAAA,KAAAA,WACbK,YAAaL,IAAAA,KAAAA,WACbM,SAAUN,IAAAA,OAAAA,aACXO,WACHnB,SAAUY,IAAAA,UAAoB,CAC1BA,IAAAA,MAAgB,CAAC,OACjBA,IAAAA,KACAA,IAAAA,MAAgB,CACZQ,QAASR,IAAAA,IAAAA,eAGjB9D,UAAW8D,IAAAA,KAAAA,WACX7D,WAAY6D,IAAAA,KAAAA,WACZvF,MAAOuF,IAAAA,OACPV,YAAaU,IAAAA,MAAgB,CACzBrE,QAASqE,IAAAA,MAAgB,CACrB9G,OAAQ8G,IAAAA,YCtDpB,MAIA,EAJmB,CACf/D,OAAMA,G,krBCOV,MAAM3D,GAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CACzBhG,MAAO,CACHiG,IAAK,EACLC,KAAM,IAEV5B,YAAc/C,IAAD,CACT0B,SAAU1B,EAAM+C,aAAe/C,EAAMvB,MAAQ,YAASmG,IAE1D,mBAAoB,CAChBC,WAAY,KAEhBC,eAAgB,CACZC,QAASN,EAAMO,QAAQ,GACvBC,OAAQR,EAAMO,QAAQ,IAAM,KAEhCE,kBAAmB,CACfH,QAASN,EAAMO,QAAQ,GACvBC,OAAQR,EAAMO,QAAQ,IAAM,SAIpC,IAAIf,EAAK,EAGT,SAASzE,EAAYQ,GACjB,MAAM,MACFvB,EADE,UAEF0G,EAFE,WAGFC,EAHE,iBAIFC,EACAzF,WAAY0F,EACZ3F,QAAS4F,EACTzH,OAAQ0H,EACRhI,SAAUiI,EACVC,cAAeC,EATb,cAUFjI,EAAgB,QAEhBsC,EADG4F,E,kXAXP,CAYI5F,EAZJ,kIAcM6F,EAAkBV,EAAYhC,EAAkBiC,EAAaU,EAAAA,EAAcC,EAAAA,GAE1EC,EAAYC,IAAiBC,EAAAA,EAAAA,UAAS,IACvCC,EAAqB7J,GAAU8J,EAAAA,EAAAA,MAAK,CAAC,WAAYpG,IACjDqG,EArBgB,iBAAgBpC,IAuBhCrE,EAAa,EAAH,GACT0G,EACAhB,GAGD3F,GAAU4G,EAAAA,EAAAA,IAAaJ,EAAoBZ,GAiB3CzH,EAAS,EAAH,CACR0I,mBAAqBC,GAAD,KACbA,EADa,CAEhBxB,OAAQ,WAEZI,iBAAmBoB,GAAD,KACXA,EADW,CAEd/E,QAAS2D,EAAmBoB,EAAK/E,QAAU,SAE/CgF,eAAiBD,GAAD,KACTA,EADS,CAEZE,WAAY,gDAEbnB,GAGDoB,EAAanI,EACb,CACE4H,QAAAA,EACA5G,eAAgB,EAAF,CACVhB,MAAAA,EACAoI,gBAAiB,CACbC,QAAST,EACTU,UAAQ/G,EAAMrB,QAASqB,EAAMrB,MAAMqI,cAAgBpC,EACnDrH,UAAWoC,EAAQlB,QAEpBuB,EAAMP,iBAGf,GAEN,OACI,kBAACoG,EAAD,GACIoB,SAAO,EACPZ,QAASA,EACTL,WAAYA,EACZxI,SA5CR,SAAsBmB,EAAOuI,GACzBzB,EAAa9G,EAAOuI,GACM,kBAAtBA,EAAWC,SACXlB,EAAc,IACdN,EAAkB,GAAI,CAACwB,OAAQ,mBAyC/BzB,cApDR,SAA2B/G,EAA3B,GAA4C,IAAV,OAACwI,GAAS,EACxCxB,EAAkBhH,EAAO,CAACwI,OAAAA,IACX,cAAXA,GACAlB,EAActH,IAkDdyI,mBAAmB,EACnBC,qBAAqB,EACrB1H,QAASA,EACTC,WAAYA,EACZ9B,OAAQA,EACRJ,cAAeA,EACf4J,YAAalC,GACTwB,EACAhB,IAKhBpG,EAAY+H,aAAe,CACvBpC,WAAW,EACXqC,cAAc,EACd5H,WAAY,GACZD,QAAS,GACToD,YAAa,GACbsC,kBAAkB,EAClBK,cAAe,OACflI,SAAU,QAGdgC,EAAYuE,UAAY,CAUpBoB,UAAWnB,IAAAA,KAEXwD,aAAcxD,IAAAA,KACdyD,eAAgBzD,IAAAA,KAEhBrF,MAAOqF,IAAAA,QACHA,IAAAA,MAAgB,CACZvF,MAAOuF,IAAAA,OAAAA,WACPrF,MAAOqF,IAAAA,OAGf/E,QAAS+E,IAAAA,QACLA,IAAAA,MAAgB,CACZvF,MAAOuF,IAAAA,OAAAA,WACPrF,MAAOqF,IAAAA,OAIfxG,SAAUwG,IAAAA,KAEV0B,cAAe1B,IAAAA,KAEfjB,YAAaiB,IAAAA,OAEbvF,MAAOuF,IAAAA,OAEPqB,iBAAkBrB,IAAAA,KAElBpE,WAAYoE,IAAAA,MAAgB,CACxB0D,eAAgB1D,IAAAA,KAChB2D,QAAS3D,IAAAA,KACTnE,kBAAmBmE,IAAAA,KACnB4D,YAAa5D,IAAAA,KACb6D,UAAW7D,IAAAA,KACX8D,MAAO9D,IAAAA,KACP+D,aAAc/D,IAAAA,KACdgE,oBAAqBhE,IAAAA,KACrBiE,mBAAoBjE,IAAAA,KACpBkE,MAAOlE,IAAAA,KACPmE,iBAAkBnE,IAAAA,KAClBoE,KAAMpE,IAAAA,KACNqE,SAAUrE,IAAAA,KACVsE,WAAYtE,IAAAA,KACZuE,eAAgBvE,IAAAA,KAChBwE,iBAAkBxE,IAAAA,KAClBjE,WAAYiE,IAAAA,KACZyE,oBAAqBzE,IAAAA,KACrB0E,gBAAiB1E,IAAAA,KACjB2E,iBAAkB3E,IAAAA,KAClB/D,OAAQ+D,IAAAA,KACR4E,YAAa5E,IAAAA,KACb6E,gBAAiB7E,IAAAA,KACjB8E,YAAa9E,IAAAA,KACb+E,eAAgB/E,IAAAA,OAGpBrE,QAASqE,IAAAA,MAAgB,CACrBgF,QAAShF,IAAAA,OACTiF,eAAgBjF,IAAAA,OAChBkF,WAAYlF,IAAAA,OACZ5G,iBAAkB4G,IAAAA,OAClBmF,YAAanF,IAAAA,OACbjB,YAAaiB,IAAAA,OACboF,KAAMpF,IAAAA,OACNc,eAAgBd,IAAAA,OAChBkB,kBAAmBlB,IAAAA,OACnB9G,OAAQ8G,IAAAA,OACR,mBAAoBA,IAAAA,OACpBvF,MAAOuF,IAAAA,SAMXlG,OAAQkG,IAAAA,MAAgB,CACpBc,eAAgBd,IAAAA,KAChBqF,UAAWrF,IAAAA,KACXgF,QAAShF,IAAAA,KACTkB,kBAAmBlB,IAAAA,KACnBsF,MAAOtF,IAAAA,KACPuF,aAAcvF,IAAAA,KACdwF,oBAAqBxF,IAAAA,KACrBwC,mBAAoBxC,IAAAA,KACpB/H,MAAO+H,IAAAA,KACPqB,iBAAkBrB,IAAAA,KAClB0C,eAAgB1C,IAAAA,KAChBoF,KAAMpF,IAAAA,KACNyF,SAAUzF,IAAAA,KACV5H,WAAY4H,IAAAA,KACZkF,WAAYlF,IAAAA,KACZ0F,gBAAiB1F,IAAAA,KACjB2F,iBAAkB3F,IAAAA,KAClB5G,iBAAkB4G,IAAAA,KAClB9G,OAAQ8G,IAAAA,KACRjB,YAAaiB,IAAAA,KACbmF,YAAanF,IAAAA,KACbiF,eAAgBjF,IAAAA,OAGpBvE,eAAgBuE,IAAAA,OAChBoB,WAAYpB,IAAAA,KACZtG,cAAesG,IAAAA,OACftD,iBAAkBsD,IAAAA,OAClB4F,eAAgB5F,IAAAA,KAChB6F,aAAc7F,IAAAA,KACd8F,SAAU9F,IAAAA,MAAgB,CAACQ,QAASR,IAAAA,UAGxC,MC/PA,ED+PA,G,ioBE/PO,MAAMhI,EAAe,CACxBC,MAAQC,GAAD,KAAwBA,EAAxB,CAAuCC,SAAU,SACxDuK,eAAiBxK,GAAD,KAAwBA,EAAxB,CAAuCC,SAAU,SACjEC,WAAaF,GAAD,KAAwBA,EAAxB,CAAuCG,OAAQ,QAGlDC,GAAYC,EAAAA,EAAAA,GAAW,CAChCC,KAAM,CACFC,KAAM,GAEVC,MAAO,CACHC,cAAe,OACfC,YAAa,MACbT,SAAU,QAEdU,cAAe,CACXC,MAAO,OACPC,eAAgB,SAChBC,gBAAiB,sBACjBC,UAAW,OAEfC,OAAQ,CACJf,SAAU,OACVgB,OAAQ,UCwChB,EA9CqB,IAAmE,IAAlE,cAAC4M,EAAD,SAAgBvM,EAAhB,UAA0BD,EAA1B,iBAAqCE,GAA6B,EACpF,MAAMK,EAASxB,IAET0N,EAAiBrL,IAAD,CAAqBA,MAAAA,EAAOF,MAAOE,IACnDsL,EAAiBC,GAAqBA,EAAOjH,IAAI+G,GAIjDG,GAASvM,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WACrBuM,GAAexM,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,iBAE3BwM,GAAgBC,EAAAA,EAAAA,UAUtB,OACI,yBAAK/M,UAAW6B,GAAAA,CAAWtB,EAAOtB,KAAMe,IACpC,kBAAC,EAAA8B,WAAD,CAAY9B,UAAWO,EAAOpB,MAAO4C,QAAS,aACzCC,IAAAA,KAAU,SAEf,kBAACC,EAAA,EAAD,CACIb,MAAOsL,EAAcF,GACrBvM,UAAUgD,EAAAA,EAAAA,OAAKC,EAAAA,EAAAA,WAAU,KAAK8J,EAAAA,EAAAA,OAAM,SAAU/M,GAC9CiK,gBAAgB,EAChBrC,WAlBQY,IACXqE,EAAc7F,UACf6F,EAAc7F,SAAUgG,EAAAA,EAAAA,KAAqB,CAACL,OAAAA,EAAQC,aAAAA,KAEnDC,EAAc7F,QAAQiG,MACzBjK,EAAAA,EAAAA,OAAKkK,EAAAA,EAAAA,MAAK,UAAUH,EAAAA,EAAAA,OAAM,YAZbvE,CAAAA,GAAgB2E,GACjC3E,EAAa2E,EAAMC,QAAQC,GAAaC,EAAAA,IAAAA,QAAAA,OAAqBD,EAAU7E,KAAe2E,EAW3CI,CAAY/E,GAAaiE,KAc5DxK,eAAgB,CACZC,WAAY,CAACjC,iBAAAA,GACbF,UAAWO,EAAOjB,eAEtB+C,WAAY,CACRC,kBAAmBC,EAAAA,GAEvBhC,OAAQ9B,EACR2D,QAAS7B,EACT4C,iBAAkBC,SAASC,U,gBC3DpC,IAAKoK,E,0BAAAA,GAAAA,EAAAA,cAAAA,gBAAAA,EAAAA,eAAAA,iBAAAA,EAAAA,eAAAA,iBAAAA,EAAAA,eAAAA,iBAAAA,EAAAA,gBAAAA,kBAAAA,EAAAA,kBAAAA,oBAAAA,EAAAA,kBAAAA,oBAAAA,EAAAA,qBAAAA,uBAAAA,EAAAA,qBAAAA,uBAAAA,EAAAA,qBAAAA,uBAAAA,EAAAA,wBAAAA,0BAAAA,EAAAA,gBAAAA,kBAAAA,EAAAA,kBAAAA,oBAAAA,EAAAA,wBAAAA,0BAAAA,EAAAA,yBAAAA,2BAAAA,EAAAA,0BAAAA,4BAAAA,EAAAA,2BAAAA,6BAAAA,EAAAA,WAAAA,aAAAA,EAAAA,YAAAA,cAAAA,EAAAA,YAAAA,cAAAA,EAAAA,kBAAAA,oBAAAA,EAAAA,cAAAA,gBAAAA,EAAAA,gBAAAA,kBAAAA,EAAAA,gBAAAA,kBAAAA,EAAAA,6BAAAA,+BAAAA,EAAAA,qCAAAA,uCAAAA,EAAAA,cAAAA,gBAAAA,EAAAA,cAAAA,gBAAAA,EAAAA,cAAAA,gB,CAAAA,IAAAA,EAAAA,M,4OCIZ,MAAMC,GAAkBC,EAAAA,EAAAA,MAAK,CAAC,OAAQ,SAEzBC,EAAmBC,IAC5B,MAAM,MAACC,EAAD,MAAQ5M,GAAS2M,GAChBE,GAAaD,GAAS,GAC7B,OAAOJ,EAAgBK,IAAc7M,GAK5B8M,GAAkB/K,EAAAA,EAAAA,MAAK2K,GAFAxI,IAA0BnC,EAAAA,EAAAA,MAAK0J,EAAAA,QAAQsB,EAAAA,EAAAA,UAAS7I,GAAtBnC,CAA6BwK,EAAAA,KAI9ES,EAAuBL,IACzB5K,EAAAA,EAAAA,OACHkL,EAAAA,EAAAA,QAAO,GAAI,UACXC,EAAAA,EAAAA,SAAQV,GACRf,EAAAA,QACA0B,EAAAA,EAAAA,SACI,QAAC,OAAC5E,GAAF,SAAcA,EAAS,KACvB/D,EAAAA,EAAAA,MAAKoI,G,8UAAD,IACGD,EADH,CAEAC,MAAAA,EACAQ,WAAYR,EAAMrE,YAEtB,IAAM,CAACoE,KAXR5K,CAaL4K,GAGOU,EAAuBC,IAC5BC,EAAAA,EAAAA,OAAMD,GACC,GACiB,iBAAVA,EACPA,EACAE,MAAMC,QAAQH,GACdA,EAAM9I,IAAI6I,GAAqBK,KAAK,OACpCC,EAAAA,EAAAA,IAAGC,OAAQN,GACQD,EAAnB,UAAWC,EAA4BA,EAAMpN,MAA6B0N,OAAOnC,OAAO6B,IAExFA,EAAMO,WAIRC,EAAoB5J,IACd,CACX,CAACqI,EAAAA,EAAAA,eAA8BzL,IAAAA,KAAU,iBACzC,CAACyL,EAAAA,EAAAA,iBAAgCzL,IAAAA,KAAU,mBAC3C,CAACyL,EAAAA,EAAAA,iBAAgCzL,IAAAA,KAAU,mBAC3C,CAACyL,EAAAA,EAAAA,iBAAgCzL,IAAAA,KAAU,kBAC3C,CAACyL,EAAAA,EAAAA,0BAAyCzL,IAAAA,KAAU,2BACpD,CAACyL,EAAAA,EAAAA,4BAA2CzL,IAAAA,KAAU,6BACtD,CAACyL,EAAAA,EAAAA,mBAAkCzL,IAAAA,KAAU,qBAC7C,CAACyL,EAAAA,EAAAA,gBAA+BzL,IAAAA,KAAU,mBAC1C,CAACyL,EAAAA,EAAAA,gBAA+BzL,IAAAA,KAAU,mBAC1C,CAACyL,EAAAA,EAAAA,mBAAkCzL,IAAAA,KAAU,sBAC7C,CAACyL,EAAAA,EAAAA,gBAA+BzL,IAAAA,KAAU,mBAC1C,CAACyL,EAAAA,EAAAA,eAA8BzL,IAAAA,KAAU,iBACzC,CAACyL,EAAAA,EAAAA,eAA8BzL,IAAAA,KAAU,iBACzC,CAACyL,EAAAA,EAAAA,eAA8BzL,IAAAA,KAAU,iBACzC,CAACyL,EAAAA,EAAAA,eAA8BzL,IAAAA,KAAU,qBACzC,CAACyL,EAAAA,EAAAA,mBAAkCzL,IAAAA,KAAU,qBAC7C,CAACyL,EAAAA,EAAAA,iBAAgCzL,IAAAA,KAAU,mBAC3C,CAACyL,EAAAA,EAAAA,yBAAwCzL,IAAAA,KAAU,+BACnD,CAACyL,EAAAA,EAAAA,yBAAwCzL,IAAAA,KAAU,2BACnD,CAACyL,EAAAA,EAAAA,2BAA0CzL,IAAAA,KAAU,6BACrD,CAACyL,EAAAA,EAAAA,sBAAqCzL,IAAAA,KAAU,wBAChD,CAACyL,EAAAA,EAAAA,sBAAqCzL,IAAAA,KAAU,wBAChD,CAACyL,EAAAA,EAAAA,sBAAqCzL,IAAAA,KAAU,wBAChD,CAACyL,EAAAA,EAAAA,YAA2BzL,IAAAA,KAAU,aACtC,CAACyL,EAAAA,EAAAA,aAA4BzL,IAAAA,KAAU,cACvC,CAACyL,EAAAA,EAAAA,mBAAkCzL,IAAAA,KAAU,kBAC7C,CAACyL,EAAAA,EAAAA,aAA4BzL,IAAAA,KAAU,YACvC,CAACyL,EAAAA,EAAAA,8BAA6CzL,IAAAA,KAAU,+BACxD,CAACyL,EAAAA,EAAAA,sCAAqDzL,IAAAA,KAAU,yCAEtDoD,IAAS,K,wJC7EpB,MAAMrG,GAAYC,E,SAAAA,GAAW,CAChCC,KAAM,CACFC,KAAM,GAEVyI,kBAAmB,CACfsH,WAAY,uBAEhBC,UAAW,CACPtQ,SAAU,OACVgB,OAAQ,IAEZlB,MAAO,CACH8I,QAAS,YAEb2H,gBAAiB,CACb7K,SAAU,SAEd8K,MAAO,CACH9K,SAAU,WCDZ+K,EAAeC,IAAAA,aAAoBC,eAAe,KA0FxD,EAlF8B,IAAwC,IAAvC,OAAC5C,EAAD,SAAS1M,EAAT,QAAmB2E,GAAoB,EAClE,MAAMY,EAAc6J,EACd9C,GAAWQ,EAAAA,EAAAA,QAAO,OACjByC,EAAMC,IAAW9G,EAAAA,EAAAA,WAAS,GAC3BpI,EAASxB,IAOT2Q,GAAejP,EAAAA,EAAAA,cAAY,KAC7BgP,GAASD,IAAUA,IACnB5K,MACD,CAACA,IAEE+K,EAAW,KACbF,GAAQ,IAGZ,OACI,yBAAKzP,UAAWO,EAAOtB,MACnB,kBAAC,EAAAkG,UAAD,CACIyK,WAAS,EACTxO,MAAOuL,EAAOjH,KAAKtE,GA9Bf,EAACA,EAAaoE,KACvBiJ,EAAAA,EAAAA,OAAMrN,GACN,GAAEoE,IACF,IAAEqK,EAAAA,EAAAA,KAAoB,CAACC,mBAAoB,CAAC1K,KAAM2K,EAAAA,IAAAA,uBAAkC3O,KA2BlD4O,CAAY5O,EAAOoE,KAAcoJ,KAAK,OACnEhI,QAAS8I,EACT3N,QAAQ,SACRmE,IAAKqG,EACLpK,WAAY,CACR8N,aACI,kBAAC1N,EAAA,EAAD,CACIwD,YAAa,CAAC3D,QAAS7B,EAAQ2P,WAAYV,GAC3C3M,WAAY,KAGpB3C,kBAAkBuO,EAAAA,EAAAA,OAAM9B,GACxBwD,UAAU,EACV/N,QAAS,CACLnD,KAAMsB,EAAO2O,UACbxQ,MAAO6B,EAAO7B,QAGtB4K,gBAAiB,CACbE,QAAQ,GAEZhE,YAAaxD,IAAAA,KAAW,GAAEwD,OAAsBA,OAEpD,kBAAC,EAAAqF,KAAD,CACI9I,QAAQ,OACRyN,KAAMA,EACNY,WAAW,EACXhO,QAAS,CAACgN,MAAO7O,EAAO6O,OACxBiB,SAAU9D,EAAStF,QACnBqJ,QAASX,EACTY,aAAc,CACVC,SAAU,SACVC,WAAY,QAEhBC,gBAAiB,CACbF,SAAU,MACVC,WAAY,QAEhBE,UAAW,EACXC,mBAAoB,KACpBC,cAAe,CACXC,cAAetB,EACfuB,MAAO,CAACxR,MAAO,UAGnB,kBAACyR,EAAA,EAAD,CAGIrE,OAAQA,EACRgD,SAAUA,EACVsB,QApECtE,IACb1M,EAAS0M,GACT8C,GAAQ,IAmEIrK,KAAM2K,EAAAA,IAAAA,2B,gBCjEnB,IAAKmB,EAqEAC,E,kCArEAD,GAAAA,EAAAA,OAAAA,SAAAA,EAAAA,IAAAA,MAAAA,EAAAA,QAAAA,U,CAAAA,IAAAA,EAAAA,K,SAqEAC,GAAAA,EAAAA,KAAAA,OAAAA,EAAAA,QAAAA,UAAAA,EAAAA,OAAAA,SAAAA,EAAAA,MAAAA,Q,CAAAA,IAAAA,EAAAA,M,iaCjGL,MCNMC,EAAyBC,IAAAA,cAc3B,MAEXD,EAAuBE,YAAc,yB,6HCjB9B,MAAMvS,GAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCuS,cAAe,CACXjN,SAAU,EACVgC,MAAO,mBACP/G,MAAO,QAEXiS,aAAc,CACVC,WAAY,OACZrS,cAAe,OACfC,YAAa,OACb+E,aAAc,OACdsN,SAAU,QACVnS,MAAO,OAEXoS,oBAAqB,CACjBC,UAAW,MACXC,WAAY,SAEhBC,qBAAsB,CAClBlT,SAAU,WAEdmT,wBAAyB,CACrBxN,YAAa,WCsCrB,EA9CqB,IAAwB,IAAvB,UAACvE,GAAsB,EACzC,MAAMO,EAASxB,IACTiT,GAAYjF,EAAAA,EAAAA,WACXrJ,EAAQuO,IAAatJ,EAAAA,EAAAA,WAAS,IAC/B,aAACuJ,EAAD,mBAAeC,IAAsBC,EAAAA,EAAAA,YAAWhB,GAEhDiB,EAAc,IAAMJ,GAAWzC,IAAUA,IAE/C,OACI,oCACI,kBAAC,EAAA8C,OAAD,CAAQpM,IAAK8L,EAAW5P,QAAS,CAACnD,KAAM4C,GAAAA,CAAWtB,EAAOgR,cAAevR,IAAa4G,QAASyL,GAC3F,kBAAC,IAAD,OAEJ,kBAAC,EAAAE,QAAD,CACI/C,KAAM9L,EACNtB,QAAS,CAACgN,MAAO7O,EAAOiR,cACxBnB,SAAU2B,EAAU/K,QACpBqJ,QAAS+B,EACT9B,aAAc,CACVC,SAAU,SACVC,WAAY,SAEhBC,gBAAiB,CACbF,SAAU,MACVC,WAAY,UAGhB,kBAAC,EAAA+B,iBAAD,CACIpQ,QAAS,CACLnD,KAAMsB,EAAOoR,oBACbzQ,MAAOX,EAAOuR,sBAElBrG,QACI,kBAAC,EAAApF,SAAD,CACIrG,UAAWO,EAAOwR,wBAClBhP,QAASmP,EACTjS,SAAWwS,GAAMN,EAAmBM,EAAEC,OAAO3P,WAGrD7B,MAAOc,IAAAA,KAAU,6BCrDxBjD,GAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCC,KAAM,CACFuI,QAAS,gBAEbmL,aAAc,CACVC,WAAY,OACZhU,SAAU,OACViU,cAAe,SACfvM,MAAO,kBACPwM,WAAY,EACZtT,eAAgB,aAChBiS,WAAY,OACZrS,cAAe,QAEnB2T,OAAQ,CACJnB,UAAW,MACXC,WAAY,WCJPmB,EAAwB,IAAkE,IAAjE,QAACC,EAAD,mBAAUC,EAAV,uBAA8BC,GAAmC,EACnG,MAAM5S,EAASxB,KAET,YAACqU,EAAD,eAAcC,EAAd,QAA8BC,EAA9B,sBAAuCC,EAAvC,iBAA8DC,EAA9D,cAAgFC,IAAiBrB,EAAAA,EAAAA,YACnGhB,GAQJ,OACI,kBAACsC,EAAA,EAAD,CAAiBvU,MAAO6C,IAAAA,KAAUiR,GAAUjT,UAAWO,EAAOtB,MAC1D,kBAAC0U,EAAA,EAAD,CAAcC,YAAa,KACvB,kBAACC,EAAA,EAAD,CAAiBjU,OAAQ,GAAI8H,OAAQ,KACrC,kBAAC,EAAA5F,WAAD,CAAY9B,UAAWO,EAAOoS,aAAc5Q,QAAQ,WAC/CC,IAAAA,OAAYkR,GAAqB,IACV,IAAvBA,EAA2BlR,IAAAA,KAAU,QAAUA,IAAAA,KAAU,WAI9D,kBAAC8R,EAAA,EAAD,CACIC,WAAYR,EACZvT,UAAWO,EAAOwS,OAClBiB,YAAaR,EACbC,cAAeA,IAGvB,kBAACQ,EAAA,EAAD,CAAuBC,MAAOd,EAAanT,SAtBlBiU,IAC7Bb,EAAea,GACfZ,EAAQ,MAqBHH,GAA0B,kBAAC,EAAD,Q,oDC1ChC,MAAMpU,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCiN,WAAY,CACR3M,QAAS,oBACT/H,gBAAiB,sBACjB2U,aAAc,OAElBC,YAAa,CACTzV,SAAU,OACV0I,WAAY,IACZsL,WAAY,QAEhB9O,KAAM,CACFlF,SAAU,OACV2F,YAAa,OAEjB+P,QAAS,CACL5M,OAAQ,cACRjI,gBAAiB,oBAErB8U,QAASrN,EAAMsN,SACfC,OAAQ,CACJ7V,SAAU,OACV0H,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BpN,QAAS,sBCZJqN,GAAmCC,EAAAA,IAEnCC,GAAS,CAAC3T,EAAgCgS,IAE1C,iBADMhS,EAEA0N,OAAOnC,OAAOvL,GAAO4T,MAAM5T,GACvBA,EAAM4T,MAAK,IAAa,IAAZ,MAAC5T,GAAW,EAC3B,OAAO2T,GAAO3T,EAAOgS,QAItB7F,EAAAA,IAAAA,QAAAA,OAAqB0H,OAAO7T,GAAQgS,GAa1C8B,GAAsBC,MAAAA,IAOrB,IAP4B,SACtC/U,EADsC,OAEtCgV,EAFsC,iBAGtCC,EAHsC,iBAItCC,EAAmBC,EAAAA,EAJmB,OAKtCC,EAAS,EAL6B,YAMtCpC,EAAc,IACJ,EACV,MAAMzG,GAAS1J,EAAAA,EAAAA,MACXwS,EAAAA,KACApI,EAAAA,EAAAA,SAAO,QAAC,MAACjM,GAAF,SAAa2T,GAAO3T,EAAOgS,MAFvBnQ,CAGb7C,EAAUgV,EAAQC,GACdK,GAAWrI,EAAAA,EAAAA,QAAOsI,EAAAA,IAAMhJ,GAE9B,MAAO,CACH,EAACiJ,EAAAA,EAAAA,KAAmBP,IAAoB,CACpC,CAACR,GAAiCQ,IAAoBK,EAASG,MAAML,EAAQA,EAASF,GACtFQ,OAAQ,CACJ,CAACT,GAAmB,CAChBU,cAAeL,EAASjM,OACxBuM,YAAarJ,EAAOlD,Y,8pBCnBxC,MAAMwM,GAAa,GAENC,GAAiC,IAAyE,IAAxE,OAACvJ,EAAD,cAAS8G,EAAT,UAAwB0C,EAAxB,aAAmCjE,EAAnC,WAAiDkE,GAAuB,EACnH,MAAM7V,EAASxB,MAERsC,IAAKgU,EAAkBgB,SAAUrP,EAAlC,YAA8CsP,EAA9C,KAA2DC,GAAQ9C,EACnE+C,GAAWC,EAAAA,EAAAA,eACXC,GAAStE,EAAAA,EAAAA,YAAWuE,EAAAA,GACpBvB,GAAS/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WACrBsW,GAAiBvW,EAAAA,EAAAA,cAClBwW,GAAUvW,EAAAA,GAAAA,UAAAA,kBAAsCuW,EAAOzB,EAAO/T,MAAS,KAEtEyV,GAASzW,EAAAA,EAAAA,cAAawW,GACxBvW,EAAAA,GAAAA,UAAAA,kCAAsDuW,EAAOV,EAAW1C,KAEtEsD,GAAe1W,EAAAA,EAAAA,cAAawW,IAC9BG,EAAAA,EAAAA,KAAwCb,EAAW1C,EAAenT,EAAAA,GAAAA,UAAAA,iBAAqCuW,MAErGI,GAAO5W,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,SACnB4W,GAAkBtB,EAAAA,EAAAA,KAAmBnC,GACrC0D,GAA6BlU,EAAAA,EAAAA,OAAKmU,EAAAA,EAAAA,QAAOnB,GAAY,CAACiB,EAAiBX,KAAQ7Q,EAAAA,EAAAA,MAAIyH,EAAAA,EAAAA,MAAK,QAA3DlK,CAAoEmS,GACjGiC,GAAyCD,EAAAA,EAAAA,QAAOnB,GAAY,CAACiB,EAAiBX,GAAOK,GACrFU,EAAqCD,EAAqB3R,KAAIyH,EAAAA,EAAAA,MAAK,QACnEoK,GAAmBC,EAAAA,EAAAA,KAAUpC,EAAO/T,KAEpCoW,GAAmB1K,EAAAA,EAAAA,SACrB2K,EAAAA,EAAAA,KAAmB,CACfvB,UAAAA,EACA1C,cAAAA,KAIFkE,GAA8BC,EAAAA,EAAAA,KAAaP,GAC3CQ,EAAY7Q,GAAc2Q,EAE1BG,EAAYD,EACZ,CAACJ,EAAiBxQ,SAClBoQ,EAAqBhK,QAAOpK,EAAAA,EAAAA,OAAKkK,EAAAA,EAAAA,MAAK,OAAQqK,EAAAA,MAE9CO,GAAkBtX,EAAAA,EAAAA,cACnBuX,IACG/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,cAA+BzB,EAApCvT,CAA8C+U,EAAOtS,KAAKwS,GAAD,MAAgBA,EAAhB,CAAuBxB,OAAAA,QACpF,CAACA,EAAQF,IAGP2B,GAAoB1X,EAAAA,EAAAA,cACrBuX,IAA0B/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,gBAAiCzB,EAAtCvT,CAAA,MAAoD+U,EAApD,CAA4DtB,OAAAA,MACvF,CAACA,EAAQF,IAGP4B,GAAoB3X,EAAAA,EAAAA,cACrBuX,IAA0B/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,gBAAiCzB,EAAtCvT,CAAA,MAAoD+U,EAApD,CAA4DtB,OAAAA,MACvF,CAACA,EAAQF,IAGP6B,GAAoB5X,EAAAA,EAAAA,cAAYwC,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,OAAAA,QAAAA,iBAAyCzB,GAAW,CAACA,IAE1F8B,GAAQ7X,EAAAA,EAAAA,cAAY,KACtB,MAAM8X,EAA2B,CAC7BpC,UAAAA,EACA1C,cAAAA,GAGJ,OAAOsE,EACHF,KAAcW,EAAAA,EAAAA,KAAmB/E,EAAcrO,MAAQ,CAACmT,EAAWA,GAAa,CAACA,MAEtF,CAACR,EAAiB5B,EAAW1C,EAAeoE,IAEzCY,GAAYC,EAAAA,EAAAA,KAAwB,CAACjF,cAAAA,EAAewD,KAAAA,IAEpD0B,EAAc,CAChBlF,cAAeA,EACfqD,OAAAA,EACA8B,WAAYhC,EAAegC,WAC3B3B,KAAAA,EACAc,gBAAAA,EACAI,kBAAAA,EACAE,kBAAAA,EACAQ,UAAW3G,GAET4G,EAA4C,IAArBhB,EAAUrO,QAAkC,IAAlBkD,EAAOlD,OAC9D,OACI,6BACI,kBAACsP,GAAA,EAAD,CAAoBzC,YAAaA,IACjC,kBAAC0C,GAAA,EAAD,CAAcC,QAASlC,IACtB0B,GACG,kBAAC,EAAAnG,OAAD,CAAQhM,MAAM,UAAUM,QAAS0R,EAAOtY,UAAWO,EAAO4T,YACtD,kBAAC+E,GAAA,EAAD,CAAS9W,QAAS,CAACnD,KAAMsB,EAAOuD,QAChC,yBAAK9D,UAAWO,EAAO8T,aAAcrS,IAAAA,KAAU,SAGtD8V,EAAUpS,KAAI,CAACtE,EAAO+X,IACnB,kBAAC,KAAD,IACIxS,IAAKvF,EAAMC,KACPsX,EAFR,CAGIS,eAAgBhY,EAChBiY,KAAMxB,IAAc7Q,EACpBuQ,iBAAkBA,EAClB+B,UAAUC,EAAAA,EAAAA,KAAqBnY,EAAO+X,EAAK9D,EAAkByB,GAC7DsB,kBAAmBA,OAG1BN,EAAUrO,OAAS,GAAKkD,EAAOlD,OAAS,GAAK,kBAAC,EAAA+P,QAAD,CAASxZ,UAAWO,EAAO+T,UACxE3H,EAAOjH,KAAK+T,IACT,MAAMC,EAAsBrC,EAAqBsC,MAAKC,EAAAA,EAAAA,QAAO,MAAOH,EAAcpY,MAC5ED,EAAQsY,GAAuBD,EAC/BI,EAAU1C,EAAiBlJ,SAAS7M,EAAMC,OAASiW,EAAyBrJ,SAAS7M,EAAMC,KAC3FyY,GAAUD,GAAWH,IDjFb,EAACK,EAAwBC,KACnD,MAAMC,GACFpL,EAAAA,EAAAA,IAAGC,OAAQiL,EAAO3Y,SAAUyN,EAAAA,EAAAA,IAAGC,OAAQkL,EAAO5Y,QACxC8Y,EAAAA,EAAAA,OACEC,EAAAA,EAAAA,UAAS,CAAC,WACVC,EAAAA,EAAAA,KAAoB,CAChBC,kBAAkBC,EAAAA,EAAAA,QAAO3E,EAAAA,KAAM9M,EAAAA,EAAAA,MAAK,CAAC,WACrC0R,oBAAoB,KAG1BC,EAAAA,SACV,OAAOC,EAAAA,EAAAA,QAAOR,EAASF,GAASE,EAASD,KCsEsBU,CAAehB,EAAqBD,GACjF5C,GAAQ8D,EAAAA,EAAAA,MAAK,CACf,EAACC,EAAAA,EAAAA,QAAOf,IAAUe,EAAAA,EAAAA,QAAO,YACzB,EAACA,EAAAA,EAAAA,QAAOd,IAASc,EAAAA,EAAAA,QAAO,YAFdD,GAId,OACI,yBAAKhU,IAAKvF,EAAMC,IAAKrB,UAAW6B,GAAAA,CAAW,CAAC,CAACtB,EAAOgU,WAAWoB,EAAAA,EAAAA,KAAKvU,MAChE,kBAAC,KAAD,MACQuX,EADR,CAEIS,eAAgBhY,EAChBkY,UAAUC,EAAAA,EAAAA,KAAqBnY,EAAO,KAAMiU,EAAkByB,GAC9DsB,kBAAmBA,EACnBvB,MAAOA,SAKtBiC,GAAwB,kBAAC,EAAAhX,WAAD,CAAY9B,UAAWO,EAAOkU,QAAS2B,K,gBChKrE,MAAMrX,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCqN,QAASrN,EAAMsN,aCSNqG,GAAiC,IAAkD,IAAjD,OAAClO,EAAD,cAAS8G,EAAT,aAAwBvB,GAAyB,EAC5F,MAAM3R,EAASxB,KAEf,OACI,oCACK4N,EAAOjH,KAAKtE,GAEL,yBAAKuF,IAAKvF,EAAMC,IAAKrB,UAAW6B,GAAAA,CAAW,CAAC,CAACtB,EAAOgU,WAAWoB,EAAAA,EAAAA,KAAKvU,MAChE,kBAAC,KAAD,CACIgY,eAAgBhY,EAChBqS,cAAeA,EACfoF,UAAW3G,SCrB1BnT,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCC,KAAM,CACFkF,QAAS,OACT2W,cAAe,UAEnBC,QAAS,CACLC,SAAU,WACVxT,QAAS,eACTyT,SAAU,OACVC,SAAU,GAEdzG,OAAQ,CACJ7V,SAAU,OACV0H,MAAO,oBAEX6U,WAAY,CACRD,SAAU,EACVpI,WAAY,OCEPsI,GAAsB,IAAgC,IAA/B,OAACC,EAAD,UAASrb,GAAsB,EAC/D,MAAM,QAACiT,EAAD,IAAUqI,EAAV,uBAAenI,GAA0BkI,EAEzC9a,EAASxB,MAET,OAAC4N,EAAD,mBAASuG,EAAT,KAA6BqI,EAA7B,QAAmCjI,EAAnC,UAA4CkI,EAA5C,UAAuDC,EAAvD,cAAkEhI,EAAlE,aAAiFvB,IAAgBE,EAAAA,EAAAA,YACnGhB,GAGEsK,GAAYrb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,cACxBC,GAAavb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,eACzBE,GAAiBxb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,mBAC7BG,GAA0Czb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,uBAEtDI,EAA8B,IAAlBpP,EAAOlD,OACnB2M,EAAaiF,EAAO,eAAiBrZ,IAAAA,KAAU,iBA8BrD,OACI,kBAACga,EAAA,WAAD,CAAmC5a,MAAO0a,GACtC,kBAACG,EAAA,EAAD,CAAWjc,UAAW6B,GAAAA,CAAWtB,EAAOtB,KAAMe,IAC1C,kBAACgT,EAAD,CACIE,mBAAoBA,EACpBD,QAASA,EACTE,uBAAwBA,IAE5B,kBAAC,EAAA+I,IAAD,CAAKlc,UAAWO,EAAOwa,SApCb,MAClB,GAAIS,EACA,OAAO,kBAACW,EAAA,EAAD,MAGX,GAAI1I,EAAe,CACf,GAAImI,GAAcG,EAAW,CACzB,MAAMtZ,EAAQ,CACVkK,OAAAA,EACA8G,cAAAA,EACAvB,aAAAA,GAEJ,OAAO,kBAAC2I,GAAmCpY,GACxC,GAAIoZ,EAAgB,CACvB,MAAMpZ,EAAQ,CACVkK,OAAAA,EACA8G,cAAAA,EACA0C,UAAWuF,EACXxJ,aAAAA,EACAkE,WAAAA,GAEJ,OAAO,kBAACF,GAAmCzT,IAInD,OAAO,kBAAC,EAAAX,WAAD,CAAY9B,UAAWO,EAAOkU,QAAS2B,IAWLgG,IAChCX,GACG,kBAACY,EAAA,EAAD,CACIC,MAAOpJ,EACPqI,KAAMA,EACNgB,YAAajB,EACbkB,mBAAoB,GACpBC,aAAcnJ,EACdlR,QAAS,CAACnD,KAAMsB,EAAO4a,iB,qJClDxC,MAAMuB,GAA2B,CACpCrB,EACArD,EACA2E,KAEA,MAAM,aAACC,EAAD,IAAetB,EAAM,IAAMD,EAC3Bjb,GAAWC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,cACtBhP,EAAQkQ,IAAalU,EAAAA,EAAAA,UAAS,KAC9BmN,EAAQgH,IAAanU,EAAAA,EAAAA,UAAS,OAC9B6S,EAAWuB,IAAgBpU,EAAAA,EAAAA,WAAS,GACrCqU,GAAcC,EAAAA,GAAAA,KACdC,GAAqBnQ,EAAAA,EAAAA,QAAyB,MAE9CyJ,GAAWC,EAAAA,EAAAA,eACX0G,GAAU9c,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,YACtB/O,GAASvM,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,WACrByB,EAAiBT,EAAqBhB,EAAAA,GAAAA,UAAAA,kBAAkCA,EAAAA,GAAAA,UAAAA,qBACxEvG,GAAS/U,EAAAA,EAAAA,aAAY+c,GACrBxB,GAAavb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,eACzB0B,GAAuBhd,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,yBACnC2B,GAAOjd,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,gBAEnBxF,EAAYf,EAAO/T,IACnBkc,EAAoB1I,GAAiC+H,GACrDY,GAAsB5H,EAAAA,EAAAA,KAAmBgH,GAC/CM,EAAmBjW,SAAUwW,EAAAA,EAAAA,KAAoBrI,EAAQe,EAAWoH,GACpE,MAAM9J,GAAgB9R,EAAAA,EAAAA,UAAQ,KAAM+b,EAAAA,EAAAA,KAAuBtd,EAAUwc,IAAe,CAACxc,EAAUwc,KACzF,aAACe,IAAgBtd,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,gCAC7B,aAACzJ,GAAgB8F,EACjB4F,GAAiBnd,EAAAA,EAAAA,cAAY,KAC/B,GACIgT,IACAoK,EAAAA,EAAAA,KAAoBpK,MACnB+D,EAAAA,EAAAA,KAAUrB,KACX2H,EAAAA,EAAAA,KAAyBlB,GAC3B,CACEG,GAAa,GACb,MAAM,KAACxB,EAAD,aAAOrJ,GAAyB8F,EAAR+F,E,kXAA9B,CAAsC/F,EAAtC,yBACMgG,GAAUC,EAAAA,EAAAA,KAAmB7I,IAAWiI,EAAuBnI,GAAsBgJ,EAAAA,IAC3FlB,EACIgB,E,+UAAQ,EACJ5d,SAAAA,EACAgV,OAAAA,EACA+H,QAAAA,EACAvQ,OAAAA,EACAuJ,UAAAA,EACAb,iBAAkBgG,EAClBjG,iBAAkBuH,EAClBpH,OAAQ8F,EAAMC,EACdoC,aAAAA,EACAjc,QAASwQ,EAAe,QAAK7K,GAC1B0W,KAGN7Q,MAAMiR,IACH,MAAMvc,GAAa+L,EAAAA,EAAAA,MAAK,CAAC6P,GAAsBW,GACzCxR,GAA2ByK,EAAAA,EAAAA,QAAO,GAAI,CAACmG,GAAoB3b,GAC5Dyb,GACD7G,EACIyB,EAAAA,GAAAA,QAAAA,iCAAiD,CAC7C9B,UAAAA,EACAd,iBAAkBuH,EAClBW,kBAAAA,EACA5Q,OAAAA,KAIZkQ,EACIlQ,EAAOjH,KAAK0Y,IAAgB,MAExB,OADqB,UAAGlB,EAAmBjW,eAAtB,aAAG,EAA4B0S,MAAKC,EAAAA,EAAAA,QAAO,MAAOwE,EAAY/c,QACzD+c,MAGlCtB,GAAUnP,EAAAA,EAAAA,MAAK,CAAC,SAAUiP,GAAehb,OAE5Cyc,SAAQ,KACLtB,GAAa,WAGrBF,EAAU,IACVC,EAAU,QAGf,CACCK,EACAhH,EACAvJ,EACAgQ,EACAtB,EACAlb,EACA4X,EACA2F,EACAlK,EACA4J,EACAC,KAGJgB,EAAAA,EAAAA,YAAU,KACNV,MACD,CAACA,KAEJW,EAAAA,GAAAA,IAAmB,KACX3C,GACAgC,MAEL,CAAChC,IACJ,MAAM4C,GAAgBC,EAAAA,EAAAA,WAAU9I,EAAAA,MACzB,CAAE3B,GAAewK,EAActB,EAAmBjW,SAAW,IAC9DuM,EAAmBtB,EAAe,GAAK8B,EACvC0K,EAAYxM,EAAe,cAAgB,gBAC3CgB,GAAqB7E,EAAAA,EAAAA,SAAOsQ,EAAAA,EAAAA,KAAID,IAAYvR,EAAAA,EAAAA,MAAKuR,IAAY9D,EAAAA,EAAAA,QAAOjO,EAAOlD,QAAtD4E,CAA+DyH,GACpF2F,EAAYH,EAAMpI,EAClBK,EAAwBuC,MAAAA,GAAAA,EAAQE,YAChCF,EAAOE,YAAc9C,EACrBM,EAAiB/J,OACvB,MAAO,CACHkD,OAAAA,EACA6O,UAAAA,EACAC,UAAAA,EACAvI,mBAAAA,EACAO,cAAAA,EACAF,sBAAAA,EACAC,iBAAAA,I,oMCvJD,MAAMoL,GAA4BvN,IAAAA,cAAwC,MAEjFuN,GAA0BtN,YAAc,4BCHxC,MAEavS,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChC2X,OAAQ,CACJvY,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BrV,MAAO,OACP+E,SAAU,QAEdkN,aAAc,CACVhK,QAAU,aAEdsK,qBAAsB,CAClBlT,SAAU,WAEdmT,wBAAyB,CACrBxN,YAAa,OAEjB+P,QAAS,CACL7U,gBAAiB,kBACjBiI,OAAS,cAEbvI,MAAO,CACHiV,aAAc,QAElB0K,aAAc,CACV3a,QAAS,OACT4a,WAAY,UAEhBC,iBAAkB,CACd9f,KAAM,EACNsI,QAAS,YACT5I,SAAU,WAEdqgB,qBAAsB,CAClBrgB,SAAU,WAEdsgB,gBAAiB,CACbpM,WAAY,EACZpL,OAAQ,mBClBVyX,GAAe,IAAwB,IAAvB,UAACnf,GAAsB,EACzC,MAAMO,EAASxB,KACTiT,GAAYjF,EAAAA,EAAAA,WACZ,aACFmF,EADE,mBAEFC,EAFE,UAGFiN,EAHE,gBAIFC,EAJE,WAKFC,EALE,iBAMFC,EANE,YAOFC,IACApN,EAAAA,EAAAA,YAAWwM,KACRlb,EAAQuO,IAAatJ,EAAAA,EAAAA,WAAS,GAE/B0J,EAAc,IAAMJ,GAAWzC,IAAUA,IAEzCiQ,IAAkB7H,EAAAA,EAAAA,KAAa4H,GAE/BE,EAAsB,QAAdN,EAEd,OACI,oCACI,kBAAC,EAAA9M,OAAD,CACIpM,IAAK8L,EACL5P,QAAS,CACLnD,KAAM4C,GAAAA,CAAWtB,EAAOse,OAAQ7e,IAEpC4G,QAASyL,GAET,kBAAC,IAAD,OAEJ,kBAAC,EAAAE,QAAD,CACI/C,KAAM9L,EACNtB,QAAS,CAACgN,MAAO7O,EAAOiR,cACxBnB,SAAU2B,EAAU/K,QACpBqJ,QAAS+B,EACT9B,aAAc,CACVC,SAAU,SACVC,WAAY,SAEhBC,gBAAiB,CACbF,SAAU,MACVC,WAAY,UAGhB,kBAAC,EAAA+B,iBAAD,CACIpQ,QAAS,CACLlB,MAAOX,EAAOuR,sBAElBrG,QACI,kBAAC,EAAApF,SAAD,CACIrG,UAAWO,EAAOwR,wBAClBhP,QAASmP,IAAgB,EACzBjS,SAAUkS,IAGlBjR,MAAOc,IAAAA,KAAU,iCAEpByd,GACG,oCACI,kBAAC,EAAAjG,QAAD,CAASxZ,UAAWO,EAAO+T,UAC3B,kBAAC,EAAAxS,WAAD,CAAY9B,UAAWO,EAAOpB,MAAO4C,QAAQ,MACxCC,IAAAA,KAAU,YAEf,yBAAKhC,UAAWO,EAAOue,cACnB,kBAACa,GAAA,EAAD,CACIC,QAASJ,EACTtd,eAAgB,CAACH,QAAS,UAC1BK,QAAS,CACLnD,KAAMsB,EAAOye,iBACba,SAAUtf,EAAO0e,sBAErBrP,WAAS,EACT1P,kBAAgB,EAChBkB,MAAOke,EACPrf,SAAUsf,EACVO,UAAW,CACPlP,mBAAoB,KACpBL,aAAc,CAACC,SAAU,SAAUC,WAAY,WAGvD,kBAACvM,GAAA,EAAD,CACIP,aAAc+b,EAAQ1d,IAAAA,KAAU,aAAeA,IAAAA,KAAU,cACzD8B,KAAM4b,EAAQK,GAAAA,EAAkBC,GAAAA,EAChCpZ,QAASyY,EACTrf,UAAWO,EAAO2e,gBAClBe,KAAK,WAUrCd,GAAa7N,YAAc,eAE3B,YCtHavS,IAAYC,EAAAA,EAAAA,GAAW,CAChCkhB,OAAQ,CACJ1Y,QAAS,gBAEbmL,aAAc,CACVC,WAAY,OACZhU,SAAU,OACViU,cAAe,SACfvM,MAAO,kBACPwM,WAAY,EACZvO,YAAa,MACb/E,eAAgB,aAChBiS,WAAY,OACZrS,cAAe,U,4BCZhB,MAAM+gB,GAAkB9O,IAAAA,cAGpB,M,2cCEX,MAAM+O,GAAMC,KAAKC,IAAI,EAAG,IAAM,ECNjBvhB,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtC4N,OAAQ,CACJnN,gBAAiB,UACjB8D,OAAQ,UACRyX,SAAU,WACV7T,IAAK,MACLC,KAAM,OACN7H,MAAO,OACPK,OAAQ,OACR0G,MAAO,QACP1H,SAAU,OACV0I,WAAY,OACZiZ,WAAY,OACZzhB,OAAQ,EACRqF,QAAS,OACT4a,WAAY,SACZvf,eAAgB,UAEpBqf,OAAQ,CACJ7D,SAAU,YAEdwF,MAAO,CACH5hB,SAAU,OACVgB,OAAQ,OACR0E,SAAU,OACV/E,MAAO,OACP+H,WAAY,OACZ7H,gBAAiB,UACjB6G,MAAO,QAEXma,cAAe,CACXC,MAAO,MACPvZ,IAAK,W,gBCzBN,MAAMwZ,GAAqB,IAAoB,IAAnB,MAACzf,GAAkB,EAClD,MAAMX,EAASxB,KACf,OACI,kBAAC,EAAA6hB,MAAD,CACIxe,QAAS,CACLye,8BAA+BtgB,EAAOkgB,cACtCD,MAAOjgB,EAAOigB,OAElBM,aAAc5f,GAEd,kBAAC6f,GAAA,EAAD,QCTCC,GAAe,KACxB,MAAM,QAACC,EAAD,eAAUC,EAAV,gBAA0BC,EAA1B,qBAA2CC,EAA3C,cAAiEC,GHAtC,MAAM,MACvC,MAAMC,GAA6BjhB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,gBACzCkW,GAAWC,EAAAA,EAAAA,gBACX,OAAC4E,EAAD,gBAASkG,IAAmBnP,EAAAA,EAAAA,YAAW+N,IACvCzE,GAAYrb,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,eACvB2gB,EAASO,IAAc7Y,EAAAA,EAAAA,UAAwB,KAC/CuY,EAAgBO,IAAqB9Y,EAAAA,EAAAA,UAAiB,MACvD+Y,GAAWrhB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvBqhB,GAAiBthB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WAC7Bya,EAAU,CAAC,MAAIM,EAAON,QAAZ,CAAqBvF,OAAQ,EAAG8F,IAAG,UAAED,EAAOuG,qBAAT,QAA0BxB,MAEvEyB,GAAiCphB,EAAAA,EAAAA,cAAY,KAC/C+gB,EAAW,IACPnG,EAAOyG,gBAAiBtK,EAAAA,EAAAA,KAAUkE,IAClCqG,QAAQC,KACHV,GAAe,IAAI5b,KAAKkH,IACrBqV,EAAAA,EAAAA,KAAwB,CACpBvG,UAAAA,EACAX,QAAAA,EACA2G,SAAAA,EACAC,eAAAA,EACAO,WAAYtV,EAAOlG,KACpBwG,MAAK,QAAC,0BAACiV,GAAF,eACDvV,EADC,CAEJuV,0BAAAA,UAIPjV,MAAMkV,GAAoBA,EAAgB/U,QAAQT,GAAWA,EAAOuV,8BACpEjV,KAAKsU,KAEf,CAAC9F,EAAWgG,EAAUC,EAAgBtG,EAAQiG,IAE3CH,GAAkB1gB,EAAAA,EAAAA,cAAY,MAChC4hB,EAAAA,EAAAA,KAAoB,CAChB3G,UAAAA,EACAX,QAAAA,EACA2G,SAAAA,EACAC,eAAAA,EACAO,WAAYhB,EAAexa,KAE1BwG,MAAK,KACFqU,IACAM,OAEHS,OAAOC,GACJ/L,EAASgM,EAAAA,GAAAA,QAAAA,UAAoBC,EAAAA,EAAAA,KAAuBF,EAAOvgB,IAAAA,KAAU,6BAE7Eyf,EAAkB,QACnB,CACC/F,EACAgG,EACAC,EACAtG,EACAwG,EACAN,EACAL,EACAO,KAGJnD,EAAAA,EAAAA,YAAU,KACNuD,MACD,CAACA,IACJ,MAAMT,GAAuB3gB,EAAAA,EAAAA,cAAY,IAAMghB,EAAkB,OAAO,IAClEJ,GAAgB5gB,EAAAA,EAAAA,cAAamM,GAAmB6U,EAAkB7U,IAAS,IACjF,MAAO,CACHqU,QAAAA,EACAC,eAAAA,EACAC,gBAAAA,EACAC,qBAAAA,EACAC,cAAAA,IGtEoFqB,GAClFniB,EAASxB,KACT4jB,EAA+B,IAAnB1B,EAAQxX,OACpBmZ,EAAgBD,EACoB,IAApC1B,EAAQ,GAAG/f,MAAM2hB,QAAQ,OACrB5B,EAAQ,GAAG/f,MAAM,GACjB+f,EAAQ,GAAG/f,MAAM,GACrB+f,EAAQxX,OACd,OACI,sCACOwX,EAAQxX,QACP,oCACKkZ,EACG,yBAAK3iB,UAAWO,EAAOse,QACnB,kBAAC3a,GAAA,EAAD,CACI+b,KAAM,IACNnc,KAAMgf,GAAAA,EACNnf,aAAc3B,IAAAA,KAAU,mCAAoC,CAACd,MAAO+f,EAAQ,GAAG/f,QAC/E0F,QAAS,IAAMya,EAAcJ,EAAQ,MAEzC,yBAAKjhB,UAAW6B,GAAAA,CAAWtB,EAAOqM,SAAUgW,IAGhD,kBAACG,GAAA,EAAD,CACIC,OAAQ,yBACRC,gBAAiBC,GAAAA,EACjBrf,YAAa,CACTF,aAAc3B,IAAAA,KAAU,sBACxBie,KAAM,IAENnc,KAAM,IAAM,kBAAC6c,GAAD,CAAoBzf,MAAO0hB,KAE3CO,UAAWlC,EAAQvb,KAAKkH,IAAD,CACnBhG,QAAS,KACLya,EAAczU,IAElB+H,KAAM/H,EAAO1L,YAIzB,kBAACkiB,GAAA,EAAD,CACI5T,OAAQ0R,EACR/hB,MAAO6C,IAAAA,KAAU,gBACjB+Y,QAAS/Y,IAAAA,KAAU,oCAAqC,CAACd,MAAOggB,MAAAA,OAAF,EAAEA,EAAgBhgB,QAChFmiB,eAAgBrhB,IAAAA,KAAU,UAC1BshB,YAAathB,IAAAA,KAAU,UACvBuhB,UAAWnC,EACXoC,OAAQrC,OCpBhC,GAxBwB,IAA2B,IAA1B,MAAChiB,EAAD,MAAQskB,GAAkB,EAC/C,MAAMljB,EAASxB,MAET,YAACqU,EAAD,kBAAcsQ,IAAqBtR,EAAAA,EAAAA,YAAWwM,IAEpD,OACI,kBAAClL,EAAA,EAAD,CAAiBvU,MAAOA,GAAS,GAAIa,UAAWO,EAAO2f,QAClDuD,EAAQ,GACL,kBAAC9P,EAAA,EAAD,CAAcC,YAAa,KACvB,kBAACC,EAAA,EAAD,CAAiBjU,OAAQ,GAAI8H,OAAQ,KACrC,kBAAC,EAAA5F,WAAD,CAAY9B,UAAWO,EAAOoS,aAAc5Q,QAAQ,WAC/C0hB,EAAQ,EACHzhB,IAAAA,KAAU,iBAAkB,CAACsa,MAAOmH,IACpCzhB,IAAAA,KAAU,gBAAiB,CAACsa,MAAOmH,MAIrD,kBAACxP,EAAA,EAAD,CAAuBC,MAAOd,EAAanT,SAAUyjB,IACrD,kBAAC1C,GAAD,MACA,kBAAC,GAAD,Q,gEC9BL,MAAMjiB,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCyc,QAASzc,EAAMyc,QACfC,eAAgB,CACZtf,SAAU,QACVkD,QAAS,eAEbtG,MAAO,CACHtC,SAAU,OACVgU,WAAY,OACZtL,WAAY,IACZI,OAAQ,EACRpB,MAAO,SAEXud,eAAgB,CACZvd,MAAO,2BACP1H,SAAU,OACVgT,UAAW,MACXtK,WAAY,IACZsL,WAAY,QAEhBkR,SAAU,CACNlS,UAAW,MACXtL,MAAO,e,mNCVf,MAkEA,GA1DwB,IAAuD,IAAtD,MAACpF,EAAD,OAAQkU,EAAR,SAAgBtP,GAAsC,EAAzB7B,E,kXAAyB,kCAC3E,MAAM1D,EAASxB,KACTie,GAAcC,EAAAA,GAAAA,KACdrQ,GAASvM,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,WACrB+F,GAAWrhB,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,cACtBH,EAAWuB,IAAgBpU,EAAAA,EAAAA,WAAS,IACpCkb,EAAgBE,IAAqBpb,EAAAA,EAAAA,UAAiB,OAE7D2V,EAAAA,EAAAA,YAAU,KACNyF,EAAkB,QACnB,CAAC3O,IAEJ,MAAM4O,GAASvjB,EAAAA,EAAAA,cAAY,KACvB,GAAI2U,MAAAA,GAAAA,EAAQsG,YAAajN,EAAAA,EAAAA,OAAMoV,GAAiB,CAC5C,MAAM7F,GAAU3P,EAAAA,EAAAA,QACZ4P,EAAAA,KACC7I,IACG6O,EAAAA,EAAAA,KAAkC,CAC9BvI,UAAWtG,EAAOsG,UAClBwG,WAAY9M,EAAO8M,WACnBP,eAAgB/U,EAChB8U,SAAAA,MAEPtM,IAA6B8O,EAAAA,EAAAA,KAAwB9O,EAAOsG,aAGjEqB,GAAa,GACbC,EAAYgB,EAAQ5I,IACflI,MAAK,IAAsB,IAArB,eAAC2W,GAAoB,EACxBE,EAAkBF,MAErBxF,SAAQ,KACLtB,GAAa,SAG1B,CAAC2E,EAAUtM,EAAQxI,EAAQoQ,EAAa6G,IAErCD,EACF,yBAAK5jB,UAAWO,EAAOqjB,gBACnB,yBAAK5jB,UAAWO,EAAOW,OAAQA,GAC9Bsa,GAAa,kBAAC,EAAA2I,iBAAD,CAAkBlE,KAhDjB,GAgD2C7d,QAAS,CAACgiB,aAAc7jB,EAAOujB,YACxFD,GAAkB,yBAAK7jB,UAAWO,EAAOsjB,gBAAiBA,IAInE,OACI,kBAAC,EAAAQ,QAAD,IACIL,OAAQA,EACR7kB,MAAOykB,EACPU,sBAAoB,EACpBliB,QAAS,CAACuhB,QAASpjB,EAAOojB,UACtB1f,GAEH6B,ICnEAye,GAAkB,CAACC,EAAwBpkB,KACpD,MAAM,OAACgV,EAAD,SAASqP,GAAYD,EAO3B,MAAO,CACH1kB,YAPe4kB,EAAAA,EAAAA,KAActkB,EAAUgV,MAAAA,OAAX,EAAWA,EAAQtV,YAQ/C6kB,aAPgBC,EAAAA,EAAAA,KAASxP,MAAAA,OAAD,EAACA,EAAQuP,aAQjCE,aAPgBC,EAAAA,EAAAA,KAAoB,CAACzjB,IAAK+T,MAAAA,OAAF,EAAEA,EAAQsG,UAAWwG,WAAY9M,MAAAA,OAAF,EAAEA,EAAQ8M,aAQjF6C,eANAN,MAAAA,OAAA,EAAAA,EAAUM,iBAAkBC,EAAAA,EAAAA,KAAiC5kB,EAAUqkB,MAAAA,OAAX,EAAWA,EAAUQ,gB,gBCblF,MAAMlmB,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtC8M,UAAW,CACP3H,QAAS,Y,mNCMV,MAAM+gB,GAAmB,IAAqE,IAApE,eAACC,EAAD,eAAiBC,GAAmD,EAAhC3iB,E,kXAAgC,wCACjG,MAAMlC,EAASxB,KACf,OACI,yBAAKiB,UAAWO,EAAOuL,WACnB,kBAACwG,GAAA,EAAD,IAAQ1L,QAASue,EAAgBpjB,QAAQ,OAAOuE,MAAM,WAAc7D,EAApE,CAA2EsO,MAAO,CAACsU,UAAW,YACzFrjB,IAAAA,KAAU,WAEf,kBAACsQ,GAAA,EAAD,IAAQ1L,QAASwe,EAAgBrjB,QAAQ,OAAOuE,MAAM,WAAc7D,EAApE,CAA2EsO,MAAO,CAACsU,UAAW,YACzFrjB,IAAAA,KAAU,aCfdjD,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChC4E,UAAW,CACP3H,QAAS,OACT2W,cAAe,SAEf1G,aAAc,OAElBkR,IAAK,CACDnhB,QAAS,OACT4a,WAAY,SACZjE,cAAe,MACfyK,UAAW,OACX/d,QAAS,UAEbge,YAAa,CACTC,WAAYve,EAAMwe,oBAEtBC,aAAc,CACV/lB,OAAQ,OACRL,MAAO,OACPX,SAAU,OACV2F,YAAa,OAEjBqhB,qBAAsB,CAClBC,eAAgB,OAChBtiB,OAAQ,UACRa,aAAc,OAElBugB,YAAa,CACTre,MAAOY,EAAMwN,QAAQoR,QAAQC,KAC7BnnB,SAAU,OACViU,cAAe,EACfD,WAAY,QAEhBmS,cAAe,CACXze,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BhW,SAAU,OACViU,cAAe,EACfD,WAAY,QAEhBoT,mBAAoB,CAChBnU,WAAY,OACZ3S,KAAM,YAEV+mB,YAAa,CACTze,QAAS,GAEb0e,QAAS,CACL5f,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BiR,eAAgB,gBAEpBM,YAAa,CACTC,UAAW,SACX9f,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BlN,OAAQ,aChCV2e,IAAuBC,EAAAA,EAAAA,OACzB,IASa,IATZ,WACG9B,EADH,SAEGpkB,EAFH,aAGGmmB,EAHH,iBAIGC,EAJH,eAKGC,EALH,iBAMGC,EANH,iBAOGC,EAPH,0BAQGC,GACS,EACT,MAAMrmB,EAASxB,MAET,OAACqW,EAAD,SAASqP,GAAYD,EACrB0B,GAAUW,EAAAA,EAAAA,KAAarC,GACvB1K,GAASgN,EAAAA,EAAAA,KAAYtC,GACrBuC,GAAUC,EAAAA,EAAAA,KAAaxC,IACvB,WAAC1kB,EAAD,YAAa6kB,EAAb,YAA0BE,EAA1B,cAAuCE,GAAiBR,GAAgBC,EAAYpkB,GACpF6mB,GAAWC,EAAAA,EAAAA,KAAezC,KAAayC,EAAAA,EAAAA,KAAe9R,IACtD,UAAC+R,EAAD,UAAYC,GC1Ca,KAAoE,IAAnE,SAAChnB,EAAD,KAAW6W,EAAX,WAAiBuN,EAAjB,iBAA6BgC,EAA7B,eAA+CC,GAAoB,EAEvG,IADuBxP,IAASoQ,EAAAA,IAAAA,SAAgBpQ,IAASoQ,EAAAA,IAAAA,aACnC7C,EAAY,CAC9B,MACIC,UAAU,aAACQ,IACXT,EACE8C,GAAYT,EAAAA,EAAAA,KAAarC,GACzB+C,GAAuBC,EAAAA,EAAAA,KAAgBpnB,EAAU6kB,GAGvD,MAAO,CAACkC,UAFUX,IAAqBc,IAAaG,EAAAA,EAAAA,KAAuBxQ,EAAMsQ,GAE9DH,UADDX,IAAmBa,IAAaI,EAAAA,EAAAA,KAAuBzQ,EAAMsQ,IAG/E,MAAO,CAACJ,WAAW,EAAOC,WAAW,ID8BNO,CAAwB,CACnD1Q,KAAMoQ,EAAAA,IAAAA,QACNb,iBAAAA,EACAC,eAAAA,EACArmB,SAAAA,EACAokB,WAAAA,IAGEoD,GAAuBnnB,EAAAA,EAAAA,cAAY,IAAM+lB,EAAiBhC,EAAWC,SAASoD,cAAc,CAC9FrB,EACAhC,IAGEsD,GAAqBrnB,EAAAA,EAAAA,cAAY,IAAMgmB,EAAejC,IAAa,CAACiC,EAAgBjC,IAEpFuD,GAAuBtnB,EAAAA,EAAAA,cAAY,KACrCimB,EAAiBlC,KAClB,CAACkC,EAAkBlC,IAEhBwD,GAAuBvnB,EAAAA,EAAAA,cAAY,IAAMkmB,EAAiBnC,IAAa,CAACmC,EAAkBnC,IAE1FwB,GACDmB,GAAaC,IAAcb,IAAiB/B,EAAWyD,UACpD,oCACKb,GACG,kBAACljB,GAAA,EAAD,CACIJ,KAAMokB,GAAAA,EACNjI,KAAK,KACLrZ,QAASkhB,EACTnkB,aAAc3B,IAAAA,KAAU,UAG/BmlB,GACG,kBAACjjB,GAAA,EAAD,CACIJ,KAAMqkB,GAAAA,EACNlI,KAAK,KACLrZ,QAASghB,EACTjkB,aAAc3B,IAAAA,KAAU,kBAIpCqF,EAEF+gB,EAA0B5D,EAAWyD,UACvC,kBAAC/C,GAAD,CACIC,eAAgB4C,EAChB3C,eAAgB4C,EAChB/H,KAAK,QACLoI,SAAUtB,SAEd1f,EACEihB,EAAcvB,EAAU/kB,IAAAA,KAAU,WAAaA,IAAAA,KAAU,UAC/D,OACI,yBACIhC,UAAW6B,GAAAA,CACPtB,EAAOuL,UACP,CAAC,CAACvL,EAAOilB,cAAeyB,GACxB,CAAC,CAAC1mB,EAAO2lB,SAAUA,GAAWa,KAGlC,yBAAK/mB,UAAWO,EAAO+kB,KAClBsB,GAA6BA,IAC9B,kBAAC2B,GAAA,EAAD,CAAgBvoB,UAAWO,EAAOolB,aAAc7lB,WAAYA,IAC5D,kBAAC0oB,GAAA,EAAD,CAAepnB,MAAOyjB,EAAa7kB,UAAWO,EAAOqlB,sBACjD,kBAAC,GAAD,CAAiB1kB,MAAOyjB,EAAavP,OAAQA,GACzC,0BAAMpV,UAAWO,EAAOokB,aAAcA,KAExC7K,GAAUiN,IACR,kBAAC,EAAAjlB,WAAD,CAAYC,QAAQ,UAAU/B,UAAWO,EAAO4lB,aAAhD,IACMmC,EADN,KAIHvD,GAAiB,0BAAM/kB,UAAWO,EAAOwkB,eAAiB,KAAIA,MAGnE,yBAAK/kB,UAAWO,EAAOylB,oBAAqBA,GAC3CoC,OAOrB/B,GAAqB/U,YAAc,uBAEnC,YE/HamX,GAA6B,CAACC,EAA4BC,KACnE,MAAMC,EAAkB,CAACC,EAAWC,KACXA,GAAYC,EAAAA,EAAAA,KAAoBD,GAAa,IAC9CpjB,KAAK+e,IAAD,CACpBrf,KAAMqf,EACNoE,UAAWA,IAAcG,EAAAA,IAAAA,GAAgBA,EAAAA,IAAAA,GAAgBA,EAAAA,IAAAA,QAGjE,OAAOJ,EAAgBI,EAAAA,IAAAA,GAAeN,GAAajnB,OAAOmnB,EAAgBI,EAAAA,IAAAA,IAAgBL,IAAe,I,qJCRtG,MAAM5pB,IAAYC,EAAAA,EAAAA,GAAW,CAChCiqB,UAAW,CACPrqB,SAAU,OACV2F,YAAa,SCSR2kB,GAAsB,IAA2D,IAA1D,QAACtiB,EAAD,WAAU4d,EAAV,OAAsBnJ,EAAtB,gBAA8B8N,GAA4B,EAC1F,MAAM5oB,EAASxB,MACT,gBAACqqB,GAAmB5E,GACpB,mBAAC6E,GAAsBhO,EAEvB5Y,EAAQ,CACVmE,QAAAA,EACA5G,UAAWO,EAAO0oB,WAGtB,OAAIG,IAAoBC,IAAsBC,EAAAA,EAAAA,KAAS9E,GAC5C,KAGJ2E,EAAkB,kBAACI,GAAA,EAAsB9mB,GAAY,kBAAC+mB,GAAA,EAAmB/mB,IC1BvE1D,IAAYC,EAAAA,EAAAA,GAAW,CAChCsmB,IAAK,CACDnhB,QAAS,OACT4a,WAAY,SACZxf,MAAO,QAEXkqB,mBAAoB,CAChBpqB,YAAa,UCORqqB,GAAqB,IAA2C,IAA1C,OAACrO,EAAD,WAASmJ,EAAT,SAAqB1e,GAAqB,EACzE,MAAMvF,EAASxB,MAET,aAACmT,IAAgBE,EAAAA,EAAAA,YAAWwM,KAE5B,YACF+K,EADE,gBAEFR,EAFE,sBAGFS,EAHE,cAIFC,EAJE,QAKFC,EALE,MAMFrG,GCfiC,KAA0D,IAAzD,OAACpI,EAAD,WAASmJ,EAAT,uBAAqBuF,GAAoC,EAC/F,MAAMvT,GAAWC,EAAAA,EAAAA,gBAEV0S,EAAiBa,IAAsBrhB,EAAAA,EAAAA,WAAS,IAChDmhB,EAASG,IAActhB,EAAAA,EAAAA,WAAS,IAEjC,mBAAC0gB,GAAsBhO,GACvB,OAACjG,GAAUoP,EAEXmF,GACDtpB,EAAAA,EAAAA,cAAawW,GACVvW,EAAAA,GAAAA,UAAAA,iCAAqDuW,EAAOwE,EAAO3U,GAAI0O,EAAOsG,cAC5D,GAEpB+H,GAAQpjB,EAAAA,EAAAA,cAAawW,GAAUvW,EAAAA,GAAAA,UAAAA,iBAAqCuW,EAAOwE,EAAO3U,GAAI0O,EAAOsG,cAC7F,eAACwO,IACH7pB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,gCAAsD,GAEhEupB,GAAgBppB,EAAAA,EAAAA,cAAY,KAC9B,MAAM0pB,E,+UAAgB,IACfd,EADY,CAEfe,eAAe,EACfC,aAAa,EACbC,WAAY,CACR7F,SAAUsF,GAA0BQ,EAAAA,IAAAA,IACpCnV,OAAQ8U,KAIhBD,GAAW,IAEXO,EAAAA,EAAAA,KAAsBpV,EAAOsG,UAAW,CAACyO,IAAgBjd,MAAMiR,IAC3D,MAAM,YAACwL,EAAD,MAAclG,GAAStF,EAAS,GAElCwL,GACAnT,EACIyB,EAAAA,GAAAA,UAAAA,QAAAA,2BAAqD,CACjD0R,YAAAA,EACAP,gBAAiBhU,EAAOsG,UACxBhV,GAAI2U,EAAO3U,GACX+c,MAAAA,KAKZwG,GAAW,QAEhB,CAAC5O,EAAO3U,GAAI2iB,EAAoB7S,EAAUpB,EAAOsG,UAAWwO,EAAgBH,IAEzEH,GAAwBnpB,EAAAA,EAAAA,cAAY,KACjC0oB,GAAoB3E,EAAWmF,aAChCE,IAGJG,GAAoBS,IAAUA,MAC/B,CAACZ,EAAerF,EAAWmF,YAAaR,IAE3C,MAAO,CAACQ,YAAAA,EAAaR,gBAAAA,EAAiBS,sBAAAA,EAAuBC,cAAAA,EAAeC,QAAAA,EAASrG,MAAAA,IDzCjFiH,CAA0B,CAC1BrP,OAAAA,EACAmJ,WAAAA,EACAuF,uBAAwB7X,EAAeqY,EAAAA,IAAAA,IAAqBA,EAAAA,IAAAA,cAG1DI,GAAchpB,EAAAA,EAAAA,UAAQ,KAAMipB,EAAAA,EAAAA,KAA6BjB,IAAc,CAACA,IAa9E,OACI,oCACK7jB,GAbyB,IAE1B,kBAACojB,GAAD,CACItiB,QAASgjB,EACTpF,WAAYA,EACZnJ,OAAQA,EACR8N,gBAAiBA,MAQpBA,GACG,kBAAC0B,GAAA,WAAD,CAA6BzpB,MAAOupB,GAChC,yBAAK3qB,UAAWO,EAAOkpB,oBACnB,kBAACqB,GAAD,CACItP,UAAWsO,EACXzO,OAAQA,EACRwO,cAAeA,EACfF,YAAaA,EACblG,MAAOA,EACP2F,gBAAiB5E,EAAWpP,OAAOsG,gBEzDlD3c,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCiN,WAAY,CACR3M,QAAS,oBACT/H,gBAAiB,sBACjB2U,aAAc,MACdvC,WAAY,QAEhBwC,YAAa,CACTzV,SAAU,OACV0I,WAAY,IACZsL,WAAY,QAEhB9O,KAAM,CACFlF,SAAU,OACV2F,YAAa,OAEjB+P,QAAS,CACL5M,OAAQ,UACRjI,gBAAiB,oBAErBgV,OAAQ,CACJ7V,SAAU,OACV0H,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BpN,QAAS,gBCyHjB,GAxHiC,IAAqF,IAApF,UAACxH,EAAD,YAAY2pB,EAAc,GAA1B,OAA8BtO,EAA9B,KAAsCpE,EAAtC,WAA4Cb,EAA5C,gBAAwDgT,GAA4B,EAClH,MAAMhpB,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvByqB,GAAgB1qB,EAAAA,EAAAA,cAAawW,GAAUvW,EAAAA,GAAAA,UAAAA,yBAA6CuW,EAAOwE,EAAO3U,MAClGskB,GAAkB3qB,EAAAA,EAAAA,cAAawW,GAAUvW,EAAAA,GAAAA,UAAAA,2BAA+CuW,EAAOwE,EAAO3U,MACtG0O,GAAS/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WACrB2qB,GAAyB5qB,EAAAA,EAAAA,cAAawW,GACxCvW,EAAAA,GAAAA,UAAAA,0BAA8CuW,EAAOwE,EAAON,WAG1DvE,GAAWC,EAAAA,EAAAA,eACXlW,EAASxB,KAETmsB,GAAgBzqB,EAAAA,EAAAA,cAAY,KAC9B,MAAM0qB,GAAgBC,EAAAA,EAAAA,KAA2C,CAAC/P,OAAAA,EAAQpE,KAAAA,EAAM7W,SAAAA,EAAUgpB,gBAAAA,KAC1FnmB,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,UAAAA,QAAAA,mBAA6CoD,EAAO3U,IAAK8P,EAA9DvT,CAAwEkoB,KACzE,CAAC9P,EAAQpE,EAAM7W,EAAUoW,EAAU4S,IAEhC5C,GAAmB/lB,EAAAA,EAAAA,cACpBonB,IACGrR,EAASyB,EAAAA,GAAAA,UAAAA,QAAAA,oBAA8CoD,EAAO3U,GAAImhB,IAClErR,EAASyB,EAAAA,GAAAA,UAAAA,QAAAA,eAAyCoD,EAAO3U,GAAImhB,IAC7D,MAAMwD,EAAqB1B,EAAYhQ,MAClC6K,GAAevM,EAAAA,GAAAA,UAAAA,UAAAA,6BAAyDuM,KAAgBqD,IAEvFnM,EAAYzD,EAAAA,GAAAA,UAAAA,UAAAA,2BAAuDoT,IACrE7T,EAAAA,EAAAA,KAAUkE,IACVlF,EAASyB,EAAAA,GAAAA,iBAAAA,QAAAA,cAA+CyD,MAGhE,CAACL,EAAQsO,EAAanT,IAEpBuE,EAAUM,EAAON,QACjBuQ,EAA4B7C,GAA2B1N,EAAQ2N,YAAa3N,EAAQ4N,cACpFjC,GAAmBjmB,EAAAA,EAAAA,cACpB+jB,IACG,MAAM+G,GAAoCtoB,EAAAA,EAAAA,OACtC4F,EAAAA,EAAAA,MAAK,CAAC,eACN2iB,EAAAA,EAAAA,QAAO,CACH/G,SAAU,CACNQ,cAAcrK,EAAAA,EAAAA,QAAO0Q,EAA0BlmB,MAC/CqmB,QAAQD,EAAAA,EAAAA,QAAO,CAACpmB,MAAMwV,EAAAA,EAAAA,QAAO0Q,EAA0BlmB,MAAOxD,YAAYgZ,EAAAA,EAAAA,QAAO,WALnD3X,CAQxCuhB,GACFhO,EAASyB,EAAAA,GAAAA,UAAAA,QAAAA,YAAsCoD,EAAO3U,GAAI6kB,MAE9D,CAAC/U,EAAU6E,EAAQiQ,IAGjB3E,GAAmBlmB,EAAAA,EAAAA,cACpB+jB,IACGhO,EACIyB,EAAAA,GAAAA,UAAAA,QAAAA,eAAyCoD,EAAO3U,GAAI,CAChDue,aAAcqG,EAA0BlmB,KACxCsmB,kBAAmBJ,EAA0BzC,UAC7CnN,UAAW8I,EAAWpP,OAAOsG,UAC7BmM,YAAarD,EAAWC,SAASoD,iBAI7C,CAACrR,EAAU6E,EAAQiQ,KAGhBK,EAAgBC,IAAsBnN,EAAAA,EAAAA,WAAU6K,EAAAA,IAAUK,GAC3DkC,EAAkBzW,GAAU6V,EAE5Ba,EAAgD,IAA1BH,EAAeliB,QAA8C,IAA9BmiB,EAAmBniB,OAExEsiB,EAA8BvH,IAA2B,QAC3D,MAAMwH,EAAiBhB,EAAgBrR,MAClCqS,IAAD,eAAoBA,MAAAA,GAAA,UAAAA,EAAgBvH,gBAAhB,eAA0BoD,gBAAgBrD,MAAAA,GAA1C,UAA0CA,EAAYC,gBAAtD,aAA0C,EAAsBoD,gBAElFtB,GAAgBlL,EAAO4Q,qBAAsB3C,EAAAA,EAAAA,KAAS9E,GACtD0H,EAAW,GAAE1H,MAAAA,GAAH,UAAGA,EAAYC,gBAAf,aAAG,EAAsBoD,eAAerD,MAAAA,GAAxC,UAAwCA,EAAYC,gBAApD,aAAwC,EAAsBoE,YAC9E,OACI,kBAACa,GAAD,CAAoBrO,OAAQA,EAAQmJ,WAAYA,EAAY7d,IAAKulB,IAC3DtF,GACSoF,EACH,kBAACG,GAAA,EAAD,CAAgB3H,WAAYwH,EAAgB3Q,OAAQA,EAAQpE,KAAMA,EAAM7W,SAAUA,IAElF,kBAAC,GAAD,CACIwmB,0BAA2BA,EAC3BpC,WAAYA,EACZpkB,SAAUA,EACVmmB,aAAcA,EACdC,iBAAkBA,EAClBC,gBAAgBxjB,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,UAAAA,QAAAA,mBAA6CoD,EAAO3U,IAAK8P,GAC9EkQ,iBAAkBA,EAClBC,iBAAkBA,OAQpCyF,EACFP,KAAqBd,GAAkBA,GAAiBA,EAAc3B,kBAAoBA,GAExFiD,EAAgCtB,GAAiBA,EAAc3B,kBAAoBA,EAEzF,OACI,yBAAKppB,UAAWA,GACXosB,GACG,kBAAC,EAAA9Z,OAAD,CAAQhM,MAAM,UAAUM,QAASskB,EAAelrB,UAAWO,EAAO4T,YAC9D,kBAAC+E,GAAA,EAAD,CAAS9W,QAAS,CAACnD,KAAMsB,EAAOuD,QAChC,yBAAK9D,UAAWO,EAAO8T,aAAcrS,IAAAA,KAAU,SAGtDqqB,GACG,kBAACF,GAAA,EAAD,CAAgB3H,WAAYuG,EAAe1P,OAAQA,EAAQpE,KAAMA,EAAM7W,SAAUA,IAEpFurB,EAAejmB,IAAIqmB,GACnBJ,EAAeliB,OAAS,GAAKmiB,EAAmBniB,OAAS,GAAK,kBAAC,EAAA+P,QAAD,CAASxZ,UAAWO,EAAO+T,UACzFsX,EAAmBlmB,IAAIqmB,GACvBD,GAAuB,kBAAC,EAAAhqB,WAAD,CAAY9B,UAAWO,EAAOkU,QAAS2B,K,oDC1IpE,MAAMrX,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChColB,eAAgB,CACZjtB,YAAa,OACb+E,aAAc,OACdgQ,aAAc,OACd9N,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BhW,SAAU,OACViU,cAAe,O,2cCiBhB,MAAM0Z,GAAqB,IAAoC,IAAnC,WAAC/H,EAAD,UAAaxkB,GAAsB,EAClE,MAAMO,EAASxB,MAET,SAAC0lB,GAAYD,EACbgI,GAAmBnsB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,4BAE/BF,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aAEvBmsB,GAA8B9qB,EAAAA,EAAAA,UAChC,KAAM+qB,EAAAA,EAAAA,KAA0BtsB,EAAUqkB,MAAAA,OAAX,EAAWA,EAAUQ,eACpD,CAACR,MAAAA,OAAD,EAACA,EAAUQ,aAAc7kB,IAGvBusB,GAAsBhrB,EAAAA,EAAAA,UACxB,IAAM,IACFC,WAAY,MACLqW,EAAAA,GAAAA,UAAAA,UAAAA,oCAAgEuM,MAEpEoI,EAAAA,EAAAA,MAAwBpI,MAAAA,OAAA,EAAAA,EAAYC,WAAY,MAEvD,CAACD,IAQCqI,GALiBlrB,EAAAA,EAAAA,UACnB,KAAMmrB,EAAAA,EAAAA,KAA6BL,EAA6BE,IAChE,CAACF,EAA6BE,IAGQtf,QAAO,QAAC,OAACV,GAAF,UAAeiL,EAAAA,EAAAA,KAAajL,MAASlD,OAAS,EAEzFsjB,GAAYprB,EAAAA,EAAAA,UAAQ,KAAMqrB,EAAAA,EAAAA,KAAuBL,EAAoB/qB,aAAa,CAAC+qB,KAEnF,iBAACM,IAAoB7a,EAAAA,EAAAA,YAAW8a,EAAAA,IACtC5O,EAAAA,EAAAA,YAAU,OACL6O,EAAAA,EAAAA,SAAQJ,IAAcE,EAAiBF,KACzC,CAACE,EAAkBF,IAEtB,MAAMK,GAA8BzrB,EAAAA,EAAAA,UAChC,KAAM0rB,EAAAA,EAAAA,KAAwBC,EAAAA,IAAAA,SAAmC,CAAC5R,UAAW8Q,EAAkBhI,WAAAA,KAC/F,CAACA,EAAYgI,IAGjB,OAAOK,EACH,kBAACU,GAAA,WAAD,CAAmCnsB,MAAOgsB,GACtC,kBAAC,KAAD,CACIptB,UAAW6B,GAAAA,CAAWtB,EAAO+rB,eAAgBtsB,GAC7CoV,OAAQuX,EACRa,UAAWf,KAInB,yBAAKzsB,UAAW6B,GAAAA,CAAWtB,EAAO+rB,eAAgBtsB,IAAagC,IAAAA,KAAU,mB,4BClE1E,MAAMyrB,GAAoB,IAAwC,IAAvC,KAAChD,EAAD,SAAOiD,EAAP,UAAiB1tB,GAAsB,EACrE,OACI,kBAACkE,GAAA,EAAD,CACIlE,UAAWA,EACX2D,aACI8mB,EACMzoB,IAAAA,KAAU,uCACVA,IAAAA,KAAU,uCAEpB2rB,iBAAiB,aACjB1N,KAAK,MACLnc,KAAM2mB,EAAOmD,GAAAA,EAAmBC,GAAAA,EAChCjnB,QAAS8mB,KCrBR3uB,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChC4E,UAAW,CACP3H,QAAS,OACT2W,cAAe,SACf1b,cAAe,OAEnBkmB,IAAK,CACDnhB,QAAS,OACT4a,WAAY,SACZjE,cAAe,MACfyK,UAAW,OACX/d,QAAS,qBAEbge,YAAa,CACTC,WAAYve,EAAMwe,oBAEtBC,aAAc,CACV/lB,OAAQ,OACRL,MAAO,OACPX,SAAU,OACV2F,YAAa,OAEjBqhB,qBAAsB,CAClBC,eAAgB,OAChBtiB,OAAQ,UACRuqB,UAAW,YACX1pB,aAAc,OAElBugB,YAAa,CACTre,MAAOY,EAAMwN,QAAQoR,QAAQC,KAC7BnnB,SAAU,OACViU,cAAe,EACfD,WAAY,QAEhBmS,cAAe,CACXze,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BhW,SAAU,OACViU,cAAe,EACfD,WAAY,QAEhBmb,YAAa,CACTlc,WAAY,OACZzN,aAAc,OAElBkoB,eAAgB,CACZjtB,YAAa,OACb+U,aAAc,OACd9N,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BhW,SAAU,OACViU,cAAe,GAEnBmb,iBAAkB,CACdvuB,gBAAiByH,EAAM+gB,WAE3BgG,kBAAmB,CACfpc,WAAY,OACZkN,WAAY,SACZ,mBAAoB,CAChBlN,WAAY,QAGpBqc,yBAA0B,CACtBrc,WAAY,OACZ1N,QAAS,QAEbgqB,aAAc,CACVhqB,QAAS,OACT4a,WAAY,cC1CdqP,IAAe9H,EAAAA,EAAAA,OAAK,IAAoF,IAAnF,WAAC9B,EAAD,0BAAaoC,EAAb,eAAwCzB,EAAxC,eAAwDC,GAA2B,EAC1G,MAAM7kB,EAASxB,KACTsvB,EAAc7J,EAAWyD,WACzB,OAAC7S,EAAD,SAASqP,GAAYD,GACpBuJ,EAAaO,IAAkB3lB,EAAAA,EAAAA,WAAS,GAEzCvI,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,cACvB,WAACR,EAAD,YAAa6kB,EAAb,YAA0BE,EAA1B,cAAuCE,GAAiBR,GAAgBC,EAAYpkB,GACpF6mB,GAAWC,EAAAA,EAAAA,KAAezC,KAAayC,EAAAA,EAAAA,KAAe9R,GAKtDoX,GAAmBnsB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,4BAC/BiuB,EACDnZ,GACGqP,IACA4I,EAAAA,EAAAA,KAAwBC,EAAAA,IAAAA,SAAmC,CACvD5R,UAAW8Q,EACXhI,WAAAA,KAER,GACJ,OACI,yBACIxkB,UAAW6B,GAAAA,CACPtB,EAAOuL,UACP,CAAC,CAACvL,EAAOilB,cAAeyB,GACxB,CAAC,CAAC1mB,EAAOytB,kBAAmBK,KAGhC,yBAAKruB,UAAW6B,GAAAA,CAAWtB,EAAO+kB,IAAKkJ,GAAAA,IAClC5H,GAA6BA,IAC9B,yBAAK5mB,UAAWO,EAAO4tB,cACnB,kBAAC5F,GAAA,EAAD,CAAgBvoB,UAAWO,EAAOolB,aAAc7lB,WAAYA,IAC5D,kBAAC0oB,GAAA,EAAD,CAAepnB,MAAOyjB,EAAa7kB,UAAWO,EAAOqlB,sBACjD,kBAAC,GAAD,CAAiB1kB,MAAOyjB,EAAavP,OAAQA,GACzC,0BAAMpV,UAAWO,EAAOokB,aAAcA,IAEzCI,GAAiB,0BAAM/kB,UAAWO,EAAOwkB,eAAiB,KAAIA,OAGvE,yBAAK/kB,UAAWO,EAAO2tB,4BACjBf,EAAAA,EAAAA,SAAQoB,IACN,kBAACE,GAAA,EAAD,CACIzuB,UAAWO,EAAO0tB,kBAClB5sB,KAAKqtB,EAAAA,EAAAA,KAAgCjK,GACrC8J,kBAAmBA,EACnBI,WAAYrB,EAAAA,IAAAA,SACZsB,qBAAmB,IAG1BP,GACG,kBAACnJ,GAAD,CACIjF,KAAK,QACLkF,eAAgBA,EAAeX,GAC/BY,eAAgBA,EAAeZ,MAGrC6J,GACE,kBAACZ,GAAD,CACIhD,KAAMsD,EACNL,SAnDE,KACtBY,GAAgB7D,IAAUA,KAmDNzqB,UAAWO,EAAOwtB,gBAKjCA,GAAe,kBAACxB,GAAD,CAAoB/H,WAAYA,QAK5D4J,GAAa9c,YAAc,eAE3B,Y,4BCnGO,MAIMud,GAAmBC,GACrBA,EAAQzhB,QAAQ0hB,GAA4B,IAAjBA,EAAO3tB,QAAaqI,OAG7CulB,GAAsBF,GACxBA,EAAQzhB,QAAQ0hB,GAA4B,IAAjBA,EAAO3tB,QAAaqI,OAG7CwlB,GAAyBH,GACX,IAAnBA,EAAQrlB,OACD,KAGHolB,GAAgBC,GAAWA,EAAQrlB,OAAU,IAAM,IAGlDylB,GAA4BJ,GACd,IAAnBA,EAAQrlB,OACD,KAGHulB,GAAmBF,GAAWA,EAAQrlB,OAAU,IAAM,IC1BrD1K,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCioB,QAAS,CACLhrB,QAAS,OACT2W,cAAe,SACfiE,WAAY,YAEhBqQ,cAAe,CACXhb,aAAc,MACdxV,SAAU,OACViU,cAAe,SACfD,WAAY,OACZtM,MAAOY,EAAMwN,QAAQC,KAAKmR,SAE9BuJ,MAAO,CACHlrB,QAAS,OACTiQ,aAAc,MACd7U,MAAO,QACPK,OAAQ,OAEZ0vB,WAAY,CACR1vB,OAAQ,OACRH,gBAAiB,WAErB8vB,cAAe,CACX3vB,OAAQ,OACRH,gBAAiB,sBAErB+vB,OAAQ,CACJrrB,QAAS,QAEbsrB,WAAY,CACRlrB,YAAa,QAEjB+X,MAAO,CACHnY,QAAS,OACT4a,WAAY,SACZzY,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BhW,SAAU,OACViU,cAAe,EACfD,WAAY,QAEhB9O,KAAM,CACFS,YAAa,MACbhF,MAAO,OACPK,OAAQ,OACR0G,MAAO,wBC3BFopB,GAAU,IAAiC,IAAhC,QAACZ,EAAD,UAAU9uB,GAAsB,EACpD,MAAMO,EAASxB,KAEf,OACI,yBAAKiB,UAAW6B,GAAAA,CAAWtB,EAAO4uB,QAASnvB,IACvC,kBAAC,EAAA8B,WAAD,CAAY9B,UAAWO,EAAO6uB,eFtBRN,CAAAA,IACvB7rB,EAAAA,EAAAA,OAAK+J,EAAAA,EAAAA,OAAM,SAAU2iB,EAAAA,MAAMzsB,EAAAA,EAAAA,WAAU,GAArCD,CAAyC6rB,GEqBMc,CAAkBd,GAASe,QAAQ,IACjF,yBAAK7vB,UAAWO,EAAO8uB,OACnB,yBAAKrvB,UAAWO,EAAO+uB,WAAYve,MAAO,CAACxR,MAAO0vB,GAAsBH,MACxE,yBAAK9uB,UAAWO,EAAOgvB,cAAexe,MAAO,CAACxR,MAAO2vB,GAAyBJ,OAElF,yBAAK9uB,UAAWO,EAAOivB,QACnB,yBAAKxvB,UAAW6B,GAAAA,CAAWtB,EAAOkvB,WAAYlvB,EAAO+b,QACjD,kBAACwT,GAAA,EAAD,CAAa9vB,UAAWO,EAAOuD,OAC9B+qB,GAAgBC,IAErB,yBAAK9uB,UAAWO,EAAO+b,OACnB,kBAACyT,GAAA,EAAD,CAAe/vB,UAAWO,EAAOuD,OAChCkrB,GAAmBF,OCnC3B/vB,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCioB,QAAS,CACLhrB,QAAS,QAEb0a,OAAQ,CACJjgB,SAAU,OACVoxB,cAAe,OACf1pB,MAAOY,EAAMwN,QAAQC,KAAKC,WAE9Bqb,WAAY,CACRpe,WAAY,QACZtN,YAAa,OAEjB0iB,SAAU,CACN3gB,MAAOY,EAAMwN,QAAQC,KAAKmR,aCCrBoK,GAAiB,IAA2C,IAA1C,QAACpB,EAAD,QAAUqB,EAAV,WAAmBC,GAAuB,EACrE,MAAM7vB,EAASxB,KAETuO,GAAWjN,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvB+vB,EAAsBvB,EAAQnV,MAAK,QAAC,KAAC2W,GAAF,SAAYA,IAAShjB,KAExD6V,EAAY,CACd,CACIxO,KAAM3S,IAAAA,KAAU,yBAChB4E,QAAS,IAAMwpB,EAAWpuB,IAAAA,KAAU,2BAExC,CACI2S,KAAM3S,IAAAA,KAAU,kBAChB4E,QAAS,IAAMwpB,EAAWpuB,IAAAA,KAAU,oBAExC,CACI2S,KAAM3S,IAAAA,KAAU,mBAChB4E,QAAS,IAAMwpB,EAAWpuB,IAAAA,KAAU,qBAExC,CACI2S,KAAM3S,IAAAA,KAAU,eAChB4E,QAAS,IAAMwpB,EAAWpuB,IAAAA,KAAU,iBAExC,CACI2S,KAAM3S,IAAAA,KAAU,SAChB4E,QAAS,IAAMwpB,EAAWpuB,IAAAA,KAAU,YAI5C,OACI,yBAAKhC,UAAWO,EAAO4uB,SACnB,kBAAC,EAAA7c,OAAD,CACI1L,QAASupB,EACTpuB,QAAQ,OACRke,KAAK,QACLjgB,UAAW6B,GAAAA,CAAWtB,EAAOse,OAAQte,EAAO0vB,WAAY,CACpD,CAAC1vB,EAAO0mB,UAA0C,KAA/BoJ,MAAAA,OAAA,EAAAA,EAAqBjvB,UALhD,SAUA,kBAAC2hB,GAAA,EAAD,CACIlf,YAAa,CACT0sB,QAAS,kBAAChH,GAAA,EAAD,MACTxnB,QAAS,OACTke,KAAM,QACNjgB,UAAW6B,GAAAA,CAAWtB,EAAOse,OAAQ,CACjC,CAACte,EAAO0mB,UAA0C,KAA/BoJ,MAAAA,OAAA,EAAAA,EAAqBjvB,UAGhDovB,cAA8C,KAA/BH,MAAAA,OAAA,EAAAA,EAAqBjvB,OAAcivB,EAAoBI,QAAU,WAChFtN,UAAWA,EACXH,OAAO,oCClEVjkB,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCioB,QAAS,CACL3nB,QAAS,gBAEbkpB,eAAgB,CACZnsB,YAAa,QAEjBogB,YAAa,CACTre,MAAOY,EAAMwN,QAAQoR,QAAQC,KAC7BnnB,SAAU,OACViU,cAAe,EACfD,WAAY,QAEhBgT,qBAAsB,CAClBkI,UAAW,YACXjI,eAAgB,QAEpBd,cAAe,CACXze,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BhW,SAAU,OACViU,cAAe,EACfD,WAAY,QAEhBkc,QAAS,CACLjd,WAAY,QAEhB8e,kBAAmB,CACf9e,WAAY,OACZD,UAAW,QAEfgf,mBAAoB,CAChBvxB,YAAa,QAEjB2uB,iBAAkB,CACdxmB,QAAS,mBACT/H,gBAAiByH,EAAM+gB,WAE3BgG,kBAAmB,CACf5I,UAAW,SACX,eAAgB,CACZxT,WAAY,SAGpBqc,yBAA0B,CACtBrc,WAAY,OACZ1N,QAAS,YChBJ0sB,GAAsB,IAMtB,IANuB,WAChCrM,EADgC,cAEhCqF,EAFgC,0BAGhCjD,EAHgC,eAIhCzB,EAJgC,eAKhCC,GACS,EACT,MAAM7kB,EAASxB,KACTsvB,EAAc7J,EAAWyD,WAExB8F,EAAaO,IAAkB3lB,EAAAA,EAAAA,WAAS,IAEzC,OAACyM,EAAD,SAASqP,GAAYD,EACrBpkB,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,cACvB,YAACqkB,EAAD,WAAc7kB,EAAd,YAA0B+kB,EAA1B,cAAuCE,GAAiBR,GAAgBC,EAAYpkB,GACpF0uB,GAAUrK,MAAAA,OAAA,EAAAA,EAAUqK,UAAW,GAmB/BtC,GAAmBnsB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,4BAC/BiuB,EACDnZ,GACGqP,IACA4I,EAAAA,EAAAA,KAAwBC,EAAAA,IAAAA,SAAmC,CACvD5R,UAAW8Q,EACXhI,WAAAA,KAER,GAEJ,OACI,yBAAKxkB,UAAW6B,GAAAA,CAAWtB,EAAO4uB,QAAS,CAAC,CAAC5uB,EAAOytB,kBAAmBK,KACnE,kBAAC,EAAAnS,IAAD,CAAK/X,QAAQ,OAAOohB,UAAU,OAAOvlB,UAAWwuB,GAAAA,GAC5C,kBAAC,EAAAtS,IAAD,CAAK/X,QAAQ,OAAO4a,WAAW,UAC3B,kBAAC,EAAA7C,IAAD,CAAK/X,QAAQ,OAAO4a,WAAW,UAC1B6H,GAA6BA,IAC9B,kBAAC2B,GAAA,EAAD,CAAgBzoB,WAAYA,EAAYE,UAAWO,EAAOmwB,kBAE9D,kBAAC,EAAAxU,IAAD,CAAK/X,QAAQ,OAAO2W,cAAc,UAC9B,kBAAC0N,GAAA,EAAD,CAAepnB,MAAOyjB,EAAa7kB,UAAWO,EAAOqlB,sBACjD,kBAAC,GAAD,CAAiB1kB,MAAOyjB,EAAavP,OAAQA,GACzC,0BAAMpV,UAAWO,EAAOokB,aAAcA,KAG7CI,GAAiB,0BAAM/kB,UAAWO,EAAOwkB,eAAgBA,IACxDsJ,GACE,kBAAC6B,GAAD,CAAgBpB,QAASA,EAASqB,QAvCtC,MAChBW,EAAAA,EAAAA,KAAarM,MAAAA,OAAD,EAACA,EAAUoD,YAAa,CAChC4I,QAAS,GACTrvB,MAAO,IACR8L,KAAK2c,IAmCoEuG,WAhCxDK,KACpBK,EAAAA,EAAAA,KAAarM,MAAAA,OAAD,EAACA,EAAUoD,YAAa,CAChC4I,QAAAA,EACArvB,MAAO,IACR8L,KAAK2c,QAgCA,yBAAK7pB,UAAWO,EAAO2tB,4BACjBf,EAAAA,EAAAA,SAAQoB,IACN,kBAACE,GAAA,EAAD,CACIzuB,UAAWO,EAAO0tB,kBAClB5sB,KAAKqtB,EAAAA,EAAAA,KAAgCjK,GACrC8J,kBAAmBA,EACnBI,WAAYrB,EAAAA,IAAAA,SACZsB,qBAAmB,IAG1BP,GACG,kBAACnJ,GAAD,CACIC,eAAgBA,EAAeX,GAC/BY,eAAgBA,EAAeZ,MAGrC6J,GACE,oCACI,kBAACqB,GAAD,CAASZ,QAASA,EAAS9uB,UAAWO,EAAOuuB,UAC7C,kBAACrB,GAAD,CACIhD,KAAMsD,EACNL,SApEF,KACtBY,GAAgB7D,IAAUA,KAoEFzqB,UAAWO,EAAOowB,uBAMrC5C,GAAe,kBAACxB,GAAD,CAAoB/H,WAAYA,EAAYxkB,UAAWO,EAAOqwB,uBC3GpFG,GAAgB,IAA+E,IAA9E,UAAC/wB,EAAD,YAAY2pB,EAAc,GAA1B,cAA8BE,EAA9B,OAA6CxO,EAA7C,aAAqD2V,GAAyB,EACjG,MAAM,UAACC,EAAD,QAAYlW,GAAWM,GACvB,eAAC+J,EAAD,eAAiBD,GCZU,EAACpK,EAA2B8O,EAA2BmH,KACxF,MAAME,EAAqBzI,GAA2B1N,EAAQ2N,YAAa3N,EAAQ4N,cAC7EnS,GAAWC,EAAAA,EAAAA,eAkCjB,MAAO,CACH2O,eAlCoBZ,GAA2B,KAC/C,MAAM,OAACpP,GAAUoP,GACjB2M,EAAAA,EAAAA,KAAwBH,EAAc,CAClCI,iBAAkBhc,EAAOsG,UACzBuJ,aAAciM,EAAmB9rB,KACjCsmB,kBAAmBwF,EAAmBrI,YAErC3b,KAAK2c,GACLvH,OAAOC,IACJ/L,EAASgM,EAAAA,GAAAA,QAAAA,UAAoBC,EAAAA,EAAAA,KAAuBF,EAAOvgB,IAAAA,KAAU,+BA0B7EmjB,eAtBoBX,GAA2B,KAC/C,MAAM,OAACpP,EAAD,SAASqP,GAAYD,GACrB,UAAC6M,EAAD,QAAYC,GAAW7M,EACvB8M,EAAgBL,EAAmBrI,YAAcG,EAAAA,IAAAA,GACjDwI,EAAiBD,EAAgBnc,EAAOsG,UAAYsV,EACpDS,EAAeF,EAAgBP,EAAe5b,EAAOsG,WAC3DgW,EAAAA,EAAAA,KAAe,CACXF,eAAAA,EACAC,aAAAA,EACAxM,aAAciM,EAAmB9rB,KACjCxD,WAAY,KACZyvB,UAAAA,EACAC,QAAAA,IAECpkB,KAAK2c,GACLvH,OAAOC,IACJ/L,EAASgM,EAAAA,GAAAA,QAAAA,UAAoBC,EAAAA,EAAAA,KAAuBF,EAAOvgB,IAAAA,KAAU,iCDpBxC2vB,CAAsB5W,EAAS8O,EAAemH,GAEjFjE,GAAYprB,EAAAA,EAAAA,UAAQ,KACfiwB,EAAAA,EAAAA,KAA0CjI,IAClD,CAACA,KAEE,iBAACsD,IAAoB7a,EAAAA,EAAAA,YAAW8a,EAAAA,GAMtC,OAJA5O,EAAAA,EAAAA,YAAU,KACN2O,EAAiBF,KAClB,CAACE,EAAkBF,IAGlB,yBAAK/sB,UAAWA,GACX2pB,EAAYjkB,KAAK8e,IAAe,QAC7B,MAAM0H,EAAW,GAAE1H,MAAAA,GAAH,UAAGA,EAAYC,gBAAf,aAAG,EAAsBoD,eAAerD,MAAAA,GAAxC,UAAwCA,EAAYC,gBAApD,aAAwC,EAAsBoE,YAE9E,OACI,kBAACa,GAAD,CAAoBrO,OAAQA,EAAQmJ,WAAYA,EAAY7d,IAAKulB,IAC3DtF,GACMqK,EAEI,kBAACJ,GAAD,CACIhH,cAAeA,EACfrF,WAAYA,EACZW,eAAgBA,EAChBC,eAAgBA,EAChBwB,0BAA2BA,IAMnC,kBAAC,GAAD,CACIzB,eAAgBA,EAChBC,eAAgBA,EAChBZ,WAAYA,EACZoC,0BAA2BA,WAW/DmK,GAAczf,YAAc,gBAE5B,YEnEavS,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChC2qB,KAAM,CACFpgB,WAAY,MACZrS,cAAe,OACf6b,SAAU,OACVC,SAAU,GAEdzG,OAAQ,CACJ7V,SAAU,OACV0H,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BpN,QAAS,gBCSJsjB,GAAmB,IAAoF,IAAnF,UAACtP,EAAD,OAAYH,EAAZ,cAAoBwO,EAApB,YAAmCF,EAAnC,MAAgDlG,EAAhD,gBAAuD2F,GAA4B,EAChH,MAAM7oB,EAASxB,MAET,UAAC+yB,GAAaxxB,EAAAA,GACd8U,GAAS/U,EAAAA,EAAAA,aAAYyxB,EAAUC,WAC/B9a,GAAO5W,EAAAA,EAAAA,aAAYyxB,EAAUE,SAE7B5b,EAAaiF,EAAO,eAAiBrZ,IAAAA,KAAU,iBAErD,OAAIwZ,EACO,kBAACW,EAAA,EAAD,OAGPN,EAAAA,EAAAA,KAAe5E,GAEX,kBAAC,GAAD,CACI0S,YAAaA,EACb3pB,UAAWO,EAAOsxB,KAClBlrB,IAAKyO,MAAAA,OAAF,EAAEA,EAAQ/T,IACbga,OAAQA,EACRpE,KAAMA,EACNb,WAAYA,EACZgT,gBAAiBA,IAKzB3F,EAAQ,EAEJ,kBAAC,GAAD,CACIpI,OAAQA,EACRwO,cAAeA,EACfF,YAAaA,EACb3pB,UAAWO,EAAOsxB,KAClBlrB,IAAKyO,MAAAA,OAAF,EAAEA,EAAQ/T,IACb2vB,aAAc5b,EAAO/T,MAK1B,kBAAC,EAAAS,WAAD,CAAY9B,UAAWO,EAAOkU,QAAS2B,IC3DrCrX,IAAYC,EAAAA,EAAAA,GAAW,CAChC8M,UAAW,CACPoP,SAAU,EACV/W,QAAS,OACT2W,cAAe,SACfyK,UAAW,GAEfxK,QAAS,CACLC,SAAU,WACV7W,QAAS,OACT+W,SAAU,EACVJ,cAAe,SACfyK,UAAW,GAEfpK,WAAY,CACRvb,OAAQ,OACRsb,SAAU,EACVpI,WAAY,KCAdmf,GAAgB,IAAgC,IAA/B,OAAC5W,EAAD,UAASrb,GAAsB,EAClD,MAAMO,EAASxB,MAET,KACFwc,EADE,QAEFjI,EAFE,YAGFiJ,EAHE,UAIF6C,EAJE,WAKFE,EALE,aAMFpN,EANE,YAOFkB,EAPE,kBAQFsQ,IACAtR,EAAAA,EAAAA,YAAWwM,KACT,UAACkT,GAAaxxB,EAAAA,GACdqpB,GAActpB,EAAAA,EAAAA,cAAawW,GAC7Bib,EAAUI,iCAAiCrb,EAAOwE,EAAO3U,MAEvD0O,GAAS/U,EAAAA,EAAAA,aAAYyxB,EAAUC,WAC/BtO,GAAQpjB,EAAAA,EAAAA,cAAawW,GAAUib,EAAUK,iBAAiBtb,EAAOwE,EAAO3U,MACxEuQ,GAAO5W,EAAAA,EAAAA,aAAYyxB,EAAUE,SAC7BI,GAAUzwB,EAAAA,EAAAA,UACZ,KAAM,CACF0wB,MAAOjT,EACPkT,MAAOhT,KAEX,CAACF,EAAWE,KAGhBhB,EAAAA,EAAAA,YAAU,KACNoF,EAAkB,MACnB,CAACtO,MAAAA,OAAD,EAACA,EAAQ/T,MAEZ,MAAMgM,GAAS1L,EAAAA,EAAAA,UAAQ,ICjDGyR,CAAAA,IAC1B,MAAMmf,EAAcC,EAAAA,IAAAA,UAAgBpf,GAC/B1N,IAAI+sB,EAAAA,KACJ/sB,KACIgtB,GACI,yCAAwCA,iDAEEA,OAElDC,OAAO,IAEZ,OAAO,IAAIC,EAAAA,KAAgBC,UAAUN,GAAaO,SDsCrBC,CAAqB3f,IAAc,CAACA,KAE3D,UAACoI,EAAWwX,OAAQnJ,IAAiBoJ,EAAAA,GAAAA,GAAmB,CAC1Db,QAAAA,EACA/kB,OAAAA,EACAkO,KAAAA,EACAgB,YAAAA,EACAlB,OAAAA,EACAjG,OAAAA,EACA2U,uBAAwB7X,EAAeqY,EAAAA,IAAAA,IAAqBA,EAAAA,IAAAA,YAC5DtT,KAAAA,IAGE0T,GAAchpB,EAAAA,EAAAA,UAAQ,KAAMipB,EAAAA,EAAAA,KAA6BjB,IAAc,CAACA,IAExEuJ,GAAuBvxB,EAAAA,EAAAA,UACzB,KAAM,CACF4f,gBAAiBsI,EACjBxO,QAAQ8X,EAAAA,EAAAA,MAAK,CAAC,UAAW,eAAgB,iBAAkB9X,MAE/D,CAACwO,EAAexO,IAGpB,OACI,kBAACwP,GAAA,WAAD,CAA6BzpB,MAAOupB,GAChC,kBAAC1O,EAAA,EAAD,CAAWjc,UAAWA,GAClB,yBAAKA,UAAWO,EAAOuL,WACnB,kBAACqU,GAAgBiT,SAAjB,CAA0BhyB,MAAO8xB,GAC7B,kBAAC,GAAD,CAAiB/zB,MAAOkc,EAAOpI,QAASwQ,MAAOA,KAEnD,yBAAKzjB,UAAWO,EAAOwa,SACnB,kBAAC+P,GAAD,CACItP,UAAWA,EACXH,OAAQA,EACRwO,cAAeA,EACfF,YAAaA,EACblG,MAAOA,IAEVA,EAAQlH,GACL,kBAACF,EAAA,EAAD,CACIja,QAAS,CAACnD,KAAMsB,EAAO4a,YACvBmB,MAAOmH,EACPjH,mBAAoB,GACpBD,YAAaA,EACbhB,KAAMA,EACNkB,aAAcnJ,SAU9C2e,GAAc3gB,YAAc,gBEvG5B,MCAa+hB,GAAwBhiB,IAAAA,cA0B1B,MAEXgiB,GAAsB/hB,YAAc,yB,mfC7BpC,MAAMgiB,GAAsB,sBAEtBC,GAAU,MACTC,GAAAA,GAAAA,QADM,CAET9P,mBAAmB+P,EAAAA,GAAAA,IAAqBH,MAGtCI,GAAU,CAAC7c,EAAOjN,IACZA,EAAOxE,OACNkuB,GACD,MAAWzc,EAAX,CAAkBzD,YAAaxJ,EAAO+pB,QAASpY,KAAM,IAE9CiY,GAAAA,GAAAA,QAA4B3c,EAAOjN,G,4BCZtD,MAAMgqB,GAAe,CACjB/N,eAAgB,eAChBvf,MAAO,mBAGEvH,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtC60B,eAAgB,CACZj0B,OAAQ,QACRuE,QAAS,OACTiF,WAAY,SACZ9C,MAAO,oBAEXwtB,QAAS,CACLl1B,SAAU,OACVqc,SAAU,UAEd,mBAAoB,CAChB3U,MAAO,oBAEX,8BAA+B,CAC3B0U,SAAU,YAEd,4BAA6B,CACzB7W,QAAS,OACT9E,YAAa,OACb,aAAc,CACVwS,WAAY,QACZpO,UAAW,eAGnBswB,SAAU,CACN5vB,QAAS,OACT4a,WAAY,SACZnf,OAAQ,OACRhB,SAAU,QAEd,oBAAqB,CACjBo1B,cAAe,OACf,UAAWJ,QCzBnB,IAAeK,EAAAA,GAAAA,IATWxxB,IACtB,MAAMlC,EAASxB,KACf,OACI,yBAAKiB,UAAWO,EAAOwzB,UACnB,kBAACG,GAAA,QAA4BzxB,O,yICClC,MAAM0xB,IAA+BlxB,EAAAA,EAAAA,OACxCyC,EAAAA,EAAAA,MAAK0uB,IAAD,CACA1tB,IAAI2tB,EAAAA,EAAAA,KAAwBD,EAAK/yB,KACjCH,MAAOkzB,EAAKlzB,MACZ4O,oBAAoBwkB,EAAAA,EAAAA,KAA0BF,QAElDG,EAAAA,EAAAA,SAAOpnB,EAAAA,EAAAA,MAAK,QAGHqnB,IAAiBvxB,EAAAA,EAAAA,MAAKwxB,EAAAA,IAA2BN,IAExDO,IAA0BzxB,EAAAA,EAAAA,OAAK0xB,EAAAA,EAAAA,OAAM,MAAM9e,EAAAA,EAAAA,OAAM,EAAGN,EAAAA,IAiBpDqf,GAA2BC,IAC7B,IAAIC,EAAAA,EAAAA,KAAqBD,GAAW,CAChC,MAAME,EAAWL,GAAwBG,GACzC,OAAOE,EAAStrB,OAAS,EAAIsrB,EAASlf,MAAM,GAAI,GAAK,KAErD,OAAO,MAaFmf,IAA2BtvB,EAAAA,EAAAA,MATPuvB,G,+UAAD,IACzBA,EADyB,CAE5BC,UAAU,EACVC,WAAW,EACXC,WAAYR,GAAwBK,EAAWvuB,IAC/C2uB,iBAAkBC,GAClBC,qBAAsBC,GAAAA,M,gLCpDnB,MAAMz2B,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCkhB,OAAQ,CACJ1Y,QAAS,oBC2CjB,GAzB6B,IAShB,IATiB,MAC1BrI,EAD0B,YAE1BiU,EAF0B,oBAG1BqiB,EAH0B,eAI1BC,EAJ0B,gBAK1BC,EAL0B,YAM1BC,EAN0B,gBAO1BC,EAP0B,gBAQ1BC,GACS,EACT,MAAMv1B,EAASxB,KACf,OACI,kBAAC2U,EAAA,EAAD,CAAiBvU,MAAOA,EAAOa,UAAWO,EAAO2f,QAC7C,kBAACjM,EAAA,EAAD,CAAuBC,MAAOd,EAAanT,SAAUw1B,IACrD,kBAAC,KAAD,CAAcM,QAASL,EAAgB9uB,QAAS+uB,IAChD,kBAAC9hB,EAAA,EAAD,CAAiBjU,OAAQ,GAAI8H,OAAQ,IACrC,kBAACsuB,GAAA,EAAD,CACIJ,YAAaA,EACbC,gBAAiBA,EACjBC,gBAAiBA,M,mNC9BjC,MAmBA,IAAeG,E,SAAAA,IAAiB,CAAC,EAAD,SAAC,YAACC,GAAF,GAAiBC,UAAU,MAAC/0B,IAA5B,QAAyC,CACrEkmB,UAAW8O,QAAQF,EAAYvc,MAAMtY,GAAQD,EAAMC,MAAQA,QAD/D,EAnBwB,IAA0E,IAAzE,KAACg1B,EAAD,kBAAOC,EAAP,UAA0BhP,EAA1B,SAAqCiP,GAAoC,EAAvB3yB,E,kXAAuB,wDAC9F,MAAMrD,EAASxB,KACf,OACI,yBACIiB,UAAW6B,GAAAA,CACP,CACI,CAACtB,EAAO,qBAAsBg2B,EAC9B,CAACh2B,EAAO,sBAAuB+mB,GAEnC/mB,EAAOuzB,UAGVuC,EAAK1pB,OAAOjH,KAAI,CAACtE,EAAOo1B,IACrB,kBAACF,EAAD,IAAmB3vB,IAAK6vB,EAAOp1B,MAAOA,GAAWwC,U,gBCb1D,MAgBP,GAhB2B,QAAC,OAAC6yB,EAAD,SAASC,GAAV,SACvB,oCACKD,GACG,kBAACvyB,GAAA,EAAD,CAA4BP,aAAc3B,IAAAA,KAAU,QAAS8B,KAAMokB,GAAAA,EAAUjI,KAAK,IAAIrZ,QAAS6vB,IAElGC,GACG,kBAACxyB,GAAA,EAAD,CACIP,aAAc3B,IAAAA,KAAU,UACxB8B,KAAMqkB,GAAAA,EACNlI,KAAK,IACLrZ,QAAS8vB,M,mNCsBzB,MA2HA,GA3HuB,IAWV,IAXW,YACpBd,EADoB,OAEpBjpB,EAFoB,QAGpBylB,EAHoB,OAIpBuE,EAJoB,QAKpBC,EALoB,SAMpBC,EANoB,OAOpBxb,EAPoB,OAQpBob,EARoB,kBASpBre,EAToB,YAUpB8d,GACS,EACT,MAAMY,GAAgBn1B,EAAAA,EAAAA,UAAQ,ILxBG,EAACgL,EAAQipB,IAC1CjpB,EAAOjH,KAAKtE,IACR6B,EAAAA,EAAAA,OACIpC,EAAAA,EAAAA,SAAO,CAACC,EAAD,SAAM,GAAC4F,GAAP,SAAeqwB,EAAAA,EAAAA,OAAMrwB,EARV,EAACmuB,EAAUzzB,IAFd,EAAC2zB,EAAU3zB,KAAU6B,EAAAA,EAAAA,OAAK0K,EAAAA,EAAAA,MAAK,CAAC,WAAWqpB,EAAAA,EAAAA,KAA2BjC,GAAjD9xB,CAA4D7B,GAIjG61B,CADUvC,GAAwBG,GACLzzB,GAMI81B,CAAsBxwB,EAAItF,GAAQN,KAAM,KACxEi2B,EAAAA,EAAAA,OAAM,QAAS31B,GAFnB6B,CAGE2yB,KKmB8BuB,CAAsBxqB,EAAQipB,IAAc,CAACjpB,EAAQipB,IAEnFwB,GAAmBz1B,EAAAA,EAAAA,UAAQ,IAAMqzB,GAAyBY,IAAc,CAACA,IAEzEr1B,EAASxB,KACTkY,GAAO5W,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,SACnBub,GAAiBwb,EAAAA,EAAAA,KAAoBpgB,GACrC7W,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvBob,GAAYrb,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,cAExBsW,GAAiBvW,EAAAA,EAAAA,cAClBwW,GAAUvW,EAAAA,GAAAA,UAAAA,kBAAsCuW,EAAO6E,IAAe,MAErE,cAACjI,IAAiBrB,EAAAA,EAAAA,YAAWihB,IAE7BiE,GAAgB72B,EAAAA,EAAAA,cACjBgC,GACG,kBAAC,GAAD,MACQA,EADR,CAEI8zB,WAAYnE,GAAWA,EAAQE,QAAU7vB,EAAMwyB,WAAWvuB,OAGlE,CAAC0rB,KAGEmF,EAAeC,IAAoB7uB,EAAAA,EAAAA,UAAS,OAE7C,UAACye,EAAD,UAAYqQ,IAAaC,EAAAA,GAAAA,KAoBzBC,GAAmBh2B,EAAAA,EAAAA,UACrB,IAC6B,iBAAlB41B,IAA8B1b,GAC/Bqa,EAAYjoB,UAAShL,EAAAA,EAAAA,OAAK0K,EAAAA,EAAAA,MAAK,CAAC4pB,KAAiBpqB,EAAAA,EAAAA,MAAK,OAAjClK,CAAyC0J,KAExE,CAAC4qB,EAAerB,EAAavpB,EAAQkP,IAEnCsL,EAAqC,iBAAlBoQ,IAjBDne,GAiB8CzL,EAAAA,EAAAA,MAAK,CAAC4pB,GAAgB5qB,GAhBxF8qB,EAAUpc,KACVuc,EAAAA,EAAAA,KAAwB,CACpBnkB,cAAAA,EACAwD,KAAAA,EACAmC,eAAAA,EACAhZ,SAAAA,EACAy3B,mBAAmBA,EAAAA,EAAAA,KAAkBjhB,EAAegC,WAAYQ,MAPhDA,IAAAA,EAkBxB,MAAM0e,EAAmC,iBAAlBP,GA1BDne,CAAAA,GAClBgO,EAAU/L,KACV0c,EAAAA,EAAAA,KAAsB,CAClBtkB,cAAAA,EACAwD,KAAAA,EACAmC,eAAAA,EACAye,mBAAmBA,EAAAA,EAAAA,KAAkBjhB,EAAegC,WAAYQ,KAoBnB4e,EAAarqB,EAAAA,EAAAA,MAAK,CAAC4pB,GAAgB5qB,IAElFsrB,GAAsBx3B,EAAAA,EAAAA,cAAY,KACpC,MAAM2Y,GAAiBzL,EAAAA,EAAAA,MAAK,CAAC4pB,GAAgB5qB,GACxCmrB,GACLrB,EAAOrd,KACR,CAACqd,EAAQc,EAAe5qB,EAAQmrB,IAE7BI,GAAwBz3B,EAAAA,EAAAA,cAAY,KACtC,MAAM2Y,GAAiBzL,EAAAA,EAAAA,MAAK,CAAC4pB,GAAgB5qB,GAC7C,IAAKwa,EAAW,OAChB,MAAM5O,EAA2B,CAC7BpC,UAAWuF,EACXjI,cAAAA,EACApS,IAAK+X,EAAe/X,IACpBD,MAAOgY,GAEXhB,EAAkBG,GAClBif,EAAiB,QAClB,CAACD,EAAe5qB,EAAQyL,EAAmB+O,EAAW1T,EAAeiI,IAElEyc,EACDR,IAAqBxQ,IAAa2Q,OAK/BzwB,EAJA,kBAAC,GAAD,CACIovB,OAAQqB,EAAUG,OAAsB5wB,EACxCqvB,SAAUvP,EAAY+Q,OAAwB7wB,IAGpD+wB,GAAUz2B,EAAAA,EAAAA,UAAQ,KAAM,CAAEu0B,YAAAA,KAAe,CAACA,IAChD,OACI,yBAAKl2B,UAAWO,EAAOszB,gBACnB,kBAACwE,GAAA,EAAD,CACIzC,YAAawB,EACbkB,SAAUxB,EACV1E,QAASA,EACTuE,OAAQA,EACRC,QAASA,EACTC,SAAUA,EACV0B,mBAAmB,EACnBC,mBAAoB,IACpBC,sBAAuB,IACvBC,cAAe,GACfpB,cAAeA,EACfqB,WAAYnB,EACZD,cAAeA,EACfY,uBAAwBA,EACxBC,QAASA,EACTh2B,QAAS,CACLw2B,8BAA+Br4B,EAAO,6BACtCs4B,gCAAiCt4B,EAAO,oCC7J/CxB,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtC85B,cAAe,CACX30B,QAAS,OACT3E,eAAgB,WAChBkI,OAAQ,aAER,aAAc,CACV9I,SAAU,OACVgU,WAAY,OACZf,WAAY,MACZrK,QAAS,WACT/H,gBAAiB,4B,yHCOtB,MAAMs5B,GAAmB,IAOnB,IAPoB,kBAC7B5gB,EAD6B,SAE7BxI,EAF6B,QAG7BsB,EAH6B,kBAI7BmH,EAJ6B,WAK7B4gB,EAL6B,eAM7B5f,GACS,EACT,MAAM7Y,EAASxB,KACT2c,GAAYrb,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,eACxB,cAACmT,IAAiBrB,EAAAA,EAAAA,YAAWihB,IAC7Bzc,GAAiBvW,EAAAA,EAAAA,cAClBwW,GAAUvW,EAAAA,GAAAA,UAAAA,kBAAsCuW,EAAO6E,IAAe,KAErEzE,GAAO5W,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,SAEnBkW,GAAWC,EAAAA,EAAAA,eACXC,GAAStE,EAAAA,EAAAA,YAAWuE,EAAAA,GAEpBoB,GAAkBtX,EAAAA,EAAAA,cACnBuX,IACG/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,cAA+BzB,EAApCvT,CAA8C+U,EAAOtS,KAAKwS,G,+UAAD,IAAgBA,EAAhB,CAAuBxB,OAAAA,QACpF,CAACA,EAAQF,IAGPe,GAAmBC,EAAAA,EAAAA,KAAUkE,GAE7B5E,GAASzW,EAAAA,EAAAA,cAAawW,GACxBvW,EAAAA,GAAAA,UAAAA,kCAAsDuW,EAAO6E,EAAWjI,KAGtE4E,GAAoB5X,EAAAA,EAAAA,cAAYwC,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,OAAAA,QAAAA,iBAAyCzB,GAAW,CAACA,IAEhG,OACI,oCACI,kBAAC,KAAD,CACIyiB,UAAQ,EACR7f,eAAgBA,EAChB7B,iBAAkBA,EAClBa,kBAAmBA,EACnBC,kBAAmBA,EACnBF,kBAAmBA,EACnBJ,gBAAiBA,EACjBd,KAAMA,EACN2B,WAAYhC,EAAegC,WAC3B9B,OAAQA,EACRrD,cAAeA,EACf6F,UAAUC,EAAAA,EAAAA,KAAqBH,EAAgB,KAAM3F,EAAcpS,IAAKyV,KAE5E,yBAAK9W,UAAWO,EAAOu4B,eACnB,kBAAC,EAAAxmB,OAAD,CACI1L,QAAS,KACL+I,EAASyJ,KAGZpX,IAAAA,KAAU,WAEf,kBAAC,EAAAsQ,OAAD,CACIhM,MAAM,UACN+hB,UAAW2Q,EACXpyB,QAAS,KACLqK,EAAQmI,KAGXpX,IAAAA,KAAU,aClFlBjD,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCC,KAAM,CACFkF,QAAS,OACT2W,cAAe,UAEnBC,QAAS,CACLC,SAAU,WACVxT,QAAS,eACTtI,KAAM,EACN+b,SAAU,QAEdxG,OAAQ,CACJ7V,SAAU,OACVS,YAAa,OACbiH,MAAO,oBAGXutB,eAAgB,CACZj0B,OAAQ,QACRuE,QAAS,OACTiF,WAAY,SACZ9C,MAAO,oBAGX4Z,OAAQ,CACJ1Y,QAAS,gBAGb0xB,UAAW,CACP1xB,QAAS,oBACT/H,gBAAiB,sBACjB2U,aAAc,OAElBC,YAAa,CACTzV,SAAU,OACV0I,WAAY,IACZsL,WAAY,QAEhB9O,KAAM,CACFlF,SAAU,OACV2F,YAAa,OAEjB40B,OAAQ,CACJ3xB,QAAS,gB,2cC5BjB,MAAMyO,GAAa,GCeNmjB,GAAqB,IAAgC,IAA/B,OAAC/d,EAAD,UAASrb,GAAsB,EAC9D,MAAM,QAACiT,EAAD,IAAUqI,GAAOD,EACjB9a,EAASxB,MAET,OACF4N,EADE,KAEF4O,EAFE,QAGFjI,EAHE,UAIFkI,EAJE,YAKFpI,EALE,eAMFC,EANE,eAOFgmB,EAPE,SAQFxC,EARE,OASFF,EATE,gBAUFhB,EAVE,gBAWFG,EAXE,QAYFc,EAZE,QAaFxE,EAbE,mBAcFlf,EAdE,UAeFuI,EAfE,cAgBFhI,EAhBE,UAiBF6lB,IACAlnB,EAAAA,EAAAA,YAAWihB,IAETkG,GAAiB53B,EAAAA,EAAAA,UAAQ,IAAM6yB,GAAe/gB,IAAgB,CAACA,KAE/D,gBACF+lB,EADE,kBAEFrhB,EAFE,kBAGFC,EAHE,MAIFE,EAJE,SAKF3I,EALE,QAMFsB,EANE,eAOFwoB,EAPE,eAQFC,EARE,cASFC,EATE,YAUFzD,GDjD4B,MAChC,MAAO0D,EAAiBC,IAAsBlxB,EAAAA,EAAAA,aACvCmxB,EAAgBC,IAAqBpxB,EAAAA,EAAAA,UAA2B,IACjEsO,GAAO5W,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,UAEzBge,EAAAA,EAAAA,YAAU,KACNyb,EAAkB,IAClBF,EAAmB,QACpB,CAAC5iB,IAEJ,MAAMT,GAAWC,EAAAA,EAAAA,eACXC,GAAStE,EAAAA,EAAAA,YAAWuE,EAAAA,IACpB,cAAClD,EAAD,OAAgB9G,IAAUyF,EAAAA,EAAAA,YAAWihB,IACrC3X,GAAYrb,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,cACxBF,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvB6X,GAAoB1X,EAAAA,EAAAA,cACrBuX,KACG/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,gBAAiCzB,EAAtCvT,CAAA,MAAoD+U,EAApD,CAA4DtB,OAAAA,OAEhE,CAACA,EAAQF,IAEP4B,GAAoB3X,EAAAA,EAAAA,cACrBuX,IAA0B/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,gBAAiCzB,EAAtCvT,CAAA,MAAoD+U,EAApD,CAA4DtB,OAAAA,MACvF,CAACA,EAAQF,IAGP8B,GAAQ7X,EAAAA,EAAAA,cAAY,KACtB,MAAMu5B,GAAetiB,EAAAA,EAAAA,KAAmB,CACpCvB,UAAWuF,EACXjI,cAAAA,IAEJomB,EAAmBG,EAAa34B,KAChC8W,EAAkB,MACX6hB,EADU,CAEb54B,OAAO64B,EAAAA,EAAAA,KAAoB,CACvBC,eAAgBzmB,EAAc7R,WAC9BuU,UAAW6jB,EAAa34B,IACxB4V,KAAAA,EACA7W,SAAAA,IAEJqT,cAAAA,OAEL,CAACiI,EAAWjI,IAETgmB,GAAiBh5B,EAAAA,EAAAA,cAClB2Y,IACG2gB,GAAmBI,GACVA,EAAKxgB,MAAKC,EAAAA,EAAAA,QAAO,MAAOR,EAAe/X,MAGrC84B,EAFI,IAAIA,EAAM/gB,OAK7B,CAAC2gB,IAGCpqB,GAAWlP,EAAAA,EAAAA,cACZ2Y,IACG,MAAMghB,EAAuBN,EAAengB,MAAKC,EAAAA,EAAAA,QAAO,MAAOR,EAAe/X,MAC9E,GAAI+4B,EAAsB,CACtB,MAAMC,EAAgB,MACfjhB,EADY,CAEfhY,MAAOg5B,EACP3mB,cAAAA,EACApS,IAAK+X,EAAe/X,MAExB04B,GAAmBI,IAASG,EAAAA,EAAAA,SAAQ,CAACF,GAAuBD,KAC5DhiB,EAAkBkiB,OACf,CACH,MAAMA,EAAgB,CAClBj5B,MAAOgY,EACP3F,cAAAA,EACApS,IAAK+X,EAAe/X,KAExBw4B,EAAmB,MACnBzhB,EAAkBiiB,MAG1B,CAACjiB,EAAmBD,EAAmB4hB,EAAmBD,IAGxD7oB,GAAUxQ,EAAAA,EAAAA,cACX2Y,IACGygB,EAAmB,MACnBE,GAAmBI,IACf,MAAMI,EAAWJ,EAAKxgB,MAAKC,EAAAA,EAAAA,QAAO,MAAOR,EAAe/X,MACxD,OAAOk5B,GAAWD,EAAAA,EAAAA,SAAQ,CAACC,GAAWJ,GAAQA,OAGtD,CAACJ,EAAmBF,IAGlBjjB,GAAiBvW,EAAAA,EAAAA,cAClBwW,GAAUvW,EAAAA,GAAAA,UAAAA,kBAAsCuW,EAAO6E,IAAe,KAErEG,GAAiBwb,EAAAA,EAAAA,KAAoBpgB,GACrCC,GAAkBtB,EAAAA,EAAAA,KAAmBnC,GAErC4D,GAA+CD,EAAAA,EAAAA,QACjDnB,GACA,CAACiB,EAAiBzD,MAAAA,OAAlB,EAAkBA,EAAe8C,MACjCK,GAGE8iB,GAAiB/3B,EAAAA,EAAAA,UAAQ,IAQpB,IAPW0V,EAAqBhK,QACnCpK,EAAAA,EAAAA,OAAKkK,EAAAA,EAAAA,MAAK,QAAQqtB,EAAAA,EAAAA,MAAKhjB,EAAAA,KAAWvU,EAAAA,EAAAA,OAAKwX,EAAAA,EAAAA,QAAOmf,GAAkBa,EAAAA,YAGlD/0B,EAAAA,EAAAA,MACb+T,GAAkBpC,EAAqBsC,MAAKC,EAAAA,EAAAA,QAAO,MAAOH,EAAcpY,OAASoY,GADpE/T,CAEhBiH,IACkCjH,KAAKtE,IAAD,uBAAW04B,EAAengB,MAAKC,EAAAA,EAAAA,QAAO,MAAOxY,EAAMC,aAAnD,QAA4DD,MACrG,CAACiW,EAAsByiB,EAAgBF,EAAiBjtB,IAErDupB,GAAcv0B,EAAAA,EAAAA,UAChB,IACIka,GACM5Y,EAAAA,EAAAA,OACEyC,EAAAA,EAAAA,MAAIyH,EAAAA,EAAAA,MAAK,SACTE,EAAAA,EAAAA,SAAQhM,IAASgW,EAAqBsC,MAAKC,EAAAA,EAAAA,QAAO,MAAOvY,MAF3D4B,CAGA0J,GACA,IACV,CAAC0K,EAAsB1K,IAGrBgtB,EAAgBtiB,EAAqBhK,QACvC,QAAC,IAAChM,GAAF,SAAWA,IAAQu4B,GAAmBE,EAAengB,MAAKC,EAAAA,EAAAA,QAAO,MAAOvY,OAK5E,MAAO,CACHm4B,gBAHqBp4B,GAAU04B,EAAengB,MAAKC,EAAAA,EAAAA,QAAO,MAAOxY,EAAMC,QAAUD,EAIjF+W,kBAAAA,EACAC,kBAAAA,EACAE,MAAAA,EACA3I,SAAAA,EACAsB,QAAAA,EACAwoB,eAAAA,EACAC,eAAAA,EACAC,cAAAA,EACAzD,YAAAA,IC5FAwE,GAEEzjB,GAAO5W,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,SACnBub,GAAiBwb,EAAAA,EAAAA,KAAoBpgB,GAErC0jB,EAAiB9e,EAAiB6d,EAAiB/sB,GAElD8L,UAAWmiB,IAAqBlD,EAAAA,GAAAA,KAEjCjf,EACFmiB,EAAkBvf,IAClB5H,IACAiF,EAAAA,EAAAA,KAAwB,CAACjF,cAAAA,EAAewD,KAAAA,MACvC0iB,EAAclwB,OAEboxB,GAAqBl5B,EAAAA,EAAAA,UAAQ,IAAM03B,EAAe3zB,KAAKgB,GAAO6yB,EAAe5f,MAAKC,EAAAA,EAAAA,QAAO,KAAMlT,OAAO,CACxG2yB,EACAE,IAGJ,OACI,kBAACtd,EAAA,EAAD,CAAWjc,UAAW6B,GAAAA,CAAWtB,EAAOtB,KAAMe,IACzCs5B,EACG,oCACI,kBAAC,GAAD,CACIn6B,MAAO8T,EACPwQ,MAAOvQ,EACP0iB,YAAa2D,EACb1D,gBAAiBwD,EACjBvD,gBAAiBA,EACjB1iB,YAAaA,EACbqiB,oBAAqBpiB,EACrBqiB,iBAAkBkB,EAClBjB,gBAAiBA,IAErB,yBAAK5kB,MAAO,CAACiK,SAAU,aAClBa,GACG,yBAAK7b,UAAWO,EAAO44B,QAClB1gB,GACG,kBAAC,EAAAnG,OAAD,CAAQhM,MAAM,UAAUM,QAAS0R,EAAOtY,UAAWO,EAAO24B,WACtD,kBAAChgB,GAAA,EAAD,CAAS9W,QAAS,CAACnD,KAAMsB,EAAOuD,QAChC,yBAAK9D,UAAWO,EAAO8T,aAAcrS,IAAAA,KAAU,SAGtD23B,EAAcj0B,KAAKtE,GAChB,kBAAC23B,GAAD,CACIpyB,IAAKvF,EAAMC,IACX+X,eAAgBhY,EAChB+W,kBAAmBA,EACnBC,kBAAmBA,EACnBzI,SAAUA,EACVsB,QAASA,EACT+nB,WAAYQ,EAAgBp4B,QAK5C,kBAAC,GAAD,CACIw0B,YAAaiF,EACbxf,OAAQA,EACR1O,OAAQguB,EACR/D,QAASA,EACTC,SAAUA,EACVzE,QAASA,EACTuE,OAAQA,EACRF,OAAQgD,EACRrhB,kBAAmBA,EACnB8d,YAAaA,IAEhBza,GACG,kBAACY,EAAA,EAAD,CACIC,MAAOpJ,EACPsJ,mBAAoB,GACpBD,YAAajB,EACbC,KAAMA,EACNkB,aAAcnJ,IAGrBkI,GAAa,kBAACW,EAAA,EAAD,QAItB,oCACI,kBAACzI,EAAA,EAAD,CAAiBvU,MAAO8T,EAASjT,UAAWO,EAAO2f,SACnD,kBAAC,EAAApe,WAAD,CAAY9B,UAAWO,EAAOkU,QAASzS,IAAAA,KAAU,e,yICjJrE,IAAI84B,GAAc,EACX,MAAMC,GAAa,IAAMD,KAE1BE,GAAmB7c,IACrB,MAAM8c,EAAW,CACbn1B,SAAU,GACVo1B,OAAQH,MAEZ,GAAI5c,EAASgd,YACT,IAAK,IAAIC,EAAI,EAAGA,EAAIjd,EAASgd,YAAY1xB,OAAQ2xB,IAAK,CAClD,MAAMztB,EAAOwQ,EAASgd,YAAYC,GAClC,IAAIC,EAAWJ,EACf,IAAK,IAAIK,EAAI3tB,EAAKlE,OAAS,EAAG6xB,GAAK,EAAGA,IAAK,CACvC,MAAMC,EAAa5tB,EAAK2tB,GAClBlmB,EAAS+I,EAASqd,SAASD,EAAW7f,WACtC+f,EAASH,IAAM3tB,EAAKlE,OAAS,EAC7BiyB,EAAa,CACftmB,OAAAA,EACAtP,SAAU,GACVo1B,OAAQH,KACR9B,UAAU,EACV0C,UAAWF,EAASL,EAAI,OAAI/zB,GAE5Bo0B,IACAC,EAAKz8B,KAAOw8B,GAEhBJ,EAASv1B,SAAS3E,KAAKu6B,GACvBL,EAAWK,GAIvB,OAAOT,EAASn1B,UCrCP/G,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChC4E,UAAW,CACPlN,SAAU,OACVuF,QAAS,OACTsN,WAAY,MACZuJ,SAAU,YAEd7b,MAAO,CACH+b,SAAU,EACVqK,UAAW,OACXjf,MAAOY,EAAMwN,QAAQE,UAAUmR,KAC/BnT,WAAY,QAEhBgpB,KAAM,CACFr4B,OAAQ,UACR+C,MAAOY,EAAMwN,QAAQE,UAAUmR,KAC/BnT,WAAY,QAEhBzM,SAAU,CACNmB,WAAY,QAEhB6nB,QAAS,CACL5vB,MAAO,QAEXs8B,OAAQ,CACJj8B,OAAQ,OACRL,MAAO,OACPgF,YAAa,MACbsN,WAAY,OAEhBqO,OAAQ,CACJ1Y,QAAS,gBAEbs0B,cAAe,CACX5gB,SAAU,EACV/W,QAAS,OACT2W,cAAe,SACflb,OAAQ,OACR2lB,UAAW,QACXwW,UAAW,QACX9gB,SAAU,QAEd+gB,KAAM,CACF9gB,SAAU,EACVtb,OAAQ,GAEZq8B,iBAAkB,CACdnpB,WAAY,EACZjB,WAAY,OACZ,YAAa,CACTA,WAAY,SAGpBgN,OAAQ,CACJrX,QAAS,W,eCrDV,MAAM00B,GAAgB7qB,IAAAA,cAA8C,M,gBCS3E,MAAM8qB,GAAmB1pB,IACrBA,EAAEC,OAAO0pB,IAAMC,IAONC,GAAO,IAAmB,IAAlB,KAACZ,GAAiB,EACnC,MAAMn7B,EAASxB,KACTyX,GAAWC,EAAAA,EAAAA,eACXpV,EAAMq6B,EAAKtmB,OAAO/T,IAClBk7B,GAAoBl8B,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,sBAChCvb,GAAWC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,aACvBN,GAASjJ,EAAAA,EAAAA,YAAW8pB,IACpBM,GAASn8B,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,YACpBta,IAAKmrB,IAAoBnsB,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,WACtC8gB,GAAaC,EAAAA,EAAAA,KAAc,CAACF,OAAAA,EAAQn7B,IAAAA,IACpCuB,EAAavB,IAAQmrB,EACrBmQ,GAAel8B,EAAAA,EAAAA,cAAY,KAC7B+V,EAASgM,EAAAA,GAAAA,QAAAA,WAAsB,CAACnhB,IAAAA,EAAKqV,OAAQ2E,EAAO3U,QACrD,CAAC8P,EAAU6E,EAAQha,KAElB+T,QAASlU,MAAO/B,GADd,OAEF+7B,GACAQ,EACE57B,GAAa4kB,EAAAA,EAAAA,KAActkB,EAAUs7B,EAAKtmB,OAAOhQ,OAAS,GAC1Dw3B,GAAsBC,EAAAA,EAAAA,KAAuBz8B,EAAUN,EAAY,iBACnEgE,EAAO84B,IAAuBE,EAAAA,EAAAA,KAAoBP,EAAmBK,GAC3E,OACI,yBAAK58B,UAAWO,EAAO4uB,QAAS,eAAc+L,GAC1C,yBAAKl7B,UAAWO,EAAOuL,WACnB,kBAAC,EAAAixB,OAAD,CAAQ/8B,UAAW6B,GAAAA,CAAWtB,EAAOs7B,QAASO,IAAKt4B,GAAQu4B,GAAcW,QAASb,KAClF,0BAAMn8B,UAAW6B,GAAAA,CAAWtB,EAAOq7B,KAAM,CAAC,CAACr7B,EAAO4F,UAAWvD,KACzD,kBAACq6B,GAAA,EAAD,CAAMC,GAAIT,EAAY71B,QAAS+1B,GAC1Bx9B,OC/CZg+B,KDuDE7W,EAAAA,EAAAA,MAAKgW,ICvDM,QAAC,KAACZ,GAAF,SAAYA,EAAKR,SCE9Bn8B,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCo+B,UAAW,CACPx9B,OAAQ,OACRob,SAAU,WACV7W,QAAS,gBAEbk5B,aAAc,CACVz9B,OAAQ,OACRob,SAAU,WACV7W,QAAS,gBAEbw3B,UAAW,CACPx3B,QAAS,OACT4a,WAAY,SACZzY,MAAO,mBACP1G,OAAQ,QAEZ09B,aAAc,CACV/9B,MAAO,MACP6H,KAAM,MACND,IAAK,EACLvH,OAAQ,MACRob,SAAU,WACVvb,gBAAiB,uBAErB89B,oBAAqB,CACjB39B,OAAQ,MACRuH,IAAK,OACLC,KAAM,MACN7H,MAAO,MACPyb,SAAU,WACVvb,gBAAiB,uBAErBi8B,KAAM,CACFp3B,SAAU,OACV0W,SAAU,WACVwiB,UAAW,OACXh2B,QAAS,gBACTi2B,UAAW,aACXC,WAAY,SACZ,UAAW,CACPj+B,gBAAiB,qBAGzBk+B,YAAa,CACT3iB,SAAU,WACV7T,IAAK,EACLy2B,OAAQ,EACRv+B,YAAa,OACbo+B,UAAW,cAEfnY,IAAK,CACDnhB,QAAS,QAEb05B,YAAa,CACT7iB,SAAU,WACV8iB,WAAY,OACZz+B,YAAa,MACbH,KAAM,WACNK,MAAO,EACP4E,QAAS,OACT45B,cAAe,SACfN,UAAW,cAEfO,cAAe,CACX75B,QAAS,OACTsN,WAAY,OACZlS,MAAO,OACPgE,OAAQ,WAEZ06B,gBAAiB,CACbx6B,UAAW,kBAEfy6B,eAAgB,CACZz6B,UAAW,gBAEfob,OAAQ,CACJ5P,WAAY,sBACZ1P,MAAO,EACPK,OAAQ,EACRk+B,WAAY,wBACZK,YAAa,wBACbz+B,UAAW,iCAEf0+B,SAAU,CACNl/B,KAAM,WACNK,MAAO,EACP6E,aAAc,Y,+hBCzEtB,MCTa8C,GAAQ,CAACm3B,oBDSO57B,IACzB,SAA6GoG,EAAAA,EAAAA,MACzG,CACI,qBACA,oBACA,aACA,UACA,UACA,cACA,gBACA,gBACA,UACA,UACA,WACA,SACA,SACA,aACA,gBAEJpG,IAlBE,qBAAC67B,EAAD,yBAAuBC,EAAvB,KAAiD7C,EAAjD,MAAuDv8B,EAAvD,KAA8DwO,EAA9D,UAAoE6wB,EAApE,MAA+EztB,GAArF,EAA+FnN,E,kXAA/F,kGAoBM66B,EAAYt/B,EAEZu/B,EACFH,IAA6B7C,EAAKz8B,MAAQy8B,EAAK51B,UAAY41B,EAAK51B,SAAS2D,OAAS,EAShFlJ,EAASxB,KACf,OACI,4BAAKgS,MAAO,CAACnR,OAAQ,SAAagE,EAAlC,CAA8C+C,IAAK+0B,EAAKR,SACnDwD,GAA4BhD,EAAKzC,UAC9B,yBAAKloB,MAAO,CAACxR,MAAO++B,EAAuB,GAAIt+B,UAAWO,EAAO88B,eAErE,yBAAKr9B,UAAWO,EAAO+kB,IAAKvU,MAAOA,GAC/B,yBAAK/Q,UAAWO,EAAOs9B,aAClBa,GACG,yBAAK1+B,UAAWO,EAAOy9B,cAAep3B,QAhBzC,KACb23B,EAAyB,CACrB7C,KAAAA,EACA/tB,KAAAA,EACA6wB,UAAAA,MAagB,yBACI,aAAY9C,EAAKzC,SAAW,WAAa,SACzCj5B,UAAW6B,GAAAA,CACPtB,EAAOse,OACP6c,EAAKzC,SAAW14B,EAAO29B,eAAiB39B,EAAO09B,oBAK/D,yBAAKj+B,UAAWO,EAAO69B,UACG,mBAAdK,EACFA,EAAU,CACR/C,KAAAA,EACA/tB,KAAAA,EACA6wB,UAAAA,IAEFC,OCpEaE,iBCSzBl8B,IACd,SAAkFoG,EAAAA,EAAAA,MAC9E,CACI,YACA,WACA,aACA,YACA,cACA,aACA,oBACA,SACA,UACA,YACA,SACA,OACA,gBAEJpG,IAhBE,SAACqD,EAAD,qBAAWw4B,EAAX,mBAAiCM,EAAjC,KAAqDlD,GAA3D,EAAoE93B,E,kXAApE,oEAkBMrD,EAASxB,KAET8/B,EAAqBD,EAAmBn1B,OACxCq1B,EAAW,GACjBF,EAAmBG,SAAQ,CAACC,EAAmB5D,KAC3C0D,EAAS39B,KACL,yBAAKwF,IAAM,OAAM,EAAIy0B,IAAKrqB,MAAO,CAACxR,MAAO++B,GAAuBt+B,UAAWO,EAAO68B,WAC7E1B,EAAKz8B,MAAQ,yBAAKe,UAAWO,EAAOo7B,WAAYD,EAAKC,UAAxC,KACbP,IAAMyD,EAAqB,GAAW,IAANzD,GAC7B,oCACI,yBAAKp7B,UAAWO,EAAO+8B,eACvB,yBAAKt9B,UAAWO,EAAOg9B,4BAO3C,MAAM0B,EAAQvD,EAAKz8B,KAAOq/B,EAAuB,EAAI,EAC/CY,EAAgBZ,EAAuBO,EAAqBI,EAC5DluB,EAAQ,CAAC3J,KAAM83B,EAAe3/B,MAAQ,eAAc2/B,OACpD3/B,EAAS,GAAE2/B,EAnDU,QAoDrBC,E,+UAAY,IAAIv7B,EAAWmN,MAAlB,CAAyBxR,MAAAA,IACxC,OACI,8BAASqE,EAAT,CAAqB5D,UAAWO,EAAOm7B,KAAM3qB,MAAOouB,IAC/CL,EAED,yBAAK9+B,UAAWO,EAAOo9B,YAAa5sB,MAAOA,GACtCjL,KDxD4Cw4B,qBAJhC,GAIsDc,UAHjE,GAG4EC,gBAFtE,IELxB,SAASC,KAA2Q,OAA9PA,GAAWxwB,OAAOywB,QAAU,SAAU7sB,GAAU,IAAK,IAAI0oB,EAAI,EAAGA,EAAIoE,UAAU/1B,OAAQ2xB,IAAK,CAAE,IAAIqE,EAASD,UAAUpE,GAAI,IAAK,IAAIz0B,KAAO84B,EAAc3wB,OAAO4wB,UAAUC,eAAeC,KAAKH,EAAQ94B,KAAQ+L,EAAO/L,GAAO84B,EAAO94B,IAAY,OAAO+L,GAAkB4sB,GAASO,MAAMC,KAAMN,WAGhT,SAAgB,QAAC,OACfj/B,EAAS,IADK,EAEXkC,E,kXAFW,sBAGV4O,IAAAA,cAAoB,MAAOiuB,GAAS,CACxC//B,MAAO,KACPK,OAAQ,KACRmgC,QAAS,YACTC,QAAS,MACTC,MAAO,8BACNx9B,GAAQ4O,IAAAA,cAAoB,IAAK,CAClC6uB,OAAQ,OACRC,YAAa,IACbC,KAAM,OACNC,SAAU,UACVC,YAAa,OACZjvB,IAAAA,cAAoB,OAAQ,CAC7BkvB,EAAG,mSACHH,KAAM,YCQR,GAjB6B,IAAiC,IAAhC,MAACjhC,EAAD,YAAQqhC,GAAwB,EAC1D,MAAMjgC,EAASxB,KACf,OACI,kBAAC2U,EAAA,EAAD,CAAiBvU,MAAOA,EAAOa,UAAWO,EAAO2f,QAC7C,yBAAKlgB,UAAWO,EAAO07B,kBACnB,kBAAC/3B,GAAA,EAAD,CACIlE,UAAWO,EAAOse,OAClBlb,aAAc3B,IAAAA,KAAU,cACxB8B,KAAM28B,GACN75B,QAAS45B,EACTvgB,KAAK,S,gBCnBlB,MAAMlhB,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCC,KAAM,CACF+b,SAAU,YAEd0lB,YAAa,CACTjvB,WAAY,Y,2dCLb,MAAM1S,IAAYC,EAAAA,EAAAA,GAAW,CAChC2hC,yBAA0B,CACtB3lB,SAAU,WACVzb,MAAO,OACPK,OAAQ,WAEZghC,8BAA+B,CAC3B5lB,SAAU,WACV7T,IAAK,EACLC,KAAM,EACN7H,MAAO,OACPK,OAAQ,OACRd,OAAQ,GACR,2BAA4B,CACxB+hC,WAAY,WAEhB,mDAAoD,CAChDA,WAAY,WAGpBC,gBAAiB,CACb9lB,SAAU,WACVzb,MAAO,OACP4E,QAAS,OACT3E,eAAgB,SAChB2H,IAAK,OACLrI,OAAQ,GACRyE,OAAQ,OACRs9B,WAAY,UAEhBE,SAAU,CACNt9B,UAAW,iCACX6C,MAAO,wBCTf,GAnBgD06B,IAC5C,MAAMC,EAAuBx+B,IACzB,MAAMlC,EAASxB,KACf,OACI,yBAAKiB,UAAWO,EAAOogC,0BACnB,yBAAK3gC,UAAWO,EAAOqgC,+BACnB,yBAAK5gC,UAAW6B,GAAAA,CAAW,sBAAuBtB,EAAOugC,kBACrD,kBAACI,GAAA,EAAD,CAAmBlhC,UAAWO,EAAOwgC,aAG7C,kBAACC,EAAcv+B,KAM3B,OADAw+B,EAAoB3vB,YAAc,sBAC3B2vB,GCpBEliC,IAAYC,EAAAA,EAAAA,GAAW,CAChCmiC,SAAU,CACN35B,QAAS,QAEb45B,WAAY,CACRxhC,OAAQ,QAEZwG,UAAW,CACPq3B,UAAW,aACXxiB,SAAU,OACVomB,UAAW,OACXC,aAAc,W,oDCRtB,MAAMC,IAAiBt+B,EAAAA,EAAAA,OAAK0K,EAAAA,EAAAA,MAAK,CAAC,QAAS,SAAS6sB,EAAAA,EAAAA,OAAKgH,EAAAA,EAAAA,IAAG,KAAKC,EAAAA,EAAAA,KAAI,MCcrE,IAjBkBziC,EAAAA,EAAAA,IAAW,KAAM,CAC/BC,KAAM,CACFW,OAAQ,OACRuE,QAAS,OACT2W,cAAe,UAEnBsmB,WAAY,CACRxhC,OAAQ,QAEZ8hC,cAAe,CACX1mB,SAAU,WACV0F,MAAO,MACPvZ,IAAK,MACLrI,OAAQ,S,4BCbhB,MAAMC,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CACzB+L,QAAS,CACL3M,MAAOY,EAAMwN,QAAQC,KAAKC,UAC1BhW,SAAU,YAIlB,MCAa+iC,GAAmB,IAA0C,IAAzC,YAACC,GAAwC,EACtE,MAAMrhC,EAASxB,KACT8iC,EAAYD,EAAc,EAAI5/B,IAAAA,KAAU,UAAYA,IAAAA,KAAU,SACpE,OACI,kBAAC,EAAAF,WAAD,CAAYC,QAAQ,UAAU/B,UAAWO,EAAO0S,SAC1C,GAAE2uB,KAAeC,M,2cCGxB,MAAMC,GAAoC,IAKH,IALI,OAC9CzmB,EAD8C,cAE9C5H,EAF8C,OAG9CqC,EAH8C,iCAI9CisB,GAC0C,EAC1C,MAAMvrB,GAAWC,EAAAA,EAAAA,eACXrB,GAAS/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WACrBsW,GAAiBvW,EAAAA,EAAAA,cAClBwW,GAAUvW,EAAAA,GAAAA,UAAAA,kBAAsCuW,EAAOzB,EAAO/T,MAAS,KAEtEgW,GAAuBD,EAAAA,EAAAA,QAAO,GAAI,CAAC,aAAc3D,EAAc8C,MAAOK,GACtEF,EAAS2E,EAAO3U,GAQtB,OACI,oCACI,kBAAC,KAAD,CACIs7B,gBAAiB3qB,EACjB5D,cAAeA,EACf2E,kBAReJ,IACvB/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,gBAAiCzB,EAAtCvT,CAAA,MAAoD+U,EAApD,CAA4DtB,OAAAA,KAQpDP,UAAWS,EAAevV,IAC1B8W,kBAbeH,IACvB/U,EAAAA,EAAAA,MAAKgV,EAAAA,GAAAA,QAAAA,gBAAiCzB,EAAtCvT,CAAA,MAAoD+U,EAApD,CAA4DtB,OAAAA,KAapDurB,UAAWC,GACXpsB,OAAQA,EACRisB,iCAAkCA,IAEtC,kBAACJ,GAAD,CAAkBC,YAAavqB,EAAqB5N,WC/C1D1K,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CACzB4E,UAAW,CACPtE,QAAS,YAEbiN,OAAQ,CACJ7V,SAAU,OACV0H,MAAOY,EAAMwN,QAAQC,KAAKC,eAIlC,MCMastB,GAAa,CACtBC,YAAa,EACbC,WAAY,IACZC,YAAa,K,gBCnBV,MAAMtjC,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCjI,KAAM,CACFkF,QAAS,OACT2W,cAAe,UAEnBwnB,iBAAkB,CACdtnB,SAAU,YAEdunB,OAAQ,CACJp+B,QAAS,OACT4a,WAAY,MACZ7D,SAAU,EACV1b,eAAgB,aAChBE,UAAW,8BACX8H,QAAS,WACTlB,MAAOY,EAAMwN,QAAQoR,QAAQC,KAC7BnnB,SAAU,OACViU,cAAe,IACfD,WAAY,QAEhB6B,OAAQ,CACJpV,YAAa,OACbD,cAAe,OACfR,SAAU,OACV0H,MAAO,wB,uQCbR,MAAMk8B,GAAgB,IAA6D,IAA5D,OAACnnB,EAAD,MAASonB,EAAT,eAAgBC,EAAhB,gBAAgCC,GAA4B,EACtF,MAAMnsB,GAAWC,EAAAA,EAAAA,eACXrW,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvB8U,GAAS/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,YACrB,SAACsiC,EAAD,QAAWC,IAAWC,EAAAA,EAAAA,KAA4B1iC,EAAUib,EAAQonB,EAAMhX,OAAQrW,EAAQqtB,EAAMM,YAChGvH,GAAW75B,EAAAA,EAAAA,UAAQ,IACd,CAAC8gC,EAAMhX,SACf,CAACgX,EAAMhX,SAEJuX,EAAoB,CACtB5tB,OAAAA,EACAomB,SAAAA,EACAvkB,KAAMgsB,GAAAA,EAAAA,WACNP,eAAAA,GAEEhsB,GAAStE,EAAAA,EAAAA,YAAWuE,EAAAA,GACpBusB,GAAgBziC,EAAAA,EAAAA,cAAY,KAC9BkiC,IACAnsB,EAASyB,EAAAA,GAAAA,OAAAA,QAAAA,WAAkC,CAACvB,OAAAA,EAAQrV,IAAK+T,EAAO/T,SACjE,CAACmV,EAAUpB,EAAO/T,IAAKshC,EAAiBjsB,IAC3C,OACI,oCACKksB,GAAY,kBAACO,GAAA,EAAD,MAAiBH,EAAjB,CAAoCL,gBAAiBO,KACjEL,GAAW,kBAACO,GAAA,EAAD,MAAoBJ,EAApB,CAAuCL,gBAAiBA,OChBnEU,GAAY,IAA0E,IAAzE,OAAChoB,EAAD,YAASsP,EAAT,MAAsB8X,EAAtB,gBAA6BE,EAA7B,eAA8CD,GAA2B,EAC/F,MAAMtiC,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACvB8U,GAAS/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WAC3B,OACI,kBAACgjC,GAAA,EAAD,CACIb,MAAOA,EACPrtB,OAAQA,EACRuV,YAAaA,EACbvqB,SAAUA,EACVJ,UAAWwuB,GAAAA,GAEX,kBAACC,GAAA,EAAD,CACIptB,KAAKkiC,EAAAA,EAAAA,KAAoBnuB,EAAO/T,IAAKohC,EAAMhX,OAAOpqB,KAClDktB,mBAAmBlB,EAAAA,EAAAA,KAAwBC,EAAAA,IAAAA,gBAA0C,CACjF5R,UAAWtG,EAAO/T,IAClBmiC,eAAgBf,EAAMhX,OAAOpqB,MAEjCstB,WAAYrB,EAAAA,IAAAA,kBAEhB,kBAACkV,GAAD,CACIC,MAAOA,EACPpnB,OAAQA,EACRqnB,eAAgBA,EAChBC,gBAAiBA,MCXpBc,GAAkB,CAC3BC,uBAAuB,EACvBC,sBAAsB,GAEbC,GAAkB,CAACvR,MAAO,MAAOC,MAAO,S,IAChDuR,I,SAAAA,GAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,OAAAA,GAAAA,S,CAAAA,KAAAA,GAAAA,KAKE,MClBDC,GAAoBC,ICdT,IAAwB,IAAvB,UAAC/jC,GAAsB,EACrC,MAAMO,EAASxB,KACf,OACI,kBAACkd,EAAA,EAAD,CAAWjc,UAAW6B,GAAAA,CAAWtB,EAAO4gC,SAAU,sBAAuBnhC,IAAzE,sBDYKgkC,GAAiCD,IrGhBT,IAAqD,IAApD,UAAC/jC,EAAD,OAAYqb,GAAwC,EACtF,OACI,kBAAC4oB,EAAA,EAAD,CACIjkC,UAAWA,EACXiT,QAASoI,EAAOpI,QAChBixB,YAAa7oB,EAAO6oB,YACpBC,YAAa9oB,EAAO8oB,YACpBC,gBAAiB/oB,EAAO+oB,gBACxBC,iBAAkBhpB,EAAOgpB,sBqGSxBC,GAAsCP,IEfT,IAAgC,IAA/B,UAAC/jC,EAAD,OAAYqb,GAAmB,EACtE,MAAMkpB,ECRyBlpB,CAAAA,IAC/B,MAAOjI,EAAaC,IAAkB1K,EAAAA,EAAAA,UAAS,KACxC4S,EAAMjI,IAAW3K,EAAAA,EAAAA,UAAS,IAC1BuJ,EAAcsyB,IAAmB77B,EAAAA,EAAAA,WAAS,GAC3CqP,GAASrW,EAAAA,EAAAA,UAAQ,KAAM,CAAE4Z,KAAAA,EAAMnI,YAAAA,EAAalB,aAAAA,KAAgB,CAACqJ,EAAMnI,EAAalB,IAChFqG,EAAYmE,GAAyBrB,EAAQrD,GAAQ,GACrD7F,GAAqB1R,EAAAA,EAAAA,cAAY,KACnC6S,EAAQ,GACRkxB,GAAiBtyB,IAAkBA,MACpC,IAEH,O,+UAAA,EACImB,eAAAA,EACAD,YAAAA,EACAE,QAAAA,EACAiI,KAAAA,EACApJ,mBAAAA,EACAD,aAAAA,GACGqG,IDViBksB,CAAmBppB,GAE3C,OACI,kBAACjK,EAAuBgiB,SAAxB,CAAiChyB,MAAOmjC,GACpC,kBAACnpB,GAAD,CAAqBC,OAAQA,EAAQrb,UAAWA,QFW/C0kC,GAAqCX,IIhBT,IAAgC,IAA/B,OAAC1oB,EAAD,UAASrb,GAAsB,EACrE,MAAM2kC,ECEwBtpB,CAAAA,IAAsC,MACpE,MAAM,aAACuB,GAAgBvB,EACjBjb,GAAWC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,aACvBlI,GAAgB9R,EAAAA,EAAAA,UAAQ,KAAM+b,EAAAA,EAAAA,KAAuBtd,EAAUwc,IAAe,CAACxc,EAAUwc,IACzF2c,GAAiB53B,EAAAA,EAAAA,UAAQ,IAAM6yB,GAAe/gB,IAAgB,CAACA,IAC/DmxB,GAAejjC,EAAAA,EAAAA,UACjB,KAAM,CACFyR,YAAa,GACbwjB,QAAS,KACTxE,aAAS/qB,EACTgyB,eAAgBE,EACXlsB,QAAOpK,EAAAA,EAAAA,OAAKkK,EAAAA,EAAAA,MAAK,sBAAuBqL,EAAAA,IAAoBiiB,EAAAA,MAC5D/0B,KAAI,QAAC,GAACgB,GAAF,SAAUA,KACdmP,MAAM,EAfM,GAgBjB0F,KAAM,KAEV,CAACge,KAGE1iB,EAAOL,IAAYquB,EAAAA,EAAAA,YAAWnR,GAASkR,IAExC,YAACxxB,EAAD,QAAcwjB,EAAd,QAAuBxE,EAAvB,KAAgC7W,GAAQ1E,EACxCgF,GAAiBxb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,mBAE7BmpB,GAAiBnjC,EAAAA,EAAAA,UAAQ,KAC3B,MAAMojC,ECnCiB,EAACnP,EAA2BgB,IACvDpE,EAAAA,IAAAA,SAAeoE,GACVlxB,KAAKkxB,GACF9nB,OAAO8Q,QAAQgX,GAASlxB,KAAI,IAA8B,IAA5BmvB,EAAUmQ,GAAkB,EACtD,MAAM/P,EAAaW,EAAYjc,MAAKC,EAAAA,EAAAA,QAAO,KAAMib,IACjD,OAAOoQ,EAAAA,GAAAA,IAAwBhQ,EAAY+P,QAGlDrS,OAAO,ID2BWuS,CAAgB3L,EAAgB3C,GACnD,OAAOmO,EAAWt7B,OAASs7B,EAAa,OACzC,CAACnO,EAAS2C,IAEPvhB,GAASrW,EAAAA,EAAAA,UAAQ,KAAMwjC,EAAAA,EAAAA,QAAO12B,EAAAA,MAAO,CAACmoB,QAASkO,EAAgBvpB,KAAAA,EAAM6W,QAAAA,EAAShf,YAAAA,KAAe,CAC/F0xB,EACAvpB,EACA6W,EACAhf,KAEE,kBAACsQ,EAAD,WAAoB0hB,EAApB,WAAgCC,EAAhC,aAA4CC,EAA5C,cAA0DC,EAA1D,cAAyEC,IAAiBC,EAAAA,GAAAA,GAAW,CACvGlS,QADuG,GAEvG/c,SAAAA,IAEE+B,EAAYmE,GAAyBrB,EAAQrD,GAAQ,GAM3D,O,+UAAA,IACOnB,EADP,CAEIxD,eAAgBqQ,EAChBpQ,QAAS8xB,EACTzO,OAAQ0O,EACRxO,SAAUyO,EACV3P,gBAAiB4P,EACjBzP,gBAAiB0P,EACjBlM,UAbclD,UACb7d,MAAAA,GAAA,UAAAA,EAAW5L,cAAX,eAAmBlD,SAAUq7B,GAAkB1xB,GAAeyI,IAC3DpI,IACCA,EAAczS,SAWhBuX,IDxDgBmtB,CAAkBrqB,GAEzC,OACI,kBAACgY,GAAsBD,SAAvB,CAAgChyB,MAAOujC,GAClCtpB,GAAU,kBAAC+d,GAAD,CAAoB/d,OAAQA,EAAQrb,UAAWA,QJYzD2lC,GAAgC5B,IOhBT,IAAgC,IAA/B,OAAC1oB,EAAD,UAASrb,GAAsB,EAChE,MAAM4lC,EjDciBvqB,CAAAA,IAAoD,MAC3E,MAAMmE,GAAc7d,EAAAA,EAAAA,UAChB,IACImN,OAAO8Q,QAAQvE,EAAOmE,aAAe,IAAI9Z,KAAI,QAAEiB,EAAKvF,GAAP,QAAmB,CAC5DA,MAAOuF,EACPzF,MAAOE,OAEf,CAACia,EAAOmE,cAGNjD,EAAclB,EAAOC,KAlCD,IAmCnBC,EAAMjI,IAAW3K,EAAAA,EAAAA,UAAS,IAC1ByW,EAAWymB,IAAgBl9B,EAAAA,EAAAA,UAAS0S,EAAO+D,WAnC3B,QAoChBE,EAAYwmB,IAAiBn9B,EAAAA,EAAAA,UAAQ,UAAC6W,EAAY,UAAb,aAAC,EAAgBpe,QACtDgS,EAAaC,IAAkB1K,EAAAA,EAAAA,UAAS,KACxCuJ,EAAcsyB,IAAmB77B,EAAAA,EAAAA,WArCd,GAuCpBwJ,GAAqB1R,EAAAA,EAAAA,cAAY,KACnC6S,EAAQ,GACRkxB,GAAiBtyB,IAAkBA,MACpC,IAEGmN,GAAkB5e,EAAAA,EAAAA,cAAY,KAChC6S,EAAQ,GACRuyB,GAAcxT,GACO,QAAVA,EAAkB,OAAS,UAEvC,IAEG9S,GAAmB9e,EAAAA,EAAAA,cAAad,IAClC2T,EAAQ,GACRwyB,EAAcnmC,KACf,IAOH,MAAO,CACHyT,YAAAA,EACAsQ,mBAPsBjjB,EAAAA,EAAAA,cAAaW,IACnCkS,EAAQ,GACRD,EAAejS,KAChB,IAKCge,UAAAA,EACAC,gBAAAA,EACAC,WAAAA,EACAC,iBAAAA,EACAC,YAAAA,EACAjE,KAAAA,EACAjI,QAAAA,EACAiJ,YAAAA,EACArK,aAAAA,EACAC,mBAAAA,IiDjEmB4zB,CAAkB1qB,GACzC,OACI,kBAACuD,GAA0BwU,SAA3B,CAAoChyB,MAAOwkC,GACvC,kBAAC3T,GAAD,CAAe5W,OAAQA,EAAQrb,UAAWA,QPazCgmC,GAAsBjC,IQhBT,IAAgC,IAA/B,OAAC1oB,EAAD,UAASrb,GAAsB,EACtD,MAAMimC,GAAel5B,EAAAA,EAAAA,WACf,OAACnN,EAAD,MAASL,EAAOokB,QAASuiB,GAAkB7qB,GAC3C,KAAC8qB,EAAD,QAAOC,EAASziB,QAAS0iB,EAAzB,aAAyC5nC,IAAgB6nC,EAAAA,GAAAA,GAAOjrB,GAChE9a,EAASxB,KACT4kB,EAAU0iB,GAAkBH,EASlC,IARA5nB,EAAAA,EAAAA,YAAU,KACF2nB,EAAah/B,SAAWk/B,IACxBF,EAAah/B,QAAQs/B,UAAY,GACjCJ,EAAKK,WAAWzH,SAAS0H,IACrBR,EAAah/B,QAAQy/B,YAAYD,SAG1C,CAACN,KACCC,EAAS,OAAO,KACrB,MAAMr1B,GAA2Co0B,EAAAA,EAAAA,QAAO12B,EAAAA,MAAO,CAAClP,MAAAA,EAAOK,OAAAA,IACjEwG,EACF,yBAAKF,IAAK+/B,EAAcl1B,MAAK,MAAMA,EAAUtS,GAAeuB,UAAW6B,GAAAA,CAAWtB,EAAOtB,KAAMe,KAEnG,OACI,yBAAKA,UAAWO,EAAOmgC,aAAc/c,EAAU,kBAAC,EAAAU,QAAD,CAASllB,MAAOwkB,GAAUvd,GAAuBA,MRH3FugC,GAA6B5C,ISZR,IAAgC,IAA/B,OAAC1oB,EAAD,UAASrb,GAAsB,EAC9D,MAAM0b,GAAYrb,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,eACxB,SAACsmC,EAAD,YAAWC,GnCqBO,EAACnrB,EAAmBorB,KAC5C,MAAM9pB,GAAcC,EAAAA,GAAAA,MACb2pB,EAAUC,IAAel+B,EAAAA,EAAAA,UAAiB,IAC3CyM,GAAiB/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WAqBnC,OApBAie,EAAAA,GAAAA,IAAmB,KACf,MAAMwoB,EAASH,EACVlhC,KAAI,CAACs2B,EAAMxF,KAAP,CAAmBwF,KAAAA,EAAMxF,MAAAA,MAC7B31B,QAAO,CAACC,EAAKk7B,I,+UAAN,IAAoBl7B,EAApB,CAAyB,CAACk7B,EAAKxF,OAAQ,CAACv3B,KAAM+8B,EAAKA,SAAS,IAClEgL,GAAWC,EAAAA,EAAAA,MAAyB9T,EAAAA,EAAAA,MAAK,CAAC,MAAO,QAAS,iBAAkB,QAAS/d,GAAS2xB,GACpGF,EAAYG,EAASthC,KAAIyH,EAAAA,EAAAA,MAAK,YAC/B,CAACiI,MAAAA,OAAD,EAACA,EAAQ8xB,eACZ5oB,EAAAA,EAAAA,YAAU,MACD9G,EAAAA,EAAAA,KAAUkE,IACXsB,GAAYmqB,EAAAA,EAAAA,KAAa,CAAC9lC,IAAKqa,EAAWorB,SAAAA,KACrC55B,KAAK8tB,IACL9tB,KAAK25B,GACLvkB,OAAO7P,IACJ20B,QAAQC,KAAK50B,MAGlB,KACHo0B,EAAY,OAEjB,CAACnrB,EAAWorB,EAAU9pB,IAClB,CAAC4pB,SAAAA,EAAUC,YAAAA,ImC7CcS,CAAa5rB,EAAWL,EAAOksB,MAAMniC,MAC/D7E,EAASxB,KACTyX,GAAWC,EAAAA,EAAAA,gBACX,GAAC/P,EAAD,MAAK6gC,GAASlsB,EACdmsB,GAAY/mC,EAAAA,EAAAA,cAAY,KAC1B+V,EAASgM,EAAAA,GAAAA,QAAAA,UAAqB,CAAC9L,OAAQhQ,EAAI+gC,UAAWF,EAAMniC,UAC7D,CAACoR,EAAU9P,EAAI6gC,IACZG,GAAoBjnC,EAAAA,EAAAA,cACrBknC,IAAD,CACIxoC,MAAO,kBAACm9B,GAAD,CAAMZ,KAAMiM,EAAQjM,UAE/B,IAEJ,OACI,kBAACzf,EAAA,EAAD,CAAWjc,UAAWA,GAClB,kBAAC,GAAD,CAAsBwgC,YAAagH,EAAWroC,MAAOkc,EAAOpI,UAC5D,kBAACipB,GAAc9I,SAAf,CAAwBhyB,MAAOia,GAC3B,yBAAKrb,UAAWO,EAAOu7B,eACnB,yBAAK97B,UAAWO,EAAOy7B,MACnB,kBAAC4L,GAAA,GAAD,CACIC,eAAe,EACfjB,SAAUA,EACVkB,SAAS,EACT5gC,MAAOA,GACPwgC,kBAAmBA,EACnBznC,SAAU4mC,EACV1J,WAAYA,YTf3B4K,GAAuChE,IDWT,IAAgC,IAA/B,OAAC1oB,EAAD,UAASrb,GAAsB,EACvE,MAAMO,EAASxB,KACTqW,GAAS/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WACrBob,GAAYoJ,EAAAA,EAAAA,KAAoB1P,IAE/BoG,EAAWuB,IAAgBpU,EAAAA,EAAAA,WAAS,GACrCq/B,GAAuBvnC,EAAAA,EAAAA,cAAY,KACrCsc,GAAa,KACd,IACGkrB,GAAwBxnC,EAAAA,EAAAA,cAAY,KACtCsc,GAAa,KACd,KAEG,QAACmrB,EAAD,YAAUvd,EAAV,YAAuBwd,EAAvB,MAAoC1kB,IAAS2kB,EAAAA,GAAAA,GAAiB,CAChErS,UAAWra,EACXtG,OAAAA,EACA1T,QAAS+hC,GACTp2B,OAAQ,GACRkO,KAAM,EACN6W,QAASwR,GACTrnB,YA/B6B,EAgC7B8rB,eAAgBL,EAChBM,gBAAiBL,IAEfM,GAAsB9nC,EAAAA,EAAAA,cAAY,KACpC0nC,MACD,CAACA,IAEE3xB,GAAWC,EAAAA,EAAAA,eACXC,GAAStE,EAAAA,EAAAA,YAAWuE,EAAAA,GACpB6xB,GAAgC/nC,EAAAA,EAAAA,cAAY,KAC9C+V,EAASiyB,EAAAA,GAAAA,QAAAA,gBAAoC,CAACC,cAAe,mBAAoBhyB,OAAAA,OAClF,CAACF,EAAUE,IAERqW,GAAYprB,EAAAA,EAAAA,UACd,KAAMgnC,EAAAA,EAAAA,KAA6CjtB,GAAWhW,EAAAA,EAAAA,KAAIkjC,EAAAA,IAA6BV,KAC/F,CAACxsB,EAAWwsB,KAGV,iBAACjb,IAAoB7a,EAAAA,EAAAA,YAAW8a,EAAAA,IACtC5O,EAAAA,EAAAA,YAAU,KACN2O,EAAiBF,KAClB,CAACE,EAAkBF,IAEtB,MAAM8b,EAAaplB,EAvDc,KAuDoB0J,EAAAA,EAAAA,SAAQ+a,GAUvDrxB,EARE2E,EACOqoB,GAAgBiF,SAEvB3b,EAAAA,EAAAA,SAAQ+a,GACDrE,GAAgBkF,OAEpBlF,GAAgBmF,OAG3B,OACI,kBAACne,GAAA,WAAD,CAA6BzpB,MAAOupB,GAChC,kBAAC1O,EAAA,EAAD,CAAWjc,UAAW6B,GAAAA,CAAWtB,EAAOtB,KAAMe,IAC1C,kBAAC0T,EAAA,EAAD,CAAiBvU,MAAOkc,EAAOpI,UAC/B,yBAAKjT,UAAWO,EAAO+hC,kBAClBzrB,IAAUgtB,GAAgBiF,SAAW,kBAAC3sB,EAAA,EAAD,MACrCtF,IAAUgtB,GAAgBkF,QACvB,kBAAC,EAAAjnC,WAAD,CAAY9B,UAAWO,EAAOkU,QAASzS,IAAAA,KAAU,qBAEpD6U,IAAUgtB,GAAgBmF,QACvBd,EAAQxiC,KAAK+8B,GACT,kBAACY,GAAD,CACIhoB,OAAQA,EACRsP,YAAaA,EACb8X,MAAOA,EACPE,gBAAiB4F,EACjB7F,eAAgBsF,EAChBrhC,IAAK87B,EAAMhX,OAAOpqB,SAIjCwnC,GACG,oCACI,yBAAK7oC,UAAWO,EAAOgiC,QACnB,kBAAC,EAAAtF,KAAD,CACI72B,UAAU,SACVrE,QAAQ,UACR6E,QAAS4hC,EACTS,UAAU,QAETjnC,IAAAA,KAAU,mBC9F9BknC,IAA6B7vB,EAAAA,EAAAA,OAAK,IAC3C,gCAAiCnM,MAAMi8B,IAAD,CAClCC,QAASrF,GAAoBoF,EAAeE,yBAIvCC,IAAkCjwB,EAAAA,EAAAA,OAAK,IAChD,gCAAkCnM,MAAMi8B,IAAD,CACnCC,QAASrF,GAAoBoF,EAAeI,8BAGvCC,GAAyBzF,IUxBT,IAA+E,IAA9E,OAAC1oB,EAAD,aAASouB,EAAT,mBAAuBC,EAAvB,UAA2C1pC,GAAmC,EACxG,MAAMO,EAASxB,KACTqB,GAAWC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,aACvBvG,GAAS/U,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,WACrBguB,GAAStpC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,kBACrB,QAACiuB,EAAD,QAAU9f,GrBlBM,EAAC1U,EAAQhV,EAAUupC,KACzC,MAAOC,EAASC,IAAclhC,EAAAA,EAAAA,UAAS,KAChCmhB,EAASG,IAActhB,EAAAA,EAAAA,WAAS,GACjCqU,GAAcC,EAAAA,GAAAA,KAepB,OAdAqB,EAAAA,EAAAA,YAAU,KACN2L,GAAW,GACXjN,GAAY8sB,EAAAA,EAAAA,KAAQ1pC,EAAU,CAACgV,GAASu0B,IACnCz8B,MAAM08B,IACHC,EAAWD,EAAQv8B,OAAOk0B,QAE7Bjf,OAAM,KACHunB,EAAW,OAEdxrB,SAAQ,KACL4L,GAAW,QAEpB,CAAC7U,EAAQhV,EAAUupC,EAAQ3sB,IAEvB,CAAC4sB,QAAAA,EAAS9f,QAAAA,IqBAUigB,CAAW30B,EAAQhV,EAAUupC,GAClDK,GAAiBroC,EAAAA,EAAAA,UACnB,IACI,yBAAK3B,UAAWO,EAAO6gC,YACnB,kBAACjlB,EAAA,EAAD,QAGR,CAAC5b,IAGC0pC,GAAgBtoC,EAAAA,EAAAA,UAAQ,KAAM,CAAEuoC,IAAK,EAAGC,IAAK,KAAK,IAClDC,GAAazoC,EAAAA,EAAAA,UAAQ,KAAM,CAAE0oC,gBAAgB,KAAQ,IAE3D,OACIV,GACI,kBAAC1tB,EAAA,EAAD,CAAWjc,UAAW6B,GAAAA,CAAWtB,EAAOtB,KAAMe,IACzC8pB,GAAW,kBAAC3N,EAAA,EAAD,MACZ,kBAAC,KAAD,CACI8D,KAAK,IACLnc,KAAM2lC,EAAea,GAAAA,EAAqBC,GAAAA,EAC1C3jC,QAAS,IAAM8iC,EAAmBruB,EAAO3U,IACzC1G,UAAWO,EAAOmhC,gBAGtB,kBAAC8I,GAAA,EAAD,CACIR,eAAgBA,EAChBS,YAAa,EACbR,cAAeA,EACfL,QAASA,EACTc,sBAAuBnqC,EAAO6gC,WAC9BuI,OAAQA,EACRS,WAAYA,QVXnBO,GAA8B5G,ILrBT,IAAkD,IAAjD,OAAC1oB,EAAD,UAASrb,GAAwC,EAChF,MAAM,aAAC4c,GAAgBvB,EACjB9a,EAASxB,KACTyX,GAAWC,EAAAA,EAAAA,eAEXQ,GAAO5W,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,SACnB8U,GAAS/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,mBACrBF,GAAWC,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aAEvBmT,GAAgBiK,EAAAA,EAAAA,KAAuBtd,EAAUwc,GACjDguB,GAAexzB,EAAAA,EAAAA,QAAO,GAAI,CAAC,aAAc3D,MAAAA,OAAf,EAAeA,EAAe8C,MAAOnB,GAC/DU,GAASnI,EAAAA,EAAAA,MAAK,CAAC,aAAc,SAAUiP,GAAexH,GACtDY,EAAc40B,EAAanhC,OAE3B2M,EAAaiF,EAAO,eAAiBrZ,IAAAA,KAAU,iBAE/C+/B,GAAmCthC,EAAAA,EAAAA,cACpCkzB,GACGnd,EAASyB,EAAAA,GAAAA,QAAAA,iCAAiD0b,KAC9D,CAACnd,IAkCL,OACI,kBAACyF,EAAA,EAAD,CAAWjc,UAAWA,GAClB,kBAAC0T,EAAA,EAAD,CAAiBvU,MAAOkc,EAAOpI,UAC/B,yBAAKjT,UAAWO,EAAOuL,WAlCT,MAClB,GAAI2H,EAAe,CACf,IAAIoI,EAAAA,EAAAA,KAAe5E,GAAO,CACtB,MAAMxU,EAAQ,CACVgR,cAAAA,EACA4H,OAAAA,EACAvF,OAAAA,EACAisB,iCAAAA,GAEJ,OAAO,kBAACD,GAAsCr/B,GAElD,GAAIuT,EAAc,EAAG,CACjB,MAAMvT,EAAQ,CACVu/B,gBAAiB4I,EACjBn3B,cAAAA,EACAwuB,UAAWC,GACXpsB,OAAAA,EACAK,UAAWf,EAAO/T,IAClB0gC,iCAAAA,GAEJ,OACI,oCACI,kBAAC8I,GAAA,EAAwBpoC,GACzB,kBAACk/B,GAAD,CAAkBC,YAAa5rB,MAM/C,OAAO,kBAAC,EAAAlU,WAAD,CAAY9B,UAAWO,EAAOkU,QAAS2B,IAKPgG,QKlB/C,MAAM0uB,IAAAA,GACKC,UAAYC,EAAAA,IADjBF,GAEKG,eAAiB,CACpBC,EADoB,KAGnB,IADD,MAACC,EAAD,OAAQ9vB,EAAR,UAAgBrb,EAAhB,aAA2BypC,EAA3B,mBAAyCC,GACxC,EACD,OAAQruB,EAAO6vB,IACX,KAAKJ,GAAaC,UAAUK,cACxB,OAAO,kBAAClC,GAAD,CAA4B7tB,OAAQA,EAAQ8vB,MAAOA,EAAOnrC,UAAWA,IAChF,KAAK8qC,GAAaC,UAAUM,eACxB,OAAO,kBAAC1E,GAAD,CAA4BtrB,OAAQA,EAAoCrb,UAAWA,IAC9F,KAAK8qC,GAAaC,UAAUO,eACxB,OAAO,kBAAChC,GAAD,CAAiCjuB,OAAQA,EAAQ8vB,MAAOA,EAAOnrC,UAAWA,IACrF,KAAK8qC,GAAaC,UAAUQ,UACxB,OAAO,kBAAC5F,GAAD,CAA+BtqB,OAAQA,EAA+Brb,UAAWA,IAC5F,KAAK8qC,GAAaC,UAAUS,WACxB,OAAO,kBAACxH,GAAD,CAAgChkC,UAAWA,EAAWqb,OAAQA,IACzE,KAAKyvB,GAAaC,UAAU3vB,oBACxB,OACI,kBAACkpB,GAAD,CACIjpB,OAAQA,EACRrb,UAAWA,IAGvB,KAAK8qC,GAAaC,UAAU3R,mBACxB,OACI,kBAACsL,GAAD,CACIrpB,OAAQA,EACRrb,UAAWA,IAGvB,KAAK8qC,GAAaC,UAAUU,QACxB,OACI,kBAACjC,GAAD,CACInuB,OAAQA,EACRouB,aAAcA,EACdC,mBAAoBA,EACpB1pC,UAAWA,IAGvB,KAAK8qC,GAAaC,UAAUW,WACxB,OAAO,kBAAC1F,GAAD,CAAqB3qB,OAAQA,EAA4Brb,UAAWA,IAC/E,KAAK8qC,GAAaC,UAAUY,mBACxB,OACI,kBAAChB,GAAD,CAA6BtvB,OAAQA,EAAoCrb,UAAWA,IAE5F,KAAK8qC,GAAaC,UAAUa,qBACxB,OACI,kBAAC7D,GAAD,CACI1sB,OAAQA,EACRrb,UAAWA,MAlD7B8qC,GAuDKe,aAAgBppC,GAEfqoC,GAAaG,eAAe,QAASxoC,IACrCqoC,GAAaG,eAAe,cAAexoC,IAAU,kBAACqhC,GAAD,CAAmB9jC,UAAWyC,EAAMzC,YAKrG,YWxHM8rC,GAAW,IAAM,KAEjBC,IAAgBzlB,EAAAA,EAAAA,OAAK,IAAuF,IAAtF,OAACjL,EAAD,MAAS8vB,EAAT,aAAgB1B,EAAhB,WAA8BuC,EAA9B,mBAA0CtC,GAA4C,EAC9G,MAAMnpC,EAASxB,KACf,OACI,kBAAC,EAAAktC,SAAD,CAAUC,SAAU,kBAACJ,GAAD,OACfhB,GAAAA,aAA0B,CACvBzvB,OAAAA,EACA8vB,MAAAA,EACAnrC,UAAW6B,GAAAA,CAAWtB,EAAO6F,UAAW,CAAC,CAAC7F,EAAO6gC,aAAc4K,IAC/DvC,aAAAA,EACAC,mBAAAA,QAMhBqC,GAAcz6B,YAAc,gBCpBrB,MAAMvS,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCnG,KAAMmG,EAAMilC,UACZC,mBAAoB,CAChBxsC,OAAQ,Y,mNCgBhB,MAAMysC,GAAgB,CAAC,kBAAmB,YAEpCC,GAAoB,IAUb,UAVc,iBACvBC,EADuB,MAEvBC,EAFuB,UAGvBxsC,EACA8F,SAAU2mC,EAJa,MAKvB17B,EALuB,aAMvB04B,EANuB,mBAOvBC,EAPuB,kBAQvBgD,GAES,EADNjqC,E,kXACM,wHACT,MAAM4Y,EAASmxB,EAAM7yB,MAAK,QAAC,GAACjT,GAAF,SAAU6lC,EAAiBnR,IAAM10B,KACrDnG,EAASxB,MAET,MAACosC,IAAS/4B,EAAAA,EAAAA,YAAWu6B,EAAAA,mBAC3B,IAAKtxB,EACD,OAAO,KAEX,MAAMuxB,EAAevxB,EAAOwxB,QAAU/B,GAAAA,UAAAA,WACtC,OAAI8B,IAAiBvxB,MAAAA,GAAD,UAACA,EAAQzR,cAAT,eAAkCkjC,YAAaC,EAAAA,IAAAA,QACxD,KAIP,+BACQlkC,EAAAA,EAAAA,MAAKwjC,GAAe5pC,GAD5B,CAEIsO,MAAOA,EACP/Q,UAAW6B,GAAAA,CAAW7B,EAAW,CAAC,CAACO,EAAOQ,OAAQ6rC,MAElD,yBAAK5sC,UAAW6B,GAAAA,CAAW,CAAC,CAACtB,EAAO6rC,qBAAsBM,KACrDA,EACD,kBAACX,GAAD,CACIZ,MAAOA,EACP9vB,OAAQA,EACRouB,aAAcA,EACdC,mBAAoBA,EACpBsC,WAAY5V,QAAQsW,MAG3BD,IChDPO,GAAgB,IAA4D,IAA3D,MAACR,EAAD,OAAQS,EAAR,cAAgBC,EAAhB,gBAA+BC,GAA4B,EAC9E,OACI,kBAACC,EAAA,EAAD,CACIC,WAAYf,GACZE,MAAOA,EACPS,OAAQA,EACRC,cAAeA,EACfC,gBAAiBA,EACjBG,gBAAgB,0B,2ECtB5B,SAAShO,KAA2Q,OAA9PA,GAAWxwB,OAAOywB,QAAU,SAAU7sB,GAAU,IAAK,IAAI0oB,EAAI,EAAGA,EAAIoE,UAAU/1B,OAAQ2xB,IAAK,CAAE,IAAIqE,EAASD,UAAUpE,GAAI,IAAK,IAAIz0B,KAAO84B,EAAc3wB,OAAO4wB,UAAUC,eAAeC,KAAKH,EAAQ94B,KAAQ+L,EAAO/L,GAAO84B,EAAO94B,IAAY,OAAO+L,GAAkB4sB,GAASO,MAAMC,KAAMN,WAGhT,SAAgB,QAAC,OACfj/B,EAAS,IADK,EAEXkC,E,kXAFW,sBAGV4O,IAAAA,cAAoB,MAAOiuB,GAAS,CACxC//B,MAAO,KACPK,OAAQ,KACRmgC,QAAS,YACTC,QAAS,MACTC,MAAO,6BACPsN,WAAY,gCACX9qC,GAAQ4O,IAAAA,cAAoB,OAAQ,KAAMA,IAAAA,cAAoB,OAAQ,CACvEkvB,EAAG,odACH75B,GAAI,oBACD2K,IAAAA,cAAoB,IAAK,CAC5B6uB,OAAQ,OACRC,YAAa,IACbC,KAAM,OACNC,SAAU,WACThvB,IAAAA,cAAoB,IAAK,CAC1B5N,UAAW,sBACV4N,IAAAA,cAAoB,OAAQ,CAC7B3K,GAAI,iBACJ05B,KAAM,QACL/uB,IAAAA,cAAoB,MAAO,CAC5Bm8B,UAAW,qBACRn8B,IAAAA,cAAoB,OAAQ,CAC/BivB,YAAa,MACbF,KAAM,OACNqN,KAAM,uBACNlN,EAAG,sBChCL,SAASjB,KAA2Q,OAA9PA,GAAWxwB,OAAOywB,QAAU,SAAU7sB,GAAU,IAAK,IAAI0oB,EAAI,EAAGA,EAAIoE,UAAU/1B,OAAQ2xB,IAAK,CAAE,IAAIqE,EAASD,UAAUpE,GAAI,IAAK,IAAIz0B,KAAO84B,EAAc3wB,OAAO4wB,UAAUC,eAAeC,KAAKH,EAAQ94B,KAAQ+L,EAAO/L,GAAO84B,EAAO94B,IAAY,OAAO+L,GAAkB4sB,GAASO,MAAMC,KAAMN,WAGhT,SAAgB,QAAC,OACfj/B,EAAS,IADK,EAEXkC,E,kXAFW,sBAGV4O,IAAAA,cAAoB,MAAOiuB,GAAS,CACxC//B,MAAO,KACPK,OAAQ,KACRmgC,QAAS,YACTC,QAAS,MACTC,MAAO,6BACPsN,WAAY,gCACX9qC,GAAQ4O,IAAAA,cAAoB,OAAQ,KAAMA,IAAAA,cAAoB,OAAQ,CACvEkvB,EAAG,2LACH75B,GAAI,oBACD2K,IAAAA,cAAoB,IAAK,CAC5B6uB,OAAQ,OACRC,YAAa,IACbC,KAAM,OACNC,SAAU,WACThvB,IAAAA,cAAoB,OAAQ,CAC7B3K,GAAI,iBACJ05B,KAAM,QACL/uB,IAAAA,cAAoB,MAAO,CAC5Bm8B,UAAW,qBACRn8B,IAAAA,cAAoB,OAAQ,CAC/BivB,YAAa,MACbF,KAAM,OACNqN,KAAM,uBACNlN,EAAG,qBC5BQxhC,IAAYC,EAAAA,EAAAA,GAAW,CAChC0uC,eAAgB,CACZvpC,QAAS,OACT,oBAAqB,CACjB5E,MAAO,OACPsS,WAAY,QAGpB87B,cAAe,CACXpuC,MAAO,QACPK,OAAQ,OACRH,gBAAiB,QAErBmuC,SAAU,CACNzpC,QAAS,OACT3E,eAAgB,WAChBoS,UAAW,U,2cCmBZ,MCYDi8B,GAAeprC,GACjB,kBAAC,EAAAqrC,QAAYrrC,EACT,kBAAC,GAAD,OAIFsrC,GAAYtrC,GACd,kBAAC,EAAAqrC,QAAYrrC,EACT,kBAAC,GAAD,OAaFurC,GAA2B,CAC7BjiC,EACAjM,EACAmuC,EACAC,EACAC,IAEIpiC,EAAMsB,QAAO,IAAyB,IAAxB,MAACjM,EAAD,WAAQgtC,GAAgB,EAClC,QAAIH,KAAiBpyB,EAAAA,EAAAA,KAAeza,QAC9B8sC,GAAsBC,KAAuCE,EAAAA,EAAAA,KAAcjtC,MAC1EktC,EAAAA,EAAAA,KAAwBF,EAAYtuC,MAY1CyuC,GAAyB,IAA2C,IAA1C,UAACvuC,EAAD,kBAAYwuC,GAA8B,EAC7E,MAAMjuC,EAASxB,KACTyX,GAAWC,EAAAA,EAAAA,eACX03B,GAAqC9tC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,iCACjDvG,GAAS/U,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,sBACrB/E,GAAiBvW,EAAAA,EAAAA,cAAawW,GAAU8E,EAAAA,GAAAA,UAAAA,kBAAgC9E,EAAOzB,EAAO/T,OACtFjB,GAAWC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,aACvBuyB,GAAoB7tC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,mBAChC1E,GAAO5W,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,SACnBE,GAAiBxb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,mBAC7BC,GAAavb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,eACzB0B,GAAuBhd,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,yBACnC8yB,GAAmBpuC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,qBAC/B+yB,EAAgBt5B,MAAAA,OAAH,EAAGA,EAAQhQ,KACxBtF,GAAa6B,EAAAA,EAAAA,UAAQ,KAAM+iB,EAAAA,EAAAA,KAActkB,EAAUsuC,IAAgB,CAACA,EAAetuC,IACnFuuC,EAAoBF,IAAqBG,EAAAA,IAAAA,OAEzCC,EADqBJ,IAAqBG,EAAAA,IAAAA,SACAD,GACzCG,EAA6BC,IAAkCpmC,EAAAA,EAAAA,WAAS,GACzEqmC,GAAiBvuC,EAAAA,EAAAA,cAAY,KAC/BsuC,GAA+B,KAChC,IACGE,ED7EoB,KAA2D,IAAzDC,YAAaC,EAAd,eAA+BH,GAA2B,EACrF,MAAM55B,GAAiB/U,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,sBAC7Bvb,GAAWC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,aACvBnF,GAAWC,EAAAA,EAAAA,eACXi4B,EAAgBt5B,MAAAA,OAAH,EAAGA,EAAQhQ,KACxBgqC,EAAgBhvC,EAASgvC,cACzBC,GAAkC5uC,EAAAA,EAAAA,cAAY6uC,EAAAA,EAAAA,KAAyBlvC,EAAUsuC,GAAgB,CACnGtuC,EACAsuC,IAEE5uC,GAAa4kB,EAAAA,EAAAA,KAActkB,EAAUsuC,GACrCQ,GAAcvtC,EAAAA,EAAAA,UAChB,KACI4tC,EAAAA,EAAAA,OACIC,EAAAA,EAAAA,YAAW/gC,EAAAA,QACXxL,EAAAA,EAAAA,OACI0W,EAAAA,EAAAA,OAAK1W,EAAAA,EAAAA,OAAKkL,EAAAA,EAAAA,QAAO,GAAI,mBAAmBshC,EAAAA,EAAAA,SAAOxhC,EAAAA,EAAAA,UAASygC,IAAgBzgC,EAAAA,EAAAA,UAAS,SACjFshC,EAAAA,EAAAA,OAAKC,EAAAA,EAAAA,YAAW/gC,EAAAA,QAAQ5F,EAAAA,EAAAA,MAAK,CAAC,qBAJtC0mC,CAMEJ,IACN,CAACA,EAAiBT,IAEhBO,GAAUxuC,EAAAA,EAAAA,cAAY,KACxB,GAAIyuC,EAAa,CACb,MAAMQ,GAAkCzsC,EAAAA,EAAAA,OACpCkK,EAAAA,EAAAA,MAAK,4BACLwN,EAAAA,EAAAA,MAAK,CACD,CACIlM,EAAAA,OACAxL,EAAAA,EAAAA,OACI2X,EAAAA,EAAAA,QAAO9a,IACPqO,EAAAA,EAAAA,QAAO,GAAI,eACXd,EAAAA,EAAAA,QAAOsiC,EAAAA,MACPjqC,EAAAA,EAAAA,KAAIkqC,EAAAA,OAGZ,EACI3hC,EAAAA,EAAAA,UAAS,MACThL,EAAAA,EAAAA,OAAK2X,EAAAA,EAAAA,QAAOw0B,GAAiB,KAAK1pC,EAAAA,EAAAA,MAAIyH,EAAAA,EAAAA,MAAK,SAASE,EAAAA,EAAAA,QAAOgiC,KAE/D,CAACQ,EAAAA,EAAGr1B,EAAAA,YAhB4BvX,CAkBtCisC,GACF14B,EACIyB,EAAAA,GAAAA,OAAAA,QAAAA,qBAA4C,CACxCvX,KAAM,OACCyyB,EAAAA,EAAAA,MAAK,CAAC,+BAAgC+b,GADzC,CAEAY,wBAAyBJ,IAE7Bh0B,UAAWtG,EAAO/T,OAI9B2tC,MACD,CAACE,EAAaF,EAAgBlvC,EAAYsvC,EAAeh6B,EAAO/T,IAAKguC,IACxE,OAAOH,EAAcD,OAAU5nC,GCsBf0oC,CAAe,CAACb,YAAaV,MAAAA,OAAF,EAAEA,EAAmBU,YAAaF,eAAAA,IACvEgB,GAAgBruC,EAAAA,EAAAA,UAClB,IAAM,CACF,CACIT,MAAOc,IAAAA,KAAU,WACjBZ,MAAO6uC,EAAAA,IAAAA,QACPC,YAAaluC,IAAAA,KAAU,yBACvB8B,KAAMqsC,GAAAA,EACN/B,WAAY,UAEhB,CACIltC,MAAOc,IAAAA,KAAU,cACjBZ,MAAO6uC,EAAAA,IAAAA,WACPC,YAAaluC,IAAAA,KAAU,kDACvB8B,KAAM+pC,GACNO,WAAY,2BAEhB,CACIltC,MAAOc,IAAAA,KAAU,WACjBZ,MAAO6uC,EAAAA,IAAAA,QACPC,YAAaluC,IAAAA,KAAU,kDACvB8B,KAAMssC,GAAAA,EACNhC,WAAY,UAGpB,IAGEiC,GAAgB1uC,EAAAA,EAAAA,UAClB,IAAM,IACEstC,EACE,CACE,CACI/tC,MAAOc,IAAAA,KAAU,SACjBZ,MAAO,QACP8uC,YAAaluC,IAAAA,KAAU,gCACvB8B,KAAMiqC,GACNnnC,QAAS,IAAMmoC,GAA+B,GAC9CX,WAAY,WAGlB,GACN,CACIltC,MAAOc,IAAAA,KAAU,UACjBZ,MAAO,SACP8uC,YAAaluC,IAAAA,KAAU,8BACvB8B,KAAMqkB,GAAAA,EACNvhB,QAAS,KACQ0pC,OAAOC,QAAQvuC,IAAAA,KAAU,2CAElCwU,EAASyB,EAAAA,GAAAA,OAAAA,QAAAA,sBAA6C,CAACyD,UAAWtG,EAAO/T,QAGjF+sC,WAAY,YAGpB,CAAC53B,EAAUpB,EAAO/T,IAAK4tC,IAGrBuB,GAAoBnzB,KAAyBY,EAAAA,EAAAA,KAAmB7I,KA1F3CtV,CAAAA,IAEvBwuC,EAAAA,EAAAA,KAAwBmC,EAAAA,IAAAA,KAA0B3wC,MACjDwuC,EAAAA,EAAAA,KAAwBmC,EAAAA,IAAAA,OAA4B3wC,MACpDwuC,EAAAA,EAAAA,KAAwBmC,EAAAA,IAAAA,OAA4B3wC,MACpDwuC,EAAAA,EAAAA,KAAwBmC,EAAAA,IAAAA,wBAA6C3wC,GAqFQ4wC,CAAsB5wC,GAElGmuC,GAAez2B,EAAAA,EAAAA,KAAUpC,MAAAA,OAAD,EAACA,EAAQ/T,KAEjCsvC,GAAyBhvC,EAAAA,EAAAA,UAAQ,IAC5BqsC,GACHgC,EACAlwC,EACAmuC,EACAC,EACAC,IAEL,CAAC6B,EAAelwC,EAAYouC,EAAmBC,EAAoCF,IAChF2C,GAAyBjvC,EAAAA,EAAAA,UAAQ,IAC5BqsC,GACHqC,EACAvwC,EACAmuC,EACAC,EACAC,IAEL,CAACkC,EAAevwC,EAAYouC,EAAmBC,EAAoCF,IAEhF4C,GAAepwC,EAAAA,EAAAA,cAChBW,IACGoV,EAASyB,EAAAA,GAAAA,KAAAA,QAAAA,YAAiC7W,MAE9C,CAACoV,IAGC7G,GAAWlP,EAAAA,EAAAA,cAAY,KACzB+V,EAASyB,EAAAA,GAAAA,KAAAA,QAAAA,uBACV,CAACzB,IAEEs6B,GAAarwC,EAAAA,EAAAA,cAAY,KAC3B+V,EAASyB,EAAAA,GAAAA,QAAAA,iBACV,CAACzB,IAEJ,OACI,oCACI,kBAACu6B,GAAA,EAAD,CACI/wC,UAAW6B,GAAAA,CAAW7B,EAAWwuB,GAAAA,GACjCpZ,OAAQyG,GAAkBjF,EAAiBA,EAAiBxB,EAC5D47B,aAAcxC,MAAAA,OAAF,EAAEA,EAAmBwC,cAEjC,kBAAC,EAAA90B,IAAD,CAAK/X,QAAQ,OAAO4a,WAAW,UAC3B,kBAAC,EAAA7C,IAAD,CAAK+0B,GAAI,GACJp1B,GACG,kBAAC,EAAAK,IAAD,CAAKlc,UAAWO,EAAOmtC,gBACnB,kBAAC,EAAAp7B,OAAD,CACIvQ,QAAQ,WACR6E,QAAS+I,EACT,iBAAe,gCACf0Y,SAAUwmB,GAET7sC,IAAAA,KAAU,WAEf,kBAAC,EAAAsQ,OAAD,CACIvQ,QAAQ,YACRuE,MAAM,UACN,iBAAe,8BACfM,QAASkqC,EACTzoB,SAAUwmB,IAETR,EAAAA,EAAAA,KAAcp3B,GAAQjV,IAAAA,KAAU,WAAaA,IAAAA,KAAU,UAInEqb,GAAwBzB,EACrB,kBAACs1B,GAAA,EAAD,MAEAt1B,GAAc,kBAACu1B,GAAA,EAAD,OAGrBX,GACG,kBAACY,GAAA,EAAD,CACIC,aAAcV,EACdW,aAAcV,EACdxvC,MAAO6V,EACPhX,SAAU4wC,EACVxoB,SAAUwmB,KAItB,kBAAC,EAAA3yB,IAAD,CAAKlc,UAAWO,EAAOqtC,UACnB,kBAACnf,GAAA,EAAD,CACIptB,IAAK+T,EAAO/T,IACZktB,mBAAmBlB,EAAAA,EAAAA,KAAwBC,EAAAA,IAAAA,OAAiC,CACxE5R,UAAWtG,EAAO/T,MAEtBstB,WAAYrB,EAAAA,IAAAA,aAIrB2hB,GACC,kBAAC7rB,GAAA,EAAD,CACI5T,KAAMs/B,EACN3vC,MAAO6C,IAAAA,KAAU,iDACjB+Y,QAAS/Y,IAAAA,KACL,4IAEJwhB,OAAQyrB,EACR1rB,UAAWyrB,EACX1rB,YAAathB,IAAAA,KAAU,WACvBqhB,eAAgBrhB,IAAAA,KAAU,c,uICnRvC,MAAMjD,IAAYC,EAAAA,EAAAA,GAAW,CAChCmwB,QAAS,CACLhrB,QAAS,OACT8W,SAAU,SACVpJ,WAAY,OACZiB,WAAY,GAEhB0N,MAAO,CACH5hB,SAAU,OACVgB,OAAQ,OACR0E,SAAU,OACV7E,gBAAiB,UACjB6G,MAAO,QAEXma,cAAe,CACXC,MAAO,SCXF6wB,GAAsB,KAC/B,MAAM,MAAC9tB,IAASrR,EAAAA,EAAAA,YAAWo/B,EAAAA,GACrBjxC,EAASxB,KACf,OACI,kBAAC,EAAA6hB,MAAD,CACIE,aAAc2C,EACdrhB,QAAS,CACLye,8BAA+BtgB,EAAOkgB,cACtCD,MAAOjgB,EAAOigB,QAGlB,kBAACixB,GAAA,EAAD,Q,sCCfL,MAAM1yC,IAAYC,EAAAA,EAAAA,GAAW,CAChCmwB,QAAS,CACLlU,SAAU,OACV7W,aAAc,QAElBstC,aAAc,CACVvtC,QAAS,OACTuD,OAAQ,QAEZiqC,aAAc,CACV/yC,SAAU,UCFLgzC,GAAoB,KAC7B,MAAMrxC,EAASxB,MACT,YAAC8yC,EAAD,SAAcjE,EAAd,UAAwBkE,IAAa1/B,EAAAA,EAAAA,YAAW8a,EAAAA,GAChDxR,GAAYrb,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,6BAE9B2C,EAAAA,EAAAA,YAAU,KACNuzB,EAAYn2B,KACb,CAACm2B,EAAan2B,IAEjB,MAIMiP,GAAconB,EAAAA,GAAAA,GAAuBnE,GAE3C,OACI,kBAAC/iB,GAAA,WAAD,CAA6BzpB,MAAOupB,GAChC,kBAAC,EAAAzO,IAAD,CAAKlc,UAAWO,EAAO4uB,SAClBye,EAASloC,KAAK+qB,IACX,MAAM,SAACuhB,EAAD,kBAAWzjB,EAAX,WAA8BI,EAA9B,UAA0CsjB,GAAaxhB,EAC7D,OACI,kBAACyhB,GAAA,EAAD,CACIvrC,IAAKsrC,EACL5wC,IAAK2wC,EACLzjB,kBAAmBA,EACnBI,WAAYA,EACZ8B,QAASA,OAIpBqhB,GACG,kBAAC,EAAA7U,KAAD,CACI72B,UAAU,SACVrE,QAAQ,UACR/B,UAAWO,EAAOmxC,aAClB9qC,QA1BW,KAC3BirC,EAAYn2B,EAAWo2B,IA0BP7I,UAAU,QAEV,kBAACkJ,GAAA,EAAD,CAAuBnyC,UAAWO,EAAOoxC,eACxC3vC,IAAAA,KAAU,iB,gBC/C5B,MAAMjD,IAAYC,EAAAA,EAAAA,GAAW,CAChCmwB,QAAS,CACLlU,SAAU,OACVD,SAAU,WACVpb,OAAQ,UCFHwyC,GAAe,KACxB,MAAM7xC,EAASxB,MACT,MAACszC,EAAD,QAAQvoB,IAAW1X,EAAAA,EAAAA,YAAWo/B,EAAAA,GAEpC,OACI,yBAAKxxC,UAAWO,EAAO4uB,SAClBrF,GAAW,kBAAC3N,EAAA,EAAD,MACXk2B,GACGA,EAAM3sC,KAAK4sC,GACA,kBAACC,GAAA,EAAD,CAAkB5rC,IAAK2rC,EAAKE,OAAQF,KAAMA,QCbrE,SAAShT,KAA2Q,OAA9PA,GAAWxwB,OAAOywB,QAAU,SAAU7sB,GAAU,IAAK,IAAI0oB,EAAI,EAAGA,EAAIoE,UAAU/1B,OAAQ2xB,IAAK,CAAE,IAAIqE,EAASD,UAAUpE,GAAI,IAAK,IAAIz0B,KAAO84B,EAAc3wB,OAAO4wB,UAAUC,eAAeC,KAAKH,EAAQ94B,KAAQ+L,EAAO/L,GAAO84B,EAAO94B,IAAY,OAAO+L,GAAkB4sB,GAASO,MAAMC,KAAMN,WAGhT,SAAgB,QAAC,OACfj/B,EAAS,IADK,EAEXkC,E,kXAFW,sBAGV4O,IAAAA,cAAoB,MAAOiuB,GAAS,CACxC//B,MAAO,KACPK,OAAQ,KACRmgC,QAAS,YACTC,QAAS,MACTC,MAAO,6BACPsN,WAAY,gCACX9qC,GAAQ4O,IAAAA,cAAoB,OAAQ,KAAMA,IAAAA,cAAoB,OAAQ,CACvEkvB,EAAG,gIACH75B,GAAI,oBACD2K,IAAAA,cAAoB,IAAK,CAC5B6uB,OAAQ,OACRC,YAAa,IACbC,KAAM,OACNC,SAAU,WACThvB,IAAAA,cAAoB,IAAK,KAAMA,IAAAA,cAAoB,IAAK,CACzD5N,UAAW,oBACV4N,IAAAA,cAAoB,OAAQ,CAC7B3K,GAAI,iBACJ05B,KAAM,QACL/uB,IAAAA,cAAoB,MAAO,CAC5Bm8B,UAAW,qBACRn8B,IAAAA,cAAoB,OAAQ,CAC/BivB,YAAa,MACbF,KAAM,OACNqN,KAAM,uBACNlN,EAAG,uBCzBQkS,GAA2B,KACpC,MAAM,YAACC,IAAetgC,EAAAA,EAAAA,YAAW8a,EAAAA,GAC3B3sB,EAASxB,KACf,OACI,kBAAC,EAAA6hB,MAAD,CACIE,cAAc6xB,EAAAA,EAAAA,KAAsBD,GACpCtwC,QAAS,CACLye,8BAA+BtgB,EAAOkgB,cACtCD,MAAOjgB,EAAOigB,QAGlB,kBAACoyB,GAAD,Q,gBCdZ,MASA,GATgC,IAC5B,kBAACC,GAAA,EAAD,CACIl+B,KAAM3S,IAAAA,KAAU,8BAChB8wC,cAAe9wC,IAAAA,KACX,wGCKZ,GATqC,IACjC,kBAAC6wC,GAAA,EAAD,CACIl+B,KAAM3S,IAAAA,KAAU,kCAChB8wC,cAAe9wC,IAAAA,KACX,6F,mNCsBL,IAAK+wC,I,SAAAA,GAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,cAAAA,GAAAA,gBAAAA,EAAAA,EAAAA,QAAAA,GAAAA,U,CAAAA,KAAAA,GAAAA,KAKZ,MAAMC,GAAkBvvB,IACpB,GAAIA,EACA,OAAiB,IAAVA,EAAczhB,IAAAA,KAAU,gBAAiB,CAACyhB,MAAAA,IAAUzhB,IAAAA,KAAU,iBAAkB,CAACyhB,MAAAA,KAInFwvB,GAAsB,KAAM,UACrC,MAAM1yC,EAASxB,KACTm0C,GAA4B7yC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,2BACxCuyB,GAAoB7tC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,mBAChCw3B,GAAiC9yC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,gCAC7Cy3B,GAAyB/yC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,wBACrC03B,GAA6BhzC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,iBACzCvb,GAAqBC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,aACjCvG,GAAiB/U,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,WAE7B23B,GAAuBlhC,EAAAA,EAAAA,YAAWo/B,EAAAA,GAClC+B,GAAuBnhC,EAAAA,EAAAA,YAAW8a,EAAAA,IAEjCsmB,EAAQC,IAAa9qC,EAAAA,EAAAA,UAAsB,MAC5C+qC,GAAejzC,EAAAA,EAAAA,cAAakzC,IAC9BF,GAAWD,GAAYA,IAAWG,EAAQ,KAAOA,MAClD,IACGC,GAAcnzC,EAAAA,EAAAA,cAAY,KAC5BgzC,EAAU,QACX,IACG/vC,EAAoB,OAAX8vC,EACTK,EAAqBL,IAAWT,GAAYe,SAC5C,iBAACC,EAAD,mBAAmBC,IAAsBC,EAAAA,GAAAA,GAAkB,CAACJ,mBAAAA,EAAoBz+B,OAAAA,KAEhF,cACF8+B,EADE,cAEFC,EAFE,UAGF34B,EAHE,aAIF44B,EAJE,iBAKFC,EALE,YAMFC,EANE,WAOFC,IACAC,EAAAA,GAAAA,IAAW,CAACp/B,OAAAA,EAAQ2gB,QAASge,IAE3BU,EAAwBvB,GAA6BhF,KAAsB12B,EAAAA,EAAAA,KAAUpC,MAAAA,OAAD,EAACA,EAAQ/T,KAC7FqzC,EAA6BvB,GAAkCC,EAC/DuB,GAAqBhC,EAAAA,EAAAA,KAAsBY,MAAAA,OAAD,EAACA,EAAsBb,aAEjEkC,EAAW,CACb,CACI/wC,YAAa,CACT6C,GAAIqsC,GAAY8B,SAChB/wC,KAAMytC,GACN5tC,aAAc3B,IAAAA,KAAU,aAE5B+Y,QAASu4B,MAAAA,GAAAA,EAAsB7vB,MAAQ,kBAAC2uB,GAAD,MAAmB,kBAAC,GAAD,MAC1D0C,YAAa,CACTC,UAAW/yC,IAAAA,KAAU,YACrBgzC,YAAahC,GAAeM,MAAAA,OAAD,EAACA,EAAsB7vB,OAClDwxB,aAAc,kBAACC,GAAA,EAAD,OAElBl0C,QAASyzC,GAEb,CACI5wC,YAAa,CACT6C,GAAIqsC,GAAYoC,cAChBrxC,KAAM2uC,GACN9uC,aAAc3B,IAAAA,KAAU,kBAE5B+Y,QAAS45B,EAAqB,kBAAC/C,GAAD,MAAwB,kBAAC,GAAD,MACtDkD,YAAa,CACTC,UAAW/yC,IAAAA,KAAU,iBACrBgzC,YAAahC,GAAe2B,IAEhC3zC,QAAS0zC,GAEb,CACI7wC,YAAa,CACT6C,GAAIqsC,GAAYe,QAChBhwC,KAAMsxC,GAAAA,EACNzxC,aAAc3B,IAAAA,KAAU,YAE5B+Y,QAASi5B,EACL,kBAACqB,GAAA,EAAD,CACI75B,UAAWA,EACX64B,iBAAkBA,EAClBiB,iBAAkBlB,EAClB14B,UAAWtG,MAAAA,OAAF,EAAEA,EAAQ/T,IACnBgyC,aAAcA,EACdkB,WAAYA,EACZD,YAAaA,IAGjB,kBAACiB,GAAA,EAAD,MAEJT,YAAa,CACT/5B,QACI,kBAACy6B,GAAA,EAAD,CACI/xB,MAAOuwB,IAAsBI,MAAAA,OAAA,EAAAA,EAAc3qC,SAAU,GAAK,OAAIpC,EAC9DvH,YAAY4kB,EAAAA,EAAAA,KAActkB,EAAUgV,MAAAA,OAAX,EAAWA,EAAQhQ,MAC5CiI,OAAQ6mC,EACRC,cAAeA,OAO7BsB,GAAkBtQ,EAAAA,EAAAA,SAAOvrB,EAAAA,EAAAA,QAAO,UAAU,GAAxBurB,CAA+ByP,GAQvD,OANAt2B,EAAAA,EAAAA,YAAU,KAAM,MACZ,UAAIs2B,EAASpB,UAAb,OAAI,EAAkBxyC,QAClB4yC,MAEL,CAACJ,EAAQoB,EAAUhB,EAAa6B,IAG/B,yBAAKz1C,UAAWO,EAAO4uB,SACnB,kBAACumB,GAAA,EAAD,CAAWlmC,KAAM9L,EAAQnE,MAxHT,OAyHX,UAACq1C,EAASpB,UAAV,OAAC,EAAkBxyC,SAChB,oCACI,kBAAC20C,GAAA,EAAD,gBAA4Bf,EAASpB,UAArC,aAA4B,EAAkBsB,YAA9C,CAA2DxkC,QAASsjC,KADxE,UAEKgB,EAASpB,UAFd,aAEK,EAAkBz4B,UAI/B,kBAAC66B,GAAA,EAAD,CACIC,cAAc5yC,EAAAA,EAAAA,OAAKkiC,EAAAA,EAAAA,SAAOvrB,EAAAA,EAAAA,QAAO,UAAU,KAAQ5M,EAAAA,EAAAA,OAAM,eAA3C/J,CAA2D2xC,GACzEkB,cAAepC,EACfqC,cAAevC,M,4BC9J/B,MAAMwC,GAAyB,OACzBC,GAAqB,gCAErBl3C,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CACzBgvC,UAAW,CACPx2C,UAAWu2C,GACXE,aAAcF,GACdr3C,SAAU,OACVyiC,UAAW,OACX,sBAAuB,CACnB3hC,UAAW,GAEf,WAAY,CACRyE,QAAS,QAEb,sBAAuB,CACnBuD,OAAQ,SAGhB0uC,kBAAmB,GACnBC,iBAAkB,CACdlyC,QAAS,OACT4a,WAAY,SACZnf,OAAQo2C,GACRzwB,UAAWywB,GACX,6BAA8B,CAC1Bp2C,OAAQo2C,GACRzwB,UAAWywB,KAGnBM,wBAAyB,CACrBp3C,KAAM,EACNN,SAAUsI,EAAMqvC,WAAWC,QAAQ,IACnClvC,WAAYJ,EAAMqvC,WAAWE,mBAEjCC,yBAA0B,GAC1BC,wBAAyB,CACrBxyC,QAAS,OACT4a,WAAY,UAEhB63B,iBAAkB,CACd7a,UAAW,OACX9gB,SAAU,OACVxJ,WAAY,EACZrS,cAAe,EACf,OAAQ,CACJC,YAAa,OACbuS,UAAW,OAEf,OAAQ,CACJvS,YAAa,MACbD,cAAe,QAGvBy3C,QAAS,CACLvwC,MAAOY,EAAMwN,QAAQC,KAAKmR,SAE9BgxB,gBAAiB,CACbr3C,gBAAiB,UACjBs3C,YAAa,WAEjBC,uBAAwB,CACpB1wC,MAAO,WAEX2wC,kBAAmB,CACfx3C,gBAAiB,UACjBs3C,YAAa,WAEjBG,yBAA0B,CACtB5wC,MAAO,WAEXxC,KAAM,CACFS,YAAa,OAEjB4yC,UAAW,CACP/W,KAAM,WAEVgX,YAAa,CACThX,KAAM,eAId,M,gBC1DO,MAAMiX,IAAc/wB,EAAAA,EAAAA,OAAK,IAAgE,IAA/D,OAACgxB,EAAD,gBAASC,EAAT,SAA0B7pB,EAA1B,eAAoC8pB,GAA2B,EAC5F,MAAMj3C,EAASxB,KAEf,OAAOu4C,EAAO7tC,OAAS,EACnB,6BACK6tC,EAAO5xC,KAAI,QAAC,GAACgB,EAAD,KAAK5C,EAAL,MAAW3E,EAAX,MAAkB2O,EAAlB,mBAAyB2pC,EAAzB,0BAA6CC,GAA9C,SACR,kBAAC,EAAAC,UAAD,CACIhxC,IAAKD,EACLkxC,QAAM,EACN3e,SAAUse,IAAoB7wC,EAC9BzG,SAAUytB,EAAShnB,GACnB1G,UAAWy3C,EACXr1C,QAAS,CAACnD,KAAMsB,EAAO21C,UAAWjd,SAAU14B,EAAO61C,oBAEnD,kBAAC,EAAAyB,iBAAD,CACIz1C,QAAS,CACLnD,KAAMsB,EAAO81C,iBACbpd,SAAU14B,EAAOm2C,yBACjB37B,QAASxa,EAAOo2C,yBAEpBmB,WAAY,kBAAC/zC,GAAA,EAAD,OAEXD,EACD,kBAAC,EAAAhC,WAAD,CAAY9B,UAAWO,EAAO+1C,yBAA0Bn3C,IAE5D,kBAAC,EAAA44C,iBAAD,CAAkB/3C,UAAW6B,GAAAA,CAAWtB,EAAOq2C,iBAAkBc,IAC7D,4BACK5pC,EAAMpI,KAAI,CAAC6c,EAAO6Y,IACf,kBAACoc,EAAD,CAAgB7wC,IAAKy0B,EAAG7Y,MAAOA,aAOvD,QAGR80B,GAAY/lC,YAAc,cCpD1B,MAAM0mC,IAAanvC,EAAAA,EAAAA,MAAK,CAAC,cAAe,SCC3BovC,IAAQ3xB,EAAAA,EAAAA,OAAK,IAAoB,IAAnB,MAAC/D,GAAkB,EAC1C,MAAMhiB,EAASxB,KAETm5C,EDA8B,EACpC93C,EADoC,KAGnC,IADD,KAACgF,EAAD,OAAOq6B,EAAP,QAAexmB,EAAf,iBAAwB5D,EAAmB,GAA3C,cAA+C5B,GAC9C,EACD,GAAIrO,IAAS+yC,EAAAA,IAAAA,QAAoB1Y,IAAW2Y,EAAAA,IAAAA,MAAmB,CAC3D,MAAM92C,EAA0BmS,IAAiBiK,EAAAA,EAAAA,KAAuBtd,EAAUiV,GAClF,OAAO/T,EAAWU,IAAAA,KAAU,2BAA4B,CAACuW,UAAWjX,EAASJ,QAAU+X,EAE3F,OAAOA,GCRkBo/B,EADEh4C,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aACqBiiB,GACtD+1B,EDU2B,KAA4C,IAA1C3qC,KAAM4qC,EAAP,IAAkBl3C,GAAyB,EAC7E,OAAOk3C,MAAAA,OAAP,EAAOA,EACD1iC,MAAM,EAAGxU,EAAMk3C,EAAU9uC,OAAS,EAAI8uC,EAAU9uC,QACjD4D,QAAO,QAAC,KAACjI,GAAF,QACJ,CAACozC,EAAAA,IAAAA,eAA2CA,EAAAA,IAAAA,oBAA+CvqC,SAAS7I,MAEvGM,KAAI,QAAC,MAACxE,GAAF,SAAaA,KACjBmM,OAAOmN,EAAAA,UACP5L,KAAK,QClBiB6pC,CAAsBl2B,GACjD,OACI,4BACI,8BAAO21B,GACNI,GACG,oCACI,6BACA,0BAAMt4C,UAAWO,EAAOs2C,SAAUyB,QAOtDL,GAAM3mC,YAAc,QC5Bb,MCaMonC,GAAqB,KAC9B,MAAMn4C,EAASxB,KAET45C,EDhBsBC,CAAAA,IAC5B,MAAMC,GAAoB9rC,EAAAA,EAAAA,QAAO6rC,GAKjC,OFI0B,eAACE,EAAD,uDAA6B,GAAIC,EAAjC,uDAA6D,GAA7D,OAC1BD,EAAQrvC,SAAWsvC,EAAQtvC,SAAUgR,EAAAA,EAAAA,QAAOq+B,EAAQpzC,IAAIsyC,IAAae,EAAQrzC,IAAIsyC,KET1DgB,CAAeJ,EAAWC,EAAkB5xC,WAE/D4xC,EAAkB5xC,QAAU2xC,GAEzBC,EAAkB5xC,SCUDgyC,EADN54C,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,oBAGvBwW,EAAQoiC,IAAkDv3C,EAAAA,EAAAA,UAC7D,KAAM8c,EAAAA,EAAAA,WAAU06B,EAAAA,IAAiBR,IACjC,CAACA,KAEEpB,EAAiB6B,IAAsBzwC,EAAAA,EAAAA,UAAS,MACjD2uC,GAAS31C,EAAAA,EAAAA,UACX,IACI,CACI,CACI+E,GAAI,SACJvH,MAAO6C,IAAAA,KAAU,sBAAuB,CACpCq3C,OAAQviC,EAAOrN,OACfqN,OAA0B,IAAlBA,EAAOrN,OAAezH,IAAAA,KAAU,SAAWA,IAAAA,KAAU,YAEjE8B,KAAM,kBAAC,KAAD,CAAW9D,UAAW6B,GAAAA,CAAWtB,EAAOuD,KAAMvD,EAAO42C,aAC3DrpC,MAAOgJ,EACP2gC,mBAAoBl3C,EAAOu2C,gBAC3BY,0BAA2Bn3C,EAAOy2C,wBAEtC,CACItwC,GAAI,WACJvH,MAAO6C,IAAAA,KAAU,wBAAyB,CACtCq3C,OAAQH,EAASzvC,OACjByvC,SAA8B,IAApBA,EAASzvC,OAAezH,IAAAA,KAAU,WAAaA,IAAAA,KAAU,cAEvE8B,KAAM,kBAAC,KAAD,CAAa9D,UAAW6B,GAAAA,CAAWtB,EAAOuD,KAAMvD,EAAO62C,eAC7DtpC,MAAOorC,EACPzB,mBAAoBl3C,EAAO02C,kBAC3BS,0BAA2Bn3C,EAAO22C,2BAExC7pC,QAAO,QAAC,MAACS,GAAF,SAAaA,EAAMrE,OAAS,MACzC,CAACqN,EAAQoiC,EAAU34C,KAGvB+d,EAAAA,EAAAA,YAAU,KACN86B,EAAmB,YACpB,CAACtiC,IAEJ,MAAM+5B,GAAepwC,EAAAA,EAAAA,cAChB64C,GAAoB,CAACC,EAAOC,KACzBJ,EAAmBI,EAAaF,EAAU,QAE9C,IAGJ,OAAOhC,EAAO7tC,OAAS,EACnB,kBAAC4tC,GAAD,CAAaC,OAAQA,EAAQC,gBAAiBA,EAAiB7pB,SAAUmjB,EAAc2G,eAAgBS,KACvG,MC9DKl5C,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCuyC,gBAAiB,CACbz+B,SAAU,WACV7T,IAAK,EACLC,KAAM,EACNsZ,MAAO,EACPkd,OAAQ,EACRx0B,WAAY,uCACZswC,UAAW,SACXC,UAAW,OACXx1C,QAAS,OACT2W,cAAe,SACfrb,gBAAiByH,EAAMwN,QAAQ+Q,WAAW2jB,SAE9CwQ,cAAe,CACX1+B,SAAU,EACVy+B,UAAW,QAEfE,WAAY,CACRp6C,gBAAiB,UACjBG,OAAQ,QAEZk6C,eAAgB,QAAC,SAACpoC,GAAF,QAAwB,CACpCvN,QAAS,OACT2W,cAAe,SACfG,SAAU,SACVC,SAAU,EACVxJ,SAAUA,EAAY,GAAEA,MAAe,SAE3CqoC,iBAAkB,CACd51C,QAAS,OACT8W,SAAU,SACVC,SAAU,GAEd,4BAA6B,CACzB9R,WAAY,wCAEhB,iCAAkC,CAC9BA,WAAY,4C,gBC1Cb,MAAMrK,IAAYC,EAAAA,EAAAA,IAAW,KAAM,CACtCg7C,UAAW,CACP51C,aAAc,OACdq5B,UAAW,cACX,SAAU,CACN2C,KAAM,SAGd6Z,SAAU,CACN,UAAW,CACPC,SAAU,SACVn7B,WAAY,iBCKXo7B,GAAe,IAA2B,IAA1B,aAACC,GAAyB,EACnD,MAAM75C,EAASxB,GAAU,IACnByX,GAAWC,EAAAA,EAAAA,eACX4jC,GAA4Bh6C,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,sBACxCg6C,EACFF,EAAaE,kBAAqBD,GAAyC,IAApBA,GAPpC,KAQhBzwC,EAAQ2wC,IAAa5xC,EAAAA,EAAAA,aACrB8hB,EAAM+vB,IAAW7xC,EAAAA,EAAAA,WAAS,GAC3B8xC,GAAgBh6C,EAAAA,EAAAA,cAClB,CAACi6C,EAAcC,KACI,cAAXA,IACAnkC,EAASiyB,EAAAA,GAAAA,QAAAA,kBAAsC2R,EAAa1zC,KAC5D8zC,GAAQ,MAGhB,CAACJ,IAEC72B,GAAY9iB,EAAAA,EAAAA,cAAY,KAC1BmJ,EAAOgxC,cAAgBpkC,EAAS5M,EAAOgxC,cACvCL,OAAUlzC,KACX,CAACuC,IACEixC,GAAYp6C,EAAAA,EAAAA,cAAY,KAC1B+V,EAAS5M,EAAOkxC,aAChBP,OAAUlzC,GACVmP,EAASiyB,EAAAA,GAAAA,QAAAA,kBAAsC2R,EAAa1zC,OAC7D,CAACkD,EAAQwwC,IAEN7mB,EACF,oCACK6mB,EAAa7mB,QAAQ7tB,KAAKkE,GACvB,kBAAC,EAAA0I,OAAD,CACI3L,IAAKiD,EAAO1I,MACZoF,MAAM,UACN2Z,KAAK,QACLrZ,QAAS,KACDgD,EAAOmxC,iBACPR,EAAU3wC,GAEV4M,EAAS5M,EAAOkxC,aAEpBN,GAAQ,KAGX5wC,EAAO1I,UAKlB+X,EACF,oCACI,kBAAC,KAAD,CAAiBjZ,UAAWO,EAAOy5C,UAAW/5B,KAAK,IAAInc,KAAMk3C,GAAAA,QAAWp0C,QAAS6zC,IAChFL,EAAazlC,MAItB,OACI,oCACI,kBAAC,EAAAsmC,OAAD,CAAQnvC,UAAW1I,SAASC,MACxB,kBAAC,EAAA63C,SAAD,CACIZ,iBAAkBA,EAClB9qC,KAAMib,EACNroB,QAAS,CAACnD,KAAMsB,EAAO05C,UACvBrwC,OAAQ2pB,EACRjjB,QAASmqC,EACTlqC,aAAc,CAACC,SAAU,SAAUC,WAAY,UAC/CwI,QAASA,KAGjB,kBAACmK,GAAA,EAAD,CACI5T,OAAQ5F,EACRzK,MAAOyK,MAAAA,OAAF,EAAEA,EAAQuxC,iBACfpgC,QAASnR,MAAAA,OAAF,EAAEA,EAAQwxC,wBACjB53B,OAAQq3B,EACRt3B,UAAWA,EACXD,YAAathB,IAAAA,KAAU,WACvBqhB,eAAgBrhB,IAAAA,KAAU,cCvF7Bq5C,GAAgB,KACzB,MAAMC,GAAoCj7C,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,kBACtD,OAAK2/B,EAED,oCACKA,EAAczlC,OAAO,GAAGnQ,KAAK61C,GAC1B,kBAACpB,GAAD,CAAcxzC,IAAK40C,EAAE70C,GAAI0zC,aAAcmB,OAJxB,MCyCzB1B,GAAa,GACb2B,IAAyBl1B,EAAAA,EAAAA,OAAK,IAA+C,IAA9C,OAACjL,EAAD,UAASogC,EAAT,cAAoBC,GAA0B,EAC/E,MAAMn7C,EAASxB,GAAU,CAAC2S,SAAU2J,MAAAA,OAAF,EAAEA,EAAQ3J,WACtC8E,GAAWC,EAAAA,EAAAA,eACXklC,GAAsBl7C,EAAAA,EAAAA,cAAY,IAC7Bi7C,IAAgBxuC,MAAM2J,GAAWA,EAAMo2B,OAAS,GAAKp2B,KAC7D,CAAC6kC,IACEE,GAAmB7uC,EAAAA,EAAAA,UACnB8uC,GAAqBp7C,EAAAA,EAAAA,cAAYq7C,EAAAA,EAAAA,KAASL,EATlB,KASyD,CAACA,IAGlFrmC,GAAiB/U,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,WAC7B+yB,EAAgBt5B,EAASA,EAAOhQ,KAAO,MAEvC,SAAC22C,EAAD,WAAWC,EAAanC,GAAxB,iBAAoCoC,IAAoBC,EAAAA,EAAAA,GAA8C,CACxGR,cAAeC,EACfF,UAAWI,EACXnN,cAAAA,KAEGzB,EAAQkP,IAAaxzC,EAAAA,EAAAA,UAAiB,KACtC6jC,EAAO4P,IAAYzzC,EAAAA,EAAAA,UAA4C,IAEhE0zC,GAAa16C,EAAAA,EAAAA,UAAQ,IAAM26C,GAAAA,CAAKjhC,IAAS,CAACA,IAE1CkhC,GAAkBl8C,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,yBAC9BoR,GAAYprB,EAAAA,EAAAA,UAAQ,KAAM66C,EAAAA,EAAAA,KAAoCpnC,IAAS,CAACA,IACxEqnC,GAAgBC,EAAAA,EAAAA,GAAiB,CAAC3vB,UAAAA,IAClC4vB,GAAqBvqC,EAAAA,EAAAA,YAAW8a,EAAAA,GAChC9f,GAAQwvC,EAAAA,EAAAA,KACRC,GAAgBC,EAAAA,EAAAA,GAAiBzhC,MAAAA,OAAD,EAACA,EAAQ0hC,UACzC1J,GAA6BhzC,EAAAA,EAAAA,aAAYsb,EAAAA,GAAAA,UAAAA,kBAC/CqhC,EAAAA,EAAAA,GAAgB,CAAC5nC,OAAAA,EAAQi+B,aAAAA,IACzB,MAAM4J,GAAcC,EAAAA,EAAAA,MAEpB5+B,EAAAA,EAAAA,YAAU,KACN,GAAIy9B,EAAU,CACV,MAAMoB,EAAkBd,IAAeL,EAAWK,YAC3C7P,MAAO4Q,EAAYnQ,OAAQoQ,IAAeC,EAAAA,EAAAA,KAAmB,CAChE9Q,MAAO2Q,IAAoBnB,EAAWxP,MAAQnxB,EAAOmxB,MAAQwP,EAAWxP,MACxES,OAAQkQ,EAAkB9hC,EAAO4xB,OAAS+O,EAAW/O,SAEzDmP,EAASgB,GACTjB,EAAUkB,MAEf,CAACtB,EAAUC,EAAYtN,KAE1BpwB,EAAAA,EAAAA,YAAU,KACN9H,EAASyB,EAAAA,GAAAA,MAAAA,QAAAA,gBAAsCu0B,MAChD,CAACh2B,EAAUg2B,KAEdluB,EAAAA,EAAAA,YAAU,KACFjD,EAAOkiC,gBACP/mC,EAASyB,EAAAA,GAAAA,eAAAA,QAAAA,qBAAoDoD,EAAOkiC,mBAEzE,CAACliC,KAEJiD,EAAAA,EAAAA,YAAU,KACFs9B,EAAiB30C,UACjB20C,EAAiB30C,QAAQu2C,UAAY,KAE1C,CAACpoC,MAAAA,OAAD,EAACA,EAAQ/T,MCxGoB,MAChC,MAAMmV,GAAWC,EAAAA,EAAAA,eACXgnC,GAA8Bp9C,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,qBAC1C8U,GAAiB/U,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,YAAmC,IAChE,IAACe,EAAD,YAAM6lC,GAAe9xB,EACrBsoC,GAAaz/B,EAAAA,EAAAA,KAAmB7I,GAChC6B,GAAa5W,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,SACzBq9C,GAAet9C,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,iBAC3Bs9C,EAAkBD,GAAgBA,EAAal0C,OAAS,EAExDo0C,GAAWp9C,EAAAA,EAAAA,cACbq7C,EAAAA,EAAAA,MAAUgC,IACFA,GACAtnC,EAASyB,EAAAA,GAAAA,QAAAA,qBAEd,KACH,CAACzB,KAGL8H,EAAAA,EAAAA,YAAU,KACN,MAAMw/B,EACFL,IAAuBC,GAAcr8C,KAAQmW,EAAAA,EAAAA,KAAUnW,IAAQ4V,IAASoQ,EAAAA,IAAAA,SAAgBu2B,EAC5FC,EAASC,KACV,CAACD,EAAUH,EAAYD,EAAoBvW,EAAa7lC,EAAK4V,EAAM2mC,KDmFtEG,GAEA,MAAMC,GAAqBv9C,EAAAA,EAAAA,cACtBwsC,IACGgP,EAAiB,CAAChP,OAAAA,EAAQT,MAAAA,EAAO6P,WAAAA,IACjCF,EAAUlP,KAEd,CAACgP,EAAkBI,EAAY7P,IAE7ByR,EAAoBrC,EAAiB30C,QAErCi3C,GAAuBv8C,EAAAA,EAAAA,UACzB,KAAM,CACFw8C,QAASF,EACTG,SAAU,CAAC,MAAO,aAEtB,CAACH,IAEL,OACI,kBAACI,EAAA,WAAD,CAAwCj9C,OAAO,GAC3C,kBAACk9C,EAAA,WAAD,CAAuBl9C,MAAOgM,GAC1B,kBAAC8f,EAAA,WAAD,CAA+B9rB,MAAOm7C,EAAkBI,EAAqBF,GACzE,kBAACjL,EAAA,WAAD,CAA+BpwC,MAAOy7C,GAClC,kBAAC,aAAD,CAA6Bz7C,MAAO67C,GAChC,yBAAKj9C,UAAWO,EAAOk5C,mBAChBsC,KAAa3mC,MAAAA,GAAAA,EAAQ/T,OAAQ,kBAAC8a,EAAA,EAAD,MAC/B4/B,GAAAA,MAAY3mC,GAAAA,EAAQ/T,IACjB,yBAAKrB,UAAWO,EAAOw5C,kBACnB,yBAAK/5C,UAAWO,EAAOu5C,gBACnB,kBAACvL,GAAD,CAAwBC,kBAAmBnzB,EAAOkjC,eAChDhC,GAAmB,kBAAC7D,GAAD,MACrB,yBAAKxyC,IAAK01C,EAAkB57C,UAAWO,EAAOq5C,eAC1C,kBAAC4E,EAAA,WAAD,CAAiCp9C,MAAO88C,GACpC,kBAAClR,GAAD,CACIC,OAAQA,EACRE,gBAAiB6Q,EACjBxR,MAAOA,OAKvB,kBAACyG,GAAD,OAGJ,yBAAKjzC,UAAWO,EAAOs5C,YACnB,kBAAC4E,EAAA,GAAD,CACIC,aAAcC,EAAAA,GAAAA,QACdhqC,KAAM3S,IAAAA,KAAU,uBAChBD,QAAS68C,EAAAA,GAAAA,YAIrB,kBAACvD,GAAD,eAUhCG,GAAuBlqC,YAAc,yBEhKrC,MAAMutC,IAAoBC,EAAAA,EAAAA,yBAAwB,CAC9CC,iBAAkB,qBAClBC,eAAe,IAoDnB,GApC2B,IAAyF,IAAxF,OAAC3jC,EAAD,MAAS8vB,EAAT,SAAgB8T,EAAWzkC,EAAAA,SAA3B,UAAqCihC,EAArC,cAAgDC,EAAhD,aAA+DwD,GAAyB,EAChH,MAAMC,GAA6E1+C,EAAAA,EAAAA,cAC/E2+C,EAAAA,EAAAA,KAAkB1D,GAClB,CAACA,IAGC2D,GAAkB19C,EAAAA,EAAAA,UAAQ,IAAM0Z,IAAUikC,EAAAA,EAAAA,KAAwBjkC,IAAS,CAACA,IAElF,OACI,kBAAC,EAAA+X,SAAD,CAAU+X,MAAOA,GACb,kBAACx0B,EAAA,WAAD,CAAwBvV,MAAOi+C,MAAAA,OAAF,EAAEA,EAAiB34C,IAC5C,kBAAC64C,EAAA,WAAD,CAA4Bn+C,MAAO89C,GAC/B,kBAAC,EAAAM,eAAD,CAAgBX,kBAAmBA,IAC/B,kBAAC,EAAAY,wBAAD,CAAyBlyC,MAAOmyC,EAAAA,GAC5B,oCACI,kBAAC,IAAD,CACIC,cAAY,EACZV,SAAU,CAAC1/C,EAAOK,IAAWq/C,EAAS5+B,KAAKu/B,MAAMrgD,GAAQ8gB,KAAKu/B,MAAMhgD,MAEvEy/C,GACG,kBAAC7D,GAAD,CACIngC,OAAQgkC,EACR5D,UAAWA,EACXC,cAAeyD,IAGvB,kBAACU,EAAA,EAAD,CAAYC,oBAAoB,W,wCCvDzD,MAAM/gD,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChC64C,eAAgB,CACZ9kC,SAAU,SACVrc,SAAU,OACV0I,WAAY,SACZo2B,WAAY,SACZsiB,aAAc,WACdjhC,WAAY,SACZ5a,QAAS,OACTohB,UAAW,OACXjf,MAAOY,EAAMwN,QAAQC,KAAKC,WAE9BgnB,KAAM,CACFh9B,SAAU,OACV0I,WAAY,UAEhBxD,KAAM,CACFlE,OAAQ,OACR0G,MAAOY,EAAMwN,QAAQC,KAAKC,WAE9BjC,aAAc,CACVC,WAAY,UACZhU,SAAU,OACV0H,MAAO,kBACPwM,WAAY,EACZvO,YAAa,OAEjB07C,YAAa,CACTrhD,SAAU,OACV0H,MAAO,mBACP/B,YAAa,MACb+C,WAAY,SClBP44C,GAAgB,IAAwB,IAAvB,MAACz8B,EAAQ,GAAc,EACjD,MAAMljB,EAASxB,KACTyX,GAAWC,EAAAA,EAAAA,eAEXC,GAAStE,EAAAA,EAAAA,YAAWuE,EAAAA,GAEpBwpC,GAAkB1/C,EAAAA,EAAAA,cAAY,KAChC+V,EAASiyB,EAAAA,GAAAA,QAAAA,gBAAoC,CAACC,cAAe,UAAWhyB,OAAAA,OACzE,CAACF,EAAUE,IAEd,OACI,kBAAChD,EAAA,EAAD,CAAiBvU,MAAM,IACnB,yBAAKa,UAAWO,EAAOw/C,gBACnB,kBAAC,EAAA9iB,KAAD,CACI72B,UAAU,SACVrE,QAAQ,UACR/B,UAAWO,EAAOq7B,KAClBh1B,QAASu5C,EACTlX,UAAU,QAETjnC,IAAAA,KAAU,YAEf,kBAACo+C,GAAA,EAAD,CAA4BpgD,UAAWO,EAAOuD,OAC7C9B,IAAAA,KAAU,SAEf,kBAACq+C,GAAA,EAAD,MACA,kBAAC,EAAAv+C,WAAD,CAAY9B,UAAWO,EAAOoS,aAAc5Q,QAAQ,WAChD,0BAAM/B,UAAWO,EAAO0/C,aAAcj+C,IAAAA,OAAYyhB,EAAO,QACxDzhB,IAAAA,KAAU,qB,gBCxCpB,MAAMjD,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCo5C,QAAS,CACLn8C,QAAS,OACT2O,WAAY,EACZ2S,WAAY,QACZ0wB,aAAc,4BACd1Y,UAAW,aACXp+B,YAAa,QAEjBw8B,OAAQ,CACJv1B,MAAO,sBACP/B,YAAa,QAEjBrD,MAAO,CACHtC,SAAU,OACViU,cAAe,SACfD,WAAY,MACZtL,WAAY,IACZhB,MAAOY,EAAMwN,QAAQC,KAAKmR,QAC1BgI,UAAW,kBCZNyyB,GAAiB,IAAoB,IAAnB,MAACr/C,GAAkB,EAC9C,MAAMX,EAASxB,KACf,OACI,kBAAC,EAAAyhD,QAAD,CAASxgD,UAAWO,EAAO+/C,SACvB,kBAAC,KAAD,CAAStgD,UAAWO,EAAOs7B,SAC3B,kBAAC,EAAA/5B,WAAD,CAAYC,QAAQ,KAAK/B,UAAWO,EAAOW,OACtCA,K,2cCKV,MCnBMnC,IAAYC,EAAAA,EAAAA,IAAYkI,IAAD,CAChCuyC,gBAAiB,CACbz+B,SAAU,WACV7T,IAAK,EACLC,KAAM,EACNsZ,MAAO,EACPkd,OAAQ,EACRx0B,WAAY,uCACZ6R,SAAU,SACV9W,QAAS,OACT2W,cAAe,SACfrb,gBAAiByH,EAAMwN,QAAQ+Q,WAAW2jB,SAE9CqX,cAAe,CACXt8C,QAAS,QAEbi9B,WAAY,CACRlmB,SAAU,EACVtb,OAAQ,GAEZ8gD,SAAU,CACNh5C,OAAQ,OACRnI,MAAO,OACPkS,WAAY,OAEhBkvC,cAAe,CACXzhD,KAAM,EACNiF,QAAS,OACT8W,SAAU,SACVD,SAAU,WACVF,cAAe,SACfyK,UAAW,OAEfq7B,aAAc,CACVjH,UAAW,OACXz+B,SAAU,GAEdC,WAAY,CACRD,SAAU,OC5BZ2lC,GAAwB,CAAC,GAAI,GAAI,KAOjCC,IAAqBx6B,EAAAA,EAAAA,OAAK,IAA6B,IAA5B,IAACy6B,EAAD,UAAMrlC,GAAsB,EACzD,MAAMnb,EAASxB,MAERwd,EAAaykC,IAAkBr4C,EAAAA,EAAAA,UAASk4C,GAAsB,KAC9DtlC,EAAMjI,IAAW3K,EAAAA,EAAAA,UAAS,GAE3Bs4C,GAAyD5gD,EAAAA,EAAAA,aAC3DC,EAAAA,GAAAA,UAAAA,gCAGJge,EAAAA,EAAAA,YAAU,KACNhL,EAAQ,KACT,CAACytC,EAAKrlC,EAAWulC,IAEpB,MAAM,UAACzlC,EAAD,MAAYiI,EAAZ,SAAmB+X,GClBP,KAAyD,IAAxD,IAACulB,EAAD,UAAMrlC,EAAN,KAAiBH,EAAO,EAAxB,YAA2BgB,EAAc,IAAe,EAC3E,MAAM/F,GAAWC,EAAAA,EAAAA,eAEXyqC,GAA0BjkC,EAAAA,GAAAA,KAC1BkkC,GAA6BlkC,EAAAA,GAAAA,MAC5BzB,EAAWuB,IAAgBpU,EAAAA,EAAAA,WAAkB,IAC7C8a,EAAO29B,IAAYz4C,EAAAA,EAAAA,UAAiB,IACpC6yB,EAAU6lB,IAAe14C,EAAAA,EAAAA,UAAmB,KAE7C,gBAAC24C,EAAD,aAAkBC,GHHG,KAA6B,IAA5B,UAAC7lC,EAAD,IAAYqlC,GAAgB,EACxD,MAAME,GAAyD5gD,EAAAA,EAAAA,aAC3DC,EAAAA,GAAAA,UAAAA,+BAEEsM,GAAiBvM,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,WAC7BohB,GAAmBrhB,EAAAA,EAAAA,aAAYC,EAAAA,GAAAA,UAAAA,aAC/B4hB,GAAavgB,EAAAA,EAAAA,UAAQ,KAAM6/C,EAAAA,EAAAA,KAA2B9lC,IAAY,CAACA,IACnEkb,GAA0Bj1B,EAAAA,EAAAA,UAAQ,IAC7B,CACH,CACI0L,OAAQ,SACRo0C,UAAW,OACX90C,OAAQ,CAACo0C,MAGlB,CAACA,IAEEW,IAASx/B,EAETy/B,GAAclhD,EAAAA,EAAAA,cAChB,WAAmE,IAAlEm2B,EAAkE,uDAAxC,GACvB,MAAMgrB,EAAiB,IACnBC,OAAQ,0EAFmD,uDAA1B,IAKrC,OAAOH,GACDI,EAAAA,EAAAA,KAAkC,CAChClrB,QAAAA,EACAl1B,QAASkgD,EACTjgC,eAAgB/U,EAChBsV,WAAAA,EACAR,SAAAA,IACDxU,MAAKxH,EAAAA,EAAAA,MAAIqxB,EAAAA,EAAAA,OAAM,aAAc7U,MAC9B6/B,EAAAA,EAAAA,KAAoBnrB,EAASgrB,KAEvC,CAACF,EAAMx/B,EAAYtV,EAAQ8U,IAwB/B,MAAO,CAAC4/B,iBArBgB7gD,EAAAA,EAAAA,cACpB,CAAC6a,EAAK9F,IACKmsC,EAAY/qB,EAAD,IAAWphB,OAAAA,EAAQ8F,IAAAA,GAAQ2lC,KAEjD,CAACrqB,EAASqqB,EAA4BU,IAiBjBJ,cAdJ9gD,EAAAA,EAAAA,cAAY,KAC7B,MAAMiB,EAAUu/C,EAChB,OAAQS,GACFM,EAAAA,EAAAA,KAAuB,CACrBprB,QAAAA,EACAl1B,QAAAA,EACAigB,eAAgB/U,EAChBsV,WAAAA,EACAR,SAAAA,KAEFugC,EAAAA,EAAAA,KAAUrrB,EAASl1B,IACvBwL,MAAMg1C,GAAUA,EAAuBz+B,UAC1C,CAACmT,EAASqqB,EAA4BS,EAAMx/B,EAAYtV,EAAQ8U,MGtD3BygC,CAAgB,CAACzmC,UAAAA,EAAWqlC,IAAAA,IAE9D/jB,GAAUv8B,EAAAA,EAAAA,cACXgS,IACG+D,EAASgM,EAAAA,GAAAA,QAAAA,UAAoBC,EAAAA,EAAAA,KAAuBhQ,EAAGzQ,IAAAA,KAAU,2BACjEo/C,EAAS,KAEb,CAAC5qC,IAeL,OAZA8H,EAAAA,EAAAA,YAAU,KACN4iC,EAAwBK,KAAgBr0C,KAAKk0C,GAAU9+B,MAAM0a,KAC9D,CAACukB,EAAcL,EAAyBlkB,KAE3C1e,EAAAA,EAAAA,YAAU,KACNvB,GAAa,GACbokC,EAA2BG,EAAgB/kC,EAAahB,EAAOgB,IAC1DrP,KAAKm0C,GACL/+B,MAAM0a,GACN3e,SAAQ,IAAMtB,GAAa,OACjC,CAACxB,EAAMgB,EAAa+kC,EAAiBH,EAA4BnkB,IAE7D,CAACxhB,UAAAA,EAAWiI,MAAAA,EAAO+X,SAAAA,IDbW4mB,CAAO,CAACrB,IAAAA,EAAKrlC,UAAAA,EAAWH,KAAAA,EAAMgB,YAAAA,IAC7D8lC,GAAiBt1C,EAAAA,EAAAA,QAAO,OAE9BuR,EAAAA,EAAAA,YAAU,KACF+jC,EAAep7C,UACfo7C,EAAep7C,QAAQu2C,UAAY,KAExC,CAAChiB,IAEJ,MAAM8mB,EAAgB7+B,EAAQo9B,GAAsB,GAEpD,OACI,yBAAK7gD,UAAWO,EAAOk5C,iBACnB,kBAAC8G,GAAD,CAAgBr/C,MAAO6/C,IACvB,yBAAK/gD,UAAW6B,GAAAA,CAAWtB,EAAOkgD,cAAe,CAAC,CAAClgD,EAAO6gC,YAAakhB,KACnE,kBAACrmC,EAAA,EAAD,CAAWjc,UAAWO,EAAOmgD,UACzB,kBAACR,GAAD,CAAez8B,MAAOA,IACtB,yBAAKzjB,UAAWO,EAAOogD,eAClBnlC,GAAa,kBAACW,EAAA,EAAD,MACbsH,EAAQ,GACL,yBAAKzjB,UAAWO,EAAOqgD,aAAc16C,IAAKm8C,GACtC,kBAACE,GAAA,EAAD,CAAc/mB,SAAUA,KAG/B8mB,GACG,yBAAKtiD,UAAWO,EAAO4a,YACnB,kBAACkB,EAAA,EAAD,CACIC,MAAOmH,EACPjH,mBAAoBqkC,GACpBtkC,YAAaA,EACbhB,KAAMA,EACNkB,aAAcnJ,EACdkvC,oBAAqBxB,YAWzDF,GAAmBxvC,YAAc,qBElEjC,MAAMutC,IAAoBC,EAAAA,EAAAA,yBAAwB,CAC9CC,iBAAkB,iBAClBC,eAAe,IA4BnB,GAjBuB,IAAiE,IAAhE,OAAC3jC,EAAD,IAAS0lC,EAAT,UAAcrlC,EAAd,MAAyByvB,EAAzB,SAAgC8T,EAAWzkC,EAAAA,UAAqB,EACpF,OACI,kBAAC,EAAA4Y,SAAD,CAAU+X,MAAOA,GACb,kBAACx0B,EAAA,WAAD,CAAwBvV,MAAOia,EAAO3U,IAClC,kBAAC,EAAA84C,eAAD,CAAgBX,kBAAmBA,IAC/B,kBAAC,IAAD,CACIc,cAAY,EACZV,SAAU,CAAC1/C,EAAOK,IAAWq/C,EAAS5+B,KAAKu/B,MAAMrgD,GAAQ8gB,KAAKu/B,MAAMhgD,MAEvEyb,GAAU,kBAACylC,GAAD,CAAoBC,IAAKA,EAAKrlC,UAAWA,IACpD,kBAACmkC,EAAA,EAAD,CAAYC,oBAAoB,S","sources":["webpack://@reltio/remotes/../components/src/components/AttributeSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/AttributeSelector/AttributeSelector.tsx","webpack://@reltio/remotes/../components/src/components/CollapseButton/styles.ts","webpack://@reltio/remotes/../components/src/components/CollapseButton/CollapseButton.tsx","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/DateIntervalSelector/DateIntervalSelector.tsx","webpack://@reltio/remotes/../components/src/components/ReactSelect/CreatableSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/Option.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/components/index.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/MultiSelect.js","webpack://@reltio/remotes/../components/src/components/ReactSelect/MultiSelect/index.js","webpack://@reltio/remotes/../components/src/components/UserSelector/styles.ts","webpack://@reltio/remotes/../components/src/components/UserSelector/UserSelector.tsx","webpack://@reltio/remotes/../components/src/components/activityLog/types/ActivityTypes.ts","webpack://@reltio/remotes/../components/src/components/activityLog/utils/activities.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/styles.ts","webpack://@reltio/remotes/../components/src/components/editors/CustomDateRangeEditor/CustomDateRangeEditor.tsx","webpack://@reltio/remotes/../components/src/types/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileAttributesView/ProfileAttributesView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/contexts/SingleAttributeContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeHeader/SingleAttributeHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/hooks/helpers/index.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeEditableContent/SingleAttributeEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeReadableContent/SingleAttributeReadableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/components/SingleAttributeView/SingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useSingleAttributeLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/RelationsViewStateContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/FilterButton/FilterButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/contexts/ImportDTContext.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/hooks/useImportFromDTLoader.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/MultipleImportIcon.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/ImportFromDT/ImportFromDT.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsHeader/RelationsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationTooltip/RelationTooltip.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationInfo.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SuggestedButtons/SuggestedButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/EditableRelationItem/EditableRelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/permissions.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/relation.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationArrowButton/RelationArrowButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/SecondLevelWrapper/SecondLevelWrapper.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSecondLevelConnections.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsEditableContent/RelationsEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationAttributes/RelationAttributes.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/ShowDetailsButton/ShowDetailsButton.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationItem/RelationItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/ratings.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/Ratings/Ratings.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RatingsButtons/RatingsButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationCompexItem/RelationComplexItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsList/RelationsList.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useSuggestedRelations.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsContent/RelationsContent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/components/RelationsView/RelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/helpers/filters.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/hooks/useRelationsState.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/contexts/TableAttributeContext.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/reducer.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/HeadCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/helpers/tableAttributeHelpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTableHeader/AttributeTableHeader.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/RowCellRenderer.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/EditButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeTable/AttributeTable.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/AttributeEditing/AttributeEditing.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/hooks/useEditableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/components/TableAttributeView/TableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/hooks/useLoadPaths.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/ConfigContext.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/Node.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/helpers.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/styles.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/node-content-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/index.ts","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/theme/tree-node-data-renderer.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/icons/ShowGraph.svg","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsHeader.tsx","webpack://@reltio/remotes/../profile/src/components/Sandbox/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/styles.ts","webpack://@reltio/remotes/../profile/src/components/views/HOCs/withResizableHandle.tsx","webpack://@reltio/remotes/../profile/src/components/views/styles.ts","webpack://@reltio/remotes/../profile/src/components/EntityMapView/useMarkers.js","webpack://@reltio/remotes/../profile/src/components/EntityMapView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageLineCaption/ImageLineCaption.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeViewEditableContent/ImageAttributeViewEditableContent.tsx","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ImageAttributeView/ImageAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ActionButtons.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/MatchCard.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePotentialMatchesView/ProfilePotentialMatchesView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewsFactory.tsx","webpack://@reltio/remotes/../profile/src/components/views/StubView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/ProfileSingleAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileSingleAttributeView/hooks/useSingleAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/ProfileTableAttributeView.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/useTableAttribute.ts","webpack://@reltio/remotes/../profile/src/components/ProfileTableAttributeView/hooks/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileRelationsView/ProfileRelationsView.tsx","webpack://@reltio/remotes/../profile/src/components/Sandbox/CustomView.tsx","webpack://@reltio/remotes/../profile/src/components/HierarchyPathsView/HierarchyPathsView.tsx","webpack://@reltio/remotes/../profile/src/components/EntityMapView/EntityMapView.tsx","webpack://@reltio/remotes/../profile/src/components/views/ViewComponent.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileLayoutItem/ProfileLayoutItem.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileLayout/ProfileLayout.tsx","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/suggest.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/copy.svg","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/hooks/useCloneAction.ts","webpack://@reltio/remotes/../profile/src/components/PerspectiveProfileBand/PerspectiveProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowButton/WorkflowButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationList/CollaborationList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/styles.ts","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowList/WorkflowList.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/icons/CollaborationIcon.svg","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationButton/CollaborationButton.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/WorkflowPanelEmptyState/WorkflowPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/components/CollaborationPanelEmptyState/CollaborationPanelEmptyState.tsx","webpack://@reltio/remotes/../profile/src/components/RightSidePanel/RightSidePanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/styles.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/ErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/helpers.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/components/Error.tsx","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/useCachedErrors.ts","webpack://@reltio/remotes/../profile/src/components/ProfileErrorsPanel/ProfileErrorsPanel.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/styles.ts","webpack://@reltio/remotes/../profile/src/components/Notifications/Notification.tsx","webpack://@reltio/remotes/../profile/src/components/Notifications/Notifications.tsx","webpack://@reltio/remotes/../profile/src/components/ProfilePerspectiveView/ProfilePerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/hooks/useProfileValidation.ts","webpack://@reltio/remotes/../profile/src/perspectives/ProfilePerspective.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagListHeader/TagListHeader.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/components/TagProfileBand/TagProfileBand.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTagsProvider.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/styles.ts","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/TagPerspectiveView.tsx","webpack://@reltio/remotes/../profile/src/components/TagPerspectiveView/hooks/useTag.ts","webpack://@reltio/remotes/../profile/src/perspectives/TagPerspective.tsx"],"sourcesContent":["import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n },\n noOptionsMessage: {\n fontSize: '14px'\n }\n});\n","import React, {useCallback, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {pipe, defaultTo} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {AttributeOption} from '../../types';\nimport mdmModule from '@reltio/mdm-module';\nimport {MultiValueProps, OptionProps} from 'react-select';\nimport {AttributeType, getAttributeTypeSubAttributes, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport MultiValue from '../ReactSelect/commonComponents/MultiValue';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n entityType: TEntityType;\n selectedAttributes: AttributeOption[];\n className?: string;\n onChange?: (attributes: AttributeOption[]) => void;\n title?: string;\n disableUnderline?: boolean;\n menuPlacement?: string;\n};\n\nconst AttributeSelector = ({\n entityType,\n selectedAttributes,\n className,\n onChange,\n title,\n disableUnderline,\n menuPlacement = 'bottom'\n}: Props) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n\n const prepareItems = useCallback(\n (data: AttributeType[], level = 0, prevLabel = ''): AttributeOption[] => {\n return data.reduce((acc, item) => {\n if (item.hidden) return acc;\n const chipLabel = `${prevLabel && prevLabel + ' / '}${item.label}`;\n acc.push({\n label: item.label,\n value: item.uri,\n attrType: item,\n chipLabel,\n level\n });\n const subAttributes = getAttributeTypeSubAttributes(metadata, item);\n return acc.concat(subAttributes ? prepareItems(subAttributes, level + 1, chipLabel) : []);\n }, []);\n },\n [metadata]\n );\n\n const options = useMemo(() => prepareItems(entityType?.attributes || []), [entityType, prepareItems]);\n\n const CustomOption = ({isFocused, isSelected, data, label, innerProps}: OptionProps<AttributeOption, true>) => (\n <div {...innerProps}>\n <AttributeListItem\n checked={isSelected}\n level={data.level}\n data={data}\n label={label}\n labelInText={label}\n isFocused={isFocused}\n />\n </div>\n );\n\n const CustomMultiValue = ({data, ...props}: MultiValueProps<AttributeOption>) => (\n <MultiValue {...props}>{data.chipLabel}</MultiValue>\n );\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {title || i18n.text('Attribute')}\n </Typography>\n <MultiSelect\n value={selectedAttributes}\n options={options}\n TextFieldProps={{\n InputProps: {disableUnderline},\n classes: {root: styles.dropDownInput}\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton,\n MultiValue: CustomMultiValue,\n Option: CustomOption\n }}\n onChange={pipe(defaultTo([]), onChange)}\n styles={customStyles}\n classes={styles}\n menuPlacement={menuPlacement}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default AttributeSelector;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n collapseButton: {\n cursor: 'pointer'\n },\n expandLess: {\n transform: 'rotate( -180deg )'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport {useStyles} from './styles';\n\ntype SmallIconButtonWithTooltipProps = React.ComponentPropsWithoutRef<typeof SmallIconButtonWithTooltip>;\n\ntype Props = Omit<SmallIconButtonWithTooltipProps, 'tooltipTitle'> & {\n isOpen?: boolean;\n tooltipTitle?: string;\n};\n\nconst CollapseButton = ({isOpen = false, tooltipTitle, ...otherProps}: Props) => {\n const styles = useStyles();\n const buttonProps = {\n icon: ExpandMore,\n className: styles.collapseButton,\n iconClassName: classnames({[styles.expandLess]: isOpen})\n };\n const tooltipProps = {\n tooltipTitle: tooltipTitle\n };\n return <SmallIconButtonWithTooltip {...buttonProps} {...tooltipProps} {...otherProps} />;\n};\n\nexport default CollapseButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flex: 1\n },\n input: {\n height: '100%',\n paddingLeft: '12px',\n paddingRight: '8px',\n fontSize: '14px'\n },\n inputNumber: {\n minWidth: '60px',\n marginRight: 10,\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.03)'\n },\n inputUnit: {\n width: '100%'\n }\n});\n","import React from 'react';\nimport {pipe} from 'ramda';\nimport i18n from 'ui-i18n';\nimport capitalize from '@material-ui/core/utils/capitalize';\nimport {TextField as TextField} from '@material-ui/core';\nimport SimpleDropDownSelector from '../SimpleDropDownSelector/SimpleDropDownSelector';\nimport {getValue} from '../../core/utils';\nimport {useStyles} from './styles';\n\ntype Props = {\n interval: [number, string];\n onChange: ([number, string]) => void;\n onFocus?: () => void;\n};\n\nconst periods = [\n i18n.text('minutes'),\n i18n.text('hours'),\n i18n.text('days'),\n i18n.text('weeks'),\n i18n.text('months'),\n i18n.text('years')\n];\n\nconst DateIntervalSelector = ({interval: [value, unit], onChange, onFocus}: Props) => {\n const styles = useStyles();\n const getIntervalFromValue = (newValue: number) => [newValue, unit];\n const getIntervalFromUnit = ({value: newUnit}: {value: string}) => [value, newUnit];\n const onNumberChange = pipe(getValue, parseInt, getIntervalFromValue, onChange);\n const onUnitChange = pipe(getIntervalFromUnit, onChange);\n return (\n <div className={styles.root}>\n <TextField\n type=\"number\"\n value={value || ''}\n onChange={onNumberChange}\n inputProps={{min: 1, onFocus: onFocus}}\n InputProps={{classes: {root: styles.input}}}\n className={styles.inputNumber}\n />\n <SimpleDropDownSelector\n label={''}\n placeholder={capitalize(unit)}\n className={styles.inputUnit}\n value={{value: unit, label: capitalize(unit)}}\n options={periods.map((value) => ({\n value,\n label: capitalize(value)\n }))}\n onChange={onUnitChange}\n TextFieldProps={{\n inputProps: {onFocus: onFocus},\n InputProps: {classes: {root: styles.input}}\n }}\n />\n </div>\n );\n};\n\nexport default DateIntervalSelector;\n","import CreatableSelect from 'react-select/creatable';\nimport withMuiSkin from './withMuiSkin';\n\nexport default withMuiSkin(CreatableSelect);\n","import {MenuItem as MenuItem} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport ExpandedValueTooltip from '../../../ExpandedValueTooltip/ExpandedValueTooltip';\n\nexport default function Option(props) {\n const {\n innerProps,\n innerRef,\n children,\n isFocused,\n isSelected,\n selectProps: {classes},\n label\n } = props;\n\n return (\n <MenuItem\n className={classNames(classes.option, {[classes['option--selected']]: isSelected})}\n ref={innerRef}\n selected={isFocused}\n component=\"div\"\n {...innerProps}\n >\n <Checkbox color=\"primary\" checked={isSelected} />\n <ExpandedValueTooltip value={label}>\n <div className={classes['option--item']}>{children}</div>\n </ExpandedValueTooltip>\n </MenuItem>\n );\n}\n\nOption.propTypes = {\n children: PropTypes.node,\n innerProps: PropTypes.shape({\n id: PropTypes.string.isRequired,\n key: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n onMouseMove: PropTypes.func.isRequired,\n onMouseOver: PropTypes.func.isRequired,\n tabIndex: PropTypes.number.isRequired\n }).isRequired,\n innerRef: PropTypes.oneOfType([\n PropTypes.oneOf([null]),\n PropTypes.func,\n PropTypes.shape({\n current: PropTypes.any.isRequired\n })\n ]),\n isFocused: PropTypes.bool.isRequired,\n isSelected: PropTypes.bool.isRequired,\n label: PropTypes.string,\n selectProps: PropTypes.shape({\n classes: PropTypes.shape({\n option: PropTypes.string\n })\n })\n};\n","import Option from './Option';\n\nconst components = {\n Option\n};\n\nexport default components;\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {omit} from 'ramda';\nimport CreatableSelect from '../CreatableSelect';\nimport Select from '../Select';\nimport AsyncSelect from '../AsyncSelect';\nimport multiSelectComponents from './components';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {mergeClasses} from '../../../core/utils';\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n top: 6,\n left: 16\n },\n placeholder: (props) => ({\n display: !props.placeholder || props.label ? 'none' : undefined\n }),\n 'option--selected': {\n fontWeight: 400\n },\n clearIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n },\n dropdownIndicator: {\n padding: theme.spacing(1),\n margin: theme.spacing(0.25, 0.5)\n }\n}));\n\nlet id = 0;\nconst getInputId = () => `custom-select-${id++}`;\n\nfunction MultiSelect(props) {\n const {\n label,\n creatable,\n getOptions,\n loadingIndicator,\n components: componentsProp,\n classes: classesProp,\n styles: stylesProp,\n onChange: onChangeProp,\n onInputChange: onInputChangeProp,\n menuPlacement = 'auto',\n ...reactSelectProps\n } = props;\n\n const SelectComponent = creatable ? CreatableSelect : getOptions ? AsyncSelect : Select;\n\n const [inputValue, setInputValue] = useState('');\n const multiSelectClasses = useStyles(omit(['classes'], props));\n const inputId = getInputId();\n\n const components = {\n ...multiSelectComponents,\n ...componentsProp\n };\n\n const classes = mergeClasses(multiSelectClasses, classesProp);\n\n function handleInputChange(value, {action}) {\n onInputChangeProp(value, {action});\n if (action !== 'set-value') {\n setInputValue(value);\n }\n }\n\n function handleChange(value, actionMeta) {\n onChangeProp(value, actionMeta);\n if (actionMeta.action === 'create-option') {\n setInputValue('');\n onInputChangeProp('', {action: 'input-change'});\n }\n }\n\n const styles = {\n indicatorSeparator: (base) => ({\n ...base,\n margin: '10px 0'\n }),\n loadingIndicator: (base) => ({\n ...base,\n display: loadingIndicator ? base.display : 'none'\n }),\n loadingMessage: (base) => ({\n ...base,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif'\n }),\n ...stylesProp\n };\n\n const labelProps = label\n ? {\n inputId,\n TextFieldProps: {\n label,\n InputLabelProps: {\n htmlFor: inputId,\n shrink: props.value && props.value.length ? true : undefined,\n className: classes.label\n },\n ...props.TextFieldProps\n }\n }\n : {};\n\n return (\n <SelectComponent\n isMulti\n inputId={inputId}\n inputValue={inputValue}\n onChange={handleChange}\n onInputChange={handleInputChange}\n closeMenuOnSelect={false}\n hideSelectedOptions={false}\n classes={classes}\n components={components}\n styles={styles}\n menuPlacement={menuPlacement}\n loadOptions={getOptions}\n {...labelProps}\n {...reactSelectProps}\n />\n );\n}\n\nMultiSelect.defaultProps = {\n creatable: false,\n cacheOptions: true,\n components: {},\n classes: {},\n placeholder: '',\n loadingIndicator: false,\n onInputChange: () => {},\n onChange: () => {}\n};\n\nMultiSelect.propTypes = {\n /**\n * Async creatable multi select with optional placeholder, shrink-label, non-closing menu and options with checkboxes.\n * Based on react-select/creatable and react-select/async.\n * See react-select docs: https://react-select.com\n *\n * Below are listed only props used in the MultiSelect component. Check https://react-select.com/props first.\n * */\n\n /** Ability to create values. React-select/async-creatable is used internally */\n creatable: PropTypes.bool,\n /** True for enabling cache. Recommended. */\n cacheOptions: PropTypes.bool,\n defaultOptions: PropTypes.bool,\n /** Array of selected options. */\n value: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any\n })\n ),\n /** Way to receive updated values */\n onChange: PropTypes.func,\n /** Way to receive updated inputValue */\n onInputChange: PropTypes.func,\n /** Input placeholder. Will not be shown if the label prop is specified */\n placeholder: PropTypes.string,\n /** Floating label from @material-ui/core/TextField component */\n label: PropTypes.string,\n /** Enable to show default react-select's indicator */\n loadingIndicator: PropTypes.bool,\n /** You could redefine any of these components */\n components: PropTypes.shape({\n ClearIndicator: PropTypes.func,\n Control: PropTypes.func,\n DropdownIndicator: PropTypes.func,\n DownChevron: PropTypes.func,\n CrossIcon: PropTypes.func,\n Group: PropTypes.func,\n GroupHeading: PropTypes.func,\n IndicatorsContainer: PropTypes.func,\n IndicatorSeparator: PropTypes.func,\n Input: PropTypes.func,\n LoadingIndicator: PropTypes.func,\n Menu: PropTypes.func,\n MenuList: PropTypes.func,\n MenuPortal: PropTypes.func,\n LoadingMessage: PropTypes.func,\n NoOptionsMessage: PropTypes.func,\n MultiValue: PropTypes.func,\n MultiValueContainer: PropTypes.func,\n MultiValueLabel: PropTypes.func,\n MultiValueRemove: PropTypes.func,\n Option: PropTypes.func,\n Placeholder: PropTypes.func,\n SelectContainer: PropTypes.func,\n SingleValue: PropTypes.func,\n ValueContainer: PropTypes.func\n }),\n /** Classes are passed to mui skin components. Provided classes will be merged with existing ones. */\n classes: PropTypes.shape({\n control: PropTypes.string,\n valueContainer: PropTypes.string,\n multiValue: PropTypes.string,\n noOptionsMessage: PropTypes.string,\n singleValue: PropTypes.string,\n placeholder: PropTypes.string,\n menu: PropTypes.string,\n clearIndicator: PropTypes.string,\n dropdownIndicator: PropTypes.string,\n option: PropTypes.string,\n 'option--selected': PropTypes.string,\n label: PropTypes.string\n }),\n /**\n * React-select's way to customise style. Could be used to style default react-select components.\n * In other cases better to use classes and components props\n * */\n styles: PropTypes.shape({\n clearIndicator: PropTypes.func,\n container: PropTypes.func,\n control: PropTypes.func,\n dropdownIndicator: PropTypes.func,\n group: PropTypes.func,\n groupHeading: PropTypes.func,\n indicatorsContainer: PropTypes.func,\n indicatorSeparator: PropTypes.func,\n input: PropTypes.func,\n loadingIndicator: PropTypes.func,\n loadingMessage: PropTypes.func,\n menu: PropTypes.func,\n menuList: PropTypes.func,\n menuPortal: PropTypes.func,\n multiValue: PropTypes.func,\n multiValueLabel: PropTypes.func,\n multiValueRemove: PropTypes.func,\n noOptionsMessage: PropTypes.func,\n option: PropTypes.func,\n placeholder: PropTypes.func,\n singleValue: PropTypes.func,\n valueContainer: PropTypes.func\n }),\n /** Props from https://material-ui.com/api/text-field/ */\n TextFieldProps: PropTypes.object /* eslint-disable-line react/forbid-prop-types */,\n getOptions: PropTypes.func,\n menuPlacement: PropTypes.string,\n menuPortalTarget: PropTypes.object,\n getOptionValue: PropTypes.func,\n isSearchable: PropTypes.bool,\n inputRef: PropTypes.shape({current: PropTypes.object})\n};\n\nexport default MultiSelect;\n","import MultiSelect from './MultiSelect';\n\nexport default MultiSelect;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const customStyles = {\n input: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n loadingMessage: (currentStyles) => ({...currentStyles, fontSize: '14px'}),\n menuPortal: (currentStyles) => ({...currentStyles, zIndex: 1300})\n};\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n title: {\n paddingBottom: '10px',\n paddingLeft: '5px',\n fontSize: '14px'\n },\n dropDownInput: {\n width: '100%',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n borderTop: '4px'\n },\n option: {\n fontSize: '14px',\n height: '32px'\n }\n});\n","import React, {useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {defaultTo, pipe, pluck, prop} from 'ramda';\nimport classnames from 'classnames';\nimport {Typography as Typography} from '@material-ui/core';\nimport MultiSelect from '../ReactSelect/MultiSelect';\nimport DropdownIndicatorWithIconButton from '../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport {getAllUsersForTenant, User, utils} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {customStyles, useStyles} from './styles';\n\ntype Props = {\n selectedUsers: string[];\n onChange: (activities: string[]) => void;\n className?: string;\n disableUnderline?: boolean;\n};\n\nconst UserSelector = ({selectedUsers, onChange, className, disableUnderline}: Props) => {\n const styles = useStyles();\n\n const valueToOption = (value: string) => ({value, label: value});\n const prepareValues = (values: string[]) => values.map(valueToOption);\n const filterUsers = (inputValue) => (users) =>\n inputValue ? users.filter((username) => utils.strings.search(username, inputValue)) : users;\n\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n\n const cachedRequest = useRef<Promise<{array: User[]}>>();\n const getOptions = (inputValue) => {\n if (!cachedRequest.current) {\n cachedRequest.current = getAllUsersForTenant({tenant, servicesPath});\n }\n return cachedRequest.current.then(\n pipe(prop('array'), pluck('username'), filterUsers(inputValue), prepareValues)\n );\n };\n\n return (\n <div className={classnames(styles.root, className)}>\n <Typography className={styles.title} variant={'subtitle1'}>\n {i18n.text('User')}\n </Typography>\n <MultiSelect\n value={prepareValues(selectedUsers)}\n onChange={pipe(defaultTo([]), pluck('value'), onChange)}\n defaultOptions={true}\n getOptions={getOptions}\n TextFieldProps={{\n InputProps: {disableUnderline},\n className: styles.dropDownInput\n }}\n components={{\n DropdownIndicator: DropdownIndicatorWithIconButton\n }}\n styles={customStyles}\n classes={styles}\n menuPortalTarget={document.body}\n />\n </div>\n );\n};\n\nexport default UserSelector;\n","export enum ActivityTypes {\n MODEL_UPDATED = 'MODEL_UPDATED',\n ENTITY_REMOVED = 'ENTITY_REMOVED',\n ENTITY_CREATED = 'ENTITY_CREATED',\n ENTITY_CHANGED = 'ENTITY_CHANGED',\n ENTITIES_MERGED = 'ENTITIES_MERGED',\n ENTITIES_SPLITTED = 'ENTITIES_SPLITTED',\n ENTITY_LOST_MERGE = 'ENTITY_LOST_MERGE',\n RELATIONSHIP_CREATED = 'RELATIONSHIP_CREATED',\n RELATIONSHIP_REMOVED = 'RELATIONSHIP_REMOVED',\n RELATIONSHIP_CHANGED = 'RELATIONSHIP_CHANGED',\n POTENTIAL_MATCHES_FOUND = 'POTENTIAL_MATCHES_FOUND',\n NOT_MATCHES_SET = 'NOT_MATCHES_SET',\n NOT_MATCHES_RESET = 'NOT_MATCHES_RESET',\n PERIODIC_TASK_SCHEDULED = 'PERIODIC_TASK_SCHEDULED',\n ENTITIES_MERGED_MANUALLY = 'ENTITIES_MERGED_MANUALLY',\n POTENTIAL_MATCHES_REMOVED = 'POTENTIAL_MATCHES_REMOVED',\n ENTITIES_MERGED_ON_THE_FLY = 'ENTITIES_MERGED_ON_THE_FLY',\n USER_LOGIN = 'USER_LOGIN',\n USER_LOGOUT = 'USER_LOGOUT',\n USER_SEARCH = 'USER_SEARCH',\n USER_PROFILE_VIEW = 'USER_PROFILE_VIEW',\n COMMENT_ADDED = 'COMMENT_ADDED',\n COMMENT_UPDATED = 'COMMENT_UPDATED',\n COMMENT_DELETED = 'COMMENT_DELETED',\n ANALYTICS_ATTRIBUTES_CHANGED = 'ANALYTICS_ATTRIBUTES_CHANGED',\n SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE = 'SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE',\n GROUP_CREATED = 'GROUP_CREATED',\n GROUP_REMOVED = 'GROUP_REMOVED',\n GROUP_CHANGED = 'GROUP_CHANGED'\n}\n","import {groupBy, ifElse, map, path, pipe, propOr, values, is, isNil, includes} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ActivityData, ActivityTypes, DeltaValue} from '../types';\n\nconst getItemDataType = path(['data', 'type']);\n\nexport const getActivityType = (activity: ActivityData) => {\n const {items, label} = activity;\n const [firstItem] = items || [];\n return getItemDataType(firstItem) || label;\n};\n\nexport const isValidActivityType = (type: string): boolean => pipe(values, includes(type))(ActivityTypes);\n\nexport const isValidActivity = pipe(getActivityType, isValidActivityType);\n\nexport const splitActivityByType = (activity: ActivityData) => {\n return pipe(\n propOr([], 'items'),\n groupBy(getItemDataType),\n values,\n ifElse(\n ({length}) => length > 1,\n map((items) => ({\n ...activity,\n items,\n itemsTotal: items.length\n })),\n () => [activity]\n )\n )(activity);\n};\n\nexport const stringifyDeltaValue = (delta: string | Record<string, DeltaValue[]> | DeltaValue | DeltaValue[]) => {\n if (isNil(delta)) {\n return '';\n } else if (typeof delta === 'string') {\n return delta;\n } else if (Array.isArray(delta)) {\n return delta.map(stringifyDeltaValue).join(', ');\n } else if (is(Object, delta)) {\n return 'value' in delta ? stringifyDeltaValue(delta.value) : stringifyDeltaValue(Object.values(delta));\n } else {\n return delta.toString();\n }\n};\n\nexport const getActivityLabel = (type: ActivityTypes) => {\n const labels = {\n [ActivityTypes.COMMENT_ADDED]: i18n.text('Comment added'),\n [ActivityTypes.COMMENT_DELETED]: i18n.text('Comment deleted'),\n [ActivityTypes.COMMENT_UPDATED]: i18n.text('Comment updated'),\n [ActivityTypes.ENTITIES_MERGED]: i18n.text('Profile merged'),\n [ActivityTypes.ENTITIES_MERGED_MANUALLY]: i18n.text('Profile merged manually'),\n [ActivityTypes.ENTITIES_MERGED_ON_THE_FLY]: i18n.text('Profile merged on the fly'),\n [ActivityTypes.ENTITIES_SPLITTED]: i18n.text('Profile un-merged'),\n [ActivityTypes.ENTITY_CHANGED]: i18n.text('Profile updated'),\n [ActivityTypes.ENTITY_CREATED]: i18n.text('Profile created'),\n [ActivityTypes.ENTITY_LOST_MERGE]: i18n.text('Profile lost merge'),\n [ActivityTypes.ENTITY_REMOVED]: i18n.text('Profile removed'),\n [ActivityTypes.GROUP_CHANGED]: i18n.text('Group updated'),\n [ActivityTypes.GROUP_CREATED]: i18n.text('Group created'),\n [ActivityTypes.GROUP_REMOVED]: i18n.text('Group removed'),\n [ActivityTypes.MODEL_UPDATED]: i18n.text('Model was updated'),\n [ActivityTypes.NOT_MATCHES_RESET]: i18n.text('Not matches reset'),\n [ActivityTypes.NOT_MATCHES_SET]: i18n.text('Not matches set'),\n [ActivityTypes.PERIODIC_TASK_SCHEDULED]: i18n.text('Periodic task was scheduled'),\n [ActivityTypes.POTENTIAL_MATCHES_FOUND]: i18n.text('Potential matches found'),\n [ActivityTypes.POTENTIAL_MATCHES_REMOVED]: i18n.text('Potential matches removed'),\n [ActivityTypes.RELATIONSHIP_CHANGED]: i18n.text('Relationship updated'),\n [ActivityTypes.RELATIONSHIP_CREATED]: i18n.text('Relationship created'),\n [ActivityTypes.RELATIONSHIP_REMOVED]: i18n.text('Relationship removed'),\n [ActivityTypes.USER_LOGIN]: i18n.text('Logged in'),\n [ActivityTypes.USER_LOGOUT]: i18n.text('Logged out'),\n [ActivityTypes.USER_PROFILE_VIEW]: i18n.text('Profile viewed'),\n [ActivityTypes.USER_SEARCH]: i18n.text('Searched'),\n [ActivityTypes.ANALYTICS_ATTRIBUTES_CHANGED]: i18n.text('Analytics attribute changed'),\n [ActivityTypes.SFDC_CONNECTOR_SYNCHRONIZATION_ISSUE]: i18n.text('SFDC connector synchronization issue')\n };\n return labels[type] || '';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n flex: 1\n },\n dropdownIndicator: {\n transition: 'transform .15s ease'\n },\n inputRoot: {\n fontSize: '14px',\n height: 46\n },\n input: {\n padding: '0 12px 0'\n },\n dateOptionLabel: {\n minWidth: '100px'\n },\n paper: {\n minWidth: '112px'\n }\n});\n","import React, {useCallback, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {isNil} from 'ramda';\nimport {DataTypes, formatDataTypeValue} from '@reltio/mdm-sdk';\n\nimport {TextField as TextField} from '@material-ui/core';\nimport {Menu as Menu} from '@material-ui/core';\nimport DropdownIndicatorWithIconButton from '../../commonReactSelectComponents/DropdownIndicatorWithIconButton';\nimport DateRangePicker from '../../DateRangePicker/DateRangePicker';\nimport {useStyles} from './styles';\n\ntype DateValues = [Date, Date];\ntype Props = {\n values: DateValues;\n onChange: (values: DateValues) => void;\n onFocus?: () => void;\n};\n\nconst localeFormat = moment.localeData().longDateFormat('L');\n\nconst formatValue = (value: Date, placeholder: string) => {\n return isNil(value)\n ? `${placeholder}`\n : `${formatDataTypeValue({dataTypeDefinition: {type: DataTypes.TYPE_ACTIVENESS_DATE}}, value)}`;\n};\n\nconst CustomDateRangeEditor = ({values, onChange, onFocus}: Props) => {\n const placeholder = localeFormat;\n const inputRef = useRef(null);\n const [open, setOpen] = useState(false);\n const styles = useStyles();\n\n const onApply = (values: DateValues) => {\n onChange(values);\n setOpen(false);\n };\n\n const handleToggle = useCallback(() => {\n setOpen((open) => !open);\n onFocus();\n }, [onFocus]);\n\n const onCancel = () => {\n setOpen(false);\n };\n\n return (\n <div className={styles.root}>\n <TextField\n fullWidth\n value={values.map((value) => formatValue(value, placeholder)).join(' \\u2014 ')}\n onClick={handleToggle}\n variant=\"filled\"\n ref={inputRef}\n InputProps={{\n endAdornment: (\n <DropdownIndicatorWithIconButton\n selectProps={{classes: styles, menuIsOpen: open}}\n innerProps={{}}\n />\n ),\n disableUnderline: isNil(values),\n readOnly: true,\n classes: {\n root: styles.inputRoot,\n input: styles.input\n }\n }}\n InputLabelProps={{\n shrink: false\n }}\n placeholder={i18n.text(`${placeholder} \\u2014 ${placeholder}`)}\n />\n <Menu\n variant=\"menu\"\n open={open}\n autoFocus={false}\n classes={{paper: styles.paper}}\n anchorEl={inputRef.current}\n onClose={onCancel}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n elevation={2}\n getContentAnchorEl={null}\n MenuListProps={{\n autoFocusItem: open,\n style: {width: '100%'}\n }}\n >\n <DateRangePicker\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values={values}\n onCancel={onCancel}\n onApply={onApply}\n type={DataTypes.TYPE_ACTIVENESS_DATE}\n />\n </Menu>\n </div>\n );\n};\n\nexport default CustomDateRangeEditor;\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type ReltioGridLayoutItem = {\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n isStatic?: boolean;\n autosizing?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType: AttributeType;\n entityTypeUri: string;\n fieldName: string;\n groupName: string;\n title: string;\n uri: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n","import React from 'react';\nimport {AttributesView} from '@reltio/components';\nimport {AttributeViewConfig} from '../../types';\n\ntype ProfileAttributesViewProps = {\n config: AttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileAttributesView = ({className, config}: ProfileAttributesViewProps) => {\n return (\n <AttributesView\n className={className}\n caption={config.caption}\n excludeUris={config.excludeUris}\n includeUris={config.includeUris}\n attributesCount={config.attributesCount}\n pinnedAttributes={config.pinnedAttributes}\n />\n );\n};\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const SingleAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n showInactive?: boolean;\n toggleShowInactive?: (checked: boolean) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n attributeType: AttributeType;\n totalNonVisibleValues: number;\n nonVisibleValues: AttributeValue[];\n }>(null);\n\nSingleAttributeContext.displayName = 'SingleAttributeContext';\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n triggerButton: {\n minWidth: 0,\n color: 'rgba(0,0,0,0.54)',\n width: '36px'\n },\n popupContent: {\n paddingTop: '19px',\n paddingBottom: '23px',\n paddingLeft: '23px',\n paddingRight: '23px',\n maxWidth: '180px',\n width: '40%'\n },\n checkboxControlRoot: {\n marginTop: '6px',\n marginLeft: '-12px'\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\n\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n const {showInactive, toggleShowInactive} = useContext(SingleAttributeContext);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n return (\n <>\n <Button ref={buttonRef} classes={{root: classnames(styles.triggerButton, className)}} onClick={togglePopup}>\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n root: styles.checkboxControlRoot,\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive}\n onChange={(e) => toggleShowInactive(e.target.checked)}\n />\n }\n label={i18n.text('Show inactive values')}\n />\n </Popover>\n </>\n );\n};\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0 4px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n },\n ovIcon: {\n marginTop: '2px',\n marginLeft: '5px'\n }\n}));\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, HideOnShrink, ExpandableSearchInput, VerticalDivider, OvIcon} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport FilterButton from '../FilterButton/FilterButton';\nimport {useStyles} from './styles';\n\ntype Props = {\n caption: string;\n totalVisibleValues: number;\n showInactiveValuesMenu: boolean;\n};\n\nexport const SingleAttributeHeader = ({caption, totalVisibleValues, showInactiveValuesMenu}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, setSearchQuery, setPage, totalNonVisibleValues, nonVisibleValues, attributeType} = useContext(\n SingleAttributeContext\n );\n\n const handleChangeSearchQuery = (query: string) => {\n setSearchQuery(query);\n setPage(0);\n };\n\n return (\n <FacetViewHeader title={i18n.text(caption)} className={styles.root}>\n <HideOnShrink widthToHide={500}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {i18n.number(totalVisibleValues)}{' '}\n {totalVisibleValues === 1 ? i18n.text('item') : i18n.text('items')}\n </Typography>\n </HideOnShrink>\n {\n <OvIcon\n nonOvTotal={totalNonVisibleValues}\n className={styles.ovIcon}\n nonOvValues={nonVisibleValues}\n attributeType={attributeType}\n />\n }\n <ExpandableSearchInput query={searchQuery} onChange={handleChangeSearchQuery} />\n {showInactiveValuesMenu && <FilterButton />}\n </FacetViewHeader>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 -16px 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n ovFalse: theme.inactive,\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px 8px 0'\n }\n}));\n","import {equals, filter, identity, is, lensPath, omit, over, pipe, unless} from 'ramda';\nimport {\n AttributeValue,\n cleanAttributesWith,\n Entity,\n findAttributeValuesByTypeUri,\n getAttributeSource,\n getLastUriPart,\n isOv,\n Metadata,\n utils\n} from '@reltio/mdm-sdk';\n\nexport const getAttributeNameFromAttributeUri = getLastUriPart;\n\nexport const search = (value: AttributeValue['value'], searchQuery: string) => {\n switch (typeof value) {\n case 'object':\n return Object.values(value).some((value: AttributeValue[]) => {\n return value.some(({value}) => {\n return search(value, searchQuery);\n });\n });\n default:\n return utils.strings.search(String(value), searchQuery);\n }\n};\n\ntype Config = {\n metadata: Metadata;\n entity: Entity;\n attributeTypeUri: string;\n defaultMaxValues?: number;\n offset?: number;\n searchQuery?: string;\n};\n\nexport const getPagedLocalEntity = async ({\n metadata,\n entity,\n attributeTypeUri,\n defaultMaxValues = Infinity,\n offset = 0,\n searchQuery = ''\n}: Config) => {\n const values = pipe(\n findAttributeValuesByTypeUri,\n filter(({value}) => search(value, searchQuery))\n )(metadata, entity, attributeTypeUri);\n const ovValues = filter(isOv, values);\n\n return {\n [getAttributeSource(attributeTypeUri)]: {\n [getAttributeNameFromAttributeUri(attributeTypeUri)]: ovValues.slice(offset, offset + defaultMaxValues),\n paging: {\n [attributeTypeUri]: {\n totalOvValues: ovValues.length,\n totalValues: values.length\n }\n }\n }\n };\n};\n\nexport const areValuesEqual = (value1: AttributeValue, value2: AttributeValue): boolean => {\n const cleanser =\n is(Object, value1.value) || is(Object, value2.value)\n ? over(\n lensPath(['value']),\n cleanAttributesWith({\n valueTransformer: unless(isOv, omit(['value'])),\n deleteEmptyComplex: true\n })\n )\n : identity;\n return equals(cleanser(value1), cleanser(value2));\n};\n","import React, {useCallback, useContext, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {always, cond, map, pathOr, pipe, prop, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport classnames from 'classnames';\nimport {CardinalityMessage, EditableAttribute, ErrorMessage, ViewIdContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n AttributeValue,\n checkCanCreateAttribute,\n createNewAttribute,\n Entity,\n getAttributeOwnError,\n getAttributePagerActiveTypeErrorMessage,\n getAttributeSource,\n isComplexAttribute,\n isEmptyValue,\n isOv,\n isTempUri,\n AttributeItem\n} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\nimport {areValuesEqual} from '../../../hooks/helpers';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n parentUri: string;\n showInactive: boolean;\n noDataText: string;\n};\n\nconst emptyArray = [];\n\nexport const SingleAttributeEditableContent = ({values, attributeType, parentUri, showInactive, noDataText}: Props) => {\n const styles = useStyles();\n\n const {uri: attributeTypeUri, required: isRequired, cardinality, name} = attributeType;\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, parentUri, attributeType)\n );\n const errorMessage = useSelector((state) =>\n getAttributePagerActiveTypeErrorMessage(parentUri, attributeType, mdmModule.selectors.getProfileErrors(state))\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n const attributeSource = getAttributeSource(attributeType);\n const entityValuesUris: string[] = pipe(pathOr(emptyArray, [attributeSource, name]), map(prop('uri')))(entity);\n const modifiedEntityValues: AttributeValue[] = pathOr(emptyArray, [attributeSource, name], modifiedEntity);\n const modifiedEntityValuesUris: string[] = modifiedEntityValues.map(prop('uri'));\n const showEmptyEditors = isTempUri(entity.uri);\n\n const emptyEditorValue = useRef<AttributeValue>(\n createNewAttribute({\n parentUri,\n attributeType\n })\n );\n\n const isModifiedEntityValuesEmpty = isEmptyValue(modifiedEntityValues);\n const showEmpty = isRequired && isModifiedEntityValuesEmpty;\n\n const newValues = showEmpty\n ? [emptyEditorValue.current]\n : modifiedEntityValues.filter(pipe(prop('uri'), isTempUri));\n\n const onAddAttributes = useCallback(\n (params: AttributeItem[]) =>\n pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n const onAdd = useCallback(() => {\n const attribute: AttributeItem = {\n parentUri,\n attributeType\n };\n\n return onAddAttributes(\n showEmpty && !isComplexAttribute(attributeType.type) ? [attribute, attribute] : [attribute]\n );\n }, [onAddAttributes, parentUri, attributeType, showEmpty]);\n\n const canCreate = checkCanCreateAttribute({attributeType, mode});\n\n const commonProps = {\n attributeType: attributeType,\n errors,\n crosswalks: modifiedEntity.crosswalks,\n mode,\n onAddAttributes,\n onChangeAttribute,\n onDeactivateError,\n showNonOv: showInactive\n };\n const isEmptyAttributeList = newValues.length === 0 && values.length === 0;\n return (\n <div>\n <CardinalityMessage cardinality={cardinality} />\n <ErrorMessage message={errorMessage} />\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {newValues.map((value, idx) => (\n <EditableAttribute\n key={value.uri}\n {...commonProps}\n attributeValue={value}\n lazy={showEmpty && !isRequired}\n showEmptyEditors={showEmptyEditors}\n ownError={getAttributeOwnError(value, idx, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n />\n ))}\n {newValues.length > 0 && values.length > 0 && <Divider className={styles.divider} />}\n {values.map((originalValue) => {\n const modifiedEntityValue = modifiedEntityValues.find(propEq('uri', originalValue.uri));\n const value = modifiedEntityValue || originalValue;\n const deleted = entityValuesUris.includes(value.uri) && !modifiedEntityValuesUris.includes(value.uri);\n const edited = !deleted && modifiedEntityValue && !areValuesEqual(modifiedEntityValue, originalValue);\n const state = cond([\n [always(deleted), always('deleted')],\n [always(edited), always('edited')]\n ])();\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <EditableAttribute\n {...commonProps}\n attributeValue={value}\n ownError={getAttributeOwnError(value, null, attributeTypeUri, errors)}\n onDeleteAttribute={onDeleteAttribute}\n state={state}\n />\n </div>\n );\n })}\n {isEmptyAttributeList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {inactive: Record<string, number>}) => ({\n ovFalse: theme.inactive\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {ReadOnlyAttribute} from '@reltio/components';\nimport {AttributeType, AttributeValue, isOv} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n values: AttributeValue[];\n attributeType: AttributeType;\n showInactive: boolean;\n};\n\nexport const SingleAttributeReadableContent = ({values, attributeType, showInactive}: Props) => {\n const styles = useStyles();\n\n return (\n <>\n {values.map((value) => {\n return (\n <div key={value.uri} className={classnames({[styles.ovFalse]: !isOv(value)})}>\n <ReadOnlyAttribute\n attributeValue={value}\n attributeType={attributeType}\n showNonOv={showInactive}\n />\n </div>\n );\n })}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n },\n pagination: {\n flexGrow: 0,\n flexShrink: 0\n }\n}));\n","import React, {useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {PivotingAttribute} from '@reltio/mdm-sdk';\nimport {BasicView, BasicTablePagination, LinearLoadIndicator, PivotingAttributeContext} from '@reltio/components';\nimport mdm from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {SingleAttributeViewConfig} from '../../../../types';\nimport {SingleAttributeHeader} from '../SingleAttributeHeader/SingleAttributeHeader';\nimport {SingleAttributeEditableContent} from '../SingleAttributeEditableContent/SingleAttributeEditableContent';\nimport {SingleAttributeContext} from '../../contexts/SingleAttributeContext';\nimport {SingleAttributeReadableContent} from '../SingleAttributeReadableContent/SingleAttributeReadableContent';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const SingleAttributeView = ({config, className}: Props) => {\n const {caption, max, showInactiveValuesMenu} = config;\n\n const styles = useStyles();\n\n const {values, totalVisibleValues, page, setPage, isLoading, hasPaging, attributeType, showInactive} = useContext(\n SingleAttributeContext\n );\n\n const entityUri = useSelector(mdm.selectors.getEntityUri);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n const pivotingAttributes: PivotingAttribute[] = useSelector(mdm.selectors.getPivotingAttributes);\n\n const hasValues = values.length !== 0;\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const renderContent = () => {\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (attributeType) {\n if (isViewMode && hasValues) {\n const props = {\n values,\n attributeType,\n showInactive\n };\n return <SingleAttributeReadableContent {...props} />;\n } else if (isEditableMode) {\n const props = {\n values,\n attributeType,\n parentUri: entityUri,\n showInactive,\n noDataText\n };\n return <SingleAttributeEditableContent {...props} />;\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n\n return (\n <PivotingAttributeContext.Provider value={pivotingAttributes}>\n <BasicView className={classnames(styles.root, className)}>\n <SingleAttributeHeader\n totalVisibleValues={totalVisibleValues}\n caption={caption}\n showInactiveValuesMenu={showInactiveValuesMenu}\n />\n <Box className={styles.content}>{renderContent()}</Box>\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n page={page}\n rowsPerPage={max}\n rowsPerPageOptions={[]}\n onChangePage={setPage}\n classes={{root: styles.pagination}}\n />\n )}\n </BasicView>\n </PivotingAttributeContext.Provider>\n );\n};\n","import {useCallback, useState, useEffect, useMemo, useRef} from 'react';\nimport {ifElse, prop, always, has, pathOr, path, partition, propEq} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n isDataTenantEntity,\n getPagedEntity,\n getAttributeSource,\n AttributeValue,\n SearchFilter,\n findAttributeTypeByUri,\n isReadableAttribute,\n isTempUri,\n isOv,\n findAttributeValues,\n isFirstLevelAttributeUri\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useSafePromise, useDidUpdateEffect} from '@reltio/components';\nimport {getPagedLocalEntity, getAttributeNameFromAttributeUri} from './helpers';\nimport {SingleAttributeViewConfig} from '../../types';\n\ntype Params = {\n filters?: SearchFilter[];\n searchQuery?: string;\n sorting?: {\n field: string;\n order: string;\n };\n page: number;\n showInactive: boolean;\n};\n\nexport const useSingleAttributeLoader = (\n config: SingleAttributeViewConfig,\n params: Params,\n canShowHistoryDiff: boolean\n) => {\n const {attributeUri, max = 15} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const [values, setValues] = useState([]);\n const [paging, setPaging] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const safePromise = useSafePromise();\n const attributeValuesRef = useRef<AttributeValue[]>(null);\n\n const dispatch = useDispatch();\n const apiPath = useSelector(mdm.selectors.getApiPath);\n const tenant = useSelector(mdm.selectors.getTenant);\n const entitySelector = canShowHistoryDiff ? mdm.selectors.getEntityWithDiff : mdm.selectors.getEntityWithoutDiff;\n const entity = useSelector(entitySelector);\n const isViewMode = useSelector(mdm.selectors.getIsViewMode);\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const diff = useSelector(mdm.selectors.getHistoryDiff);\n\n const parentUri = entity.uri;\n const attributeTypeName = getAttributeNameFromAttributeUri(attributeUri);\n const attributeTypeSource = getAttributeSource(attributeUri);\n attributeValuesRef.current = findAttributeValues(entity, parentUri, attributeTypeName);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const {globalFilter} = useSelector(mdm.selectors.getGlobalSearchRequestOptions);\n const {showInactive} = params;\n const loadAttributes = useCallback(() => {\n if (\n attributeType &&\n isReadableAttribute(attributeType) &&\n !isTempUri(parentUri) &&\n isFirstLevelAttributeUri(attributeUri)\n ) {\n setIsLoading(true);\n const {page, showInactive, ...rest} = params;\n const request = isDataTenantEntity(entity) || isHistoryModeEnabled ? getPagedLocalEntity : getPagedEntity;\n safePromise(\n request({\n metadata,\n entity,\n apiPath,\n tenant,\n parentUri,\n defaultMaxValues: max,\n attributeTypeUri: attributeUri,\n offset: max * page,\n globalFilter,\n options: showInactive ? '' : undefined,\n ...rest\n })\n )\n .then((response) => {\n const attributes = path([attributeTypeSource], response);\n const values: AttributeValue[] = pathOr([], [attributeTypeName], attributes);\n if (!isHistoryModeEnabled) {\n dispatch(\n profile.actions.processNextPageOfAttributeValues({\n parentUri,\n attributeTypeUri: attributeUri,\n attributeTypeName,\n values\n })\n );\n }\n setValues(\n values.map((loadedValue) => {\n const valueFromEntity = attributeValuesRef.current?.find(propEq('uri', loadedValue.uri));\n return valueFromEntity || loadedValue;\n })\n );\n setPaging(path(['paging', attributeUri], attributes));\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n setValues([]);\n setPaging(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n apiPath,\n parentUri,\n tenant,\n attributeUri,\n max,\n metadata,\n params,\n globalFilter,\n attributeType,\n isHistoryModeEnabled,\n diff\n ]);\n\n useEffect(() => {\n loadAttributes();\n }, [loadAttributes]);\n\n useDidUpdateEffect(() => {\n if (isViewMode) {\n loadAttributes();\n }\n }, [isViewMode]);\n const partitionByOv = partition(isOv);\n const [, nonOvValues] = partitionByOv(attributeValuesRef.current || []);\n const nonVisibleValues = showInactive ? [] : nonOvValues;\n const totalProp = showInactive ? 'totalValues' : 'totalOvValues';\n const totalVisibleValues = ifElse(has(totalProp), prop(totalProp), always(values.length))(paging);\n const hasPaging = max < totalVisibleValues;\n const totalNonVisibleValues = paging?.totalValues\n ? paging.totalValues - totalVisibleValues\n : nonVisibleValues.length;\n return {\n values,\n isLoading,\n hasPaging,\n totalVisibleValues,\n attributeType,\n totalNonVisibleValues,\n nonVisibleValues\n };\n};\n","import React from 'react';\nimport {RelationsViewState} from '../hooks/useRelationsState';\n\nexport const RelationsViewStateContext = React.createContext<RelationsViewState>(null);\n\nRelationsViewStateContext.displayName = 'RelationsViewStateContext';\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nconst popupHorizontalPadding = '23px';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n button: {\n color: theme.palette.text.secondary,\n width: '36px',\n minWidth: '36px'\n },\n popupContent: {\n padding: `19px ${popupHorizontalPadding}`\n },\n checkboxControlLabel: {\n fontSize: '0.85rem'\n },\n checkboxControlCheckbox: {\n marginRight: '5px'\n },\n divider: {\n backgroundColor: 'rgba(0,0,0,0.1)',\n margin: `19px -${popupHorizontalPadding}`\n },\n title: {\n marginBottom: '30px'\n },\n sortControls: {\n display: 'flex',\n alignItems: 'center'\n },\n sortSelectorRoot: {\n flex: 1,\n padding: '13px 16px',\n fontSize: '0.85rem'\n },\n sortSelectorMenuItem: {\n fontSize: '0.85rem'\n },\n sortOrderButton: {\n flexShrink: 0,\n margin: '0 8px 0 7px'\n }\n}));\n","import React, {useContext, useRef, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {isEmptyValue} from '@reltio/mdm-sdk';\nimport {DropDownEditor, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {Popover as Popover} from '@material-ui/core';\nimport {FormControlLabel as FormControlLabel} from '@material-ui/core';\nimport {Checkbox as Checkbox} from '@material-ui/core';\nimport FilterIcon from '@material-ui/icons/FilterList';\nimport {Button as Button} from '@material-ui/core';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport {RelationsViewStateContext} from '../../../contexts/RelationsViewStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst FilterButton = ({className}: Props) => {\n const styles = useStyles();\n const buttonRef = useRef();\n const {\n showInactive,\n toggleShowInactive,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions\n } = useContext(RelationsViewStateContext);\n const [isOpen, setIsOpen] = useState(false);\n\n const togglePopup = () => setIsOpen((open) => !open);\n\n const hasSortOptions = !isEmptyValue(sortOptions);\n\n const isAsc = sortOrder === 'asc';\n\n return (\n <>\n <Button\n ref={buttonRef}\n classes={{\n root: classnames(styles.button, className)\n }}\n onClick={togglePopup}\n >\n <FilterIcon />\n </Button>\n <Popover\n open={isOpen}\n classes={{paper: styles.popupContent}}\n anchorEl={buttonRef.current}\n onClose={togglePopup}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n <FormControlLabel\n classes={{\n label: styles.checkboxControlLabel\n }}\n control={\n <Checkbox\n className={styles.checkboxControlCheckbox}\n checked={showInactive || false}\n onChange={toggleShowInactive}\n />\n }\n label={i18n.text('Show inactive Relationships')}\n />\n {hasSortOptions && (\n <>\n <Divider className={styles.divider} />\n <Typography className={styles.title} variant=\"h6\">\n {i18n.text('Sort by')}\n </Typography>\n <div className={styles.sortControls}>\n <DropDownEditor\n entries={sortOptions}\n TextFieldProps={{variant: 'filled'}}\n classes={{\n root: styles.sortSelectorRoot,\n menuItem: styles.sortSelectorMenuItem\n }}\n fullWidth\n disableUnderline\n value={sortOption}\n onChange={changeSortOption}\n MenuProps={{\n getContentAnchorEl: null,\n anchorOrigin: {vertical: 'bottom', horizontal: 'left'}\n }}\n />\n <SmallIconButtonWithTooltip\n tooltipTitle={isAsc ? i18n.text('Ascending') : i18n.text('Descending')}\n icon={isAsc ? ArrowUpwardIcon : ArrowDownwardIcon}\n onClick={toggleSortOrder}\n className={styles.sortOrderButton}\n size=\"L\"\n />\n </div>\n </>\n )}\n </Popover>\n </>\n );\n};\n\nFilterButton.displayName = 'FilterButton';\n\nexport default FilterButton;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n header: {\n padding: '0 6px 0 16px'\n },\n totalCaption: {\n lineHeight: '19px',\n fontSize: '14px',\n letterSpacing: '0.24px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px',\n justifyContent: 'flex-start',\n paddingTop: '16px',\n paddingBottom: '13px'\n }\n});\n","import React from 'react';\nimport {RelationsViewConfig} from '../../../types';\n\nexport const ImportDTContext = React.createContext<{\n reloadRelations: () => void;\n config: Pick<RelationsViewConfig, 'content' | 'importFromDT' | 'maxDtssImport'>;\n }>(null);\n","import {useSelector, useDispatch} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {useCallback, useContext, useEffect, useState} from 'react';\nimport {getRequestErrorMessage, hasNonImportedRelations, importDTConnections, isTempUri} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {ImportDTContext} from '../../../../contexts/ImportDTContext';\nimport i18n from 'ui-i18n';\n\nconst MAX = Math.pow(2, 31) - 1;\ntype Tenant = {id: string; label: string};\n\nexport const useImportFromDTLoader = () => {\n const dataTenants: Array<Tenant> = useSelector(mdmModule.selectors.getDataTenants);\n const dispatch = useDispatch();\n const {config, reloadRelations} = useContext(ImportDTContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const [tenants, setTenants] = useState<Array<Tenant>>([]);\n const [selectedTenant, setSelectedTenant] = useState<Tenant>(null);\n const dtssPath = useSelector(mdmModule.selectors.getDtssPath);\n const customerTenant = useSelector(mdmModule.selectors.getTenant);\n const content = [{...config.content, offset: 0, max: config.maxDtssImport ?? MAX}];\n\n const checkHasNonImportedConnections = useCallback(() => {\n setTenants([]);\n if (config.importFromDT && !isTempUri(entityUri)) {\n Promise.all(\n (dataTenants || []).map((tenant) =>\n hasNonImportedRelations({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: tenant.id\n }).then(({hasNonImportedConnections}) => ({\n ...tenant,\n hasNonImportedConnections\n }))\n )\n )\n .then((modifiedTenants) => modifiedTenants.filter((tenant) => tenant.hasNonImportedConnections))\n .then(setTenants);\n }\n }, [entityUri, dtssPath, customerTenant, config, dataTenants]);\n\n const onConfirmImport = useCallback(() => {\n importDTConnections({\n entityUri,\n content,\n dtssPath,\n customerTenant,\n dataTenant: selectedTenant.id\n })\n .then(() => {\n reloadRelations();\n checkHasNonImportedConnections();\n })\n .catch((error) =>\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))))\n );\n setSelectedTenant(null);\n }, [\n entityUri,\n dtssPath,\n customerTenant,\n config,\n checkHasNonImportedConnections,\n reloadRelations,\n selectedTenant,\n setSelectedTenant\n ]);\n\n useEffect(() => {\n checkHasNonImportedConnections();\n }, [checkHasNonImportedConnections]);\n const onCancelConfirmation = useCallback(() => setSelectedTenant(null), []);\n const onImportClick = useCallback((tenant: Tenant) => setSelectedTenant(tenant), []);\n return {\n tenants,\n selectedTenant,\n onConfirmImport,\n onCancelConfirmation,\n onImportClick\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n tenant: {\n backgroundColor: '#0000EE',\n cursor: 'pointer',\n position: 'absolute',\n top: '8px',\n left: '22px',\n width: '10px',\n height: '10px',\n color: 'white',\n fontSize: '10px',\n fontWeight: 'bold',\n userSelect: 'text',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n button: {\n position: 'relative'\n },\n badge: {\n fontSize: '10px',\n height: '14px',\n minWidth: '14px',\n width: '14px',\n fontWeight: 'bold',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px',\n top: '4px'\n }\n}));\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {Badge as Badge} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ninterface Props {\n label: number | string;\n}\n\nexport const MultipleImportIcon = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Badge\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n badgeContent={label}\n >\n <CloudDownloadIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport {DropDownMenuButton, SmallIconButtonWithTooltip} from '@reltio/components';\nimport {useImportFromDTLoader} from './hooks/useImportFromDTLoader';\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {ConfirmationDialog} from '@reltio/components';\nimport {MultipleImportIcon} from './MultipleImportIcon';\n\nexport const ImportFromDT = () => {\n const {tenants, selectedTenant, onConfirmImport, onCancelConfirmation, onImportClick} = useImportFromDTLoader();\n const styles = useStyles();\n const oneTenant = tenants.length === 1;\n const labelOnButton = oneTenant\n ? tenants[0].label.indexOf('DT:') === 0\n ? tenants[0].label[3]\n : tenants[0].label[0]\n : tenants.length;\n return (\n <>\n {!!tenants.length && (\n <>\n {oneTenant ? (\n <div className={styles.button}>\n <SmallIconButtonWithTooltip\n size={'L'}\n icon={CloudDownloadIcon}\n tooltipTitle={i18n.text('Import connections from ${label}', {label: tenants[0].label})}\n onClick={() => onImportClick(tenants[0])}\n />\n <div className={classnames(styles.tenant)}>{labelOnButton}</div>\n </div>\n ) : (\n <DropDownMenuButton\n menuId={'importDT-table-actions'}\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n tooltipTitle: i18n.text('Import connections'),\n size: 'L',\n // eslint-disable-next-line react/display-name\n icon: () => <MultipleImportIcon label={labelOnButton} />\n }}\n menuItems={tenants.map((tenant) => ({\n onClick: () => {\n onImportClick(tenant);\n },\n text: tenant.label\n }))}\n />\n )}\n <ConfirmationDialog\n open={!!selectedTenant}\n title={i18n.text('Confirmation')}\n content={i18n.text('Import connections from ${label}?', {label: selectedTenant?.label})}\n discardCaption={i18n.text('Cancel')}\n saveCaption={i18n.text('Import')}\n onDiscard={onCancelConfirmation}\n onSave={onConfirmImport}\n />\n </>\n )}\n </>\n );\n};\n","import React, {useContext} from 'react';\nimport i18n from 'ui-i18n';\nimport {ExpandableSearchInput, FacetViewHeader, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport FilterButton from './FilterButton/FilterButton';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {useStyles} from './styles';\nimport {ImportFromDT} from './ImportFromDT/ImportFromDT';\n\ntype Props = {\n title?: string;\n total?: number;\n};\n\nconst RelationsHeader = ({title, total}: Props) => {\n const styles = useStyles();\n\n const {searchQuery, changeSearchQuery} = useContext(RelationsViewStateContext);\n\n return (\n <FacetViewHeader title={title || ''} className={styles.header}>\n {total > 0 && (\n <HideOnShrink widthToHide={400}>\n <VerticalDivider height={24} margin={16} />\n <Typography className={styles.totalCaption} variant=\"caption\">\n {total > 1\n ? i18n.text('${count} items', {count: total})\n : i18n.text('${count} item', {count: total})}\n </Typography>\n </HideOnShrink>\n )}\n <ExpandableSearchInput query={searchQuery} onChange={changeSearchQuery} />\n <ImportFromDT />\n <FilterButton />\n </FacetViewHeader>\n );\n};\n\nexport default RelationsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltip: theme.tooltip,\n tooltipContent: {\n minWidth: '165px',\n padding: '4px 2px 2px'\n },\n label: {\n fontSize: '11px',\n lineHeight: '13px',\n fontWeight: 500,\n margin: 0,\n color: 'white'\n },\n secondaryLabel: {\n color: 'rgba(255, 255, 255, 0.7)',\n fontSize: '10px',\n marginTop: '4px',\n fontWeight: 500,\n lineHeight: '11px'\n },\n progress: {\n marginTop: '4px',\n color: '#FFFFFF'\n }\n}));\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {isNil, ifElse} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n ConnectionEntity,\n getDataTenantEntitySecondaryLabel,\n getEntitySecondaryLabel,\n isDataTenantEntity\n} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useSafePromise} from '@reltio/components';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst PROGRESS_ICON_SIZE = 16;\n\ntype Props = {\n label: string;\n entity?: ConnectionEntity;\n children: React.ReactElement;\n};\n\nconst RelationTooltip = ({label, entity, children, ...tooltipProps}: Props) => {\n const styles = useStyles();\n const safePromise = useSafePromise();\n const tenant = useSelector(mdm.selectors.getTenant);\n const dtssPath = useSelector(mdm.selectors.getDtssPath) as string;\n const [isLoading, setIsLoading] = useState(false);\n const [secondaryLabel, setSecondaryLabel] = useState<string>(null);\n\n useEffect(() => {\n setSecondaryLabel(null);\n }, [entity]);\n\n const onOpen = useCallback(() => {\n if (entity?.entityUri && isNil(secondaryLabel)) {\n const request = ifElse(\n isDataTenantEntity,\n (entity: ConnectionEntity) =>\n getDataTenantEntitySecondaryLabel({\n entityUri: entity.entityUri,\n dataTenant: entity.dataTenant,\n customerTenant: tenant,\n dtssPath\n }),\n (entity: ConnectionEntity) => getEntitySecondaryLabel(entity.entityUri)\n );\n\n setIsLoading(true);\n safePromise(request(entity))\n .then(({secondaryLabel}) => {\n setSecondaryLabel(secondaryLabel);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [dtssPath, entity, tenant, safePromise, secondaryLabel]);\n\n const tooltipContent = (\n <div className={styles.tooltipContent}>\n <div className={styles.label}>{label}</div>\n {isLoading && <CircularProgress size={PROGRESS_ICON_SIZE} classes={{colorPrimary: styles.progress}} />}\n {secondaryLabel && <div className={styles.secondaryLabel}>{secondaryLabel}</div>}\n </div>\n );\n\n return (\n <Tooltip\n onOpen={onOpen}\n title={tooltipContent}\n disableFocusListener\n classes={{tooltip: styles.tooltip}}\n {...tooltipProps}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default RelationTooltip;\n","import {\n Connection,\n Metadata,\n getEntityType,\n getLabel,\n getEntityUriForLink,\n getRelationTypeLabelFromMetadata\n} from '@reltio/mdm-sdk';\n\nexport const useRelationInfo = (connection: Connection, metadata: Metadata) => {\n const {entity, relation} = connection;\n const entityType = getEntityType(metadata, entity?.entityType) as string;\n const entityLabel = getLabel(entity?.entityLabel) as string;\n const preparedUri = getEntityUriForLink({uri: entity?.entityUri, dataTenant: entity?.dataTenant}) as string;\n const relationLabel =\n relation?.relationLabel || (getRelationTypeLabelFromMetadata(metadata, relation?.relationType) as string);\n\n return {\n entityType,\n entityLabel,\n preparedUri,\n relationLabel\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n container: {\n display: 'flex'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button, {ButtonProps} from '@material-ui/core/Button';\nimport {useStyles} from './styles';\n\ntype Props = {\n acceptRelation: () => void;\n ignoreRelation: () => void;\n};\n\nexport const SuggestedButtons = ({acceptRelation, ignoreRelation, ...props}: Props & ButtonProps) => {\n const styles = useStyles();\n return (\n <div className={styles.container}>\n <Button onClick={acceptRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Accept')}\n </Button>\n <Button onClick={ignoreRelation} variant=\"text\" color=\"primary\" {...props} style={{alignSelf: 'center'}}>\n {i18n.text('Ignore')}\n </Button>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n\n marginBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '24px',\n padding: '0 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n editButtonsContent: {\n marginLeft: 'auto',\n flex: '0 0 40px'\n },\n editButtons: {\n padding: 0\n },\n removed: {\n color: theme.palette.text.secondary,\n textDecoration: 'line-through'\n },\n editedLabel: {\n fontStyle: 'italic',\n color: theme.palette.text.secondary,\n margin: '0 5px'\n }\n}));\n","import React, {memo, useCallback} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {Connection, Metadata, isActiveObject, Mode, checkRemoved, checkEdited, checkIgnored} from '@reltio/mdm-sdk';\nimport {EntityTypeIcon, EntityUriLink, SmallIconButtonWithTooltip} from '@reltio/components';\nimport RelationTooltip from '../RelationTooltip/RelationTooltip';\nimport {useRelationInfo} from '../../hooks/useRelationInfo';\nimport {checkRelationPermission} from '../../helpers/permissions';\nimport {SuggestedButtons} from '../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n onRemoveRelation: (relationUri: string) => void;\n onEditRelation: (connection: Connection) => void;\n onAcceptRelation?: (connection: Connection) => void;\n onIgnoreRelation?: (connection: Connection) => void;\n metadata: Metadata;\n showControls: boolean;\n renderRelationArrowButton?: () => React.ReactNode;\n};\n\nconst EditableRelationItem = memo(\n ({\n connection,\n metadata,\n showControls,\n onRemoveRelation,\n onEditRelation,\n onAcceptRelation,\n onIgnoreRelation,\n renderRelationArrowButton\n }: Props) => {\n const styles = useStyles();\n\n const {entity, relation} = connection;\n const removed = checkRemoved(connection);\n const edited = checkEdited(connection);\n const ignored = checkIgnored(connection);\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n const {canRemove, canUpdate} = checkRelationPermission({\n mode: Mode.Editing,\n onRemoveRelation,\n onEditRelation,\n metadata,\n connection\n });\n\n const handleRemoveRelation = useCallback(() => onRemoveRelation(connection.relation.relationUri), [\n onRemoveRelation,\n connection\n ]);\n\n const handleEditRelation = useCallback(() => onEditRelation(connection), [onEditRelation, connection]);\n\n const handleAcceptRelation = useCallback(() => {\n onAcceptRelation(connection);\n }, [onAcceptRelation, connection]);\n\n const handleIgnoreRelation = useCallback(() => onIgnoreRelation(connection), [onIgnoreRelation, connection]);\n\n const editButtonsContent =\n (canRemove || canUpdate) && showControls && !connection.suggested ? (\n <>\n {canUpdate && (\n <SmallIconButtonWithTooltip\n icon={EditIcon}\n size=\"XS\"\n onClick={handleEditRelation}\n tooltipTitle={i18n.text('Edit')}\n />\n )}\n {canRemove && (\n <SmallIconButtonWithTooltip\n icon={DeleteIcon}\n size=\"XS\"\n onClick={handleRemoveRelation}\n tooltipTitle={i18n.text('Remove')}\n />\n )}\n </>\n ) : undefined;\n\n const suggustedButtonsContent = connection.suggested ? (\n <SuggestedButtons\n acceptRelation={handleAcceptRelation}\n ignoreRelation={handleIgnoreRelation}\n size=\"small\"\n disabled={ignored}\n />\n ) : undefined;\n const captionText = ignored ? i18n.text('ignored') : i18n.text('edited');\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.removed]: removed || ignored}\n )}\n >\n <div className={styles.row}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {(edited || ignored) && (\n <Typography variant=\"caption\" className={styles.editedLabel}>\n ({captionText})\n </Typography>\n )}\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n\n <div className={styles.editButtonsContent}>{editButtonsContent}</div>\n {suggustedButtonsContent}\n </div>\n </div>\n );\n }\n);\n\nEditableRelationItem.displayName = 'EditableRelationItem';\n\nexport default EditableRelationItem;\n","import {checkMetadataForDelete, checkMetadataForUpdate, checkRemoved, getRelationType, Mode} from '@reltio/mdm-sdk';\n\nexport const checkRelationPermission = ({metadata, mode, connection, onRemoveRelation, onEditRelation}) => {\n const isEditableMode = mode === Mode.Editing || mode === Mode.Suggesting;\n if (isEditableMode && connection) {\n const {\n relation: {relationType}\n } = connection;\n const isRemoved = checkRemoved(connection);\n const relationTypeMetadata = getRelationType(metadata, relationType);\n const canRemove = onRemoveRelation && !isRemoved && checkMetadataForDelete(mode, relationTypeMetadata);\n const canUpdate = onEditRelation && !isRemoved && checkMetadataForUpdate(mode, relationTypeMetadata);\n return {canRemove, canUpdate};\n } else {\n return {canRemove: false, canUpdate: false};\n }\n};\n","import {Directions, wrapInArrayIfNeeded, InOutRelation} from '@reltio/mdm-sdk';\n\nexport const getFirstRelationTypeObject = (inRelations: InOutRelation, outRelations: InOutRelation) => {\n const prepareRelation = (direction, relations) => {\n const relationsArr = relations ? wrapInArrayIfNeeded(relations) : [];\n return relationsArr.map((relation) => ({\n type: relation,\n direction: direction === Directions.IN ? Directions.IN : Directions.OUT\n }));\n };\n return prepareRelation(Directions.IN, inRelations).concat(prepareRelation(Directions.OUT, outRelations))[0];\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n arrowIcon: {\n fontSize: '16px',\n marginRight: '6px'\n }\n});\n","import React from 'react';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {checkNew, Connection} from '@reltio/mdm-sdk';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useStyles} from './styles';\n\ntype Props = {\n onClick: () => void;\n connection: Connection;\n config: RelationsViewConfig;\n showSecondLevel: boolean;\n};\n\nexport const RelationArrowButton = ({onClick, connection, config, showSecondLevel}: Props) => {\n const styles = useStyles();\n const {parentEntityUri} = connection;\n const {contentSecondLevel} = config;\n\n const props = {\n onClick,\n className: styles.arrowIcon\n };\n\n if (parentEntityUri || !contentSecondLevel || checkNew(connection)) {\n return null;\n }\n\n return showSecondLevel ? <ArrowDropDownIcon {...props} /> : <ArrowRightIcon {...props} />;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n row: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n secondLevelContent: {\n paddingLeft: '24px'\n }\n});\n","import React, {useContext, useMemo} from 'react';\nimport {Connection, ActivityFilter, getEntitiesMapForConnections} from '@reltio/mdm-sdk';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useSecondLevelConnections} from '../../hooks/useSecondLevelConnections';\nimport {RelationArrowButton} from '../RelationArrowButton/RelationArrowButton';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {useStyles} from './styles';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {EntitiesMapContext} from '@reltio/components';\n\ntype Props = {\n config: RelationsViewConfig;\n connection: Connection;\n children: (render: () => React.ReactNode) => React.ReactNode;\n};\n\nexport const SecondLevelWrapper = ({config, connection, children}: Props) => {\n const styles = useStyles();\n\n const {showInactive} = useContext(RelationsViewStateContext);\n\n const {\n connections,\n showSecondLevel,\n toggleShowSecondLevel,\n loadRelations,\n loading,\n total\n } = useSecondLevelConnections({\n config,\n connection,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const renderRelationArrowButton = () => {\n return (\n <RelationArrowButton\n onClick={toggleShowSecondLevel}\n connection={connection}\n config={config}\n showSecondLevel={showSecondLevel}\n />\n );\n };\n\n return (\n <>\n {children(renderRelationArrowButton)}\n {showSecondLevel && (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <div className={styles.secondLevelContent}>\n <RelationsContent\n isLoading={loading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n parentEntityUri={connection.entity.entityUri}\n />\n </div>\n </EntitiesMapContext.Provider>\n )}\n </>\n );\n};\n","import {useState, useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Connection, getRelationsForEntity, ActivityFilter, GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationsViewConfig} from '../../../types';\n\ntype Params = {\n config: RelationsViewConfig;\n connection: Connection;\n relationActivityFilter: ActivityFilter;\n};\n\nexport const useSecondLevelConnections = ({config, connection, relationActivityFilter}: Params) => {\n const dispatch = useDispatch();\n\n const [showSecondLevel, setShowSecondLevel] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const {contentSecondLevel} = config;\n const {entity} = connection;\n\n const connections =\n (useSelector((state) =>\n mdmModule.selectors.getConnectionsWithDraftsByViewId(state, config.id, entity.entityUri)\n ) as Connection[]) || [];\n\n const total = useSelector((state) => mdmModule.selectors.getTotalByViewId(state, config.id, entity.entityUri));\n const {activityFilter}: GlobalSearchRequestOptions =\n useSelector(mdmModule.selectors.getGlobalSearchRequestOptions) || {};\n\n const loadRelations = useCallback(() => {\n const requestConfig = {\n ...contentSecondLevel,\n returnObjects: true,\n returnDates: true,\n activeness: {\n relation: relationActivityFilter || ActivityFilter.ALL,\n entity: activityFilter\n }\n };\n\n setLoading(true);\n\n getRelationsForEntity(entity.entityUri, [requestConfig]).then((response) => {\n const {connections, total} = response[0];\n\n if (connections) {\n dispatch(\n profile.relations.actions.secondLevelRelationsLoaded({\n connections,\n parentEntityUri: entity.entityUri,\n id: config.id,\n total\n })\n );\n }\n\n setLoading(false);\n });\n }, [config.id, contentSecondLevel, dispatch, entity.entityUri, activityFilter, relationActivityFilter]);\n\n const toggleShowSecondLevel = useCallback(() => {\n if (!showSecondLevel && !connection.connections) {\n loadRelations();\n }\n\n setShowSecondLevel((show) => !show);\n }, [loadRelations, connection.connections, showSecondLevel]);\n\n return {connections, showSecondLevel, toggleShowSecondLevel, loadRelations, loading, total};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n moreButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px',\n marginLeft: '16px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n divider: {\n margin: '0 0 8px',\n backgroundColor: 'rgba(0,0,0,0.12)'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, partition, evolve, always, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {Divider as Divider} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {Connection, isTempUri, Mode, createNewConnectionWithDefaultRelationType, checkNew} from '@reltio/mdm-sdk';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {RelationEditor} from '@reltio/components';\nimport EditableRelationItem from '../EditableRelationItem/EditableRelationItem';\nimport {RelationsViewConfig} from '../../../../types';\nimport {getFirstRelationTypeObject} from '../../helpers/relation';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\nimport {useStyles} from './styles';\n\nexport type Props = {\n className?: string;\n noDataText: string;\n connections: Array<Connection>;\n config: RelationsViewConfig;\n mode: Mode;\n parentEntityUri?: string;\n};\n\nconst RelationsEditableContent = ({className, connections = [], config, mode, noDataText, parentEntityUri}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const relationToAdd = useSelector((state) => mdmModule.selectors.getRelationToAddByViewId(state, config.id));\n const relationsToEdit = useSelector((state) => mdmModule.selectors.getRelationsToEditByViewId(state, config.id));\n const entity = useSelector(mdmModule.selectors.getEntity);\n const checkIfCanAddRelations = useSelector((state) =>\n mdmModule.selectors.getCheckIfCanAddRelations(state, config.content)\n );\n\n const dispatch = useDispatch();\n const styles = useStyles();\n\n const onAddRelation = useCallback(() => {\n const newConnection = createNewConnectionWithDefaultRelationType({config, mode, metadata, parentEntityUri});\n pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)(newConnection);\n }, [config, mode, metadata, dispatch, parentEntityUri]);\n\n const onRemoveRelation = useCallback(\n (relationUri) => {\n dispatch(profile.relations.actions.closeRelationEditor(config.id, relationUri));\n dispatch(profile.relations.actions.removeRelation(config.id, relationUri));\n const connectionToRemove = connections.find(\n (connection) => profile.relations.selectors.getRelationUriFromConnection(connection) === relationUri\n );\n const entityUri = profile.relations.selectors.getEntityUriFromConnection(connectionToRemove);\n if (isTempUri(entityUri)) {\n dispatch(profile.modifiedEntities.actions.entityDeleted(entityUri));\n }\n },\n [config, connections, dispatch]\n );\n const content = config.content;\n const defaultRelationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const onAcceptRelation = useCallback(\n (connection) => {\n const connectionWithDefaultRelationType = pipe(\n omit(['suggested']),\n evolve({\n relation: {\n relationType: always(defaultRelationTypeObject.type),\n object: evolve({type: always(defaultRelationTypeObject.type), attributes: always(null)})\n }\n })\n )(connection);\n dispatch(profile.relations.actions.addRelation(config.id, connectionWithDefaultRelationType));\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const onIgnoreRelation = useCallback(\n (connection) => {\n dispatch(\n profile.relations.actions.ignoreRelation(config.id, {\n relationType: defaultRelationTypeObject.type,\n relationDirection: defaultRelationTypeObject.direction,\n entityUri: connection.entity.entityUri,\n relationUri: connection.relation.relationUri\n })\n );\n },\n [dispatch, config, defaultRelationTypeObject]\n );\n\n const [newConnections, currentConnections] = partition(checkNew, connections);\n const canAddRelations = entity && checkIfCanAddRelations;\n\n const isEmptyRelationList = newConnections.length === 0 && currentConnections.length === 0;\n\n const getRelationEditableContent = (connection: Connection) => {\n const openedRelation = relationsToEdit.find(\n (openedRelation) => openedRelation?.relation?.relationUri === connection?.relation?.relationUri\n );\n const showControls = !config.allowOnlyCreateNew || checkNew(connection);\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n return openedRelation ? (\n <RelationEditor connection={openedRelation} config={config} mode={mode} metadata={metadata} />\n ) : (\n <EditableRelationItem\n renderRelationArrowButton={renderRelationArrowButton}\n connection={connection}\n metadata={metadata}\n showControls={showControls}\n onRemoveRelation={onRemoveRelation}\n onEditRelation={pipe(profile.relations.actions.openRelationEditor(config.id), dispatch)}\n onAcceptRelation={onAcceptRelation}\n onIgnoreRelation={onIgnoreRelation}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n };\n\n const shouldShowAddRelationButton =\n canAddRelations && (!relationToAdd || (relationToAdd && relationToAdd.parentEntityUri === parentEntityUri));\n\n const shouldShowRelationEditorToAdd = relationToAdd && relationToAdd.parentEntityUri === parentEntityUri;\n\n return (\n <div className={className}>\n {shouldShowAddRelationButton && (\n <Button color=\"primary\" onClick={onAddRelation} className={styles.moreButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {shouldShowRelationEditorToAdd && (\n <RelationEditor connection={relationToAdd} config={config} mode={mode} metadata={metadata} />\n )}\n {newConnections.map(getRelationEditableContent)}\n {newConnections.length > 0 && currentConnections.length > 0 && <Divider className={styles.divider} />}\n {currentConnections.map(getRelationEditableContent)}\n {isEmptyRelationList && <Typography className={styles.noData}>{noDataText}</Typography>}\n </div>\n );\n};\n\nexport default RelationsEditableContent;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n attributesList: {\n paddingLeft: '46px',\n paddingRight: '16px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n }\n}));\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {\n AttributeType,\n CollaborationObjectTypes,\n Connection,\n createRelatedObjectUris,\n Entity,\n getActivenessAttributes,\n getAttributesListForReadMode,\n getAttributeValuesUris,\n getRelationAttributesList,\n isEmptyValue,\n Metadata\n} from '@reltio/mdm-sdk';\nimport {CollaborationContext, ReadOnlyAttributesList, RelatedObjectUrisContext} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {isEmpty} from 'ramda';\n\ntype Props = {\n connection: Connection;\n className?: string;\n};\n\nexport const RelationAttributes = ({connection, className}: Props) => {\n const styles = useStyles();\n\n const {relation} = connection;\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n\n const firstLevelRelationAttrTypes = useMemo(\n () => getRelationAttributesList(metadata, relation?.relationType) as AttributeType[],\n [relation?.relationType, metadata]\n );\n\n const attributeListEntity = useMemo(\n () => ({\n attributes: {\n ...profile.relations.selectors.getRelationAttributesFromConnection(connection)\n },\n ...getActivenessAttributes(connection?.relation || {})\n }),\n [connection]\n );\n\n const attributesList = useMemo(\n () => getAttributesListForReadMode(firstLevelRelationAttrTypes, attributeListEntity as Entity),\n [firstLevelRelationAttrTypes, attributeListEntity]\n );\n\n const showAttributesList = attributesList.filter(({values}) => !isEmptyValue(values)).length > 0;\n\n const objectIds = useMemo(() => getAttributeValuesUris(attributeListEntity.attributes), [attributeListEntity]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n !isEmpty(objectIds) && getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const additionalRelatedObjectUris = useMemo(\n () => createRelatedObjectUris(CollaborationObjectTypes.RELATION, {entityUri: currentEntityUri, connection}),\n [connection, currentEntityUri]\n );\n\n return showAttributesList ? (\n <RelatedObjectUrisContext.Provider value={additionalRelatedObjectUris}>\n <ReadOnlyAttributesList\n className={classnames(styles.attributesList, className)}\n entity={attributeListEntity}\n attrTypes={firstLevelRelationAttrTypes}\n />\n </RelatedObjectUrisContext.Provider>\n ) : (\n <div className={classnames(styles.attributesList, className)}>{i18n.text('No attributes')}</div>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\nimport InfoIconSelected from '@material-ui/icons/InfoRounded';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\ntype Props = {\n show: boolean;\n onToggle: () => void;\n className?: string;\n};\n\nexport const ShowDetailsButton = ({show, onToggle, className}: Props) => {\n return (\n <SmallIconButtonWithTooltip\n className={className}\n tooltipTitle={\n show\n ? i18n.text('Hide attributes of the relationship')\n : i18n.text('Show attributes of the relationship')\n }\n tooltipPlacement=\"bottom-end\"\n size=\"XXS\"\n icon={show ? InfoIconSelected : InfoIcon}\n onClick={onToggle}\n />\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {inactiveBackground: string; suggested: string}) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '2px'\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n minHeight: '16px',\n padding: '3px 11px 3px 16px'\n },\n rowInactive: {\n background: theme.inactiveBackground\n },\n entityAvatar: {\n height: '12px',\n width: '12px',\n fontSize: '11px',\n marginRight: '8px'\n },\n entityLabelContainer: {\n textDecoration: 'none',\n cursor: 'pointer',\n wordBreak: 'break-all',\n paddingRight: '8px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n showDetails: {\n marginLeft: 'auto',\n paddingRight: '5px'\n },\n attributesList: {\n paddingLeft: '46px',\n marginBottom: '10px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0\n },\n suggestedWrapper: {\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n marginLeft: 'auto',\n alignItems: 'center',\n '& + $showDetails': {\n marginLeft: '4px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n },\n labelWrapper: {\n display: 'flex',\n alignItems: 'center'\n }\n}));\n","import React, {memo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport {\n Connection,\n Metadata,\n isActiveObject,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {useStyles} from './styles';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\n\ntype Props = {\n connection: Connection;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nconst RelationItem = memo(({connection, renderRelationArrowButton, acceptRelation, ignoreRelation}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n const {entity, relation} = connection;\n const [showDetails, setShowDetails] = useState(false);\n\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityType, entityLabel, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const isActive = isActiveObject(relation) && isActiveObject(entity);\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n return (\n <div\n className={classnames(\n styles.container,\n {[styles.rowInactive]: !isActive},\n {[styles.suggestedWrapper]: isSuggested}\n )}\n >\n <div className={classnames(styles.row, COMMENTS_CONTAINER_VISIBILITY_AREA)}>\n {renderRelationArrowButton && renderRelationArrowButton()}\n <div className={styles.labelWrapper}>\n <EntityTypeIcon className={styles.entityAvatar} entityType={entityType} />\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n {relationLabel && <span className={styles.relationLabel}>{`, ${relationLabel}`}</span>}\n </EntityUriLink>\n </div>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n size=\"small\"\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetails}\n />\n )}\n </div>\n </div>\n {showDetails && <RelationAttributes connection={connection} />}\n </div>\n );\n});\n\nRelationItem.displayName = 'RelationItem';\n\nexport default RelationItem;\n","import {pluck, mean, pipe, defaultTo} from 'ramda';\nimport {Rating} from '@reltio/mdm-sdk';\n\nexport const calcAverageRating = (ratings: Rating[]) => {\n return pipe(pluck('value'), mean, defaultTo(0))(ratings);\n};\n\nexport const getCountOfLikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 5).length;\n};\n\nexport const getCountOfDislikes = (ratings: Rating[]) => {\n return ratings.filter((rating) => rating.value === 1).length;\n};\n\nexport const calcWidthOfLikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfLikes(ratings) / ratings.length) * 100 + '%';\n};\n\nexport const calcWidthOfDislikesScale = (ratings: Rating[]) => {\n if (ratings.length === 0) {\n return '0%';\n }\n\n return (getCountOfDislikes(ratings) / ratings.length) * 100 + '%';\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end'\n },\n averageRating: {\n marginBottom: '7px',\n fontSize: '16px',\n letterSpacing: '0.15px',\n lineHeight: '19px',\n color: theme.palette.text.primary\n },\n scale: {\n display: 'flex',\n marginBottom: '6px',\n width: '128px',\n height: '4px'\n },\n likesScale: {\n height: '100%',\n backgroundColor: '#8CC152'\n },\n dislikesScale: {\n height: '100%',\n backgroundColor: 'rgb(255, 112, 112)'\n },\n counts: {\n display: 'flex'\n },\n likesCount: {\n marginRight: '32px'\n },\n count: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n icon: {\n marginRight: '4px',\n width: '14px',\n height: '14px',\n color: 'rgba(0,0,0,0.38)'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {Typography as Typography} from '@material-ui/core';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbDownIcon from '@material-ui/icons/ThumbDown';\nimport {\n calcAverageRating,\n calcWidthOfDislikesScale,\n calcWidthOfLikesScale,\n getCountOfDislikes,\n getCountOfLikes\n} from '../../../helpers/ratings';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n className?: string;\n};\n\nexport const Ratings = ({ratings, className}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.wrapper, className)}>\n <Typography className={styles.averageRating}>{calcAverageRating(ratings).toFixed(1)}</Typography>\n <div className={styles.scale}>\n <div className={styles.likesScale} style={{width: calcWidthOfLikesScale(ratings)}} />\n <div className={styles.dislikesScale} style={{width: calcWidthOfDislikesScale(ratings)}} />\n </div>\n <div className={styles.counts}>\n <div className={classnames(styles.likesCount, styles.count)}>\n <ThumbUpIcon className={styles.icon} />\n {getCountOfLikes(ratings)}\n </div>\n <div className={styles.count}>\n <ThumbDownIcon className={styles.icon} />\n {getCountOfDislikes(ratings)}\n </div>\n </div>\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex'\n },\n button: {\n fontSize: '14px',\n textTransform: 'none',\n color: theme.palette.text.secondary\n },\n likeButton: {\n marginLeft: '-12px',\n marginRight: '8px'\n },\n isActive: {\n color: theme.palette.text.primary\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Rating} from '@reltio/mdm-sdk';\nimport {DropDownMenuButton} from '@reltio/components';\nimport {Button as Button} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {useStyles} from './styles';\n\ntype Props = {\n ratings: Rating[];\n onAgree: () => void;\n onDisagree: (comment: string) => void;\n};\n\nexport const RatingsButtons = ({ratings, onAgree, onDisagree}: Props) => {\n const styles = useStyles();\n\n const username = useSelector(mdmModule.selectors.getUserName) as string;\n const ratingOfCurrentUser = ratings.find(({user}) => user === username);\n\n const menuItems = [\n {\n text: i18n.text('Has left the practice'),\n onClick: () => onDisagree(i18n.text('Has left the practice'))\n },\n {\n text: i18n.text('Has moved away'),\n onClick: () => onDisagree(i18n.text('Has moved away'))\n },\n {\n text: i18n.text('Has passed away'),\n onClick: () => onDisagree(i18n.text('Has passed away'))\n },\n {\n text: i18n.text('Has retired'),\n onClick: () => onDisagree(i18n.text('Has retired'))\n },\n {\n text: i18n.text('Other'),\n onClick: () => onDisagree(i18n.text('Other'))\n }\n ];\n\n return (\n <div className={styles.wrapper}>\n <Button\n onClick={onAgree}\n variant=\"text\"\n size=\"small\"\n className={classnames(styles.button, styles.likeButton, {\n [styles.isActive]: ratingOfCurrentUser?.value === 5\n })}\n >\n Agree\n </Button>\n <DropDownMenuButton\n buttonProps={{\n endIcon: <ArrowDropDownIcon />,\n variant: 'text',\n size: 'small',\n className: classnames(styles.button, {\n [styles.isActive]: ratingOfCurrentUser?.value === 1\n })\n }}\n buttonContent={ratingOfCurrentUser?.value === 1 ? ratingOfCurrentUser.comment : 'Disagree'}\n menuItems={menuItems}\n menuId=\"disagree-dropdown-menu-button\"\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {suggested: string}) => ({\n wrapper: {\n padding: '6px 16px 6px'\n },\n entityTypeIcon: {\n marginRight: '16px'\n },\n entityLabel: {\n color: theme.palette.primary.main,\n fontSize: '14px',\n letterSpacing: 0,\n lineHeight: '16px'\n },\n entityLabelContainer: {\n wordBreak: 'break-all',\n textDecoration: 'none'\n },\n relationLabel: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n letterSpacing: 0,\n lineHeight: '15px'\n },\n ratings: {\n marginLeft: 'auto'\n },\n showDetailsButton: {\n marginLeft: '16px',\n marginTop: '18px'\n },\n relationAttributes: {\n paddingLeft: '60px'\n },\n suggestedWrapper: {\n padding: '6px 8px 6px 16px',\n backgroundColor: theme.suggested\n },\n commentsContainer: {\n alignSelf: 'center',\n '& + $ratings': {\n marginLeft: '16px'\n }\n },\n additionalButtonsWrapper: {\n marginLeft: 'auto',\n display: 'flex'\n }\n}));\n","import React, {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport {isEmpty} from 'ramda';\nimport {COMMENTS_CONTAINER_VISIBILITY_AREA, CommentsContainer, EntityTypeIcon, EntityUriLink} from '@reltio/components';\nimport {\n Metadata,\n Connection,\n rateRelation,\n createRelatedObjectUris,\n CollaborationObjectTypes,\n getConnectionRelationUriForLink\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {Box as Box} from '@material-ui/core';\nimport RelationTooltip from '../../RelationTooltip/RelationTooltip';\nimport {RelationAttributes} from '../RelationAttributes/RelationAttributes';\nimport {ShowDetailsButton} from '../ShowDetailsButton/ShowDetailsButton';\nimport {Ratings} from '../Ratings/Ratings';\nimport {useRelationInfo} from '../../../hooks/useRelationInfo';\nimport {RatingsButtons} from '../RatingsButtons/RatingsButtons';\nimport {SuggestedButtons} from '../../SuggestedButtons/SuggestedButtons';\nimport {useStyles} from './styles';\n\ntype Props = {\n connection: Connection;\n loadRelations: () => void;\n acceptRelation?: (connection: Connection) => () => void;\n ignoreRelation?: (connection: Connection) => () => void;\n renderRelationArrowButton: () => React.ReactNode;\n};\n\nexport const RelationComplexItem = ({\n connection,\n loadRelations,\n renderRelationArrowButton,\n acceptRelation,\n ignoreRelation\n}: Props) => {\n const styles = useStyles();\n const isSuggested = connection.suggested;\n\n const [showDetails, setShowDetails] = useState(false);\n\n const {entity, relation} = connection;\n const metadata = useSelector(mdmModule.selectors.getMetadata) as Metadata;\n const {entityLabel, entityType, preparedUri, relationLabel} = useRelationInfo(connection, metadata);\n const ratings = relation?.ratings || [];\n\n const toggleShowDetails = () => {\n setShowDetails((show) => !show);\n };\n\n const handleAgree = () => {\n rateRelation(relation?.relationUri, {\n comment: '',\n value: 5\n }).then(loadRelations);\n };\n\n const handleDisagree = (comment: string) => {\n rateRelation(relation?.relationUri, {\n comment,\n value: 1\n }).then(loadRelations);\n };\n const currentEntityUri = useSelector(mdmModule.selectors.getEntityUriWithDataTenant);\n const relatedObjectUris =\n (entity &&\n relation &&\n createRelatedObjectUris(CollaborationObjectTypes.RELATION, {\n entityUri: currentEntityUri,\n connection\n })) ||\n [];\n\n return (\n <div className={classnames(styles.wrapper, {[styles.suggestedWrapper]: isSuggested})}>\n <Box display=\"flex\" minHeight=\"44px\" className={COMMENTS_CONTAINER_VISIBILITY_AREA}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\">\n {renderRelationArrowButton && renderRelationArrowButton()}\n <EntityTypeIcon entityType={entityType} className={styles.entityTypeIcon} />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\">\n <EntityUriLink value={preparedUri} className={styles.entityLabelContainer}>\n <RelationTooltip label={entityLabel} entity={entity}>\n <span className={styles.entityLabel}>{entityLabel}</span>\n </RelationTooltip>\n </EntityUriLink>\n {relationLabel && <span className={styles.relationLabel}>{relationLabel}</span>}\n {!isSuggested && (\n <RatingsButtons ratings={ratings} onAgree={handleAgree} onDisagree={handleDisagree} />\n )}\n </Box>\n </Box>\n <div className={styles.additionalButtonsWrapper}>\n {!isEmpty(relatedObjectUris) && (\n <CommentsContainer\n className={styles.commentsContainer}\n uri={getConnectionRelationUriForLink(relation)}\n relatedObjectUris={relatedObjectUris}\n objectType={CollaborationObjectTypes.RELATION}\n allowOnlyOneComment\n />\n )}\n {isSuggested && (\n <SuggestedButtons\n acceptRelation={acceptRelation(connection)}\n ignoreRelation={ignoreRelation(connection)}\n />\n )}\n {!isSuggested && (\n <>\n <Ratings ratings={ratings} className={styles.ratings} />\n <ShowDetailsButton\n show={showDetails}\n onToggle={toggleShowDetails}\n className={styles.showDetailsButton}\n />\n </>\n )}\n </div>\n </Box>\n {showDetails && <RelationAttributes connection={connection} className={styles.relationAttributes} />}\n </div>\n );\n};\n","import React, {useMemo, useContext, useEffect} from 'react';\nimport {Connection, getRelationshipsObjectIdsForCollaboration} from '@reltio/mdm-sdk';\nimport {CollaborationContext} from '@reltio/components';\nimport RelationItem from './RelationItem/RelationItem';\nimport {RelationComplexItem} from './RelationCompexItem/RelationComplexItem';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useSuggestedRelations} from '../../hooks/useSuggestedRelations';\nimport {SecondLevelWrapper} from '../SecondLevelWrapper/SecondLevelWrapper';\n\ntype Props = {\n className?: string;\n connections: Array<Connection>;\n loadRelations: () => void;\n config?: RelationsViewConfig;\n mainEnityUri?: string;\n};\n\nconst RelationsList = ({className, connections = [], loadRelations, config, mainEnityUri}: Props) => {\n const {isComplex, content} = config;\n const {ignoreRelation, acceptRelation} = useSuggestedRelations(content, loadRelations, mainEnityUri);\n\n const objectIds = useMemo(() => {\n return getRelationshipsObjectIdsForCollaboration(connections);\n }, [connections]);\n\n const {getCommentsCount} = useContext(CollaborationContext);\n\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n return (\n <div className={className}>\n {connections.map((connection) => {\n const itemKey = `${connection?.relation?.relationUri}-${connection?.relation?.direction}`;\n\n return (\n <SecondLevelWrapper config={config} connection={connection} key={itemKey}>\n {(renderRelationArrowButton) => {\n if (isComplex) {\n return (\n <RelationComplexItem\n loadRelations={loadRelations}\n connection={connection}\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }\n\n return (\n <RelationItem\n acceptRelation={acceptRelation}\n ignoreRelation={ignoreRelation}\n connection={connection}\n renderRelationArrowButton={renderRelationArrowButton}\n />\n );\n }}\n </SecondLevelWrapper>\n );\n })}\n </div>\n );\n};\n\nRelationsList.displayName = 'RelationsList';\n\nexport default RelationsList;\n","import {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {Connection, ignoreSuggestedRelation, createRelation, getRequestErrorMessage, Directions} from '@reltio/mdm-sdk';\nimport {ui} from '@reltio/mdm-module';\nimport {getFirstRelationTypeObject} from '../helpers/relation';\nimport {RelationsContent} from '../../../types';\n\nexport const useSuggestedRelations = (content: RelationsContent, loadRelations: () => void, mainEnityUri: string) => {\n const relationTypeObject = getFirstRelationTypeObject(content.inRelations, content.outRelations);\n const dispatch = useDispatch();\n const ignoreRelation = (connection: Connection) => () => {\n const {entity} = connection;\n ignoreSuggestedRelation(mainEnityUri, {\n relatedEntityUri: entity.entityUri,\n relationType: relationTypeObject.type,\n relationDirection: relationTypeObject.direction\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n const acceptRelation = (connection: Connection) => () => {\n const {entity, relation} = connection;\n const {startDate, endDate} = relation;\n const isInDirection = relationTypeObject.direction === Directions.IN;\n const startEntityUri = isInDirection ? entity.entityUri : mainEnityUri;\n const endEntityUri = isInDirection ? mainEnityUri : entity.entityUri;\n createRelation({\n startEntityUri,\n endEntityUri,\n relationType: relationTypeObject.type,\n attributes: null,\n startDate,\n endDate\n })\n .then(loadRelations)\n .catch((error) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(error, i18n.text('Something went wrong'))));\n });\n };\n\n return {\n ignoreRelation,\n acceptRelation\n };\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n list: {\n paddingTop: '8px',\n paddingBottom: '10px',\n overflow: 'auto',\n flexGrow: 1\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary,\n padding: '8px 16px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isEditableMode, Connection} from '@reltio/mdm-sdk';\nimport {LinearLoadIndicator} from '@reltio/components';\nimport {Typography as Typography} from '@material-ui/core';\nimport RelationsEditableContent from '../RelationsEditableContent/RelationsEditableContent';\nimport RelationsList from '../RelationsList/RelationsList';\nimport {RelationsViewConfig} from '../../../../types';\nimport {useStyles} from './styles';\n\ntype Props = {\n isLoading: boolean;\n config: RelationsViewConfig;\n loadRelations: () => void;\n connections: Connection[];\n total: number;\n parentEntityUri?: string;\n};\n\nexport const RelationsContent = ({isLoading, config, loadRelations, connections, total, parentEntityUri}: Props) => {\n const styles = useStyles();\n\n const {selectors} = mdmModule;\n const entity = useSelector(selectors.getEntity);\n const mode = useSelector(selectors.getMode);\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n if (isLoading) {\n return <LinearLoadIndicator />;\n }\n\n if (isEditableMode(mode)) {\n return (\n <RelationsEditableContent\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n config={config}\n mode={mode}\n noDataText={noDataText}\n parentEntityUri={parentEntityUri}\n />\n );\n }\n\n if (total > 0) {\n return (\n <RelationsList\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n className={styles.list}\n key={entity?.uri}\n mainEnityUri={entity.uri}\n />\n );\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n container: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0\n },\n content: {\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n minHeight: 0\n },\n pagination: {\n height: '52px',\n flexGrow: 0,\n flexShrink: 0\n }\n});\n","import React, {useContext, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Connection, getEntitiesMapForConnections} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, EntitiesMapContext, useRelationsLoader} from '@reltio/components';\nimport RelationsHeader from '../RelationsHeader/RelationsHeader';\nimport {RelationsViewStateContext} from '../../contexts/RelationsViewStateContext';\nimport {ImportDTContext} from '../../contexts/ImportDTContext';\nimport {RelationsViewConfig} from '../../../../types';\nimport {buildRelationsFilter} from '../../helpers/filters';\nimport {RelationsContent} from '../RelationsContent/RelationsContent';\nimport {pick} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: RelationsViewConfig;\n className?: string;\n};\n\nconst RelationsView = ({config, className}: Props) => {\n const styles = useStyles();\n\n const {\n page,\n setPage,\n rowsPerPage,\n sortOrder,\n sortOption,\n showInactive,\n searchQuery,\n changeSearchQuery\n } = useContext(RelationsViewStateContext);\n const {selectors} = mdmModule;\n const connections = useSelector((state) =>\n selectors.getConnectionsWithDraftsByViewId(state, config.id)\n ) as Connection[];\n const entity = useSelector(selectors.getEntity);\n const total = useSelector((state) => selectors.getTotalByViewId(state, config.id));\n const mode = useSelector(selectors.getMode);\n const sorting = useMemo(\n () => ({\n order: sortOrder,\n field: sortOption\n }),\n [sortOrder, sortOption]\n );\n\n useEffect(() => {\n changeSearchQuery('');\n }, [entity?.uri]); //eslint-disable-line react-hooks/exhaustive-deps\n\n const filter = useMemo(() => buildRelationsFilter(searchQuery), [searchQuery]);\n\n const {isLoading, reload: loadRelations} = useRelationsLoader({\n sorting,\n filter,\n page,\n rowsPerPage,\n config,\n entity,\n relationActivityFilter: showInactive ? ActivityFilter.ALL : ActivityFilter.ACTIVE_ONLY,\n mode\n });\n\n const entitiesMap = useMemo(() => getEntitiesMapForConnections(connections), [connections]);\n\n const importDTContextValue = useMemo(\n () => ({\n reloadRelations: loadRelations,\n config: pick(['content', 'importFromDT', 'maxDtssImport'], config)\n }),\n [loadRelations, config]\n );\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={className}>\n <div className={styles.container}>\n <ImportDTContext.Provider value={importDTContextValue}>\n <RelationsHeader title={config.caption} total={total} />\n </ImportDTContext.Provider>\n <div className={styles.content}>\n <RelationsContent\n isLoading={isLoading}\n config={config}\n loadRelations={loadRelations}\n connections={connections}\n total={total}\n />\n {total > rowsPerPage && (\n <BasicTablePagination\n classes={{root: styles.pagination}}\n count={total}\n rowsPerPageOptions={[]}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n />\n )}\n </div>\n </div>\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n\nRelationsView.displayName = 'RelationsView';\n\nexport {RelationsView};\n","import {FilterBuilder, Maybe, filterValueToQueryStringWithQuotes} from '@reltio/mdm-sdk';\n\nconst buildRelationsFilter = (searchQuery) => {\n const queryClause = Maybe.fromFalsy(searchQuery)\n .map(filterValueToQueryStringWithQuotes)\n .map(\n (queryString) =>\n `containsWordStartingWith(entity.label,${queryString})` +\n ' or ' +\n `containsWordStartingWith(relation.label,${queryString})`\n )\n .orSome('');\n\n return new FilterBuilder().addClause(queryClause).build();\n};\n\nexport {buildRelationsFilter};\n","import {useCallback, useMemo, useState} from 'react';\nimport {RelationsViewConfig, SortOrder} from '../../../types';\n\nconst DEFAULT_ROWS_PER_PAGE = 15;\nconst DEFAULT_SORT_ORDER = 'asc';\nconst DEFAULT_SHOW_INACTIVE = false;\n\ntype Option = {\n value: string;\n label: string;\n};\n\nexport type RelationsViewState = {\n searchQuery: string;\n changeSearchQuery: (value: string) => void;\n sortOrder: SortOrder;\n toggleSortOrder: () => void;\n sortOption?: string;\n changeSortOption: (option: string) => void;\n sortOptions: Option[];\n page: number;\n setPage: (page: number) => void;\n rowsPerPage: number;\n showInactive: boolean;\n toggleShowInactive: () => void;\n};\n\nconst useRelationsState = (config: RelationsViewConfig): RelationsViewState => {\n const sortOptions = useMemo(\n () =>\n Object.entries(config.sortOptions || {}).map(([key, value]) => ({\n value: key,\n label: value\n })),\n [config.sortOptions]\n );\n\n const rowsPerPage = config.max || DEFAULT_ROWS_PER_PAGE;\n const [page, setPage] = useState(0);\n const [sortOrder, setSortOrder] = useState(config.sortOrder || DEFAULT_SORT_ORDER);\n const [sortOption, setSortOption] = useState(sortOptions[0]?.value);\n const [searchQuery, setSearchQuery] = useState('');\n const [showInactive, setShowInactive] = useState(DEFAULT_SHOW_INACTIVE);\n\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n const toggleSortOrder = useCallback(() => {\n setPage(0);\n setSortOrder((order) => {\n return order === 'asc' ? 'desc' : 'asc';\n });\n }, []);\n\n const changeSortOption = useCallback((option: string) => {\n setPage(0);\n setSortOption(option);\n }, []);\n\n const changeSearchQuery = useCallback((value: string) => {\n setPage(0);\n setSearchQuery(value);\n }, []);\n\n return {\n searchQuery,\n changeSearchQuery,\n sortOrder,\n toggleSortOrder,\n sortOption,\n changeSortOption,\n sortOptions,\n page,\n setPage,\n rowsPerPage,\n showInactive,\n toggleShowInactive\n };\n};\n\nexport default useRelationsState;\n","import React from 'react';\nimport {AttributeValue, AttributeType} from '@reltio/mdm-sdk';\n\nexport const TableAttributeContext = React.createContext<{\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n values: AttributeValue[];\n page: number;\n setPage: (page: number) => void;\n isLoading: boolean;\n visibleColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n onToggleFilters: () => void;\n onSort: (payload) => void;\n onFilter: (payload) => void;\n hasPaging: boolean;\n totalVisibleValues: number;\n showTable: boolean;\n filters: {\n [key: string]: {\n filter: string;\n values: [string];\n };\n };\n sorting: {\n order: 'desc' | 'asc';\n field: string;\n };\n attributeType: AttributeType;\n }>(null);\n\nTableAttributeContext.displayName = 'SingleAttributeContext';\n","import {basicTableViewState, createStandardAction} from '@reltio/components';\n\nconst CHANGE_SEARCH_QUERY = 'CHANGE_SEARCH_QUERY';\n\nconst actions = {\n ...basicTableViewState.actions,\n changeSearchQuery: createStandardAction(CHANGE_SEARCH_QUERY)\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case CHANGE_SEARCH_QUERY:\n return {...state, searchQuery: action.payload, page: 0};\n default:\n return basicTableViewState.reducer(state, action);\n }\n};\n\nexport {reducer as default, actions};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst removedStyle = {\n textDecoration: 'line-through',\n color: 'rgba(0,0,0,.54)'\n};\n\nexport const useStyles = makeStyles(() => ({\n tableContainer: {\n height: '477px',\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n rowCell: {\n fontSize: '13px',\n overflow: 'hidden'\n },\n 'row-cell--sorted': {\n color: 'rgba(0,0,0,0.87)'\n },\n 'row-cell__buttons-container': {\n position: 'absolute'\n },\n 'row-cell__buttons-wrapper': {\n display: 'flex',\n paddingLeft: '10px',\n '& > button': {\n marginLeft: '-10px',\n transform: 'scale(0.9)'\n }\n },\n headCell: {\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: '12px'\n },\n 'row-cell--removed': {\n pointerEvents: 'none',\n '& > div': removedStyle\n }\n}));\n","import React from 'react';\n\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {withFilterAtBottom} from '@reltio/components';\nimport {useStyles} from './styles';\n\nconst HeadCellRenderer = (props) => {\n const styles = useStyles();\n return (\n <div className={styles.headCell}>\n <DefaultHeadCellRenderer {...props} />\n </div>\n );\n};\n\nexport default withFilterAtBottom(HeadCellRenderer);\n","import {pipe, assoc, reduce, split, slice, map, path, uniqBy, prop} from 'ramda';\nimport {\n getReadableAttributesList,\n getOvAttributeValuesByPath,\n getAttrDataTypeDefinition,\n attributeUriToSearchUri,\n isAttributeSearchUri\n} from '@reltio/mdm-sdk';\nimport HeadCellRenderer from '../components/AttributeTable/HeadCellRenderer';\nimport {DefaultCellValueRenderer} from '@reltio/components';\n\nexport const getColumnsDataFromAttributes = pipe(\n map((attr) => ({\n id: attributeUriToSearchUri(attr.uri),\n label: attr.label,\n dataTypeDefinition: getAttrDataTypeDefinition(attr)\n })),\n uniqBy(prop('id'))\n);\n\nexport const getColumnsData = pipe(getReadableAttributesList, getColumnsDataFromAttributes);\n\nconst getAttrPathFromColumnId = pipe(split('.'), slice(2, Infinity));\n\nconst getAttributeValues = (attrPath, value) => pipe(path(['value']), getOvAttributeValuesByPath(attrPath))(value);\n\nconst getRowValueByColumnId = (columnId, value) => {\n const attrPath = getAttrPathFromColumnId(columnId);\n return getAttributeValues(attrPath, value);\n};\n\nexport const getBasicTableRowsData = (values, columnsData) =>\n values.map((value) =>\n pipe(\n reduce((acc, {id}) => assoc(id, getRowValueByColumnId(id, value), acc), {}),\n assoc('value', value)\n )(columnsData)\n );\n\nconst getNestedPathByColumnId = (columnId) => {\n if (isAttributeSearchUri(columnId)) {\n const attrPath = getAttrPathFromColumnId(columnId);\n return attrPath.length > 1 ? attrPath.slice(0, -1) : null;\n } else {\n return null;\n }\n};\n\nconst getColumnDataByColumnId = (columnData) => ({\n ...columnData,\n sortable: true,\n resizable: true,\n nestedPath: getNestedPathByColumnId(columnData.id),\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: DefaultCellValueRenderer\n});\n\nexport const getBasicTableColumnsData = map(getColumnDataByColumnId);\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n header: {\n padding: '0 4px 0 16px'\n }\n}));\n","import React from 'react';\nimport {\n FacetViewHeader,\n ColumnsSettings,\n FilterButton,\n VerticalDivider,\n ExpandableSearchInput\n} from '@reltio/components';\nimport {useStyles} from './styles';\nimport {ColumnsDataType} from '../types';\n\ntype Props = {\n title: string;\n total: number;\n columnsData: ColumnsDataType;\n selectedColumns: string[];\n onChangeColumns: (cols: string[]) => void;\n searchQuery: string;\n onChangeSearchQuery: (val: string) => void;\n filtersEnabled: boolean;\n onToggleFilters: () => void;\n};\nconst AttributeTableHeader = ({\n title,\n searchQuery,\n onChangeSearchQuery,\n filtersEnabled,\n onToggleFilters,\n columnsData,\n selectedColumns,\n onChangeColumns\n}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <ExpandableSearchInput query={searchQuery} onChange={onChangeSearchQuery} />\n <FilterButton enabled={filtersEnabled} onClick={onToggleFilters} />\n <VerticalDivider height={24} margin={4} />\n <ColumnsSettings\n columnsData={columnsData}\n selectedColumns={selectedColumns}\n onChangeColumns={onChangeColumns}\n />\n </FacetViewHeader>\n );\n};\n\nexport default AttributeTableHeader;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\nimport {withTableContext} from '@reltio/components';\n\ntype Props = {\n cell: {values: string[]};\n isSorted: boolean;\n CellValueRenderer: React.ElementType;\n isRemoved: boolean;\n};\nconst RowCellRenderer = ({cell, CellValueRenderer, isRemoved, isSorted, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div\n className={classnames(\n {\n [styles['row-cell--sorted']]: isSorted,\n [styles['row-cell--removed']]: isRemoved\n },\n styles.rowCell\n )}\n >\n {cell.values.map((value, index) => (\n <CellValueRenderer key={index} value={value} {...otherProps} />\n ))}\n </div>\n );\n};\n\nexport default withTableContext(({deletedUris}, {rowValue: {value}}) => ({\n isRemoved: Boolean(deletedUris.find((uri) => value.uri === uri))\n}))(RowCellRenderer);\n","import React from 'react';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport i18n from 'ui-i18n';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\ntype Props = {\n onEdit?: () => void;\n onRemove?: () => void;\n};\n\nexport const EditButtons = ({onEdit, onRemove}: Props) => (\n <>\n {onEdit && (\n <SmallIconButtonWithTooltip tooltipTitle={i18n.text('Edit')} icon={EditIcon} size=\"L\" onClick={onEdit} />\n )}\n {onRemove && (\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Remove')}\n icon={DeleteIcon}\n size=\"L\"\n onClick={onRemove}\n />\n )}\n </>\n);\n\nexport default EditButtons;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport RowCellRenderer from './RowCellRenderer';\nimport {BasicTable, useConfigPermissions} from '@reltio/components';\nimport {getBasicTableColumnsData, getBasicTableRowsData} from '../../helpers/tableAttributeHelpers';\nimport {useStyles} from './styles';\nimport {\n AttributeValue,\n checkCanEditAttribute,\n checkCanDeleteAttribute,\n SearchFilter,\n isReltioCrosswalk,\n Entity,\n isEditableMode as checkIsEditableMode,\n AttributeItem\n} from '@reltio/mdm-sdk';\nimport {ColumnsDataType} from '../types';\nimport EditButtons from './EditButtons';\nimport {useSelector} from 'react-redux';\nimport {path, prop, pipe} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {SingleAttributeViewConfig} from '../../../../types';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n columnsData: ColumnsDataType;\n values: AttributeValue[];\n filters?: {\n [key: string]: SearchFilter;\n };\n onFilter?: (payload) => void;\n sorting?:\n | {\n field: string;\n order: string;\n }\n | undefined;\n onSort?: (payload) => void;\n config: SingleAttributeViewConfig;\n onEdit: React.Dispatch<AttributeValue>;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n deletedUris: string[];\n};\n\nconst AttributeTable = ({\n columnsData,\n values,\n sorting,\n onSort,\n filters,\n onFilter,\n config,\n onEdit,\n onDeleteAttribute,\n deletedUris\n}: Props) => {\n const tableRowsData = useMemo(() => getBasicTableRowsData(values, columnsData), [values, columnsData]);\n\n const tableColumnsData = useMemo(() => getBasicTableColumnsData(columnsData), [columnsData]);\n\n const styles = useStyles();\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const {attributeType} = useContext(TableAttributeContext);\n\n const renderRowCell = useCallback(\n (props) => (\n <RowCellRenderer\n {...props}\n isSorted={!!sorting && sorting.field === props.columnData.id} /* eslint-disable-line react/prop-types */\n />\n ),\n [sorting]\n );\n\n const [hoverRowIndex, setHoverRowIndex] = useState(null);\n\n const {canUpdate, canDelete} = useConfigPermissions();\n\n const checkCanEdit = (attributeValue: AttributeValue) =>\n canUpdate(config) &&\n checkCanEditAttribute({\n attributeType,\n mode,\n attributeValue,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n const checkCanRemove = (attributeValue: AttributeValue) =>\n canDelete(config) &&\n checkCanDeleteAttribute({\n attributeType,\n mode,\n attributeValue,\n metadata,\n isReltioCrosswalk: isReltioCrosswalk(modifiedEntity.crosswalks, attributeValue)\n });\n\n const hideRightContent = useMemo(\n () =>\n typeof hoverRowIndex === 'number' && isEditableMode\n ? deletedUris.includes(pipe(path([hoverRowIndex]), prop('uri'))(values))\n : true,\n [hoverRowIndex, deletedUris, values, isEditableMode]\n );\n const canRemove = typeof hoverRowIndex === 'number' && checkCanRemove(path([hoverRowIndex], values));\n const canEdit = typeof hoverRowIndex === 'number' && checkCanEdit(path([hoverRowIndex], values));\n\n const handleEditAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canEdit) return;\n onEdit(attributeValue);\n }, [onEdit, hoverRowIndex, values, canEdit]);\n\n const handleRemoveAttribute = useCallback(() => {\n const attributeValue = path([hoverRowIndex], values);\n if (!canRemove) return;\n const attribute: AttributeItem = {\n parentUri: entityUri,\n attributeType,\n uri: attributeValue.uri,\n value: attributeValue\n };\n onDeleteAttribute(attribute);\n setHoverRowIndex(null);\n }, [hoverRowIndex, values, onDeleteAttribute, canRemove, attributeType, entityUri]);\n\n const hoveredRowRightContent =\n !hideRightContent && (canRemove || canEdit) ? (\n <EditButtons\n onEdit={canEdit ? handleEditAttribute : undefined}\n onRemove={canRemove ? handleRemoveAttribute : undefined}\n />\n ) : undefined;\n const context = useMemo(() => ({deletedUris}), [deletedUris]);\n return (\n <div className={styles.tableContainer}>\n <BasicTable\n columnsData={tableColumnsData}\n rowsData={tableRowsData}\n sorting={sorting}\n onSort={onSort}\n filters={filters}\n onFilter={onFilter}\n hoverStateEnabled={true}\n defaultColumnWidth={250}\n defaultColumnMinWidth={200}\n headRowHeight={56}\n renderRowCell={renderRowCell}\n onRowHover={setHoverRowIndex}\n hoverRowIndex={hoverRowIndex}\n hoveredRowRightContent={hoveredRowRightContent}\n context={context}\n classes={{\n hoveredRowRightContentWrapper: styles['row-cell__buttons-wrapper'],\n hoveredRowRightContentContainer: styles['row-cell__buttons-container']\n }}\n />\n </div>\n );\n};\n\nexport default AttributeTable;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\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}));\n","import {Button as Button} from '@material-ui/core';\nimport React, {useCallback, useContext} from 'react';\nimport {useStyles} from './styles';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {AttributeValue, Entity, isTempUri, getAttributeOwnError, AttributeItem} from '@reltio/mdm-sdk';\nimport {pipe} from 'ramda';\nimport {EditableAttribute, ViewIdContext} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n hasChanges: boolean;\n onChangeAttribute: (attribute: AttributeItem) => void;\n onDeleteAttribute: (attribute: AttributeItem) => void;\n onCancel: (attributeValue: AttributeValue) => void;\n onApply: (attributeValue: AttributeValue) => void;\n attributeValue: AttributeValue;\n};\n\nexport const AttributeEditing = ({\n onChangeAttribute,\n onCancel,\n onApply,\n onDeleteAttribute,\n hasChanges,\n attributeValue\n}: Props) => {\n const styles = useStyles();\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {attributeType} = useContext(TableAttributeContext);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const mode = useSelector(mdmModule.selectors.getMode);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n\n const onAddAttributes = useCallback(\n (params: AttributeItem[]) =>\n pipe(profile.actions.addAttributes, dispatch)(params.map((param) => ({...param, viewId}))),\n [viewId, dispatch]\n );\n\n const showEmptyEditors = isTempUri(entityUri);\n\n const errors = useSelector((state) =>\n mdmModule.selectors.getActiveErrorsForAttributesPager(state, entityUri, attributeType)\n );\n\n const onDeactivateError = useCallback(pipe(profile.errors.actions.errorDeactivated, dispatch), [dispatch]);\n\n return (\n <>\n <EditableAttribute\n expanded\n attributeValue={attributeValue}\n showEmptyEditors={showEmptyEditors}\n onDeleteAttribute={onDeleteAttribute}\n onDeactivateError={onDeactivateError}\n onChangeAttribute={onChangeAttribute}\n onAddAttributes={onAddAttributes}\n mode={mode}\n crosswalks={modifiedEntity.crosswalks}\n errors={errors}\n attributeType={attributeType}\n ownError={getAttributeOwnError(attributeValue, null, attributeType.uri, errors)}\n />\n <div className={styles.actionButtons}>\n <Button\n onClick={() => {\n onCancel(attributeValue);\n }}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n color=\"primary\"\n disabled={!hasChanges}\n onClick={() => {\n onApply(attributeValue);\n }}\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n content: {\n position: 'relative',\n padding: '4px 16px 9px',\n flex: 1,\n overflow: 'auto'\n },\n noData: {\n fontSize: '13px',\n paddingLeft: '20px',\n color: 'rgba(0,0,0,0.54)'\n },\n\n tableContainer: {\n height: '477px',\n display: 'flex',\n fontFamily: 'Roboto',\n color: 'rgba(0,0,0,0.54)'\n },\n\n header: {\n padding: '0 4px 0 16px'\n },\n\n addButton: {\n padding: '9px 16px 9px 12px',\n backgroundColor: 'rgba(98, 2, 238, 0)',\n marginBottom: '4px'\n },\n buttonLabel: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px'\n },\n icon: {\n fontSize: '18px',\n marginRight: '8px'\n },\n editor: {\n padding: '4px 16px'\n }\n}));\n","import {useCallback, useContext, useState, useMemo, useEffect} from 'react';\nimport {\n AttributeValue,\n createNewAttribute,\n Entity,\n getAttributeSource,\n isEditableMode as checkIsEditableMode,\n NestedAttributeValue,\n AttributeItem\n} from '@reltio/mdm-sdk';\nimport {ViewIdContext} from '@reltio/components';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {propEq, pathOr, pipe, map, prop, equals, both, not, without, filter} from 'ramda';\nimport {TableAttributeContext} from '../../../contexts/TableAttributeContext';\nimport {isTempUri, createDefaultValues} from '@reltio/mdm-sdk';\n\nconst emptyArray = [];\n\nexport const useEditableAttribute = () => {\n const [newAttributeUri, setNewAttributeUri] = useState<string>();\n const [originalValues, setOriginalValues] = useState<AttributeValue[]>([]);\n const mode = useSelector(mdmModule.selectors.getMode);\n\n useEffect(() => {\n setOriginalValues([]);\n setNewAttributeUri(null);\n }, [mode]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const {attributeType, values} = useContext(TableAttributeContext);\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const onChangeAttribute = useCallback(\n (params: AttributeItem) => {\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n },\n [viewId, dispatch]\n );\n const onDeleteAttribute = useCallback(\n (params: AttributeItem) => pipe(profile.actions.removeAttribute, dispatch)({...params, viewId}),\n [viewId, dispatch]\n );\n\n const onAdd = useCallback(() => {\n const newAttribute = createNewAttribute({\n parentUri: entityUri,\n attributeType\n });\n setNewAttributeUri(newAttribute.uri);\n onChangeAttribute({\n ...newAttribute,\n value: createDefaultValues({\n attributeTypes: attributeType.attributes,\n parentUri: newAttribute.uri,\n mode,\n metadata\n }),\n attributeType\n });\n }, [entityUri, attributeType]);\n\n const onStartEditing = useCallback(\n (attributeValue: AttributeValue) => {\n setOriginalValues((prev) => {\n if (!prev.find(propEq('uri', attributeValue.uri))) {\n return [...prev, attributeValue];\n }\n return prev;\n });\n },\n [setOriginalValues]\n );\n\n const onCancel = useCallback(\n (attributeValue: AttributeValue) => {\n const editingValueOriginal = originalValues.find(propEq('uri', attributeValue.uri));\n if (editingValueOriginal) {\n const attributeItem = {\n ...attributeValue,\n value: editingValueOriginal,\n attributeType,\n uri: attributeValue.uri\n };\n setOriginalValues((prev) => without([editingValueOriginal], prev));\n onChangeAttribute(attributeItem);\n } else {\n const attributeItem = {\n value: attributeValue,\n attributeType,\n uri: attributeValue.uri\n };\n setNewAttributeUri(null);\n onDeleteAttribute(attributeItem);\n }\n },\n [onDeleteAttribute, onChangeAttribute, setOriginalValues, originalValues]\n );\n\n const onApply = useCallback(\n (attributeValue: AttributeValue) => {\n setNewAttributeUri(null);\n setOriginalValues((prev) => {\n const original = prev.find(propEq('uri', attributeValue.uri));\n return original ? without([original], prev) : prev;\n });\n },\n [setOriginalValues, setNewAttributeUri]\n );\n\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entityUri) || ({} as Entity)\n );\n const isEditableMode = checkIsEditableMode(mode);\n const attributeSource = getAttributeSource(attributeType);\n\n const modifiedEntityValues: NestedAttributeValue[] = pathOr(\n emptyArray,\n [attributeSource, attributeType?.name],\n modifiedEntity\n );\n\n const modifiedValues = useMemo(() => {\n const newValues = modifiedEntityValues.filter(\n pipe(prop('uri'), both(isTempUri, pipe(equals(newAttributeUri), not)))\n );\n\n const oldValues = map(\n (originalValue) => modifiedEntityValues.find(propEq('uri', originalValue.uri)) || originalValue\n )(values);\n return [...newValues, ...oldValues].map((value) => originalValues.find(propEq('uri', value.uri)) ?? value);\n }, [modifiedEntityValues, originalValues, newAttributeUri, values]);\n\n const deletedUris = useMemo(\n () =>\n isEditableMode\n ? pipe(\n map(prop('uri')),\n filter((uri) => !modifiedEntityValues.find(propEq('uri', uri)))\n )(values)\n : [],\n [modifiedEntityValues, values]\n );\n\n const editingValues = modifiedEntityValues.filter(\n ({uri}) => uri === newAttributeUri || originalValues.find(propEq('uri', uri))\n );\n\n const checkHasChanges = (value) => originalValues.find(propEq('uri', value.uri)) !== value;\n\n return {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n };\n};\n","import React, {useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport {\n BasicView,\n BasicTablePagination,\n LinearLoadIndicator,\n FacetViewHeader,\n useConfigPermissions\n} from '@reltio/components';\nimport {SingleAttributeViewConfig} from '../../../../types';\nimport {propEq} from 'ramda';\nimport {TableAttributeContext} from '../../contexts/TableAttributeContext';\nimport AttributeTableHeader from '../AttributeTableHeader/AttributeTableHeader';\nimport AttributeTable from '../AttributeTable/AttributeTable';\nimport {getColumnsData} from '../../helpers/tableAttributeHelpers';\nimport {Typography as Typography} from '@material-ui/core';\nimport i18n from 'ui-i18n';\nimport {AttributeEditing} from '../AttributeEditing/AttributeEditing';\n\nimport {useStyles} from './styles';\nimport {checkCanCreateAttribute, isEditableMode as checkIsEditableMode} from '@reltio/mdm-sdk';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {Button as Button} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport {useEditableAttribute} from './hooks/useEditableAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const TableAttributeView = ({config, className}: Props) => {\n const {caption, max} = config;\n const styles = useStyles();\n\n const {\n values,\n page,\n setPage,\n isLoading,\n searchQuery,\n setSearchQuery,\n visibleColumns,\n onFilter,\n onSort,\n onToggleFilters,\n onChangeColumns,\n filters,\n sorting,\n totalVisibleValues,\n hasPaging,\n attributeType,\n showTable\n } = useContext(TableAttributeContext);\n\n const allColumnsData = useMemo(() => getColumnsData(attributeType), [attributeType]);\n\n const {\n checkHasChanges,\n onChangeAttribute,\n onDeleteAttribute,\n onAdd,\n onCancel,\n onApply,\n onStartEditing,\n modifiedValues,\n editingValues,\n deletedUris\n } = useEditableAttribute();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const isEditableMode = checkIsEditableMode(mode);\n\n const preparedValues = isEditableMode ? modifiedValues : values;\n\n const {canCreate: hasConfigToCreate} = useConfigPermissions();\n\n const canCreate =\n hasConfigToCreate(config) &&\n attributeType &&\n checkCanCreateAttribute({attributeType, mode}) &&\n !editingValues.length;\n\n const visibleColumnsData = useMemo(() => visibleColumns.map((id) => allColumnsData.find(propEq('id', id))), [\n visibleColumns,\n allColumnsData\n ]);\n\n return (\n <BasicView className={classnames(styles.root, className)}>\n {showTable ? (\n <>\n <AttributeTableHeader\n title={caption}\n total={totalVisibleValues}\n columnsData={allColumnsData}\n selectedColumns={visibleColumns}\n onChangeColumns={onChangeColumns}\n searchQuery={searchQuery}\n onChangeSearchQuery={setSearchQuery}\n filtersEnabled={!!filters}\n onToggleFilters={onToggleFilters}\n />\n <div style={{position: 'relative'}}>\n {isEditableMode && (\n <div className={styles.editor}>\n {canCreate && (\n <Button color=\"primary\" onClick={onAdd} className={styles.addButton}>\n <AddIcon classes={{root: styles.icon}} />\n <div className={styles.buttonLabel}>{i18n.text('Add')}</div>\n </Button>\n )}\n {editingValues.map((value) => (\n <AttributeEditing\n key={value.uri}\n attributeValue={value}\n onChangeAttribute={onChangeAttribute}\n onDeleteAttribute={onDeleteAttribute}\n onCancel={onCancel}\n onApply={onApply}\n hasChanges={checkHasChanges(value)}\n />\n ))}\n </div>\n )}\n <AttributeTable\n columnsData={visibleColumnsData}\n config={config}\n values={preparedValues}\n filters={filters}\n onFilter={onFilter}\n sorting={sorting}\n onSort={onSort}\n onEdit={onStartEditing}\n onDeleteAttribute={onDeleteAttribute}\n deletedUris={deletedUris}\n />\n {hasPaging && (\n <BasicTablePagination\n count={totalVisibleValues}\n rowsPerPageOptions={[]}\n rowsPerPage={max}\n page={page}\n onChangePage={setPage}\n />\n )}\n {isLoading && <LinearLoadIndicator />}\n </div>\n </>\n ) : (\n <>\n <FacetViewHeader title={caption} className={styles.header} />\n <Typography className={styles.noData}>{i18n.text('No data')}</Typography>\n </>\n )}\n </BasicView>\n );\n};\n","import {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {pick, prop} from 'ramda';\nimport {Entity, getPathsTree, isTempUri, updateTreesWithNewEntity} from '@reltio/mdm-sdk';\nimport {useDidUpdateEffect, useSafePromise} from '@reltio/components';\nimport {Response, Node} from '../types';\n\nlet nodeCounter = 0;\nexport const generateId = () => nodeCounter++;\n\nconst processResponse = (response: Response) => {\n const fakeRoot = {\n children: [] as Node[],\n nodeId: generateId()\n };\n if (response.parentPaths) {\n for (let i = 0; i < response.parentPaths.length; i++) {\n const path = response.parentPaths[i];\n let nextRoot = fakeRoot;\n for (let j = path.length - 1; j >= 0; j--) {\n const nextParent = path[j];\n const entity = response.entities[nextParent.entityUri];\n const isRoot = j === path.length - 1;\n const node: Node = {\n entity,\n children: [],\n nodeId: generateId(),\n expanded: true,\n rootIndex: isRoot ? i + 1 : undefined\n };\n if (isRoot) {\n node.root = isRoot;\n }\n nextRoot.children.push(node);\n nextRoot = node;\n }\n }\n }\n return fakeRoot.children;\n};\nexport const useLoadPaths = (entityUri: string, graphUri: string) => {\n const safePromise = useSafePromise();\n const [treeData, setTreeData] = useState<Node[]>([]);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity);\n useDidUpdateEffect(() => {\n const forest = treeData\n .map((tree, index) => ({tree, index}))\n .reduce((acc, tree) => ({...acc, [tree.index]: {root: tree.tree}}), {});\n const newTrees = updateTreesWithNewEntity(pick(['uri', 'label', 'secondaryLabel', 'type'], entity), forest);\n setTreeData(newTrees.map(prop('root')));\n }, [entity?.updatedTime]);\n useEffect(() => {\n if (!isTempUri(entityUri)) {\n safePromise(getPathsTree({uri: entityUri, graphUri}))\n .then(processResponse)\n .then(setTreeData)\n .catch((e) => {\n console.warn(e);\n });\n }\n return () => {\n setTreeData([]);\n };\n }, [entityUri, graphUri, safePromise]);\n return {treeData, setTreeData};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: {\n fontSize: '13px',\n display: 'flex',\n paddingTop: '6px',\n position: 'relative'\n },\n title: {\n flexGrow: 1,\n minHeight: '15px',\n color: theme.palette.secondary.main,\n lineHeight: '15px'\n },\n link: {\n cursor: 'pointer',\n color: theme.palette.secondary.main,\n lineHeight: '15px'\n },\n selected: {\n fontWeight: 'bold'\n },\n wrapper: {\n width: '100%'\n },\n avatar: {\n height: '16px',\n width: '16px',\n marginRight: '8px',\n marginLeft: '8px'\n },\n header: {\n padding: '0 4px 0 16px'\n },\n treeContainer: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '372px',\n maxHeight: '507px',\n overflow: 'auto'\n },\n tree: {\n flexGrow: 1,\n height: 0\n },\n buttonsContainer: {\n flexShrink: 0,\n marginLeft: 'auto',\n '& > * + *': {\n marginLeft: '-4px'\n }\n },\n button: {\n padding: '8px'\n }\n}));\n","import React from 'react';\nimport {HierarchyPathsViewConfig} from '../../types';\n\nexport const ConfigContext = React.createContext<HierarchyPathsViewConfig>(null);\n","import React, {memo, useCallback, useContext} from 'react';\nimport classnames from 'classnames';\nimport {Avatar as Avatar} from '@material-ui/core';\nimport {useStyles} from './styles';\nimport DEFAULT_ICON from './defaultTypeIcon.png';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdm, {ui} from '@reltio/mdm-module';\nimport {ConfigContext} from './ConfigContext';\nimport {getAbsoluteImageUrl, getEntityType, getPropWithInheritance, getEntityLink} from '@reltio/mdm-sdk';\nimport {Link} from '@reltio/components';\nimport {Node as NodeType} from './types';\n\nconst onImageLoadFail = (e) => {\n e.target.src = DEFAULT_ICON;\n};\n\ntype Props = {\n node?: NodeType;\n};\n\nexport const Node = ({node}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const uri = node.entity.uri;\n const absoluteImagePath = useSelector(mdm.selectors.getAbsoluteImagePath);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const config = useContext(ConfigContext);\n const uiPath = useSelector(mdm.selectors.getUIPath);\n const {uri: currentEntityUri} = useSelector(mdm.selectors.getEntity);\n const entityLink = getEntityLink({uiPath, uri});\n const isSelected = uri === currentEntityUri;\n const onTitleClick = useCallback(() => {\n dispatch(ui.actions.openEntity({uri, viewId: config.id}));\n }, [dispatch, config, uri]);\n const {\n entity: {label: title},\n nodeId\n } = node;\n const entityType = getEntityType(metadata, node.entity.type) || {};\n const entityTypeGraphIcon = getPropWithInheritance(metadata, entityType, 'typeGraphIcon');\n const icon = entityTypeGraphIcon && getAbsoluteImageUrl(absoluteImagePath, entityTypeGraphIcon);\n return (\n <div className={styles.wrapper} data-node-id={nodeId}>\n <div className={styles.container}>\n <Avatar className={classnames(styles.avatar)} src={icon || DEFAULT_ICON} onError={onImageLoadFail} />\n <span className={classnames(styles.link, {[styles.selected]: isSelected})}>\n <Link to={entityLink} onClick={onTitleClick}>\n {title}\n </Link>\n </span>\n </div>\n </div>\n );\n};\n\nexport default memo(Node);\n","export const getNodeKey = ({node}) => node.nodeId;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n lineBlock: {\n height: '100%',\n position: 'relative',\n display: 'inline-block'\n },\n lineChildren: {\n height: '100%',\n position: 'absolute',\n display: 'inline-block'\n },\n rootIndex: {\n display: 'flex',\n alignItems: 'center',\n color: 'rgba(0,0,0,0.54)',\n height: '100%'\n },\n verticalLine: {\n width: '1px',\n left: '50%',\n top: 0,\n height: '50%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n horizontalLineRight: {\n height: '1px',\n top: '14px',\n left: '50%',\n width: '24%',\n position: 'absolute',\n backgroundColor: 'rgba(0,122,193,0.3)'\n },\n node: {\n minWidth: '100%',\n position: 'relative',\n textAlign: 'left',\n padding: '0 24px 0 18px',\n boxSizing: 'border-box',\n whiteSpace: 'normal',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.06)'\n }\n },\n nodeContent: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n paddingLeft: '18px',\n boxSizing: 'border-box'\n },\n row: {\n display: 'flex'\n },\n rowContents: {\n position: 'relative',\n borderLeft: 'none',\n paddingLeft: '4px',\n flex: '1 1 auto',\n width: 0,\n display: 'flex',\n verticalAlign: 'middle',\n boxSizing: 'border-box'\n },\n buttonWrapper: {\n display: 'flex',\n paddingTop: '13px',\n width: '12px',\n cursor: 'pointer'\n },\n collapsedButton: {\n transform: 'rotate(-90deg)'\n },\n expandedButton: {\n transform: 'rotate(0deg)'\n },\n button: {\n transition: 'transform .15s ease',\n width: 0,\n height: 0,\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid rgba(0, 0, 0, 0.54)'\n },\n rowTitle: {\n flex: '1 1 auto',\n width: 0,\n paddingRight: '11px'\n }\n}));\n","import React from 'react';\nimport {useStyles} from './styles';\nimport classnames from 'classnames';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\ntype Props = {\n treeIndex: number;\n scaffoldBlockPxWidth: number;\n node: Node;\n path: Array<string | number>;\n style?: Record<string, unknown>;\n title: React.ReactElement;\n toggleChildrenVisibility: (props) => void;\n};\n\nconst NodeRendererDefault = (props: Props) => {\n const {scaffoldBlockPxWidth, toggleChildrenVisibility, node, title, path, treeIndex, style, ...otherProps} = omit(\n [\n 'connectDragPreview',\n 'connectDragSource',\n 'isDragging',\n 'canDrop',\n 'canDrag',\n 'draggedNode',\n 'isSearchMatch',\n 'isSearchFocus',\n 'buttons',\n 'didDrop',\n 'children',\n 'treeId',\n 'isOver',\n 'parentNode',\n 'rowDirection'\n ],\n props\n );\n const nodeTitle = title;\n\n const showToggleChildrenButton =\n toggleChildrenVisibility && !node.root && node.children && node.children.length > 0;\n\n const onToggle = () => {\n toggleChildrenVisibility({\n node,\n path,\n treeIndex\n });\n };\n const styles = useStyles();\n return (\n <div style={{height: '100%'}} {...otherProps} key={node.nodeId}>\n {showToggleChildrenButton && node.expanded && (\n <div style={{width: scaffoldBlockPxWidth - 2}} className={styles.lineChildren} />\n )}\n <div className={styles.row} style={style}>\n <div className={styles.rowContents}>\n {showToggleChildrenButton && (\n <div className={styles.buttonWrapper} onClick={onToggle}>\n <div\n aria-label={node.expanded ? 'Collapse' : 'Expand'}\n className={classnames(\n styles.button,\n node.expanded ? styles.expandedButton : styles.collapsedButton\n )}\n />\n </div>\n )}\n <div className={styles.rowTitle}>\n {typeof nodeTitle === 'function'\n ? nodeTitle({\n node,\n path,\n treeIndex\n })\n : nodeTitle}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NodeRendererDefault;\n","import treeNodeRenderer from './tree-node-data-renderer';\nimport nodeContentRenderer from './node-content-renderer';\n\nconst scaffoldBlockPxWidth = 16;\nconst rowHeight = 28;\nconst slideRegionSize = 50;\n\nexport const theme = {nodeContentRenderer, treeNodeRenderer, scaffoldBlockPxWidth, rowHeight, slideRegionSize};\n","import React from 'react';\nimport {useStyles} from './styles';\nimport {omit} from 'ramda';\nimport {Node} from '../types';\n\nconst MIN_NODE_CONTENT_WIDTH = 250;\n\ntype Props = {\n scaffoldBlockPxWidth: number;\n lowerSiblingCounts: number[];\n\n node: Node;\n children: React.ReactElement;\n style?: Record<string, unknown>;\n};\n\nconst TreeNode = (props: Props) => {\n const {children, scaffoldBlockPxWidth, lowerSiblingCounts, node, ...otherProps} = omit(\n [\n 'listIndex',\n 'swapFrom',\n 'swapLength',\n 'swapDepth',\n 'draggedNode',\n 'getPrevRow',\n 'connectDropTarget',\n 'isOver',\n 'canDrop',\n 'treeIndex',\n 'treeId',\n 'path',\n 'rowDirection'\n ],\n props\n );\n const styles = useStyles();\n // Construct the scaffold representing the structure of the tree\n const scaffoldBlockCount = lowerSiblingCounts.length;\n const scaffold = [];\n lowerSiblingCounts.forEach((lowerSiblingCount, i) => {\n scaffold.push(\n <div key={`pre_${1 + i}`} style={{width: scaffoldBlockPxWidth}} className={styles.lineBlock}>\n {node.root && <div className={styles.rootIndex}>{node.rootIndex}.</div>}\n {i === scaffoldBlockCount - 1 && i !== 0 && (\n <>\n <div className={styles.verticalLine} />\n <div className={styles.horizontalLineRight} />\n </>\n )}\n </div>\n );\n });\n\n const shift = node.root ? scaffoldBlockPxWidth - 4 : 0; //4px - shifting for rootIndex\n const scaffoldWidth = scaffoldBlockPxWidth * scaffoldBlockCount - shift;\n const style = {left: scaffoldWidth, width: `calc(100% - ${scaffoldWidth}px`};\n const width = `${scaffoldWidth + MIN_NODE_CONTENT_WIDTH}px`;\n const nodeStyle = {...otherProps.style, width};\n return (\n <div {...otherProps} className={styles.node} style={nodeStyle}>\n {scaffold}\n\n <div className={styles.nodeContent} style={style}>\n {children}\n </div>\n </div>\n );\n};\n\nexport default TreeNode;\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\",\n fillOpacity: \".54\"\n}, React.createElement(\"path\", {\n d: \"M14.5 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm4 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm-17 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM4 4a2 2 0 110-4 2 2 0 010 4zm1 16a2 2 0 110-4 2 2 0 010 4zm4.5-6a4.5 4.5 0 110-9 4.5 4.5 0 010 9zm0-2a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm6 5a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\",\n fill: \"#000\"\n}))));","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {FacetViewHeader, SmallIconButtonWithTooltip} from '@reltio/components';\nimport ShowGraphIcon from './icons/ShowGraph.svg';\nimport {useStyles} from './styles';\n\ntype Props = {\n title?: string;\n onGraphOpen: () => void;\n};\n\nconst HierarchyPathsHeader = ({title, onGraphOpen}: Props) => {\n const styles = useStyles();\n return (\n <FacetViewHeader title={title} className={styles.header}>\n <div className={styles.buttonsContainer}>\n <SmallIconButtonWithTooltip\n className={styles.button}\n tooltipTitle={i18n.text('Show Graph')}\n icon={ShowGraphIcon}\n onClick={onGraphOpen}\n size=\"L\"\n />\n </div>\n </FacetViewHeader>\n );\n};\n\nexport default HierarchyPathsHeader;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n position: 'relative'\n },\n bodyWrapper: {\n paddingTop: '21px'\n }\n}));\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n resizableHandleContainer: {\n position: 'relative',\n width: '100%',\n height: 'inherit'\n },\n resizableHandleVisibilityArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '24px',\n zIndex: 11,\n '&:hover $resizableHandle': {\n visibility: 'visible'\n },\n '.react-grid-item.static &:hover $resizableHandle': {\n visibility: 'hidden'\n }\n },\n resizableHandle: {\n position: 'absolute',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n top: '-3px',\n zIndex: 11,\n cursor: 'move',\n visibility: 'hidden'\n },\n dragIcon: {\n transform: 'translateX(-50%) rotate(90deg)',\n color: 'rgba(0, 0, 0, 0.3)'\n }\n});\n","import React, {ComponentType} from 'react';\nimport classnames from 'classnames';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\nimport {useStyles} from './styles';\n\nconst withResizableHandle = <P extends unknown>(Component: ComponentType<P>) => {\n const WithResizableHandle = (props: P) => {\n const styles = useStyles();\n return (\n <div className={styles.resizableHandleContainer}>\n <div className={styles.resizableHandleVisibilityArea}>\n <div className={classnames('viewDraggableHandle', styles.resizableHandle)}>\n <DragIndicatorIcon className={styles.dragIcon} />\n </div>\n </div>\n <Component {...props} />\n </div>\n );\n };\n\n WithResizableHandle.displayName = 'WithResizableHandle';\n return WithResizableHandle;\n};\n\nexport default withResizableHandle;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n stubView: {\n padding: '20px'\n },\n fullHeight: {\n height: '100%'\n },\n component: {\n boxSizing: 'border-box',\n overflow: 'auto',\n boxShadow: 'none',\n borderRadius: 'unset'\n }\n});\n","import {useEffect, useState} from 'react';\nimport {both, gt, lt, path, pipe} from 'ramda';\nimport {resolve} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nconst filterWrongLat = pipe(path(['point', 'lat']), both(gt(90), lt(-90)));\n\nexport const useMarkers = (entity, metadata, mapKey) => {\n const [markers, setMarkers] = useState([]);\n const [loading, setLoading] = useState(true);\n const safePromise = useSafePromise();\n useEffect(() => {\n setLoading(true);\n safePromise(resolve(metadata, [entity], mapKey))\n .then((markers) => {\n setMarkers(markers.filter(filterWrongLat));\n })\n .catch(() => {\n setMarkers([]);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [entity, metadata, mapKey, safePromise]);\n\n return {markers, loading};\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(() => ({\n root: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n fullHeight: {\n height: '100%'\n },\n fullscreenBtn: {\n position: 'absolute',\n right: '5px',\n top: '5px',\n zIndex: 100\n }\n}));\n\nexport default useStyles;\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n caption: {\n color: theme.palette.text.secondary,\n fontSize: '13px'\n }\n}));\n\nexport default useStyles;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport useStyles from './styles';\n\ntype ImageLineCaptionProps = {\n totalImages: number;\n};\n\nexport const ImageLineCaption = ({totalImages}: ImageLineCaptionProps) => {\n const styles = useStyles();\n const photoWord = totalImages > 1 ? i18n.text('photos') : i18n.text('photo');\n return (\n <Typography variant=\"caption\" className={styles.caption}>\n {`${totalImages} ${photoWord}`}\n </Typography>\n );\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pipe, pathOr} from 'ramda';\nimport {EditableImageAttributesLine} from '@reltio/components';\nimport {AttributeType, Entity, Paging, AttributeItem} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewConfig} from '../../../types';\nimport {IMAGE_SIZE} from '../ImageAttributeView';\nimport {ImageLineCaption} from '../ImageLineCaption/ImageLineCaption';\n\ntype ImageAttributeViewEditableContentProps = {\n config: ImageAttributeViewConfig;\n attributeType: AttributeType;\n paging?: Paging;\n requestNextPageOfAttributeValues?: (payload: RequestNextPageOfAttributeValuesPayload) => void;\n};\n\nexport const ImageAttributeViewEditableContent = ({\n config,\n attributeType,\n paging,\n requestNextPageOfAttributeValues\n}: ImageAttributeViewEditableContentProps) => {\n const dispatch = useDispatch();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const modifiedEntity = useSelector(\n (state) => mdmModule.selectors.getModifiedEntity(state, entity.uri) || ({} as Entity)\n );\n const modifiedEntityValues = pathOr([], ['attributes', attributeType.name], modifiedEntity);\n const viewId = config.id;\n\n const onChangeAttribute = (params: AttributeItem) =>\n pipe(profile.actions.modifyAttribute, dispatch)({...params, viewId});\n\n const onDeleteAttribute = (params: AttributeItem) =>\n pipe(profile.actions.removeAttribute, dispatch)({...params, viewId});\n\n return (\n <>\n <EditableImageAttributesLine\n attributeValues={modifiedEntityValues}\n attributeType={attributeType}\n onDeleteAttribute={onDeleteAttribute}\n parentUri={modifiedEntity.uri}\n onChangeAttribute={onChangeAttribute}\n imageSize={IMAGE_SIZE}\n paging={paging}\n requestNextPageOfAttributeValues={requestNextPageOfAttributeValues}\n />\n <ImageLineCaption totalImages={modifiedEntityValues.length} />\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: '8px 16px'\n },\n noData: {\n fontSize: '13px',\n color: theme.palette.text.secondary\n }\n}));\n\nexport default useStyles;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {pathOr, path} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {Typography as Typography} from '@material-ui/core';\nimport {BasicView, FacetViewHeader, ImageAttributesLine} from '@reltio/components';\nimport {findAttributeTypeByUri, isEditableMode} from '@reltio/mdm-sdk';\nimport mdmModule, {profile, RequestNextPageOfAttributeValuesPayload} from '@reltio/mdm-module';\nimport {ImageAttributeViewConfig} from '../../types';\nimport {ImageAttributeViewEditableContent} from './ImageAttributeViewEditableContent/ImageAttributeViewEditableContent';\nimport {ImageLineCaption} from './ImageLineCaption/ImageLineCaption';\nimport useStyles from './styles';\n\ntype ImageAttributeViewProps = {\n config: ImageAttributeViewConfig;\n className?: string;\n};\n\nexport const IMAGE_SIZE = {\n imageMargin: 4,\n imageWidth: 162,\n imageHeight: 162\n};\n\nexport const ImageAttributeView = ({config, className}: ImageAttributeViewProps) => {\n const {attributeUri} = config;\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const mode = useSelector(mdmModule.selectors.getMode);\n const entity = useSelector(mdmModule.selectors.getEntityWithDiff);\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n\n const attributeType = findAttributeTypeByUri(metadata, attributeUri);\n const entityValues = pathOr([], ['attributes', attributeType?.name], entity);\n const paging = path(['attributes', 'paging', attributeUri], entity);\n const totalValues = entityValues.length;\n\n const noDataText = config['text-empty'] || i18n.text('No data found');\n\n const requestNextPageOfAttributeValues = useCallback(\n (payload: RequestNextPageOfAttributeValuesPayload) =>\n dispatch(profile.actions.requestNextPageOfAttributeValues(payload)),\n [dispatch]\n );\n\n const renderContent = () => {\n if (attributeType) {\n if (isEditableMode(mode)) {\n const props = {\n attributeType,\n config,\n paging,\n requestNextPageOfAttributeValues\n };\n return <ImageAttributeViewEditableContent {...props} />;\n }\n if (totalValues > 0) {\n const props = {\n attributeValues: entityValues,\n attributeType,\n imageSize: IMAGE_SIZE,\n paging,\n parentUri: entity.uri,\n requestNextPageOfAttributeValues\n };\n return (\n <>\n <ImageAttributesLine {...props} />\n <ImageLineCaption totalImages={totalValues} />\n </>\n );\n }\n }\n\n return <Typography className={styles.noData}>{noDataText}</Typography>;\n };\n return (\n <BasicView className={className}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.container}>{renderContent()}</div>\n </BasicView>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n matchesContainer: {\n position: 'relative'\n },\n footer: {\n display: 'flex',\n alignItems: 'end',\n flexGrow: 1,\n justifyContent: 'flex-start',\n borderTop: '1px solid rgba(0,0,0, 0.12)',\n padding: '8px 16px',\n color: theme.palette.primary.main,\n fontSize: '13px',\n letterSpacing: '0',\n lineHeight: '15px'\n },\n noData: {\n paddingLeft: '16px',\n paddingBottom: '16px',\n fontSize: '13px',\n color: 'rgba(0,0,0,0.54)'\n }\n}));\n","import {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {getActionPermissionForMatch, PotentialMatch} from '@reltio/mdm-sdk';\nimport React, {useCallback, useContext, useMemo} from 'react';\nimport {ActionButtonMode, MergeButton, NotMatchButton, ViewIdContext} from '@reltio/components';\nimport {ProfilePotentialMatchesViewConfig} from '../../types';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n match: PotentialMatch;\n onStartRequest: () => void;\n onFinishRequest: () => void;\n};\nexport const ActionButtons = ({config, match, onStartRequest, onFinishRequest}: Props) => {\n const dispatch = useDispatch();\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n const {canMerge, canMark} = getActionPermissionForMatch(metadata, config, match.object, entity, match.matchRules);\n const entities = useMemo(() => {\n return [match.object];\n }, [match.object]);\n\n const actionButtonProps = {\n entity,\n entities,\n mode: ActionButtonMode.iconButton,\n onStartRequest\n };\n const viewId = useContext(ViewIdContext);\n const onMergeFinish = useCallback(() => {\n onFinishRequest();\n dispatch(profile.entity.actions.loadEntity({viewId, uri: entity.uri}));\n }, [dispatch, entity.uri, onFinishRequest, viewId]);\n return (\n <>\n {canMerge && <MergeButton {...actionButtonProps} onFinishRequest={onMergeFinish} />}\n {canMark && <NotMatchButton {...actionButtonProps} onFinishRequest={onFinishRequest} />}\n </>\n );\n};\n","import {\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n CommentsContainer,\n ProfileMatchCard,\n useMatchesLoader\n} from '@reltio/components';\nimport {CollaborationObjectTypes, createObjectIdForPM, createRelatedObjectUris, PotentialMatch} from '@reltio/mdm-sdk';\nimport {ActionButtons} from './ActionButtons';\nimport React from 'react';\nimport {ProfilePotentialMatchesViewConfig} from '../../types';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = Pick<ReturnType<typeof useMatchesLoader>, 'entitiesMap'> & {\n config: ProfilePotentialMatchesViewConfig;\n match: PotentialMatch;\n onFinishRequest: () => void;\n onStartRequest: () => void;\n};\n\nexport const MatchCard = ({config, entitiesMap, match, onFinishRequest, onStartRequest}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const entity = useSelector(mdmModule.selectors.getEntity);\n return (\n <ProfileMatchCard\n match={match}\n entity={entity}\n entitiesMap={entitiesMap}\n metadata={metadata}\n className={COMMENTS_CONTAINER_VISIBILITY_AREA}\n >\n <CommentsContainer\n uri={createObjectIdForPM(entity.uri, match.object.uri)}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.POTENTIAL_MATCH, {\n entityUri: entity.uri,\n matchEntityUri: match.object.uri\n })}\n objectType={CollaborationObjectTypes.POTENTIAL_MATCH}\n />\n <ActionButtons\n match={match}\n config={config}\n onStartRequest={onStartRequest}\n onFinishRequest={onFinishRequest}\n />\n </ProfileMatchCard>\n );\n};\n","import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isEmpty, map} from 'ramda';\nimport {Link as Link} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {\n BasicView,\n CollaborationContext,\n EntitiesMapContext,\n FacetViewHeader,\n LinearLoadIndicator,\n useMatchesLoader,\n ViewIdContext\n} from '@reltio/components';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {\n getEntityUriForLink,\n getEntityUriFromMatchObject,\n getPotentialMatchesObjectIdsForCollaboration\n} from '@reltio/mdm-sdk';\nimport {ProfilePotentialMatchesViewConfig} from '../../types';\nimport {useStyles} from './styles';\nimport {MatchCard} from './MatchCard';\n\ntype Props = {\n config: ProfilePotentialMatchesViewConfig;\n className?: string;\n};\n\nexport const DEFAULT_MATCHES_LIMIT = 3;\nexport const DEFAULT_OPTIONS = {\n showTransitiveMatches: true,\n showInactiveEntities: false\n};\nexport const DEFAULT_SORTING = {order: 'asc', field: 'score'};\nenum ComponentStates {\n Loading,\n NoData,\n Loaded\n}\nexport const ProfilePotentialMatchesView = ({config, className}: Props) => {\n const styles = useStyles();\n const entity = useSelector(mdmModule.selectors.getEntity);\n const entityUri = getEntityUriForLink(entity);\n\n const [isLoading, setIsLoading] = useState(false);\n const turnOnDisableSpinner = useCallback(() => {\n setIsLoading(true);\n }, []);\n const turnOffDisableSpinner = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const {matches, entitiesMap, loadMatches, total} = useMatchesLoader({\n enabled: !!entityUri,\n entity,\n options: DEFAULT_OPTIONS,\n filter: '',\n page: 0,\n sorting: DEFAULT_SORTING,\n rowsPerPage: DEFAULT_MATCHES_LIMIT,\n onStartLoading: turnOnDisableSpinner,\n onFinishLoading: turnOffDisableSpinner\n });\n const onFinishMatchAction = useCallback(() => {\n loadMatches();\n }, [loadMatches]);\n\n const dispatch = useDispatch();\n const viewId = useContext(ViewIdContext);\n const openPotentialMatchPerspective = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'potentialMatches', viewId}));\n }, [dispatch, viewId]);\n\n const objectIds = useMemo(\n () => getPotentialMatchesObjectIdsForCollaboration(entityUri, map(getEntityUriFromMatchObject, matches)),\n [entityUri, matches]\n );\n\n const {getCommentsCount} = useContext(CollaborationContext);\n useEffect(() => {\n getCommentsCount(objectIds);\n }, [getCommentsCount, objectIds]);\n\n const showSeeAll = total > DEFAULT_MATCHES_LIMIT && !isEmpty(matches);\n const getComponentState = () => {\n if (isLoading) {\n return ComponentStates.Loading;\n }\n if (isEmpty(matches)) {\n return ComponentStates.NoData;\n }\n return ComponentStates.Loaded;\n };\n const state = getComponentState();\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <BasicView className={classnames(styles.root, className)}>\n <FacetViewHeader title={config.caption} />\n <div className={styles.matchesContainer}>\n {state === ComponentStates.Loading && <LinearLoadIndicator />}\n {state === ComponentStates.NoData && (\n <Typography className={styles.noData}>{i18n.text('No matches found')}</Typography>\n )}\n {state === ComponentStates.Loaded &&\n matches.map((match) => (\n <MatchCard\n config={config}\n entitiesMap={entitiesMap}\n match={match}\n onFinishRequest={onFinishMatchAction}\n onStartRequest={turnOnDisableSpinner}\n key={match.object.uri}\n />\n ))}\n </div>\n {showSeeAll && (\n <>\n <div className={styles.footer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n onClick={openPotentialMatchPerspective}\n underline=\"none\"\n >\n {i18n.text('See all')}\n </Link>\n </div>\n </>\n )}\n </BasicView>\n </EntitiesMapContext.Provider>\n );\n};\n","import React, {lazy} from 'react';\nimport {Store} from 'redux';\nimport {CustomViewConfig, ProfileViewConfig, ProfileViewTypes} from '@reltio/mdm-sdk';\nimport {\n AttributeViewConfig,\n EntityMapViewConfig,\n ProfilePotentialMatchesViewConfig,\n RelationsViewConfig,\n ImageAttributeViewConfig,\n SingleAttributeViewConfig,\n HierarchyPathsViewConfig\n} from '../../types';\nimport {ProfileAttributesView} from '../ProfileAttributesView/ProfileAttributesView';\nimport {ProfileSingleAttributeView} from '../ProfileSingleAttributeView/ProfileSingleAttributeView';\nimport {ProfileRelationsView} from '../ProfileRelationsView/ProfileRelationsView';\nimport {ProfileTableAttributeView} from '../ProfileTableAttributeView/ProfileTableAttributeView';\nimport {HierarchyPathsView} from '../HierarchyPathsView';\nimport {CustomView} from '../Sandbox/CustomView';\nimport withResizableHandle from './HOCs/withResizableHandle';\nimport {StubView} from './StubView';\nimport EntityMapView from '../EntityMapView/EntityMapView';\nimport {ImageAttributeView} from '../ImageAttributeView/ImageAttributeView';\nimport {ProfilePotentialMatchesView} from '../ProfilePotentialMatchesView/ProfilePotentialMatchesView';\n\nconst ResizableStubView = withResizableHandle(StubView);\nexport const ResizableProfileAttributesView = withResizableHandle(ProfileAttributesView);\nexport const ResizableProfileSingleAttributeView = withResizableHandle(ProfileSingleAttributeView);\nexport const ResizableProfileTableAttributeView = withResizableHandle(ProfileTableAttributeView);\nexport const ResizableProfileRelationsView = withResizableHandle(ProfileRelationsView);\nexport const ResizableCustomView = withResizableHandle(CustomView);\nexport const ResizableHierarchyPathView = withResizableHandle(HierarchyPathsView);\nexport const ResizableProfilePotentialMatchesView = withResizableHandle(ProfilePotentialMatchesView);\n\nexport const ResizableHierarchyTreeView = lazy(() =>\n import('@reltio/hierarchy-tree').then((importedModule) => ({\n default: withResizableHandle(importedModule.HierarchyTreeView)\n }))\n);\n\nexport const ResizableRelationshipsTableView = lazy(() =>\n import('@reltio/relations-table').then((importedModule) => ({\n default: withResizableHandle(importedModule.RelationshipsTableView)\n }))\n);\nexport const ResizableEntityMapView = withResizableHandle(EntityMapView);\nexport const ResizableImageAttributeView = withResizableHandle(ImageAttributeView);\n\nexport type ViewComponentProps = {\n store: Store<unknown>;\n config:\n | ProfileViewConfig\n | AttributeViewConfig\n | SingleAttributeViewConfig\n | RelationsViewConfig\n | EntityMapViewConfig\n | ImageAttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n isAutosize?: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nclass ViewsFactory {\n static ViewTypes = ProfileViewTypes;\n static getComponentBy = (\n propName: string,\n {store, config, className, isFullscreen, onToggleFullscreen}: ViewComponentProps\n ) => {\n switch (config[propName]) {\n case ViewsFactory.ViewTypes.HierarchyTree:\n return <ResizableHierarchyTreeView config={config} store={store} className={className} />;\n case ViewsFactory.ViewTypes.HierarchyPaths:\n return <ResizableHierarchyPathView config={config as HierarchyPathsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.RelationsTable:\n return <ResizableRelationshipsTableView config={config} store={store} className={className} />;\n case ViewsFactory.ViewTypes.Relations:\n return <ResizableProfileRelationsView config={config as RelationsViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.Attributes:\n return <ResizableProfileAttributesView className={className} config={config as AttributeViewConfig} />;\n case ViewsFactory.ViewTypes.SingleAttributeView:\n return (\n <ResizableProfileSingleAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.TableAttributeView:\n return (\n <ResizableProfileTableAttributeView\n config={config as SingleAttributeViewConfig}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.MapView:\n return (\n <ResizableEntityMapView\n config={config as EntityMapViewConfig}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n className={className}\n />\n );\n case ViewsFactory.ViewTypes.CustomView:\n return <ResizableCustomView config={config as CustomViewConfig} className={className} />;\n case ViewsFactory.ViewTypes.ImageAttributeView:\n return (\n <ResizableImageAttributeView config={config as ImageAttributeViewConfig} className={className} />\n );\n case ViewsFactory.ViewTypes.PotentialMatchesView:\n return (\n <ResizableProfilePotentialMatchesView\n config={config as ProfilePotentialMatchesViewConfig}\n className={className}\n />\n );\n }\n };\n static getComponent = (props: ViewComponentProps) => {\n return (\n ViewsFactory.getComponentBy('class', props) ||\n ViewsFactory.getComponentBy('react-class', props) || <ResizableStubView className={props.className} />\n );\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {BasicView} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n};\n\nconst StubView = ({className}: Props) => {\n const styles = useStyles();\n return (\n <BasicView className={classnames(styles.stubView, 'viewDraggableHandle', className)}>NOT IMPLEMENTED</BasicView>\n );\n};\n\nexport {StubView};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '../../types';\nimport {SingleAttributeContext} from './contexts/SingleAttributeContext';\nimport {SingleAttributeView} from './components/SingleAttributeView/SingleAttributeView';\nimport {useSingleAttribute} from './hooks/useSingleAttribute';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileSingleAttributeView = ({className, config}: Props) => {\n const singleAttribute = useSingleAttribute(config);\n\n return (\n <SingleAttributeContext.Provider value={singleAttribute}>\n <SingleAttributeView config={config} className={className} />\n </SingleAttributeContext.Provider>\n );\n};\n","import {useState, useMemo, useCallback} from 'react';\nimport {SingleAttributeViewConfig} from '../../../types';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\n\nexport const useSingleAttribute = (config: SingleAttributeViewConfig) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [page, setPage] = useState(0);\n const [showInactive, setShowInactive] = useState(false);\n const params = useMemo(() => ({page, searchQuery, showInactive}), [page, searchQuery, showInactive]);\n const attribute = useSingleAttributeLoader(config, params, true);\n const toggleShowInactive = useCallback(() => {\n setPage(0);\n setShowInactive((showInactive) => !showInactive);\n }, []);\n\n return {\n setSearchQuery,\n searchQuery,\n setPage,\n page,\n toggleShowInactive,\n showInactive,\n ...attribute\n };\n};\n","import React from 'react';\nimport {SingleAttributeViewConfig} from '../../types';\nimport {TableAttributeContext} from './contexts/TableAttributeContext';\nimport {useTableAttribute} from './hooks/useTableAttribute';\nimport {TableAttributeView} from './components/TableAttributeView/TableAttributeView';\n\ntype Props = {\n config: SingleAttributeViewConfig;\n className?: string;\n};\n\nexport const ProfileTableAttributeView = ({config, className}: Props) => {\n const tableAttribute = useTableAttribute(config);\n\n return (\n <TableAttributeContext.Provider value={tableAttribute}>\n {config && <TableAttributeView config={config} className={className} />}\n </TableAttributeContext.Provider>\n );\n};\n","import {useMemo, useReducer} from 'react';\nimport {reject, isNil, pipe, not, prop} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {findAttributeTypeByUri, isComplexAttribute} from '@reltio/mdm-sdk';\nimport mdm from '@reltio/mdm-module';\nimport {useActions} from '@reltio/components';\nimport reducer, {actions} from './reducer';\nimport {SingleAttributeViewConfig} from '../../../types';\nimport {getColumnsData} from '../helpers/tableAttributeHelpers';\nimport {useSingleAttributeLoader} from '../../hooks/useSingleAttributeLoader';\nimport {buildMDMFilters} from './helpers';\n\nconst DEFAULT_COUNT_COLUMN = 5;\n\nexport const useTableAttribute = (config: SingleAttributeViewConfig) => {\n const {attributeUri} = config;\n const metadata = useSelector(mdm.selectors.getMetadata);\n const attributeType = useMemo(() => findAttributeTypeByUri(metadata, attributeUri), [metadata, attributeUri]);\n const allColumnsData = useMemo(() => getColumnsData(attributeType), [attributeType]);\n const initialState = useMemo(\n () => ({\n searchQuery: '',\n filters: null,\n sorting: undefined,\n visibleColumns: allColumnsData\n .filter(pipe(prop('dataTypeDefinition'), isComplexAttribute, not))\n .map(({id}) => id)\n .slice(0, DEFAULT_COUNT_COLUMN),\n page: 0\n }),\n [allColumnsData]\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const {searchQuery, filters, sorting, page} = state;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode);\n\n const requestFilters = useMemo(() => {\n const mdmFilters = buildMDMFilters(allColumnsData, filters);\n return mdmFilters.length ? mdmFilters : null;\n }, [filters, allColumnsData]);\n\n const params = useMemo(() => reject(isNil, {filters: requestFilters, page, sorting, searchQuery}), [\n requestFilters,\n page,\n sorting,\n searchQuery\n ]);\n const {changeSearchQuery, changePage, toggleSort, changeFilter, toggleFilters, changeColumns} = useActions({\n actions,\n dispatch\n });\n const attribute = useSingleAttributeLoader(config, params, false);\n const showTable = Boolean(\n (attribute?.values?.length || requestFilters || searchQuery || isEditableMode) &&\n attributeType &&\n !attributeType.hidden\n );\n return {\n ...state,\n setSearchQuery: changeSearchQuery,\n setPage: changePage,\n onSort: toggleSort,\n onFilter: changeFilter,\n onToggleFilters: toggleFilters,\n onChangeColumns: changeColumns,\n showTable,\n ...attribute\n };\n};\n","import {propEq} from 'ramda';\nimport {Maybe} from '@reltio/mdm-sdk';\nimport {ColumnData, ColumnFilter, columnFilterToMdmFilter} from '@reltio/components';\n\nexport const buildMDMFilters = (columnsData: ColumnData[], filters: {[key: string]: ColumnFilter}) =>\n Maybe.fromNull(filters)\n .map((filters) =>\n Object.entries(filters).map(([columnId, columnFilter]) => {\n const columnData = columnsData.find(propEq('id', columnId));\n return columnFilterToMdmFilter(columnData, columnFilter);\n })\n )\n .orSome([]);\n","import React from 'react';\nimport RelationsView from './components/RelationsView';\nimport {RelationsViewStateContext} from './contexts/RelationsViewStateContext';\nimport useRelationsState from './hooks/useRelationsState';\nimport {RelationsViewConfig} from '../../types';\n\ntype Props = {\n config: RelationsViewConfig;\n onResize?: (width: number, height: number) => void;\n className?: string;\n};\n\nexport const ProfileRelationsView = ({config, className}: Props) => {\n const relationsState = useRelationsState(config);\n return (\n <RelationsViewStateContext.Provider value={relationsState}>\n <RelationsView config={config} className={className} />\n </RelationsViewStateContext.Provider>\n );\n};\n","import React, {useRef, useEffect} from 'react';\nimport {useAPI} from '@reltio/components';\nimport {CustomViewConfig} from '@reltio/mdm-sdk';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport {isNil, reject} from 'ramda';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n config: CustomViewConfig;\n className?: string;\n};\n\nexport const CustomView = ({config, className}: Props) => {\n const basicViewRef = useRef<HTMLDivElement>();\n const {height, width, tooltip: defaultTooltip} = config;\n const {html, visible, tooltip: updatedTooltip, customStyles} = useAPI(config);\n const styles = useStyles();\n const tooltip = updatedTooltip || defaultTooltip;\n useEffect(() => {\n if (basicViewRef.current && html) {\n basicViewRef.current.innerHTML = '';\n html.childNodes.forEach((child) => {\n basicViewRef.current.appendChild(child);\n });\n }\n }, [html]);\n if (!visible) return null;\n const style: {width?: number; height?: number} = reject(isNil, {width, height});\n const component = (\n <div ref={basicViewRef} style={{...style, ...customStyles}} className={classnames(styles.root, className)} />\n );\n return (\n <div className={styles.bodyWrapper}>{tooltip ? <Tooltip title={tooltip}>{component}</Tooltip> : component}</div>\n );\n};\n","import React, {useCallback} from 'react';\nimport {BasicView, ReactSortableTree} from '@reltio/components';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {useLoadPaths} from './hooks/useLoadPaths';\nimport {Node} from './Node';\nimport {useStyles} from './styles';\nimport {ConfigContext} from './ConfigContext';\nimport {HierarchyPathsViewConfig} from '../../types';\nimport {getNodeKey} from './helpers';\nimport {theme} from './theme';\nimport HierarchyPathsHeader from './HierarchyPathsHeader';\n\ntype Props = {\n className?: string;\n config: HierarchyPathsViewConfig;\n};\n\nexport const HierarchyPathsView = ({config, className}: Props) => {\n const entityUri = useSelector(mdmModule.selectors.getEntityUri);\n const {treeData, setTreeData} = useLoadPaths(entityUri, config.graph.type);\n const styles = useStyles();\n const dispatch = useDispatch();\n const {id, graph} = config;\n const openGraph = useCallback(() => {\n dispatch(ui.actions.openGraph({viewId: id, graphType: graph.type}));\n }, [dispatch, id, graph]);\n const generateNodeProps = useCallback(\n (rowInfo) => ({\n title: <Node node={rowInfo.node} />\n }),\n []\n );\n return (\n <BasicView className={className}>\n <HierarchyPathsHeader onGraphOpen={openGraph} title={config.caption} />\n <ConfigContext.Provider value={config}>\n <div className={styles.treeContainer}>\n <div className={styles.tree}>\n <ReactSortableTree\n isVirtualized={false}\n treeData={treeData}\n canDrag={false}\n theme={theme}\n generateNodeProps={generateNodeProps}\n onChange={setTreeData}\n getNodeKey={getNodeKey}\n />\n </div>\n </div>\n </ConfigContext.Provider>\n </BasicView>\n );\n};\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdm from '@reltio/mdm-module';\nimport FullscreenIcon from '@material-ui/icons/Fullscreen';\nimport FullscreenExitIcon from '@material-ui/icons/FullscreenExit';\nimport {BasicView, LinearLoadIndicator, ReltioMap} from '@reltio/components';\nimport {SmallIconButton} from '@reltio/components';\n\nimport {AttributeViewConfig} from '../../types';\nimport {useMarkers} from './useMarkers';\nimport useStyles from './styles';\n\ntype EntityMapViewProps = {\n config: AttributeViewConfig;\n className?: string;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n};\n\nexport const EntityMapView = ({config, isFullscreen, onToggleFullscreen, className}: EntityMapViewProps) => {\n const styles = useStyles();\n const metadata = useSelector(mdm.selectors.getMetadata);\n const entity = useSelector(mdm.selectors.getEntity);\n const mapKey = useSelector(mdm.selectors.getGoogleMapKey);\n const {markers, loading} = useMarkers(entity, metadata, mapKey);\n const loadingElement = useMemo(\n () => (\n <div className={styles.fullHeight}>\n <LinearLoadIndicator />\n </div>\n ),\n [styles]\n );\n\n const defaultCenter = useMemo(() => ({lat: 0, lng: 0}), []);\n const mapOptions = useMemo(() => ({mapTypeControl: true}), []);\n\n return (\n mapKey && (\n <BasicView className={classnames(styles.root, className)}>\n {loading && <LinearLoadIndicator />}\n <SmallIconButton\n size=\"S\"\n icon={isFullscreen ? FullscreenExitIcon : FullscreenIcon}\n onClick={() => onToggleFullscreen(config.id)}\n className={styles.fullscreenBtn}\n />\n\n <ReltioMap\n loadingElement={loadingElement}\n defaultZoom={1}\n defaultCenter={defaultCenter}\n markers={markers}\n mapContainerClassName={styles.fullHeight}\n mapKey={mapKey}\n mapOptions={mapOptions}\n />\n </BasicView>\n )\n );\n};\n\nexport default EntityMapView;\n","import React, {memo, Suspense} from 'react';\nimport classnames from 'classnames';\nimport ViewsFactory, {ViewComponentProps} from './ViewsFactory';\nimport {useStyles} from './styles';\n\nconst Fallback = () => null;\n\nconst ViewComponent = memo(({config, store, isFullscreen, isAutosize, onToggleFullscreen}: ViewComponentProps) => {\n const styles = useStyles();\n return (\n <Suspense fallback={<Fallback />}>\n {ViewsFactory.getComponent({\n config,\n store,\n className: classnames(styles.component, {[styles.fullHeight]: !isAutosize}),\n isFullscreen,\n onToggleFullscreen\n })}\n </Suspense>\n );\n});\n\nViewComponent.displayName = 'ViewComponent';\n\nexport {ViewComponent};\n","import {makeStyles, Theme} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme: Theme & {basicView: Record<string, string | number>}) => ({\n item: theme.basicView,\n fixedSizeContainer: {\n height: '100%'\n }\n}));\n","import React, {ReactChildren, ReactNode, useContext} from 'react';\nimport {omit} from 'ramda';\nimport {ReactReduxContext} from 'react-redux';\nimport {ReactGridLayoutItem} from '@reltio/components';\nimport {CustomScript, CustomScriptPlatform, ProfileViewConfig} from '@reltio/mdm-sdk';\nimport {ViewComponent} from '../views/ViewComponent';\nimport ViewsFactory from '../views/ViewsFactory';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n layoutItemConfig: ReactGridLayoutItem;\n views: ProfileViewConfig[];\n className?: string;\n children?: ReactChildren;\n style?: Record<string, unknown>;\n isFullscreen: boolean;\n onToggleFullscreen: (id: string) => void;\n AutosizeComponent?: ReactNode;\n};\n\nconst omittingProps = ['onConfigChanged', 'onRemove'];\n\nconst ProfileLayoutItem = ({\n layoutItemConfig,\n views,\n className,\n children: ResizeComponent,\n style,\n isFullscreen,\n onToggleFullscreen,\n AutosizeComponent,\n ...props\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n const styles = useStyles();\n\n const {store} = useContext(ReactReduxContext);\n if (!config) {\n return null;\n }\n const isCustomView = config.class === ViewsFactory.ViewTypes.CustomView;\n if (isCustomView && (config?.action as CustomScript)?.platform === CustomScriptPlatform.CLASSIC) {\n return null;\n }\n\n return (\n <div\n {...omit(omittingProps, props)}\n style={style}\n className={classnames(className, {[styles.item]: !isCustomView})}\n >\n <div className={classnames({[styles.fixedSizeContainer]: !AutosizeComponent})}>\n {AutosizeComponent}\n <ViewComponent\n store={store}\n config={config}\n isFullscreen={isFullscreen}\n onToggleFullscreen={onToggleFullscreen}\n isAutosize={Boolean(AutosizeComponent)}\n />\n </div>\n {ResizeComponent}\n </div>\n );\n};\n\nexport {ProfileLayoutItem};\n","import React from 'react';\nimport {ReltioGridLayout} from '@reltio/components';\nimport {ProfileViewConfig} from '@reltio/mdm-sdk';\n\nimport {Layout} from '../../types';\nimport {ProfileLayoutItem} from '../ProfileLayoutItem';\n\ntype Props = {\n views: ProfileViewConfig[];\n layout?: Layout;\n layoutOptions?: Record<string, unknown>;\n onLayoutChanged: (layout: Layout) => void;\n};\n\nconst ProfileLayout = ({views, layout, layoutOptions, onLayoutChanged}: Props) => {\n return (\n <ReltioGridLayout\n LayoutItem={ProfileLayoutItem}\n views={views}\n layout={layout}\n layoutOptions={layoutOptions}\n onLayoutChanged={onLayoutChanged}\n draggableHandle=\".viewDraggableHandle\"\n />\n );\n};\n\nexport {ProfileLayout};\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: \"19\",\n height: \"17\",\n viewBox: \"0 0 19 17\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M14 17v2H4v-2h10zm6-4v2H4v-2l12.884.001H17l.116-.002L20 13zm-8.457-2H4V9h5.82a8.465 8.465 0 001.723 2zM9.139 6.178l-.289.733.035.088L4 7V5l5.713-.002c-.22.375-.412.768-.574 1.18zM17 2.82a6.451 6.451 0 00-6 4.09 6.451 6.451 0 006 4.092 6.451 6.451 0 006-4.091 6.451 6.451 0 00-6-4.091zm0 6.815a2.728 2.728 0 010-5.455 2.728 2.728 0 010 5.455zm0-4.365c-.905 0-1.636.73-1.636 1.636 0 .906.73 1.637 1.636 1.637.905 0 1.636-.731 1.636-1.637 0-.905-.73-1.636-1.636-1.636z\",\n id: \"svg1467685497a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", {\n transform: \"translate(-4 -2.5)\"\n}, React.createElement(\"mask\", {\n id: \"svg1467685497b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg1467685497a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg1467685497b)\",\n d: \"M0 0h24v24H0z\"\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 version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M20.222 6C21.21 6 22 6.8 22 7.778v12.444C22 21.2 21.209 22 20.222 22H7.778C6.79 22 6 21.2 6 20.222V7.778C6 6.8 6.791 6 7.778 6h12.444zM20 8H8v12h12V8zM4 18H2V4c0-1.1.9-2 2-2h14v2H4v14z\",\n id: \"svg2383396984a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"mask\", {\n id: \"svg2383396984b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2383396984a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2383396984b)\",\n d: \"M0 0h24v24H0z\"\n}))));","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n editingButtons: {\n display: 'flex',\n '& button + button': {\n width: '88px',\n marginLeft: '8px'\n }\n },\n searchResults: {\n width: '150px',\n height: '25px',\n backgroundColor: '#ccc'\n },\n comments: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: '10px'\n }\n});\n","import {useCallback, useMemo} from 'react';\nimport {\n includes,\n pipe,\n isNil,\n propOr,\n filter,\n map,\n prop,\n cond,\n identity,\n omit,\n find,\n complement,\n when,\n either,\n pick,\n always,\n T\n} from 'ramda';\nimport {\n BaseCloneAction,\n CloneAction,\n Entity,\n getEntityType,\n isReference,\n isRelationWithEntityType,\n getRelationTypeUriFromAttrType\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {useDispatch, useSelector} from 'react-redux';\n\ntype Props = {\n cloneAction?: CloneAction[];\n onCloneDiscard: () => void;\n};\n\nexport const useCloneAction = ({cloneAction: cloneActionProp, onCloneDiscard}: Props) => {\n const entity: Entity = useSelector(mdm.selectors.getEntityWithoutDiff);\n const metadata = useSelector(mdm.selectors.getMetadata);\n const dispatch = useDispatch();\n const entityTypeUri = entity?.type;\n const relationTypes = metadata.relationTypes;\n const isRelationSuitableForEntityType = useCallback(isRelationWithEntityType(metadata, entityTypeUri), [\n metadata,\n entityTypeUri\n ]);\n const entityType = getEntityType(metadata, entityTypeUri);\n const cloneAction = useMemo<BaseCloneAction>(\n () =>\n when(\n complement(isNil),\n pipe(\n find(pipe(propOr([], 'entityTypeUris'), either(includes(entityTypeUri), includes('*')))),\n when(complement(isNil), omit(['entityTypeUris']))\n )\n )(cloneActionProp),\n [cloneActionProp, entityTypeUri]\n );\n const onClone = useCallback(() => {\n if (cloneAction) {\n const modifiedRelationTypes: string[] = pipe(\n prop('relationshipTypesToCopy'),\n cond([\n [\n isNil,\n pipe(\n always(entityType),\n propOr([], 'attributes'),\n filter(isReference),\n map(getRelationTypeUriFromAttrType)\n )\n ],\n [\n includes('*'),\n pipe(always(relationTypes || []), map(prop('uri')), filter(isRelationSuitableForEntityType))\n ],\n [T, identity]\n ])\n )(cloneAction);\n dispatch(\n profile.entity.actions.entityCloneRequested({\n data: {\n ...pick(['attributeReplacementMapping'], cloneAction),\n relationshipTypesToCopy: modifiedRelationTypes\n },\n entityUri: entity.uri\n })\n );\n }\n onCloneDiscard();\n }, [cloneAction, onCloneDiscard, entityType, relationTypes, entity.uri, isRelationSuitableForEntityType]);\n return cloneAction ? onClone : undefined;\n};\n","import React, {useCallback, useMemo, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport classnames from 'classnames';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Box as Box} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\nimport {SvgIcon as SvgIcon} from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\n\nimport {\n getEntityType,\n Entity,\n checkMetadataPermission,\n isDataTenantEntity,\n isTempUri,\n MetadataPermissions,\n ModeTypes,\n Mode,\n isSuggestMode,\n isEditableMode,\n CollaborationObjectTypes,\n createRelatedObjectUris,\n Operation,\n ProfileBandConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {profile} from '@reltio/mdm-module';\nimport {\n ProfileBand,\n ModeSwitcherSelect,\n CommentsContainer,\n COMMENTS_CONTAINER_VISIBILITY_AREA,\n ProfileBandNavigation,\n ProfileBandHistory,\n ConfirmationDialog\n} from '@reltio/components';\n\nimport SuggestSvg from './suggest.svg';\nimport CopySvg from './copy.svg';\n\nimport {useStyles} from './styles';\nimport {useCloneAction} from './hooks/useCloneAction';\n\ntype Props = {\n className?: string;\n profileBandConfig?: ProfileBandConfig;\n};\n\nconst SuggestIcon = (props) => (\n <SvgIcon {...props}>\n <SuggestSvg />\n </SvgIcon>\n);\n\nconst CopyIcon = (props) => (\n <SvgIcon {...props}>\n <CopySvg />\n </SvgIcon>\n);\n\ntype Group = {\n label: string;\n value: string;\n description: string;\n icon: React.ElementType;\n permission: string;\n onClick?: (value: string) => void;\n};\n\nconst filterGroupByPermissions = <T extends Group>(\n group: T[],\n entityType,\n isTempEntity: boolean,\n isWorkflowEnabled?: boolean,\n canStartProcessInstanceSearchQuery?: boolean\n): T[] =>\n group.filter(({value, permission}) => {\n if (isTempEntity && !isEditableMode(value)) return false;\n if ((!isWorkflowEnabled || !canStartProcessInstanceSearchQuery) && isSuggestMode(value)) return false;\n return checkMetadataPermission(permission, entityType);\n });\n\nconst hasOnlyReadPermission = (entityType) => {\n return (\n checkMetadataPermission(MetadataPermissions.READ, entityType) &&\n !checkMetadataPermission(MetadataPermissions.UPDATE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.DELETE, entityType) &&\n !checkMetadataPermission(MetadataPermissions.INITIATE_CHANGE_REQUEST, entityType)\n );\n};\n\nexport const PerspectiveProfileBand = ({className, profileBandConfig}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n const canStartProcessInstanceSearchQuery = useSelector(mdm.selectors.getCanUserStartProcessFromQuery);\n const entity = useSelector(mdm.selectors.getEntityWithoutDiff) as Entity;\n const modifiedEntity = useSelector((state) => mdm.selectors.getModifiedEntity(state, entity.uri));\n const metadata = useSelector(mdm.selectors.getMetadata);\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const mode = useSelector(mdm.selectors.getMode) as Mode;\n const isEditableMode = useSelector(mdm.selectors.getIsEditableMode) as boolean;\n const isViewMode = useSelector(mdm.selectors.getIsViewMode) as boolean;\n const isHistoryModeEnabled = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const profileOperation = useSelector(mdm.selectors.getProfileOperation);\n const entityTypeUri = entity?.type;\n const entityType = useMemo(() => getEntityType(metadata, entityTypeUri), [entityTypeUri, metadata]);\n const isOperationSaving = profileOperation === Operation.Saving;\n const isOperationCloning = profileOperation === Operation.Cloning;\n const isDisabledButtons = isOperationCloning || isOperationSaving;\n const [openCloneConfirmationDialog, setOpenCloneConfirmationDialog] = useState(false);\n const onCloneDiscard = useCallback(() => {\n setOpenCloneConfirmationDialog(false);\n }, []);\n const onClone = useCloneAction({cloneAction: profileBandConfig?.cloneAction, onCloneDiscard});\n const OPTIONS_GROUP = useMemo(\n () => [\n {\n label: i18n.text('Editing'),\n value: ModeTypes.EDITING,\n description: i18n.text('Edit profile directly'),\n icon: CreateIcon,\n permission: 'UPDATE'\n },\n {\n label: i18n.text('Suggesting'),\n value: ModeTypes.SUGGESTING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: SuggestIcon,\n permission: 'INITIATE_CHANGE_REQUEST'\n },\n {\n label: i18n.text('Viewing'),\n value: ModeTypes.VIEWING,\n description: i18n.text('Suggest changes and initiate a workflow review'),\n icon: VisibilityIcon,\n permission: 'READ'\n }\n ],\n []\n );\n\n const BUTTONS_GROUP = useMemo(\n () => [\n ...(onClone\n ? [\n {\n label: i18n.text('Clone'),\n value: 'Clone',\n description: i18n.text('Create a copy of the profile'),\n icon: CopyIcon,\n onClick: () => setOpenCloneConfirmationDialog(true),\n permission: 'CREATE'\n }\n ]\n : []),\n {\n label: i18n.text('Delete'),\n value: 'Delete',\n description: i18n.text('Permanently delete profile'),\n icon: DeleteIcon,\n onClick: () => {\n const conf = window.confirm(i18n.text('Are you sure you want to delete this?'));\n if (conf) {\n dispatch(profile.entity.actions.entityRemoveRequested({entityUri: entity.uri}));\n }\n },\n permission: 'DELETE'\n }\n ],\n [dispatch, entity.uri, onClone]\n );\n\n const shouldShowSelect = !isHistoryModeEnabled && !isDataTenantEntity(entity) && !hasOnlyReadPermission(entityType);\n\n const isTempEntity = isTempUri(entity?.uri);\n\n const accessibleOptionsGroup = useMemo(() => {\n return filterGroupByPermissions(\n OPTIONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [OPTIONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n const accessibleButtonsGroup = useMemo(() => {\n return filterGroupByPermissions(\n BUTTONS_GROUP,\n entityType,\n isTempEntity,\n isWorkflowEnabled,\n canStartProcessInstanceSearchQuery\n );\n }, [BUTTONS_GROUP, entityType, isWorkflowEnabled, canStartProcessInstanceSearchQuery, isTempEntity]);\n\n const handleChange = useCallback(\n (value: Mode) => {\n dispatch(profile.mode.actions.modeUpdated(value));\n },\n [dispatch]\n );\n\n const onCancel = useCallback(() => {\n dispatch(profile.mode.actions.modeCancelEditing());\n }, [dispatch]);\n\n const handleSave = useCallback(() => {\n dispatch(profile.actions.saveProfile());\n }, [dispatch]);\n\n return (\n <>\n <ProfileBand\n className={classnames(className, COMMENTS_CONTAINER_VISIBILITY_AREA)}\n entity={isEditableMode && modifiedEntity ? modifiedEntity : entity}\n showEntityId={profileBandConfig?.showEntityId}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={3}>\n {isEditableMode && (\n <Box className={styles.editingButtons}>\n <Button\n variant=\"outlined\"\n onClick={onCancel}\n data-reltio-id=\"reltio-profile-cancel-editing\"\n disabled={isDisabledButtons}\n >\n {i18n.text('Cancel')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n data-reltio-id=\"reltio-profile-save-profile\"\n onClick={handleSave}\n disabled={isDisabledButtons}\n >\n {isSuggestMode(mode) ? i18n.text('Suggest') : i18n.text('Save')}\n </Button>\n </Box>\n )}\n {isHistoryModeEnabled && isViewMode ? (\n <ProfileBandHistory />\n ) : (\n isViewMode && <ProfileBandNavigation />\n )}\n </Box>\n {shouldShowSelect && (\n <ModeSwitcherSelect\n optionsGroup={accessibleOptionsGroup}\n buttonsGroup={accessibleButtonsGroup}\n value={mode}\n onChange={handleChange}\n disabled={isDisabledButtons}\n />\n )}\n </Box>\n <Box className={styles.comments}>\n <CommentsContainer\n uri={entity.uri}\n relatedObjectUris={createRelatedObjectUris(CollaborationObjectTypes.ENTITY, {\n entityUri: entity.uri\n })}\n objectType={CollaborationObjectTypes.ENTITY}\n />\n </Box>\n </ProfileBand>\n {!!onClone && (\n <ConfirmationDialog\n open={openCloneConfirmationDialog}\n title={i18n.text('Do you want to create a clone of the profile?')}\n content={i18n.text(\n 'Cloning will create a copy of the current profile. You can modify the cloned profile in the next step. Are you sure you want to proceed?'\n )}\n onSave={onClone}\n onDiscard={onCloneDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n )}\n </>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n overflow: 'hidden',\n marginLeft: 'auto',\n flexShrink: 0\n },\n badge: {\n fontSize: '12px',\n height: '18px',\n minWidth: '18px',\n backgroundColor: '#FF4081',\n color: '#FFF'\n },\n badgePosition: {\n right: '5px'\n }\n});\n","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport {WorkflowTasksContext} from '@reltio/components';\nimport InboxIcon from '@material-ui/icons/Inbox';\nimport {useStyles} from '../../styles';\n\nexport const WorkflowButton: VFC = () => {\n const {total} = useContext(WorkflowTasksContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={total}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <InboxIcon />\n </Badge>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n paddingRight: '12px'\n },\n showMoreLink: {\n display: 'flex',\n margin: '16px'\n },\n showMoreIcon: {\n fontSize: '1rem'\n }\n});\n","import React, {useContext, useEffect} from 'react';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {CollaborationContext, CollaborationItem, EntitiesMapContext, useCommentsEntitiesMap} from '@reltio/components';\nimport {Box as Box} from '@material-ui/core';\nimport {Link as Link} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport {useStyles} from './styles';\n\nexport const CollaborationList = () => {\n const styles = useStyles();\n const {getComments, comments, pageToken} = useContext(CollaborationContext);\n const entityUri = useSelector(mdm.selectors.getEntityUriWithDataTenant);\n\n useEffect(() => {\n getComments(entityUri);\n }, [getComments, entityUri]);\n\n const handleShowMoreComments = () => {\n getComments(entityUri, pageToken);\n };\n\n const entitiesMap = useCommentsEntitiesMap(comments);\n\n return (\n <EntitiesMapContext.Provider value={entitiesMap}>\n <Box className={styles.wrapper}>\n {comments.map((comment) => {\n const {objectId, relatedObjectUris, objectType, commentId} = comment;\n return (\n <CollaborationItem\n key={commentId}\n uri={objectId}\n relatedObjectUris={relatedObjectUris}\n objectType={objectType}\n comment={comment}\n />\n );\n })}\n {pageToken && (\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.showMoreLink}\n onClick={handleShowMoreComments}\n underline=\"none\"\n >\n <KeyboardArrowDownIcon className={styles.showMoreIcon} />\n {i18n.text('Show more')}\n </Link>\n )}\n </Box>\n </EntitiesMapContext.Provider>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n wrapper: {\n overflow: 'auto',\n position: 'relative',\n height: '100%'\n }\n});\n","import React, {useContext} from 'react';\nimport {LinearLoadIndicator, WorkflowTaskCard, WorkflowTasksContext} from '@reltio/components';\nimport {useStyles} from './styles';\n\nexport const WorkflowList = () => {\n const styles = useStyles();\n const {tasks, loading} = useContext(WorkflowTasksContext);\n\n return (\n <div className={styles.wrapper}>\n {loading && <LinearLoadIndicator />}\n {tasks &&\n tasks.map((task) => {\n return <WorkflowTaskCard key={task.taskId} task={task} />;\n })}\n </div>\n );\n};\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: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n}, props), React.createElement(\"defs\", null, React.createElement(\"path\", {\n d: \"M4 17.17L5.17 16H20V4H4v13.17zM20 2c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H6l-4 4V4c0-1.1.9-2 2-2h16zm-3 9H7v2h10v-2zm0-4H7v2h10V7z\",\n id: \"svg2697213709a\"\n})), React.createElement(\"g\", {\n stroke: \"none\",\n strokeWidth: \"1\",\n fill: \"none\",\n fillRule: \"evenodd\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", {\n transform: \"translate(-2 -2)\"\n}, React.createElement(\"mask\", {\n id: \"svg2697213709b\",\n fill: \"#fff\"\n}, React.createElement(\"use\", {\n xlinkHref: \"#svg2697213709a\"\n})), React.createElement(\"path\", {\n fillOpacity: \".54\",\n fill: \"#000\",\n mask: \"url(#svg2697213709b)\",\n d: \"M0 0h24v24H0z\"\n}))))));","import React, {useContext, VFC} from 'react';\nimport {Badge as Badge} from '@material-ui/core';\nimport CollaborationIcon from '../../icons/CollaborationIcon.svg';\nimport {CollaborationContext} from '@reltio/components';\nimport {calcTotalCommentItems} from '@reltio/mdm-sdk';\nimport {useStyles} from '../../styles';\n\nexport const CollaborationButton: VFC = () => {\n const {commentsMap} = useContext(CollaborationContext);\n const styles = useStyles();\n return (\n <Badge\n badgeContent={calcTotalCommentItems(commentsMap)}\n classes={{\n anchorOriginTopRightRectangle: styles.badgePosition,\n badge: styles.badge\n }}\n >\n <CollaborationIcon />\n </Badge>\n );\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst WorkflowPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Ready to go with the flow?')}\n secondaryText={i18n.text(\n 'Suggest a change or submit a match review, and we’ll kick off a workflow task to get things going.'\n )}\n />\n);\n\nexport default WorkflowPanelEmptyState;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {SidePanelEmptyState} from '@reltio/components';\n\nconst CollaborationPanelEmptyState = () => (\n <SidePanelEmptyState\n text={i18n.text('Care to join the conversation?')}\n secondaryText={i18n.text(\n 'Leave comments for team members anywhere in the Profile page, and we’ll record it here.'\n )}\n />\n);\n\nexport default CollaborationPanelEmptyState;\n","import React, {useCallback, useContext, useEffect, useState, VFC} from 'react';\nimport {pipe, propEq, reject, pluck} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {useSelector} from 'react-redux';\nimport {\n CollaborationContext,\n SideButtonsPanel,\n SidePanelContentHeader,\n SidePanel,\n WorkflowTasksContext,\n AddWorkflowButton,\n HistoryView,\n HistoryHeader,\n HistoryPanelEmptyState,\n useHistory,\n useHistoryEnabled\n} from '@reltio/components';\nimport {calcTotalCommentItems, Entity, getEntityType, isTempUri, Metadata} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent} from '@reltio/mdm-module';\nimport HistoryIcon from '@material-ui/icons/History';\nimport {WorkflowButton} from './components/WorkflowButton/WorkflowButton';\nimport {CollaborationList} from './components/CollaborationList/CollaborationList';\nimport {WorkflowList} from './components/WorkflowList/WorkflowList';\nimport {CollaborationButton} from './components/CollaborationButton/CollaborationButton';\nimport WorkflowPanelEmptyState from './components/WorkflowPanelEmptyState/WorkflowPanelEmptyState';\nimport CollaborationPanelEmptyState from './components/CollaborationPanelEmptyState/CollaborationPanelEmptyState';\n\nimport {useStyles} from './styles';\n\nconst DEFAULT_PANEL_WIDTH = 480;\nexport enum ActivePanel {\n Workflow,\n Collaboration,\n History\n}\nconst getSecondTitle = (total: number): string => {\n if (total) {\n return total === 1 ? i18n.text('${total} item', {total}) : i18n.text('${total} items', {total});\n }\n};\n\nexport const RightSidePanel: VFC = () => {\n const styles = useStyles();\n const isWorkflowSideViewEnabled = useSelector(mdm.selectors.isWorkflowSideViewEnabled) as boolean;\n const isWorkflowEnabled = useSelector(mdm.selectors.isWorkflowEnabled) as boolean;\n const isCollaborationSideViewEnabled = useSelector(mdm.selectors.isCollaborationSideViewEnabled) as boolean;\n const isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) as boolean;\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n const metadata: Metadata = useSelector(mdm.selectors.getMetadata);\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n\n const workflowTasksContext = useContext(WorkflowTasksContext);\n const collaborationContext = useContext(CollaborationContext);\n\n const [active, setActive] = useState<ActivePanel>(null);\n const toggleActive = useCallback((newId: ActivePanel): void => {\n setActive((active) => (active === newId ? null : newId));\n }, []);\n const resetActive = useCallback((): void => {\n setActive(null);\n }, []);\n const isOpen = active !== null;\n const isHistoryTabActive = active === ActivePanel.History;\n const {isHistoryEnabled, isProfilePersisted} = useHistoryEnabled({isHistoryTabActive, entity});\n\n const {\n historyFilter,\n onApplyFilter,\n isLoading,\n historicUris,\n historyWithTotal,\n canLoadMore,\n onLoadMore\n } = useHistory({entity, enabled: isHistoryEnabled});\n\n const enabledWorkflowButton = isWorkflowSideViewEnabled && isWorkflowEnabled && !isTempUri(entity?.uri);\n const enabledCollaborationButton = isCollaborationSideViewEnabled && isCollaborationEnabled;\n const collaborationTotal = calcTotalCommentItems(collaborationContext?.commentsMap);\n\n const elements = [\n {\n buttonProps: {\n id: ActivePanel.Workflow,\n icon: WorkflowButton,\n tooltipTitle: i18n.text('Workflow')\n },\n content: workflowTasksContext?.total ? <WorkflowList /> : <WorkflowPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Workflow'),\n secondTitle: getSecondTitle(workflowTasksContext?.total),\n rightContent: <AddWorkflowButton />\n },\n hidden: !enabledWorkflowButton\n },\n {\n buttonProps: {\n id: ActivePanel.Collaboration,\n icon: CollaborationButton,\n tooltipTitle: i18n.text('Collaboration')\n },\n content: collaborationTotal ? <CollaborationList /> : <CollaborationPanelEmptyState />,\n headerProps: {\n mainTitle: i18n.text('Collaboration'),\n secondTitle: getSecondTitle(collaborationTotal)\n },\n hidden: !enabledCollaborationButton\n },\n {\n buttonProps: {\n id: ActivePanel.History,\n icon: HistoryIcon,\n tooltipTitle: i18n.text('History')\n },\n content: isProfilePersisted ? (\n <HistoryView\n isLoading={isLoading}\n historyWithTotal={historyWithTotal}\n contributorsUris={historicUris}\n entityUri={entity?.uri}\n historyEvent={historyEvent}\n onLoadMore={onLoadMore}\n canLoadMore={canLoadMore}\n />\n ) : (\n <HistoryPanelEmptyState />\n ),\n headerProps: {\n content: (\n <HistoryHeader\n total={isProfilePersisted ? (historicUris?.length || 0) + 1 : undefined}\n entityType={getEntityType(metadata, entity?.type)}\n filter={historyFilter}\n onApplyFilter={onApplyFilter}\n />\n )\n }\n }\n ];\n\n const visibleElements = reject(propEq('hidden', true))(elements);\n\n useEffect(() => {\n if (elements[active]?.hidden) {\n resetActive();\n }\n }, [active, elements, resetActive, visibleElements]);\n\n return (\n <div className={styles.wrapper}>\n <SidePanel open={isOpen} width={DEFAULT_PANEL_WIDTH}>\n {!elements[active]?.hidden && (\n <>\n <SidePanelContentHeader {...elements[active]?.headerProps} onClose={resetActive} />\n {elements[active]?.content}\n </>\n )}\n </SidePanel>\n <SideButtonsPanel\n buttonsProps={pipe(reject(propEq('hidden', true)), pluck('buttonProps'))(elements)}\n onButtonClick={toggleActive}\n activeIndexId={active}\n />\n </div>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\nconst accordionSummaryHeight = '48px';\nconst defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';\n\nconst useStyles = makeStyles((theme) => ({\n accordion: {\n borderTop: defaultBorderStyle,\n borderBottom: defaultBorderStyle,\n fontSize: '13px',\n boxShadow: 'none',\n '&:not(:first-child)': {\n borderTop: 0\n },\n '&:before': {\n display: 'none'\n },\n '&$accordionExpanded': {\n margin: 'auto'\n }\n },\n accordionExpanded: {},\n accordionSummary: {\n display: 'flex',\n alignItems: 'center',\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight,\n '&$accordionSummaryExpanded': {\n height: accordionSummaryHeight,\n minHeight: accordionSummaryHeight\n }\n },\n accordionSummaryHeading: {\n flex: 1,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n accordionSummaryExpanded: {},\n accordionSummaryContent: {\n display: 'flex',\n alignItems: 'center'\n },\n accordionDetails: {\n maxHeight: '21vh',\n overflow: 'auto',\n paddingTop: 0,\n paddingBottom: 0,\n '& ul': {\n paddingLeft: '23px',\n marginTop: '3px'\n },\n '& li': {\n paddingLeft: '9px',\n paddingBottom: '8px'\n }\n },\n parents: {\n color: theme.palette.text.primary\n },\n errorsAccordion: {\n backgroundColor: '#FFF4F6',\n borderColor: '#FFB8B3'\n },\n errorsAccordionDetails: {\n color: '#DD2C00'\n },\n warningsAccordion: {\n backgroundColor: '#FFF9ED',\n borderColor: '#FFDD91'\n },\n warningsAccordionDetails: {\n color: '#CC7500'\n },\n icon: {\n marginRight: '8px'\n },\n errorIcon: {\n fill: '#FF1744'\n },\n warningIcon: {\n fill: '#F9A825'\n }\n}));\n\nexport default useStyles;\n","import React, {memo, ReactNode, ElementType} from 'react';\nimport classnames from 'classnames';\nimport {Accordion as Accordion} from '@material-ui/core';\nimport {AccordionSummary as AccordionSummary} from '@material-ui/core';\nimport {AccordionDetails as AccordionDetails} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport useStyles from '../styles';\n\nimport {AttributeError} from '@reltio/mdm-sdk';\n\ntype Props = {\n panels: {\n id: string;\n title: string;\n icon: ReactNode;\n items: AttributeError[];\n accordionClassName: string;\n accordionDetailsClassName: string;\n }[];\n expandedPanelId: string;\n onToggle: (id: string) => (e, isExpanded: boolean) => void;\n ErrorComponent: ElementType;\n};\n\nexport const ErrorsPanel = memo(({panels, expandedPanelId, onToggle, ErrorComponent}: Props) => {\n const styles = useStyles();\n\n return panels.length > 0 ? (\n <div>\n {panels.map(({id, icon, title, items, accordionClassName, accordionDetailsClassName}) => (\n <Accordion\n key={id}\n square\n expanded={expandedPanelId === id}\n onChange={onToggle(id)}\n className={accordionClassName}\n classes={{root: styles.accordion, expanded: styles.accordionExpanded}}\n >\n <AccordionSummary\n classes={{\n root: styles.accordionSummary,\n expanded: styles.accordionSummaryExpanded,\n content: styles.accordionSummaryContent\n }}\n expandIcon={<ExpandMoreIcon />}\n >\n {icon}\n <Typography className={styles.accordionSummaryHeading}>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classnames(styles.accordionDetails, accordionDetailsClassName)}>\n <ul>\n {items.map((error, i) => (\n <ErrorComponent key={i} error={error} />\n ))}\n </ul>\n </AccordionDetails>\n </Accordion>\n ))}\n </div>\n ) : null;\n});\n\nErrorsPanel.displayName = 'ErrorsPanel';\n","import {equals, identity, omit} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n AttributeError,\n AttributeType,\n AttributeValuePathItemType,\n ErrorSource,\n ErrorType,\n findAttributeTypeByUri,\n Metadata\n} from '@reltio/mdm-sdk';\n\nconst clearError = omit(['deactivated', 'path']);\nexport const areErrorsEqual = (errors1: AttributeError[] = [], errors2: AttributeError[] = []) =>\n errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));\n\nexport const getDisplayedErrorMessage = (\n metadata: Metadata,\n {type, source, message, attributeTypeUri = '', attributeType}: AttributeError\n) => {\n if (type === ErrorType.missed && source === ErrorSource.local) {\n const attrType: AttributeType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);\n return attrType ? i18n.text('${attribute} is required', {attribute: attrType.label}) : message;\n }\n return message;\n};\n\nexport const getDisplayedErrorPath = ({path: errorPath, uri}: AttributeError) => {\n return errorPath\n ?.slice(0, uri ? errorPath.length - 1 : errorPath.length)\n .filter(({type}) =>\n [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type)\n )\n .map(({label}) => label)\n .filter(identity)\n .join(' / ');\n};\n","import React, {memo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, Metadata} from '@reltio/mdm-sdk';\n\nimport useStyles from '../styles';\n\nimport {getDisplayedErrorMessage, getDisplayedErrorPath} from '../helpers';\n\ntype Props = {\n error: AttributeError;\n};\n\nexport const Error = memo(({error}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const displayedMessage = getDisplayedErrorMessage(metadata, error);\n const displayedErrorPath = getDisplayedErrorPath(error);\n return (\n <li>\n <span>{displayedMessage}</span>\n {displayedErrorPath && (\n <>\n <br />\n <span className={styles.parents}>{displayedErrorPath}</span>\n </>\n )}\n </li>\n );\n});\n\nError.displayName = 'Error';\n","import {useRef} from 'react';\nimport {areErrorsEqual} from './helpers';\n\nexport const useCachedErrors = (allErrors) => {\n const cacheForAllErrors = useRef(allErrors);\n const areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);\n if (!areEqualErrors) {\n cacheForAllErrors.current = allErrors;\n }\n return cacheForAllErrors.current;\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {partition} from 'ramda';\nimport ErrorIcon from '@material-ui/icons/Warning';\nimport WarningIcon from '@material-ui/icons/Error';\nimport mdmModule from '@reltio/mdm-module';\nimport {AttributeError, isCriticalError} from '@reltio/mdm-sdk';\n\nimport useStyles from './styles';\n\nimport {ErrorsPanel} from './components/ErrorsPanel';\nimport {Error} from './components/Error';\nimport {useCachedErrors} from './useCachedErrors';\n\nexport const ProfileErrorsPanel = () => {\n const styles = useStyles();\n const allErrors = useSelector(mdmModule.selectors.getProfileErrors);\n const cachedAllErrors = useCachedErrors(allErrors);\n\n const [errors, warnings]: [AttributeError[], AttributeError[]] = useMemo(\n () => partition(isCriticalError, cachedAllErrors),\n [cachedAllErrors]\n );\n const [expandedPanelId, setExpandedPanelId] = useState(null);\n const panels = useMemo(\n () =>\n [\n {\n id: 'errors',\n title: i18n.text('${number} ${errors}', {\n number: errors.length,\n errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')\n }),\n icon: <ErrorIcon className={classnames(styles.icon, styles.errorIcon)} />,\n items: errors,\n accordionClassName: styles.errorsAccordion,\n accordionDetailsClassName: styles.errorsAccordionDetails\n },\n {\n id: 'warnings',\n title: i18n.text('${number} ${warnings}', {\n number: warnings.length,\n warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')\n }),\n icon: <WarningIcon className={classnames(styles.icon, styles.warningIcon)} />,\n items: warnings,\n accordionClassName: styles.warningsAccordion,\n accordionDetailsClassName: styles.warningsAccordionDetails\n }\n ].filter(({items}) => items.length > 0),\n [errors, warnings, styles]\n );\n\n useEffect(() => {\n setExpandedPanelId('errors');\n }, [errors]);\n\n const handleChange = useCallback(\n (panelId: string) => (event, isExpanded: boolean) => {\n setExpandedPanelId(isExpanded ? panelId : null);\n },\n []\n );\n\n return panels.length > 0 ? (\n <ErrorsPanel panels={panels} expandedPanelId={expandedPanelId} onToggle={handleChange} ErrorComponent={Error} />\n ) : null;\n};\n","import {makeStyles} from '@material-ui/core/styles';\n\ntype Props = {\n maxWidth?: number;\n};\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 scrollWrapper: {\n flexGrow: 1,\n overflowY: 'auto'\n },\n emptyState: {\n backgroundColor: '#FAFAFA',\n height: '100%'\n },\n profileWrapper: ({maxWidth}: Props) => ({\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n maxWidth: maxWidth ? `${maxWidth}px` : '100%'\n }),\n profileContainer: {\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 {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(() => ({\n closeIcon: {\n paddingRight: '12px',\n boxSizing: 'content-box',\n '& path': {\n fill: '#fff'\n }\n },\n snackbar: {\n '& > div': {\n flexWrap: 'nowrap',\n alignItems: 'baseline'\n }\n }\n}));\n","import {Snackbar as Snackbar} from '@material-ui/core';\nimport {Portal as Portal} from '@material-ui/core';\nimport React, {useCallback, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {Button as Button} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {ConfirmationDialog, SmallIconButton} from '@reltio/components';\nimport {NotificationItem, Action} from './types';\nimport {useStyles} from './styles';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui as mdmModuleUi} from '@reltio/mdm-module';\n\ntype Props = {\n notification: NotificationItem;\n};\n\nconst AUTO_HIDE_DURATION = 5000;\n\nexport const Notification = ({notification}: Props) => {\n const styles = useStyles({});\n const dispatch = useDispatch();\n const autoCloseInterval: number = useSelector(mdmModule.selectors.getAutoCloseInterval);\n const autoHideDuration =\n notification.autoHideDuration || (autoCloseInterval && autoCloseInterval * 1000) || AUTO_HIDE_DURATION;\n const [action, setAction] = useState<Action>();\n const [show, setShow] = useState(true);\n const closeSnackbar = useCallback(\n (_e?: unknown, reason?: string) => {\n if (reason !== 'clickaway') {\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n setShow(false);\n }\n },\n [notification]\n );\n const onDiscard = useCallback(() => {\n action.cancelAction && dispatch(action.cancelAction);\n setAction(undefined);\n }, [action]);\n const onConfirm = useCallback(() => {\n dispatch(action.applyAction);\n setAction(undefined);\n dispatch(mdmModuleUi.actions.closeNotification(notification.id));\n }, [action, notification]);\n\n const actions = (\n <>\n {notification.actions.map((action) => (\n <Button\n key={action.label}\n color=\"primary\"\n size=\"small\"\n onClick={() => {\n if (action.needConfirmation) {\n setAction(action);\n } else {\n dispatch(action.applyAction);\n }\n setShow(false);\n }}\n >\n {action.label}\n </Button>\n ))}\n </>\n );\n const message = (\n <>\n <SmallIconButton className={styles.closeIcon} size=\"S\" icon={CloseIcon} onClick={closeSnackbar} />\n {notification.text}\n </>\n );\n\n return (\n <>\n <Portal container={document.body}>\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={show}\n classes={{root: styles.snackbar}}\n action={actions}\n onClose={closeSnackbar}\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\n message={message}\n />\n </Portal>\n <ConfirmationDialog\n open={!!action}\n title={action?.confirmationText}\n content={action?.confirmationDescription}\n onSave={onConfirm}\n onDiscard={onDiscard}\n saveCaption={i18n.text('Proceed')}\n discardCaption={i18n.text('Cancel')}\n />\n </>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdm from '@reltio/mdm-module';\nimport {NotificationItem} from './types';\nimport {Notification} from './Notification';\n\nexport const Notifications = () => {\n const notifications: NotificationItem[] = useSelector(mdm.selectors.getNotifications);\n if (!notifications) return null;\n return (\n <>\n {notifications.slice(-1).map((n) => (\n <Notification key={n.id} notification={n} />\n ))}\n </>\n );\n};\n","import React, {memo, useCallback, useContext, useEffect, useMemo, useState, useRef} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch, useSelector} from 'react-redux';\nimport hash from 'object-hash';\nimport {\n debounce,\n Entity,\n fixNonUniqViewsIds,\n getProfileObjectIdsForCollaboration,\n ProfilePerspectiveConfig\n} from '@reltio/mdm-sdk';\nimport mdm, {HistoryEvent, profile} from '@reltio/mdm-module';\nimport {\n CollaborationContext,\n WorkflowTasksContext,\n UsersContext,\n EMPTY_STATE_ICONS,\n EMPTY_STATE_VARIANTS,\n EmptyState,\n LinearLoadIndicator,\n ProfilePerspectiveViewContext,\n useSavedStateForEntityType,\n useCollaboration,\n useUsers,\n useWorkflowTasks,\n HistoryDiffContext,\n useHistoryDiff,\n useHistorySlice,\n PopupBoundariesContext\n} from '@reltio/components';\n\nimport {ProfileSavedState, Layout} from '../../types';\n\nimport {ProfileLayout} from '../ProfileLayout';\nimport {PerspectiveProfileBand} from '../PerspectiveProfileBand';\nimport {RightSidePanel} from '../RightSidePanel/RightSidePanel';\nimport {ProfileErrorsPanel} from '../ProfileErrorsPanel';\nimport {useProfileValidation} from '../hooks/useProfileValidation';\n\nimport {useStyles} from './styles';\nimport {Notifications} from '../Notifications';\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: () => Promise<Record<string, ProfileSavedState>>;\n};\n\nconst SAVE_STATE_DEBOUNCE_DELAY = 1000;\nconst emptyState = {} as ProfileSavedState;\nconst ProfilePerspectiveView = memo(({config, saveState, getSavedState}: Props) => {\n const styles = useStyles({maxWidth: config?.maxWidth});\n const dispatch = useDispatch();\n const getSavedStateAndFix = useCallback(() => {\n return getSavedState().then((state) => (state.layout ? {} : state));\n }, [getSavedState]);\n const scrollWrapperRef = useRef<HTMLDivElement>();\n const debouncedSaveState = useCallback(debounce(saveState, SAVE_STATE_DEBOUNCE_DELAY), [saveState]) as (\n state: Record<string, ProfileSavedState>\n ) => void;\n const entity: Entity = useSelector(mdm.selectors.getEntity);\n const entityTypeUri = entity ? entity.type : null;\n\n const {isLoaded, savedState = emptyState, updateSavedState} = useSavedStateForEntityType<ProfileSavedState>({\n getSavedState: getSavedStateAndFix,\n saveState: debouncedSaveState,\n entityTypeUri\n });\n const [layout, setLayout] = useState<Layout>([]);\n const [views, setViews] = useState<ProfilePerspectiveConfig['views']>([]);\n\n const configHash = useMemo(() => hash(config), [config]);\n\n const isHistoryActive = useSelector(mdm.selectors.getIsHistoryModeEnabled);\n const objectIds = useMemo(() => getProfileObjectIdsForCollaboration(entity), [entity]);\n const collaboration = useCollaboration({objectIds});\n const emptyCollaboration = useContext(CollaborationContext);\n const users = useUsers();\n const workflowTasks = useWorkflowTasks(config?.workflow);\n const historyEvent: HistoryEvent = useSelector(mdm.selectors.getHistoryEvent);\n useHistorySlice({entity, historyEvent});\n const historyDiff = useHistoryDiff();\n\n useEffect(() => {\n if (isLoaded) {\n const isConfigChanged = configHash !== savedState.configHash;\n const {views: fixedViews, layout: fixedLayout} = fixNonUniqViewsIds({\n views: isConfigChanged || !savedState.views ? config.views : savedState.views,\n layout: isConfigChanged ? config.layout : savedState.layout\n });\n setViews(fixedViews);\n setLayout(fixedLayout);\n }\n }, [isLoaded, savedState, entityTypeUri]); // eslint-disable-line\n\n useEffect(() => {\n dispatch(profile.views.actions.profileViewsSet(views));\n }, [dispatch, views]);\n\n useEffect(() => {\n if (config.sidePanelViews) {\n dispatch(profile.sidePanelViews.actions.sidePanelViewsLoaded(config.sidePanelViews));\n }\n }, [config]); // eslint-disable-line\n\n useEffect(() => {\n if (scrollWrapperRef.current) {\n scrollWrapperRef.current.scrollTop = 0;\n }\n }, [entity?.uri]);\n\n useProfileValidation();\n\n const handleLayoutChange = useCallback(\n (layout: Layout) => {\n updateSavedState({layout, views, configHash});\n setLayout(layout);\n },\n [updateSavedState, configHash, views]\n );\n const boundariesElement = scrollWrapperRef.current;\n\n const popupBoundariesValue = useMemo(\n () => ({\n element: boundariesElement,\n priority: ['top', 'bottom']\n }),\n [boundariesElement]\n );\n return (\n <ProfilePerspectiveViewContext.Provider value={true}>\n <UsersContext.Provider value={users}>\n <CollaborationContext.Provider value={isHistoryActive ? emptyCollaboration : collaboration}>\n <WorkflowTasksContext.Provider value={workflowTasks}>\n <HistoryDiffContext.Provider value={historyDiff}>\n <div className={styles.perspectiveView}>\n {(!isLoaded || !entity?.uri) && <LinearLoadIndicator />}\n {isLoaded && entity?.uri ? (\n <div className={styles.profileContainer}>\n <div className={styles.profileWrapper}>\n <PerspectiveProfileBand profileBandConfig={config.profileBand} />\n {!isHistoryActive && <ProfileErrorsPanel />}\n <div ref={scrollWrapperRef} className={styles.scrollWrapper}>\n <PopupBoundariesContext.Provider value={popupBoundariesValue}>\n <ProfileLayout\n layout={layout}\n onLayoutChanged={handleLayoutChange}\n views={views}\n />\n </PopupBoundariesContext.Provider>\n </div>\n </div>\n <RightSidePanel />\n </div>\n ) : (\n <div className={styles.emptyState}>\n <EmptyState\n LogoRenderer={EMPTY_STATE_ICONS.NO_DATA}\n text={i18n.text('No data to display.')}\n variant={EMPTY_STATE_VARIANTS.embedded}\n />\n </div>\n )}\n <Notifications />\n </div>\n </HistoryDiffContext.Provider>\n </WorkflowTasksContext.Provider>\n </CollaborationContext.Provider>\n </UsersContext.Provider>\n </ProfilePerspectiveViewContext.Provider>\n );\n});\n\nProfilePerspectiveView.displayName = 'ProfilePerspectiveView';\n\nexport {ProfilePerspectiveView};\n","import {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {profile} from '@reltio/mdm-module';\nimport {debounce, Entity, isDataTenantEntity, isTempUri, Mode} from '@reltio/mdm-sdk';\n\nexport const useProfileValidation = () => {\n const dispatch = useDispatch();\n const isValidateReadMode: boolean = useSelector(mdmModule.selectors.getValidateReadMode);\n const entity: Entity = useSelector(mdmModule.selectors.getEntity) || ({} as Entity);\n const {uri, updatedTime} = entity;\n const isDTEntity = isDataTenantEntity(entity);\n const mode: Mode = useSelector(mdmModule.selectors.getMode);\n const profileViews = useSelector(mdmModule.selectors.getProfileViews);\n const hasProfileViews = profileViews && profileViews.length > 0;\n\n const validate = useCallback(\n debounce((needDispatch: boolean) => {\n if (needDispatch) {\n dispatch(profile.actions.validateProfile());\n }\n }, 500),\n [dispatch]\n );\n\n useEffect(() => {\n const needDispatch =\n isValidateReadMode && !isDTEntity && uri && !isTempUri(uri) && mode === Mode.Viewing && hasProfileViews;\n validate(needDispatch);\n }, [validate, isDTEntity, isValidateReadMode, updatedTime, uri, mode, hasProfileViews]);\n};\n","import React, {useCallback, useMemo} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport MomentUtils from '@date-io/moment';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport {ErrorPopup, SandboxAPIContext, ViewIdContext} from '@reltio/components';\nimport {convertOldProfileConfig, ProfilePerspectiveConfig, promisifyCallback} from '@reltio/mdm-sdk';\nimport {ProfileSavedState} from '../types';\nimport ProfilePerspectiveView from '../components/ProfilePerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'profilePerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: ProfilePerspectiveConfig;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n saveState: (state: Record<string, ProfileSavedState>) => void;\n getSavedState: (clb: (state: Record<string, ProfileSavedState>) => void) => void;\n qxSandboxApi?: {\n getCurrentPerspectiveId: () => string;\n showPerspective: (perspective) => void;\n setEntityUri: (entityUri: string, listener: () => void) => void;\n };\n};\n\nconst ProfilePerspective = ({config, store, onResize = identity, saveState, getSavedState, qxSandboxApi}: Props) => {\n const getSavedStatePromisified: () => Promise<Record<string, ProfileSavedState>> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n\n const processedConfig = useMemo(() => config && convertOldProfileConfig(config), [config]);\n\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={processedConfig?.id}>\n <SandboxAPIContext.Provider value={qxSandboxApi}>\n <StylesProvider generateClassName={generateClassName}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {processedConfig && (\n <ProfilePerspectiveView\n config={processedConfig}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n )}\n <ErrorPopup showErrorFromStore={true} />\n </>\n </MuiPickersUtilsProvider>\n </StylesProvider>\n </SandboxAPIContext.Provider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default ProfilePerspective;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n titleContainer: {\n overflow: 'hidden',\n fontSize: '16px',\n fontWeight: 'normal',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n display: 'flex',\n minHeight: '48px',\n color: theme.palette.text.secondary\n },\n link: {\n fontSize: '16px',\n fontWeight: 'normal'\n },\n icon: {\n height: '18px',\n color: theme.palette.text.secondary\n },\n totalCaption: {\n lineHeight: 'inherit',\n fontSize: '14px',\n color: 'rgba(0,0,0,0.6)',\n flexShrink: 0,\n marginRight: '5px'\n },\n totalNumber: {\n fontSize: '16px',\n color: 'rgba(0,0,0,0.87)',\n marginRight: '5px',\n fontWeight: 500\n }\n}));\n","import React, {useCallback, useContext} from 'react';\nimport {useDispatch} from 'react-redux';\nimport i18n from 'ui-i18n';\nimport {ui as mdmModuleUi} from '@reltio/mdm-module';\nimport {FacetViewHeader, Spacer, ViewIdContext} from '@reltio/components';\nimport {Link as Link} from '@material-ui/core';\nimport ArrowForwardIosRoundedIcon from '@material-ui/icons/ArrowForwardIosRounded';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n total?: number;\n};\n\nexport const TagListHeader = ({total = 0}: Props) => {\n const styles = useStyles();\n const dispatch = useDispatch();\n\n const viewId = useContext(ViewIdContext);\n\n const switchToProfile = useCallback(() => {\n dispatch(mdmModuleUi.actions.openPerspective({perspectiveId: 'profile', viewId}));\n }, [dispatch, viewId]);\n\n return (\n <FacetViewHeader title=\"\">\n <div className={styles.titleContainer}>\n <Link\n component=\"button\"\n variant=\"caption\"\n className={styles.link}\n onClick={switchToProfile}\n underline=\"none\"\n >\n {i18n.text('Profile')}\n </Link>\n <ArrowForwardIosRoundedIcon className={styles.icon} />\n {i18n.text('Tags')}\n </div>\n <Spacer />\n <Typography className={styles.totalCaption} variant=\"caption\">\n <span className={styles.totalNumber}>{i18n.number(total, '0,0')}</span>\n {i18n.text('total profiles')}\n </Typography>\n </FacetViewHeader>\n );\n};\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n toolbar: {\n display: 'flex',\n flexShrink: 0,\n background: 'white',\n borderBottom: '1px solid rgba(0,0,0,0.1)',\n boxSizing: 'border-box',\n paddingLeft: '16px'\n },\n avatar: {\n color: 'rgba(0, 0, 0, 0.38)',\n marginRight: '12px'\n },\n label: {\n fontSize: '20px',\n letterSpacing: '0.25px',\n lineHeight: '1.2',\n fontWeight: 500,\n color: theme.palette.text.primary,\n wordBreak: 'break-word'\n }\n}));\n","import React from 'react';\nimport TagIcon from '@material-ui/icons/LocalOffer';\nimport {Toolbar as Toolbar} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport {useStyles} from './styles';\n\ntype Props = {\n label: string;\n};\n\nexport const TagProfileBand = ({label}: Props) => {\n const styles = useStyles();\n return (\n <Toolbar className={styles.toolbar}>\n <TagIcon className={styles.avatar} />\n <Typography variant=\"h6\" className={styles.label}>\n {label}\n </Typography>\n </Toolbar>\n );\n};\n","import {useCallback, useMemo} from 'react';\nimport {map, assoc} from 'ramda';\nimport {useSelector} from 'react-redux';\nimport {\n Entity,\n getFilteredEntities,\n getFilteredEntitiesFromDataTenant,\n getTotals,\n getTotalFromDataTenant,\n TotalResponse,\n SearchFilter,\n GlobalSearchRequestOptions,\n getDataTenantFromEntityUri\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\ntype Props = {\n entityUri: string;\n tag: string;\n};\n\nexport const useTagsProvider = ({entityUri, tag}: Props) => {\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dtssPath: string = useSelector(mdmModule.selectors.getDtssPath);\n const dataTenant = useMemo(() => getDataTenantFromEntityUri(entityUri), [entityUri]);\n const filters: SearchFilter[] = useMemo(() => {\n return [\n {\n filter: 'equals',\n fieldName: 'tags',\n values: [tag]\n }\n ];\n }, [tag]);\n\n const isDT = !!dataTenant;\n\n const getEntities = useCallback(\n (filters: SearchFilter[] = [], options = {}): Promise<Entity[]> => {\n const requestOptions = {\n select: 'uri,label,type,secondaryLabel,defaultProfilePicValue,startDate,endDate',\n ...options\n };\n return isDT\n ? getFilteredEntitiesFromDataTenant({\n filters,\n options: requestOptions,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n }).then(map(assoc('dataTenant', dataTenant)))\n : getFilteredEntities(filters, requestOptions);\n },\n [isDT, dataTenant, tenant, dtssPath]\n );\n\n const requestEntities = useCallback(\n (max, offset): Promise<Entity[]> => {\n return getEntities(filters, {offset, max, ...globalSearchRequestOptions});\n },\n [filters, globalSearchRequestOptions, getEntities]\n );\n\n const requestTotal = useCallback((): Promise<number> => {\n const options = globalSearchRequestOptions;\n return (isDT\n ? getTotalFromDataTenant({\n filters,\n options,\n customerTenant: tenant,\n dataTenant,\n dtssPath\n })\n : getTotals(filters, options)\n ).then((json) => (json as TotalResponse).total);\n }, [filters, globalSearchRequestOptions, isDT, dataTenant, tenant, dtssPath]);\n\n return {requestEntities, requestTotal};\n};\n","import {makeStyles} from '@material-ui/core/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 overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.default\n },\n tagsContainer: {\n display: 'flex'\n },\n fullHeight: {\n flexGrow: 1,\n height: 0\n },\n tagsView: {\n margin: '16px',\n width: '100%',\n paddingTop: '4px'\n },\n listContainer: {\n flex: 1,\n display: 'flex',\n overflow: 'hidden',\n position: 'relative',\n flexDirection: 'column',\n minHeight: '4px'\n },\n entitiesList: {\n overflowY: 'auto',\n flexGrow: 1\n },\n pagination: {\n flexGrow: 0\n }\n}));\n","import React, {memo, useEffect, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport classnames from 'classnames';\nimport mdmModule from '@reltio/mdm-module';\nimport {GlobalSearchRequestOptions} from '@reltio/mdm-sdk';\nimport {BasicTablePagination, BasicView, LinearLoadIndicator, ProfilesList} from '@reltio/components';\nimport {TagListHeader} from './components/TagListHeader';\nimport {TagProfileBand} from './components/TagProfileBand';\nimport {useTag} from './hooks/useTag';\n\nimport {useStyles} from './styles';\n\nconst ROWS_PER_PAGE_OPTIONS = [25, 50, 100];\n\ntype Props = {\n tag?: string;\n entityUri?: string;\n};\n\nconst TagPerspectiveView = memo(({tag, entityUri}: Props) => {\n const styles = useStyles();\n\n const [rowsPerPage, setRowsPerPage] = useState(ROWS_PER_PAGE_OPTIONS[0]);\n const [page, setPage] = useState(0);\n\n const globalSearchRequestOptions: GlobalSearchRequestOptions = useSelector(\n mdmModule.selectors.getGlobalSearchRequestOptions\n );\n\n useEffect(() => {\n setPage(0);\n }, [tag, entityUri, globalSearchRequestOptions]);\n\n const {isLoading, total, entities} = useTag({tag, entityUri, page, rowsPerPage});\n const refScrollBlock = useRef(null);\n\n useEffect(() => {\n if (refScrollBlock.current) {\n refScrollBlock.current.scrollTop = 0;\n }\n }, [entities]);\n\n const hasPagination = total > ROWS_PER_PAGE_OPTIONS[0];\n\n return (\n <div className={styles.perspectiveView}>\n <TagProfileBand label={tag} />\n <div className={classnames(styles.tagsContainer, {[styles.fullHeight]: hasPagination})}>\n <BasicView className={styles.tagsView}>\n <TagListHeader total={total} />\n <div className={styles.listContainer}>\n {isLoading && <LinearLoadIndicator />}\n {total > 0 && (\n <div className={styles.entitiesList} ref={refScrollBlock}>\n <ProfilesList entities={entities} />\n </div>\n )}\n {hasPagination && (\n <div className={styles.pagination}>\n <BasicTablePagination\n count={total}\n rowsPerPageOptions={ROWS_PER_PAGE_OPTIONS}\n rowsPerPage={rowsPerPage}\n page={page}\n onChangePage={setPage}\n onChangeRowsPerPage={setRowsPerPage}\n />\n </div>\n )}\n </div>\n </BasicView>\n </div>\n </div>\n );\n});\n\nTagPerspectiveView.displayName = 'TagPerspectiveView';\n\nexport {TagPerspectiveView};\n","import {useCallback, useEffect, useState} from 'react';\nimport i18n from 'ui-i18n';\nimport {useDispatch} from 'react-redux';\nimport {useSafePromise} from '@reltio/components';\nimport {ui} from '@reltio/mdm-module';\nimport {Entity, getRequestErrorMessage} from '@reltio/mdm-sdk';\nimport {useTagsProvider} from './useTagsProvider';\n\ntype Props = {\n tag: string;\n entityUri: string;\n page: number;\n rowsPerPage: number;\n};\n\nexport const useTag = ({tag, entityUri, page = 0, rowsPerPage = 50}: Props) => {\n const dispatch = useDispatch();\n\n const safeRequestTotalPromise = useSafePromise();\n const safeRequestEntitiesPromise = useSafePromise();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [total, setTotal] = useState<number>(0);\n const [entities, setEntities] = useState<Entity[]>([]);\n\n const {requestEntities, requestTotal} = useTagsProvider({entityUri, tag});\n\n const onError = useCallback(\n (e) => {\n dispatch(ui.actions.errorSet(getRequestErrorMessage(e, i18n.text('Something went wrong'))));\n setTotal(0);\n },\n [dispatch]\n );\n\n useEffect(() => {\n safeRequestTotalPromise(requestTotal()).then(setTotal).catch(onError);\n }, [requestTotal, safeRequestTotalPromise, onError]);\n\n useEffect(() => {\n setIsLoading(true);\n safeRequestEntitiesPromise(requestEntities(rowsPerPage, page * rowsPerPage))\n .then(setEntities)\n .catch(onError)\n .finally(() => setIsLoading(false));\n }, [page, rowsPerPage, requestEntities, safeRequestEntitiesPromise, onError]);\n\n return {isLoading, total, entities};\n};\n","import React from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {identity} from 'ramda';\nimport {createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {ErrorPopup, ViewIdContext} from '@reltio/components';\nimport {TagPerspectiveConfig} from '@reltio/mdm-sdk';\nimport TagPerspectiveView from '../components/TagPerspectiveView';\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'tagPerspective',\n disableGlobal: true\n});\n\ntype Props = {\n config: TagPerspectiveConfig;\n tag?: string;\n entityUri?: string;\n store: Store<unknown>;\n onResize?: (width: number, height: number) => void;\n};\n\nconst TagPerspective = ({config, tag, entityUri, store, onResize = identity}: Props) => {\n return (\n <Provider store={store}>\n <ViewIdContext.Provider value={config.id}>\n <StylesProvider generateClassName={generateClassName}>\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => onResize(Math.floor(width), Math.floor(height))}\n />\n {config && <TagPerspectiveView tag={tag} entityUri={entityUri} />}\n <ErrorPopup showErrorFromStore={true} />\n </StylesProvider>\n </ViewIdContext.Provider>\n </Provider>\n );\n};\n\nexport default TagPerspective;\n"],"names":["customStyles","input","currentStyles","fontSize","menuPortal","zIndex","useStyles","makeStyles","root","flex","title","paddingBottom","paddingLeft","dropDownInput","width","justifyContent","backgroundColor","borderTop","option","height","noOptionsMessage","entityType","selectedAttributes","className","onChange","disableUnderline","menuPlacement","metadata","useSelector","mdmModule","styles","prepareItems","useCallback","data","level","prevLabel","reduce","acc","item","hidden","chipLabel","label","push","value","uri","attrType","subAttributes","getAttributeTypeSubAttributes","concat","options","useMemo","attributes","classnames","Typography","variant","i18n","MultiSelect","TextFieldProps","InputProps","classes","components","DropdownIndicator","DropdownIndicatorWithIconButton","MultiValue","props","Option","isFocused","isSelected","innerProps","AttributeListItem","checked","labelInText","pipe","defaultTo","menuPortalTarget","document","body","collapseButton","cursor","expandLess","transform","isOpen","tooltipTitle","otherProps","buttonProps","icon","ExpandMore","iconClassName","tooltipProps","SmallIconButton","display","paddingRight","inputNumber","minWidth","marginRight","inputUnit","periods","interval","unit","onFocus","onNumberChange","getValue","parseInt","newValue","onUnitChange","newUnit","TextField","type","inputProps","min","SimpleDropDownSelector","placeholder","capitalize","map","withMuiSkin","CreatableSelect","innerRef","children","selectProps","MenuItem","classNames","ref","selected","component","Checkbox","color","ExpandedValueTooltip","propTypes","PropTypes","id","key","onClick","onMouseMove","onMouseOver","tabIndex","isRequired","current","theme","top","left","undefined","fontWeight","clearIndicator","padding","spacing","margin","dropdownIndicator","creatable","getOptions","loadingIndicator","componentsProp","classesProp","stylesProp","onChangeProp","onInputChange","onInputChangeProp","reactSelectProps","SelectComponent","AsyncSelect","Select","inputValue","setInputValue","useState","multiSelectClasses","omit","inputId","multiSelectComponents","mergeClasses","indicatorSeparator","base","loadingMessage","fontFamily","labelProps","InputLabelProps","htmlFor","shrink","length","isMulti","actionMeta","action","closeMenuOnSelect","hideSelectedOptions","loadOptions","defaultProps","cacheOptions","defaultOptions","ClearIndicator","Control","DownChevron","CrossIcon","Group","GroupHeading","IndicatorsContainer","IndicatorSeparator","Input","LoadingIndicator","Menu","MenuList","MenuPortal","LoadingMessage","NoOptionsMessage","MultiValueContainer","MultiValueLabel","MultiValueRemove","Placeholder","SelectContainer","SingleValue","ValueContainer","control","valueContainer","multiValue","singleValue","menu","container","group","groupHeading","indicatorsContainer","menuList","multiValueLabel","multiValueRemove","getOptionValue","isSearchable","inputRef","selectedUsers","valueToOption","prepareValues","values","tenant","servicesPath","cachedRequest","useRef","pluck","getAllUsersForTenant","then","prop","users","filter","username","utils","filterUsers","ActivityTypes","getItemDataType","path","getActivityType","activity","items","firstItem","isValidActivity","includes","splitActivityByType","propOr","groupBy","ifElse","itemsTotal","stringifyDeltaValue","delta","isNil","Array","isArray","join","is","Object","toString","getActivityLabel","transition","inputRoot","dateOptionLabel","paper","localeFormat","moment","longDateFormat","open","setOpen","handleToggle","onCancel","fullWidth","formatDataTypeValue","dataTypeDefinition","DataTypes","formatValue","endAdornment","menuIsOpen","readOnly","autoFocus","anchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","elevation","getContentAnchorEl","MenuListProps","autoFocusItem","style","DateRangePicker","onApply","DateRangeTypes","RequestStates","SingleAttributeContext","React","displayName","triggerButton","popupContent","paddingTop","maxWidth","checkboxControlRoot","marginTop","marginLeft","checkboxControlLabel","checkboxControlCheckbox","buttonRef","setIsOpen","showInactive","toggleShowInactive","useContext","togglePopup","Button","Popover","FormControlLabel","e","target","totalCaption","lineHeight","letterSpacing","flexShrink","ovIcon","SingleAttributeHeader","caption","totalVisibleValues","showInactiveValuesMenu","searchQuery","setSearchQuery","setPage","totalNonVisibleValues","nonVisibleValues","attributeType","FacetViewHeader","HideOnShrink","widthToHide","VerticalDivider","OvIcon","nonOvTotal","nonOvValues","ExpandableSearchInput","query","moreButton","marginBottom","buttonLabel","divider","ovFalse","inactive","noData","palette","text","secondary","getAttributeNameFromAttributeUri","getLastUriPart","search","some","String","getPagedLocalEntity","async","entity","attributeTypeUri","defaultMaxValues","Infinity","offset","findAttributeValuesByTypeUri","ovValues","isOv","getAttributeSource","slice","paging","totalOvValues","totalValues","emptyArray","SingleAttributeEditableContent","parentUri","noDataText","required","cardinality","name","dispatch","useDispatch","viewId","ViewIdContext","modifiedEntity","state","errors","errorMessage","getAttributePagerActiveTypeErrorMessage","mode","attributeSource","entityValuesUris","pathOr","modifiedEntityValues","modifiedEntityValuesUris","showEmptyEditors","isTempUri","emptyEditorValue","createNewAttribute","isModifiedEntityValuesEmpty","isEmptyValue","showEmpty","newValues","onAddAttributes","params","profile","param","onChangeAttribute","onDeleteAttribute","onDeactivateError","onAdd","attribute","isComplexAttribute","canCreate","checkCanCreateAttribute","commonProps","crosswalks","showNonOv","isEmptyAttributeList","CardinalityMessage","ErrorMessage","message","Add","idx","attributeValue","lazy","ownError","getAttributeOwnError","Divider","originalValue","modifiedEntityValue","find","propEq","deleted","edited","value1","value2","cleanser","over","lensPath","cleanAttributesWith","valueTransformer","unless","deleteEmptyComplex","identity","equals","areValuesEqual","cond","always","SingleAttributeReadableContent","flexDirection","content","position","overflow","flexGrow","pagination","SingleAttributeView","config","max","page","isLoading","hasPaging","entityUri","mdm","isViewMode","isEditableMode","pivotingAttributes","hasValues","PivotingAttributeContext","BasicView","Box","LinearLoadIndicator","renderContent","BasicTablePagination","count","rowsPerPage","rowsPerPageOptions","onChangePage","useSingleAttributeLoader","canShowHistoryDiff","attributeUri","setValues","setPaging","setIsLoading","safePromise","useSafePromise","attributeValuesRef","apiPath","entitySelector","isHistoryModeEnabled","diff","attributeTypeName","attributeTypeSource","findAttributeValues","findAttributeTypeByUri","globalFilter","loadAttributes","isReadableAttribute","isFirstLevelAttributeUri","rest","request","isDataTenantEntity","getPagedEntity","response","loadedValue","finally","useEffect","useDidUpdateEffect","partitionByOv","partition","totalProp","has","RelationsViewStateContext","button","sortControls","alignItems","sortSelectorRoot","sortSelectorMenuItem","sortOrderButton","FilterButton","sortOrder","toggleSortOrder","sortOption","changeSortOption","sortOptions","hasSortOptions","isAsc","DropDownEditor","entries","menuItem","MenuProps","ArrowUpwardIcon","ArrowDownwardIcon","size","header","ImportDTContext","MAX","Math","pow","userSelect","badge","badgePosition","right","MultipleImportIcon","Badge","anchorOriginTopRightRectangle","badgeContent","CloudDownload","ImportFromDT","tenants","selectedTenant","onConfirmImport","onCancelConfirmation","onImportClick","dataTenants","reloadRelations","setTenants","setSelectedTenant","dtssPath","customerTenant","maxDtssImport","checkHasNonImportedConnections","importFromDT","Promise","all","hasNonImportedRelations","dataTenant","hasNonImportedConnections","modifiedTenants","importDTConnections","catch","error","ui","getRequestErrorMessage","useImportFromDTLoader","oneTenant","labelOnButton","indexOf","CloudDownloadIcon","DropDownMenuButton","menuId","buttonComponent","SmallIconButtonWithTooltip","menuItems","ConfirmationDialog","discardCaption","saveCaption","onDiscard","onSave","total","changeSearchQuery","tooltip","tooltipContent","secondaryLabel","progress","setSecondaryLabel","onOpen","getDataTenantEntitySecondaryLabel","getEntitySecondaryLabel","CircularProgress","colorPrimary","Tooltip","disableFocusListener","useRelationInfo","connection","relation","getEntityType","entityLabel","getLabel","preparedUri","getEntityUriForLink","relationLabel","getRelationTypeLabelFromMetadata","relationType","SuggestedButtons","acceptRelation","ignoreRelation","alignSelf","row","minHeight","rowInactive","background","inactiveBackground","entityAvatar","entityLabelContainer","textDecoration","primary","main","editButtonsContent","editButtons","removed","editedLabel","fontStyle","EditableRelationItem","memo","showControls","onRemoveRelation","onEditRelation","onAcceptRelation","onIgnoreRelation","renderRelationArrowButton","checkRemoved","checkEdited","ignored","checkIgnored","isActive","isActiveObject","canRemove","canUpdate","Mode","isRemoved","relationTypeMetadata","getRelationType","checkMetadataForDelete","checkMetadataForUpdate","checkRelationPermission","handleRemoveRelation","relationUri","handleEditRelation","handleAcceptRelation","handleIgnoreRelation","suggested","EditIcon","DeleteIcon","suggustedButtonsContent","disabled","captionText","EntityTypeIcon","EntityUriLink","getFirstRelationTypeObject","inRelations","outRelations","prepareRelation","direction","relations","wrapInArrayIfNeeded","Directions","arrowIcon","RelationArrowButton","showSecondLevel","parentEntityUri","contentSecondLevel","checkNew","ArrowDropDown","ArrowRight","secondLevelContent","SecondLevelWrapper","connections","toggleShowSecondLevel","loadRelations","loading","relationActivityFilter","setShowSecondLevel","setLoading","activityFilter","requestConfig","returnObjects","returnDates","activeness","ActivityFilter","getRelationsForEntity","show","useSecondLevelConnections","entitiesMap","getEntitiesMapForConnections","EntitiesMapContext","RelationsContent","relationToAdd","relationsToEdit","checkIfCanAddRelations","onAddRelation","newConnection","createNewConnectionWithDefaultRelationType","connectionToRemove","defaultRelationTypeObject","connectionWithDefaultRelationType","evolve","object","relationDirection","newConnections","currentConnections","canAddRelations","isEmptyRelationList","getRelationEditableContent","openedRelation","allowOnlyCreateNew","itemKey","RelationEditor","shouldShowAddRelationButton","shouldShowRelationEditorToAdd","attributesList","RelationAttributes","currentEntityUri","firstLevelRelationAttrTypes","getRelationAttributesList","attributeListEntity","getActivenessAttributes","showAttributesList","getAttributesListForReadMode","objectIds","getAttributeValuesUris","getCommentsCount","CollaborationContext","isEmpty","additionalRelatedObjectUris","createRelatedObjectUris","CollaborationObjectTypes","RelatedObjectUrisContext","attrTypes","ShowDetailsButton","onToggle","tooltipPlacement","InfoIconSelected","InfoIcon","wordBreak","showDetails","suggestedWrapper","commentsContainer","additionalButtonsWrapper","labelWrapper","RelationItem","isSuggested","setShowDetails","relatedObjectUris","COMMENTS_CONTAINER_VISIBILITY_AREA","CommentsContainer","getConnectionRelationUriForLink","objectType","allowOnlyOneComment","getCountOfLikes","ratings","rating","getCountOfDislikes","calcWidthOfLikesScale","calcWidthOfDislikesScale","wrapper","averageRating","scale","likesScale","dislikesScale","counts","likesCount","Ratings","mean","calcAverageRating","toFixed","ThumbUp","ThumbDown","textTransform","likeButton","RatingsButtons","onAgree","onDisagree","ratingOfCurrentUser","user","endIcon","buttonContent","comment","entityTypeIcon","showDetailsButton","relationAttributes","RelationComplexItem","rateRelation","RelationsList","mainEnityUri","isComplex","relationTypeObject","ignoreSuggestedRelation","relatedEntityUri","startDate","endDate","isInDirection","startEntityUri","endEntityUri","createRelation","useSuggestedRelations","getRelationshipsObjectIdsForCollaboration","list","selectors","getEntity","getMode","RelationsView","getConnectionsWithDraftsByViewId","getTotalByViewId","sorting","order","field","queryClause","Maybe","filterValueToQueryStringWithQuotes","queryString","orSome","FilterBuilder","addClause","build","buildRelationsFilter","reload","useRelationsLoader","importDTContextValue","pick","Provider","TableAttributeContext","CHANGE_SEARCH_QUERY","actions","basicTableViewState","createStandardAction","reducer","payload","removedStyle","tableContainer","rowCell","headCell","pointerEvents","withFilterAtBottom","DefaultHeadCellRenderer","getColumnsDataFromAttributes","attr","attributeUriToSearchUri","getAttrDataTypeDefinition","uniqBy","getColumnsData","getReadableAttributesList","getAttrPathFromColumnId","split","getNestedPathByColumnId","columnId","isAttributeSearchUri","attrPath","getBasicTableColumnsData","columnData","sortable","resizable","nestedPath","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","DefaultCellValueRenderer","onChangeSearchQuery","filtersEnabled","onToggleFilters","columnsData","selectedColumns","onChangeColumns","enabled","ColumnsSettings","withTableContext","deletedUris","rowValue","Boolean","cell","CellValueRenderer","isSorted","index","onEdit","onRemove","onSort","filters","onFilter","tableRowsData","assoc","getOvAttributeValuesByPath","getAttributeValues","getRowValueByColumnId","getBasicTableRowsData","tableColumnsData","checkIsEditableMode","renderRowCell","hoverRowIndex","setHoverRowIndex","canDelete","useConfigPermissions","hideRightContent","checkCanDeleteAttribute","isReltioCrosswalk","canEdit","checkCanEditAttribute","checkCanEdit","handleEditAttribute","handleRemoveAttribute","hoveredRowRightContent","context","BasicTable","rowsData","hoverStateEnabled","defaultColumnWidth","defaultColumnMinWidth","headRowHeight","onRowHover","hoveredRowRightContentWrapper","hoveredRowRightContentContainer","actionButtons","AttributeEditing","hasChanges","expanded","addButton","editor","TableAttributeView","visibleColumns","showTable","allColumnsData","checkHasChanges","onStartEditing","modifiedValues","editingValues","newAttributeUri","setNewAttributeUri","originalValues","setOriginalValues","newAttribute","createDefaultValues","attributeTypes","prev","editingValueOriginal","attributeItem","without","original","both","not","useEditableAttribute","preparedValues","hasConfigToCreate","visibleColumnsData","nodeCounter","generateId","processResponse","fakeRoot","nodeId","parentPaths","i","nextRoot","j","nextParent","entities","isRoot","node","rootIndex","link","avatar","treeContainer","maxHeight","tree","buttonsContainer","ConfigContext","onImageLoadFail","src","DEFAULT_ICON","Node","absoluteImagePath","uiPath","entityLink","getEntityLink","onTitleClick","entityTypeGraphIcon","getPropWithInheritance","getAbsoluteImageUrl","Avatar","onError","Link","to","getNodeKey","lineBlock","lineChildren","verticalLine","horizontalLineRight","textAlign","boxSizing","whiteSpace","nodeContent","bottom","rowContents","borderLeft","verticalAlign","buttonWrapper","collapsedButton","expandedButton","borderRight","rowTitle","nodeContentRenderer","scaffoldBlockPxWidth","toggleChildrenVisibility","treeIndex","nodeTitle","showToggleChildrenButton","treeNodeRenderer","lowerSiblingCounts","scaffoldBlockCount","scaffold","forEach","lowerSiblingCount","shift","scaffoldWidth","nodeStyle","rowHeight","slideRegionSize","_extends","assign","arguments","source","prototype","hasOwnProperty","call","apply","this","viewBox","version","xmlns","stroke","strokeWidth","fill","fillRule","fillOpacity","d","onGraphOpen","ShowGraphIcon","bodyWrapper","resizableHandleContainer","resizableHandleVisibilityArea","visibility","resizableHandle","dragIcon","Component","WithResizableHandle","DragIndicator","stubView","fullHeight","boxShadow","borderRadius","filterWrongLat","gt","lt","fullscreenBtn","ImageLineCaption","totalImages","photoWord","ImageAttributeViewEditableContent","requestNextPageOfAttributeValues","attributeValues","imageSize","IMAGE_SIZE","imageMargin","imageWidth","imageHeight","matchesContainer","footer","ActionButtons","match","onStartRequest","onFinishRequest","canMerge","canMark","getActionPermissionForMatch","matchRules","actionButtonProps","ActionButtonMode","onMergeFinish","MergeButton","NotMatchButton","MatchCard","ProfileMatchCard","createObjectIdForPM","matchEntityUri","DEFAULT_OPTIONS","showTransitiveMatches","showInactiveEntities","DEFAULT_SORTING","ComponentStates","ResizableStubView","withResizableHandle","ResizableProfileAttributesView","AttributesView","excludeUris","includeUris","attributesCount","pinnedAttributes","ResizableProfileSingleAttributeView","singleAttribute","setShowInactive","useSingleAttribute","ResizableProfileTableAttributeView","tableAttribute","initialState","useReducer","requestFilters","mdmFilters","columnFilter","columnFilterToMdmFilter","buildMDMFilters","reject","changePage","toggleSort","changeFilter","toggleFilters","changeColumns","useActions","useTableAttribute","ResizableProfileRelationsView","relationsState","setSortOrder","setSortOption","useRelationsState","ResizableCustomView","basicViewRef","defaultTooltip","html","visible","updatedTooltip","useAPI","innerHTML","childNodes","child","appendChild","ResizableHierarchyPathView","treeData","setTreeData","graphUri","forest","newTrees","updateTreesWithNewEntity","updatedTime","getPathsTree","console","warn","useLoadPaths","graph","openGraph","graphType","generateNodeProps","rowInfo","ReactSortableTree","isVirtualized","canDrag","ResizableProfilePotentialMatchesView","turnOnDisableSpinner","turnOffDisableSpinner","matches","loadMatches","useMatchesLoader","onStartLoading","onFinishLoading","onFinishMatchAction","openPotentialMatchPerspective","mdmModuleUi","perspectiveId","getPotentialMatchesObjectIdsForCollaboration","getEntityUriFromMatchObject","showSeeAll","Loading","NoData","Loaded","underline","ResizableHierarchyTreeView","importedModule","default","HierarchyTreeView","ResizableRelationshipsTableView","RelationshipsTableView","ResizableEntityMapView","isFullscreen","onToggleFullscreen","mapKey","markers","setMarkers","resolve","useMarkers","loadingElement","defaultCenter","lat","lng","mapOptions","mapTypeControl","FullscreenExitIcon","FullscreenIcon","ReltioMap","defaultZoom","mapContainerClassName","ResizableImageAttributeView","entityValues","ImageAttributesLine","ViewsFactory","ViewTypes","ProfileViewTypes","getComponentBy","propName","store","HierarchyTree","HierarchyPaths","RelationsTable","Relations","Attributes","MapView","CustomView","ImageAttributeView","PotentialMatchesView","getComponent","Fallback","ViewComponent","isAutosize","Suspense","fallback","basicView","fixedSizeContainer","omittingProps","ProfileLayoutItem","layoutItemConfig","views","ResizeComponent","AutosizeComponent","ReactReduxContext","isCustomView","class","platform","CustomScriptPlatform","ProfileLayout","layout","layoutOptions","onLayoutChanged","ReltioGridLayout","LayoutItem","draggableHandle","xmlnsXlink","xlinkHref","mask","editingButtons","searchResults","comments","SuggestIcon","SvgIcon","CopyIcon","filterGroupByPermissions","isTempEntity","isWorkflowEnabled","canStartProcessInstanceSearchQuery","permission","isSuggestMode","checkMetadataPermission","PerspectiveProfileBand","profileBandConfig","profileOperation","entityTypeUri","isOperationSaving","Operation","isDisabledButtons","openCloneConfirmationDialog","setOpenCloneConfirmationDialog","onCloneDiscard","onClone","cloneAction","cloneActionProp","relationTypes","isRelationSuitableForEntityType","isRelationWithEntityType","when","complement","either","modifiedRelationTypes","isReference","getRelationTypeUriFromAttrType","T","relationshipTypesToCopy","useCloneAction","OPTIONS_GROUP","ModeTypes","description","CreateIcon","VisibilityIcon","BUTTONS_GROUP","window","confirm","shouldShowSelect","MetadataPermissions","hasOnlyReadPermission","accessibleOptionsGroup","accessibleButtonsGroup","handleChange","handleSave","ProfileBand","showEntityId","mr","ProfileBandHistory","ProfileBandNavigation","ModeSwitcherSelect","optionsGroup","buttonsGroup","WorkflowButton","WorkflowTasksContext","Inbox","showMoreLink","showMoreIcon","CollaborationList","getComments","pageToken","useCommentsEntitiesMap","objectId","commentId","CollaborationItem","KeyboardArrowDown","WorkflowList","tasks","task","WorkflowTaskCard","taskId","CollaborationButton","commentsMap","calcTotalCommentItems","CollaborationIcon","SidePanelEmptyState","secondaryText","ActivePanel","getSecondTitle","RightSidePanel","isWorkflowSideViewEnabled","isCollaborationSideViewEnabled","isCollaborationEnabled","historyEvent","workflowTasksContext","collaborationContext","active","setActive","toggleActive","newId","resetActive","isHistoryTabActive","History","isHistoryEnabled","isProfilePersisted","useHistoryEnabled","historyFilter","onApplyFilter","historicUris","historyWithTotal","canLoadMore","onLoadMore","useHistory","enabledWorkflowButton","enabledCollaborationButton","collaborationTotal","elements","Workflow","headerProps","mainTitle","secondTitle","rightContent","AddWorkflowButton","Collaboration","HistoryIcon","HistoryView","contributorsUris","HistoryPanelEmptyState","HistoryHeader","visibleElements","SidePanel","SidePanelContentHeader","SideButtonsPanel","buttonsProps","onButtonClick","activeIndexId","accordionSummaryHeight","defaultBorderStyle","accordion","borderBottom","accordionExpanded","accordionSummary","accordionSummaryHeading","typography","pxToRem","fontWeightRegular","accordionSummaryExpanded","accordionSummaryContent","accordionDetails","parents","errorsAccordion","borderColor","errorsAccordionDetails","warningsAccordion","warningsAccordionDetails","errorIcon","warningIcon","ErrorsPanel","panels","expandedPanelId","ErrorComponent","accordionClassName","accordionDetailsClassName","Accordion","square","AccordionSummary","expandIcon","AccordionDetails","clearError","Error","displayedMessage","ErrorType","ErrorSource","getDisplayedErrorMessage","displayedErrorPath","errorPath","AttributeValuePathItemType","getDisplayedErrorPath","ProfileErrorsPanel","cachedAllErrors","allErrors","cacheForAllErrors","errors1","errors2","areErrorsEqual","useCachedErrors","warnings","isCriticalError","setExpandedPanelId","number","panelId","event","isExpanded","perspectiveView","overflowX","overflowY","scrollWrapper","emptyState","profileWrapper","profileContainer","closeIcon","snackbar","flexWrap","Notification","notification","autoCloseInterval","autoHideDuration","setAction","setShow","closeSnackbar","_e","reason","cancelAction","onConfirm","applyAction","needConfirmation","CloseIcon","Portal","Snackbar","confirmationText","confirmationDescription","Notifications","notifications","n","ProfilePerspectiveView","saveState","getSavedState","getSavedStateAndFix","scrollWrapperRef","debouncedSaveState","debounce","isLoaded","savedState","updateSavedState","useSavedStateForEntityType","setLayout","setViews","configHash","hash","isHistoryActive","getProfileObjectIdsForCollaboration","collaboration","useCollaboration","emptyCollaboration","useUsers","workflowTasks","useWorkflowTasks","workflow","useHistorySlice","historyDiff","useHistoryDiff","isConfigChanged","fixedViews","fixedLayout","fixNonUniqViewsIds","sidePanelViews","scrollTop","isValidateReadMode","isDTEntity","profileViews","hasProfileViews","validate","needDispatch","useProfileValidation","handleLayoutChange","boundariesElement","popupBoundariesValue","element","priority","ProfilePerspectiveViewContext","UsersContext","profileBand","PopupBoundariesContext","EmptyState","LogoRenderer","EMPTY_STATE_ICONS","EMPTY_STATE_VARIANTS","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","onResize","qxSandboxApi","getSavedStatePromisified","promisifyCallback","processedConfig","convertOldProfileConfig","SandboxAPIContext","StylesProvider","MuiPickersUtilsProvider","MomentUtils","handleHeight","floor","ErrorPopup","showErrorFromStore","titleContainer","textOverflow","totalNumber","TagListHeader","switchToProfile","ArrowForwardIosRounded","Spacer","toolbar","TagProfileBand","Toolbar","tagsContainer","tagsView","listContainer","entitiesList","ROWS_PER_PAGE_OPTIONS","TagPerspectiveView","tag","setRowsPerPage","globalSearchRequestOptions","safeRequestTotalPromise","safeRequestEntitiesPromise","setTotal","setEntities","requestEntities","requestTotal","getDataTenantFromEntityUri","fieldName","isDT","getEntities","requestOptions","select","getFilteredEntitiesFromDataTenant","getFilteredEntities","getTotalFromDataTenant","getTotals","json","useTagsProvider","useTag","refScrollBlock","hasPagination","ProfilesList","onChangeRowsPerPage"],"sourceRoot":""}