{"version":3,"file":"static/js/8195.a3554c49.chunk.js","mappings":"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","sources":["ao/components/Dashboard/widgetHelpers/WidgetActionButton.tsx","ao/components/Dashboard/widgetHelpers/WidgetAppBadge.tsx","ao/components/Dashboard/widgetHelpers/WidgetAppRow.tsx","ao/components/Dashboard/widgetHelpers/WidgetSpinner.tsx","ao/components/Dashboard/widgetHelpers/WidgetTable.tsx","ao/components/Dashboard/widgetHelpers/WidgetTag.tsx","ao/components/Showroom/ShowroomSearch.tsx","ao/components/Showroom/frameworkComponents/GeneralComponents/ComingSoonMarker.tsx","ao/components/Showroom/frameworkComponents/GeneralComponents/ShowroomContent.tsx","ao/components/Showroom/frameworkComponents/GeneralComponents/ShowroomContentHeader.tsx","ao/components/Showroom/frameworkComponents/GeneralComponents/Thumbnail.tsx","ao/components/Showroom/frameworkComponents/GeneralComponents/ThumbnailProvider.tsx","../node_modules/@chakra-ui/layout/src/aspect-ratio.tsx"],"sourcesContent":["/**\r\n * @copyright Copyright 2021 Epic Systems Corporation\r\n * @file Action button on a dashboard widget\r\n * @module Epic.AppOrchard.Dashboard.WidgetActionButton\r\n */\r\n\r\nimport { Button, ButtonProps, Center, ComponentWithAs, Flex, GridItem, SimpleGrid } from \"@chakra-ui/react\";\r\nimport React from \"react\";\r\n\r\n/** Action button on a dashboard widget. Used to keep consistent formatting across buttons */\r\nexport const WidgetActionButton: ComponentWithAs<\"button\", ButtonProps> = (props: ButtonProps) => {\r\n\tconst { leftIcon, children, ...rest } = props;\r\n\r\n\treturn (\r\n\t\t<Button\r\n\t\t\t{...rest}\r\n\t\t\tvariant=\"outline\"\r\n\t\t\tsize=\"sm\"\r\n\t\t\tw=\"100%\"\r\n\t\t\twhiteSpace=\"normal\"\r\n\t\t\th=\"unset\"\r\n\t\t\tminH=\"8\"\r\n\t\t\tdisplay=\"block\"\r\n\t\t\tpt=\"0.2em\"\r\n\t\t\tpb=\"0.2em\"\r\n\t\t>\r\n\t\t\t<SimpleGrid columns={12}>\r\n\t\t\t\t<GridItem colSpan={{ base: 1, lg: 2 }}>\r\n\t\t\t\t\t<Flex justify=\"flex-start\">{leftIcon}</Flex>\r\n\t\t\t\t</GridItem>\r\n\t\t\t\t<GridItem colSpan={{ base: 11, lg: 10 }} ml={{ base: \"0.5em\", lg: \"0.25em\" }}>\r\n\t\t\t\t\t<Flex justify=\"flex-start\" h=\"100%\">\r\n\t\t\t\t\t\t<Center>{children}</Center>\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</GridItem>\r\n\t\t\t</SimpleGrid>\r\n\t\t</Button>\r\n\t);\r\n};\r\n","/**\r\n * @copyright Copyright 2021 Epic Systems Corporation\r\n * @file A badge for an app highlighting a feature\r\n * \t\tCurrently used by widgets but could potentially be used elsewhere\r\n * @module Epic.AppOrchard.Dashboard.WidgetAppBadge\r\n */\r\n\r\nimport { Box, ButtonProps, Center } from \"@chakra-ui/react\";\r\nimport { AOTooltip } from \"ao/components/Core\";\r\nimport React, { FC, memo } from \"react\";\r\n\r\ninterface IProps {\r\n\ttitle: string;\r\n\tvalue?: string;\r\n\tchildren: React.ReactNode;\r\n\tuseHoverTooltip?: boolean;\r\n\tasButton?: boolean;\r\n\tbuttonProps?: ButtonProps;\r\n}\r\n\r\n/** A badge for an app highlighting a feature\r\n * \t\tCurrently used by widgets but could potentially be used elsewhere */\r\nexport const WidgetAppBadge: FC<IProps> = memo((props: IProps) => {\r\n\tconst { title, value, useHoverTooltip, children, asButton, buttonProps } = props;\r\n\tconst height = \"40px\";\r\n\tconst minWidth = \"40px\";\r\n\tconst content = (\r\n\t\t<Center\r\n\t\t\th={height}\r\n\t\t\tminW={minWidth}\r\n\t\t\tdisplay=\"inline-block\"\r\n\t\t\tbg=\"#eeebeb\"\r\n\t\t\tp=\"5px\"\r\n\t\t\tcolor=\"#6d6767\"\r\n\t\t\tborderRadius=\"2px\"\r\n\t\t\ttitle={!useHoverTooltip ? title : \"\"}\r\n\t\t>\r\n\t\t\t{value && (\r\n\t\t\t\t<Box fontSize=\"1.1em\" fontWeight=\"bold\" as=\"span\">\r\n\t\t\t\t\t{value}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t\t{children}\r\n\t\t</Center>\r\n\t);\r\n\treturn useHoverTooltip ? (\r\n\t\t<AOTooltip\r\n\t\t\thelptext={title}\r\n\t\t\tasButton={asButton}\r\n\t\t\tbuttonProps={{ ...buttonProps, h: height, minW: minWidth }}\r\n\t\t>\r\n\t\t\t{content}\r\n\t\t</AOTooltip>\r\n\t) : (\r\n\t\t<>{content}</>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2021 Epic Systems Corporation\r\n * @file One application row in a dashboard widget table\r\n * @module Epic.AppOrchard.Dashboard.WidgetAppRow\r\n */\r\n\r\nimport {\r\n\tAspectRatio,\r\n\tBox,\r\n\tCenter,\r\n\tDivider,\r\n\tFlex,\r\n\tGridItem,\r\n\tHStack,\r\n\tImage,\r\n\tListItem,\r\n\tSimpleGrid,\r\n\tuseBreakpointValue,\r\n} from \"@chakra-ui/react\";\r\nimport { config } from \"ao/appConfig\";\r\nimport { AOLink } from \"ao/components/Core\";\r\nimport { getBaseUrl } from \"ao/utils/helpers\";\r\nimport { childrenWithoutFragment } from \"ao/utils/reactHelpers\";\r\nimport React, { FC, memo, useEffect, useMemo, useRef } from \"react\";\r\n\r\nexport interface IWidgetAppRowProps {\r\n\tappId: number;\r\n\t/** actions, e.g. buttons or inputs */\r\n\tactions?: React.ReactNode;\r\n\t/** Content that shows underneath the app row */\r\n\tbottomContent?: React.ReactNode;\r\n\t/** content to show in the middle column of the app row,\r\n\t * in between the standard app info (name, logo, etc) and content on the right  */\r\n\tmiddleColumnContent?: React.ReactNode;\r\n\t/** additional info about the app shown under app name or to the side if no actions passed */\r\n\tadditionalAppInfo?: React.ReactNode;\r\n\tappName: string;\r\n\t/** page to link to when app is clicked  */\r\n\tlinkUrl?: string;\r\n\tlinkTitle?: string;\r\n\t/** show under app name */\r\n\tsubtitle?: React.ReactNode;\r\n\tbelowLogoContent?: React.ReactNode;\r\n\t/** get a reference to the app name link, can be used to focus something in the app after an action is taken */\r\n\tonLinkRefCreated?: (linkRef: React.RefObject<HTMLAnchorElement> | null) => void;\r\n}\r\n\r\n/** One application row in a dashboard widget table.\r\n *   Some of the content is shown in different places depending on the screen size and which content is passed to try to prevent empty sections in the app row */\r\nexport const WidgetAppRow: FC<IWidgetAppRowProps> = memo((props: IWidgetAppRowProps) => {\r\n\tconst {\r\n\t\tappId,\r\n\t\tappName,\r\n\t\tsubtitle,\r\n\t\tactions,\r\n\t\tlinkUrl,\r\n\t\tbottomContent,\r\n\t\tlinkTitle,\r\n\t\tadditionalAppInfo,\r\n\t\tmiddleColumnContent,\r\n\t\tbelowLogoContent,\r\n\t\tonLinkRefCreated,\r\n\t} = props;\r\n\tconst baseUrl = useMemo(() => getBaseUrl(), []);\r\n\tconst thumbnailUrl = `${baseUrl}Gallery/Thumbnail?appId=${appId}`;\r\n\tconst fallbackThumbnailUrl = `${baseUrl}Content/images/app_placeholder.png`;\r\n\tconst thumbnailColor = \"appThumbnailBackground.\" + (appId % config.NumAppThumbnailColors);\r\n\tconst isMobile = useBreakpointValue({ base: true, lg: false });\r\n\tconst linkRef = useRef<HTMLAnchorElement>(null);\r\n\r\n\tuseEffect(() => onLinkRefCreated && onLinkRefCreated(linkRef), [onLinkRefCreated]);\r\n\r\n\treturn (\r\n\t\t<ListItem>\r\n\t\t\t<SimpleGrid\r\n\t\t\t\tcolumns={12}\r\n\t\t\t\tp=\"0.5em\"\r\n\t\t\t\tborderRadius=\"4px\"\r\n\t\t\t\tbackgroundColor=\"white\"\r\n\t\t\t\tm=\"6px 0\"\r\n\t\t\t\tborder=\"1px solid lightgrey\"\r\n\t\t\t>\r\n\t\t\t\t<GridItem colSpan={{ base: 3, lg: 1 }}>\r\n\t\t\t\t\t{/* App logo */}\r\n\t\t\t\t\t<Center>\r\n\t\t\t\t\t\t<AspectRatio maxW=\"55px\" ratio={1} flex=\"1 1 auto\">\r\n\t\t\t\t\t\t\t<Image\r\n\t\t\t\t\t\t\t\tsrc={thumbnailUrl}\r\n\t\t\t\t\t\t\t\tfallbackSrc={fallbackThumbnailUrl}\r\n\t\t\t\t\t\t\t\talt=\"App logo\"\r\n\t\t\t\t\t\t\t\tbackground={thumbnailColor}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</AspectRatio>\r\n\t\t\t\t\t</Center>\r\n\t\t\t\t\t{childrenWithoutFragment(belowLogoContent) && (\r\n\t\t\t\t\t\t<Center>\r\n\t\t\t\t\t\t\t<HStack spacing=\"0.5em\" mt=\"0.25em\">\r\n\t\t\t\t\t\t\t\t{belowLogoContent}\r\n\t\t\t\t\t\t\t</HStack>\r\n\t\t\t\t\t\t</Center>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</GridItem>\r\n\t\t\t\t<GridItem colSpan={{ base: 9, lg: 4 }} ml=\"0.75em\" mr=\"0.5em\">\r\n\t\t\t\t\t{/* App name, org name, and potentially actions or other app info depending on screen size and what's passed  */}\r\n\r\n\t\t\t\t\t{linkUrl ? (\r\n\t\t\t\t\t\t<AOLink\r\n\t\t\t\t\t\t\tref={linkRef}\r\n\t\t\t\t\t\t\tvariant=\"black\"\r\n\t\t\t\t\t\t\turl={linkUrl}\r\n\t\t\t\t\t\t\ttitle={linkTitle}\r\n\t\t\t\t\t\t\ttarget=\"_blank\"\r\n\t\t\t\t\t\t\tfontWeight=\"bold\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{appName}\r\n\t\t\t\t\t\t</AOLink>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Box fontWeight=\"bold\">{appName}</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{subtitle && <Box>{subtitle}</Box>}\r\n\t\t\t\t\t{actions || isMobile ? (\r\n\t\t\t\t\t\t<Box mt=\"0.6em\" textAlign=\"left\">\r\n\t\t\t\t\t\t\t{additionalAppInfo}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t) : null}\r\n\t\t\t\t</GridItem>\r\n\t\t\t\t<GridItem\r\n\t\t\t\t\tcolSpan={{ base: 12, lg: 3 }}\r\n\t\t\t\t\tml={{ base: 0, lg: \"0.75em\" }}\r\n\t\t\t\t\tmt={{ base: \"0.5em\", lg: 0 }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Flex justify=\"flex-start\"> {middleColumnContent}</Flex>\r\n\t\t\t\t</GridItem>\r\n\t\t\t\t<GridItem colSpan={{ base: 12, lg: 4 }} mt={{ base: \"0.5em\", lg: 0 }}>\r\n\t\t\t\t\t{/* Actions or other app info depending on screen size and what's passed  */}\r\n\t\t\t\t\t{actions ? (\r\n\t\t\t\t\t\t<Flex justify={{ base: \"flex-start\", lg: \"flex-end\" }} mr=\"0.5em\">\r\n\t\t\t\t\t\t\t{actions}\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t) : !isMobile ? (\r\n\t\t\t\t\t\t<Flex justify=\"flex-end\" mr=\"0.5em\" textAlign=\"right\">\r\n\t\t\t\t\t\t\t{additionalAppInfo}\r\n\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t) : null}\r\n\t\t\t\t</GridItem>\r\n\t\t\t\t{childrenWithoutFragment(bottomContent) && (\r\n\t\t\t\t\t<GridItem colSpan={12} mt={{ base: \"0.5em\", lg: 0 }}>\r\n\t\t\t\t\t\t<Divider m=\"0.5em 0\" />\r\n\t\t\t\t\t\t<HStack spacing=\"1em\">{bottomContent}</HStack>\r\n\t\t\t\t\t</GridItem>\r\n\t\t\t\t)}\r\n\t\t\t</SimpleGrid>\r\n\t\t</ListItem>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2021 Epic Systems Corporation\r\n * @file Spinner component for widgets to use for consistent loading indicator\r\n * @module Epic.AppOrchard.Dashboard.WidgetSpinner\r\n */\r\nimport { Spinner, VisuallyHidden } from \"@chakra-ui/react\";\r\nimport React, { FC } from \"react\";\r\n\r\n/** Spinner component for widgets to use for consistent loading indicator */\r\nexport const WidgetSpinner: FC = () => {\r\n\treturn (\r\n\t\t<Spinner role=\"status\" borderWidth=\"5px\" display=\"block\" m=\"5rem auto 3rem auto\" w=\"5rem\" h=\"5rem\">\r\n\t\t\t<VisuallyHidden>Loading</VisuallyHidden>\r\n\t\t</Spinner>\r\n\t);\r\n};\r\n","/**\r\n * @copyright Copyright 2021 Epic Systems Corporation\r\n * @file Component for showing a table inside a dashboard widget\r\n * @module Epic.AppOrchard.Dashboard.WidgetTable\r\n */\r\n\r\nimport { Box, Center, List } from \"@chakra-ui/layout\";\r\nimport { useBreakpointValue } from \"@chakra-ui/react\";\r\nimport { PaginatedList } from \"ao/components/Core\";\r\nimport React, { FC, memo } from \"react\";\r\n\r\nexport interface IWidgetTableProps {\r\n\tnoRecordsMessage: string;\r\n\tchildren: React.ReactNode;\r\n\t/** If defined, output will be paginated with this many items per page. If undefined show all entries with scrollbar */\r\n\tentriesPerPage?: number;\r\n\tisExpanded: boolean;\r\n}\r\n\r\n/** Component for showing a table inside a dashboard widget */\r\nexport const WidgetTable: FC<IWidgetTableProps> = memo((props: IWidgetTableProps) => {\r\n\tconst { noRecordsMessage, children, entriesPerPage, isExpanded } = props;\r\n\tconst entriesToShowPerPage = entriesPerPage || 2;\r\n\tconst expandedHeight = useBreakpointValue({ base: \"50vh\", xl: \"60vh\", \"2xl\": \"65vh\", \"3xl\": \"70vh\" });\r\n\r\n\tif (React.Children.count(children) === 0) {\r\n\t\treturn (\r\n\t\t\t<Center\r\n\t\t\t\tfontStyle=\"italic\"\r\n\t\t\t\th={isExpanded ? \"50vh\" : \"unset\"}\r\n\t\t\t\tfontSize={isExpanded ? \"1.75em\" : \"1.25em\"}\r\n\t\t\t>\r\n\t\t\t\t{noRecordsMessage}\r\n\t\t\t</Center>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<List>\r\n\t\t\t{entriesPerPage ? (\r\n\t\t\t\t<PaginatedList entriesPerPage={entriesToShowPerPage} h=\"2.25em\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</PaginatedList>\r\n\t\t\t) : (\r\n\t\t\t\t<Box h={isExpanded ? expandedHeight : \"unset\"} overflowX=\"hidden\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t</List>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2021 Epic Systems Corporation\r\n * @file A tag that highlights details about an object shown in a widget\r\n * @module Epic.AppOrchard.Dashboard.WidgetTag\r\n */\r\n\r\nimport { IconProps, MergeWithAs, Tag, TagLabel, TagLeftIcon, TagProps, TagRightIcon } from \"@chakra-ui/react\";\r\nimport { AOTooltip } from \"ao/components/Core\";\r\nimport { ITooltipWithoutChildrenProps } from \"ao/components/Core/AOTooltip\";\r\nimport React, { FC, memo } from \"react\";\r\ntype IconPropsType = MergeWithAs<React.ComponentProps<\"svg\">, React.ComponentProps<\"svg\">, IconProps, \"svg\">;\r\n\r\ninterface IProps {\r\n\t/** text label shown in the tag */\r\n\tlabel: React.ReactNode;\r\n\t/** if passed, the tag will be a trigger for a tooltip with this content */\r\n\ttooltipContent?: React.ReactNode;\r\n\ttooltipProps?: ITooltipWithoutChildrenProps;\r\n\t/** icon to show to the left of the tag label */\r\n\ticon?: any;\r\n\t/** icon to show to the right of the tag label */\r\n\trightIcon?: any;\r\n\t/** props for the icon */\r\n\ticonProps?: IconPropsType;\r\n\t/** props for the right icon */\r\n\trightIconProps?: IconPropsType;\r\n}\r\n\r\ntype Props = IProps & TagProps;\r\n\r\n/** A tag that highlights details about an object shown in a widget and optionally shows helptext on hover/click, etc */\r\nexport const WidgetTag: FC<Props> = memo((props: Props) => {\r\n\tconst {\r\n\t\ttooltipContent,\r\n\t\tlabel,\r\n\t\ticon,\r\n\t\ticonProps,\r\n\t\ttooltipProps,\r\n\t\trightIcon,\r\n\t\trightIconProps,\r\n\t\t...rest\r\n\t} = props;\r\n\tconst tag = (\r\n\t\t<Tag {...rest} color=\"aoGreen.foreground\" background=\"aoGreen.background\">\r\n\t\t\t{icon && <TagLeftIcon as={icon} {...iconProps} />}\r\n\t\t\t<TagLabel>{label}</TagLabel>\r\n\t\t\t{rightIcon && <TagRightIcon as={rightIcon} {...rightIconProps} />}\r\n\t\t</Tag>\r\n\t);\r\n\treturn tooltipContent ? (\r\n\t\t<AOTooltip\r\n\t\t\thelptext={tooltipContent}\r\n\t\t\t{...tooltipProps}\r\n\t\t\tboxProps={{ display: \"inline\", width: \"100%\" }}\r\n\t\t>\r\n\t\t\t{tag}\r\n\t\t</AOTooltip>\r\n\t) : (\r\n\t\ttag\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2025 Epic Systems Corporation\r\n * @file Showroom Search component\r\n * @module Epic.AppOrchard.Showroom.ShowroomSearch\r\n */\r\n\r\nimport { SearchIcon } from \"@chakra-ui/icons\";\r\nimport {\r\n\tBox,\r\n\tBoxProps,\r\n\tCenter,\r\n\tGrid,\r\n\tGridItem,\r\n\tHeading,\r\n\tIconButton,\r\n\tInput,\r\n\tInputGroup,\r\n\tInputRightElement,\r\n\tLink,\r\n\tText,\r\n\tVStack,\r\n} from \"@chakra-ui/react\";\r\nimport { useAsync } from \"@epic/react-async-hook\";\r\nimport { config } from \"ao/appConfig\";\r\nimport { showroomBorder, showroomPrimary, showroomText } from \"ao/chakraTheme\";\r\nimport { AsyncPlaceholder, LinkButton, MainContentSpinner } from \"ao/components/Core\";\r\nimport { useShowroomState } from \"ao/state/showroom\";\r\nimport { IThumbnailDictionary, useShowroomThumbnailState } from \"ao/state/showroomThumbnails\";\r\nimport { useSiteInfoState } from \"ao/state/siteInfo\";\r\nimport { ITopLevelComponentProps } from \"ao/types\";\r\nimport {\r\n\tBackLinkType,\r\n\tIGalleryListingSearchResult,\r\n\tIGallerySearchResultGroup,\r\n\tIGallerySearchResults,\r\n} from \"ao/types/showroom\";\r\nimport { getBaseUrl, getCaseInsensitiveParam, isLocalhost, isNullOrEmpty } from \"ao/utils/helpers\";\r\nimport React, { FunctionComponent, memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { useSearchParams } from \"react-router-dom\";\r\nimport { PaginationControl } from \"../Core/PaginationControl\";\r\nimport { WidgetSpinner } from \"../Dashboard/widgetHelpers\";\r\nimport { getClientIdMatch } from \"./data/data\";\r\nimport { ComingSoonMarker } from \"./frameworkComponents/GeneralComponents/ComingSoonMarker\";\r\nimport { ShowroomContent } from \"./frameworkComponents/GeneralComponents/ShowroomContent\";\r\nimport { ShowroomContentHeader } from \"./frameworkComponents/GeneralComponents/ShowroomContentHeader\";\r\nimport {\r\n\tThumbnail,\r\n\tThumbnailExternalWatermark,\r\n\tThumbnailStageWatermark,\r\n} from \"./frameworkComponents/GeneralComponents/Thumbnail\";\r\nimport { ThumbnailProvider } from \"./frameworkComponents/GeneralComponents/ThumbnailProvider\";\r\nimport { CleanSearchQuery, GridGap, SearchStages } from \"./Helper\";\r\n\r\nconst ShowroomSearch: FunctionComponent<ITopLevelComponentProps> = memo((props) => {\r\n\tconst { userSecurity } = props;\r\n\r\n\t//#region state and hooks\r\n\tconst { stageTree, categoryTree } = useShowroomState((selectors) => selectors.getState(), []);\r\n\tconst { siteInfo } = useSiteInfoState((selectors) => selectors.getState(), []);\r\n\r\n\tconst [hasSearched, setHasSearched] = useState<boolean>(false);\r\n\tconst [isSearching, setIsSearching] = useState<boolean>(false);\r\n\tconst [query, setQuery] = useState<string>(\"\");\r\n\tconst [focusedGroup, setFocusedGroup] = useState<string>(\"\");\r\n\tconst [isUnlistedClientResult, setIsUnlistedClientResult] = useState<boolean>(false);\r\n\tconst [unlistedClientFound, setUnlistedClientFound] = useState<boolean>(false);\r\n\tconst [redirectAppId, setRedirectAppId] = useState<number>(-1);\r\n\tconst [page, setPage] = useState<number>(1);\r\n\tconst [pageCount, setPageCount] = useState<number>(0);\r\n\tconst previewPageSize = 4;\r\n\tconst pageSize = 20;\r\n\tconst userCanSeeLinkToUnlisted = userSecurity.isEpicCustomer || userSecurity.isEpicUser;\r\n\r\n\tconst [LoadingClientIdMatchPlaceholder, tryForClientIdMatch] = useAsync(\r\n\t\tgetClientIdMatch,\r\n\t\tAsyncPlaceholder,\r\n\t\t{\r\n\t\t\tdisplayName: \"getClientIdMatch\",\r\n\t\t\tonSuccess: (response, extras) => {\r\n\t\t\t\tconst searchedQuery = extras.params[0];\r\n\t\t\t\tif (response.success && response.appId) {\r\n\t\t\t\t\tsetUnlistedClientFound(true);\r\n\t\t\t\t\tconst results = SearchStages(searchedQuery, response.appId, stageTree, categoryTree);\r\n\t\t\t\t\tif (results && results.resultCount > 0) {\r\n\t\t\t\t\t\tsetSearchResults(results);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsetRedirectAppId(response.appId);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetUnlistedClientFound(false);\r\n\t\t\t\t\tsetRedirectAppId(-2);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t},\r\n\t);\r\n\r\n\tconst handlePageChanged = useCallback((newPage: number) => {\r\n\t\tsetPage(newPage);\r\n\t\twindow.scrollTo({ top: 0, behavior: \"smooth\" });\r\n\t\tif (inputRef.current) {\r\n\t\t\tinputRef.current.focus();\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst [searchParams, setSearchParams] = useSearchParams();\r\n\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\r\n\tconst handleSearch = useCallback((): void => {\r\n\t\tsetFocusedGroup(\"\");\r\n\t\tsearchParams.delete(\"t\");\r\n\t\tconst cleanedQuery = CleanSearchQuery(query);\r\n\r\n\t\tif (cleanedQuery !== query) {\r\n\t\t\tsetQuery(cleanedQuery);\r\n\t\t}\r\n\r\n\t\tif (!cleanedQuery) {\r\n\t\t\tsetHasSearched(false);\r\n\t\t\tsetSearchParams(\"\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsearchParams.set(\"q\", cleanedQuery);\r\n\t\tsetSearchParams(searchParams);\r\n\t\tsetHasSearched(true);\r\n\t\tsetIsSearching(true);\r\n\t}, [query, searchParams, setSearchParams]);\r\n\r\n\tconst handleSeeStage = useCallback(\r\n\t\t(groupName: string): void => {\r\n\t\t\tif (groupName) {\r\n\t\t\t\tsetFocusedGroup(groupName);\r\n\t\t\t\tsearchParams.set(\"t\", groupName);\r\n\t\t\t} else {\r\n\t\t\t\tsetFocusedGroup(\"\");\r\n\t\t\t\tsetPage(1);\r\n\t\t\t\tsearchParams.delete(\"t\");\r\n\t\t\t}\r\n\t\t\tsetSearchParams(searchParams);\r\n\t\t\twindow.scrollTo({ top: 0, behavior: \"smooth\" });\r\n\t\t\tif (inputRef.current) {\r\n\t\t\t\tinputRef.current.focus();\r\n\t\t\t}\r\n\t\t},\r\n\t\t[searchParams, setSearchParams],\r\n\t);\r\n\r\n\tconst urlQuery = getCaseInsensitiveParam(searchParams, \"q\");\r\n\tconst urlStage = getCaseInsensitiveParam(searchParams, \"t\");\r\n\r\n\tuseEffect(() => {\r\n\t\tif (urlQuery) {\r\n\t\t\tsetQuery(urlQuery);\r\n\t\t\tsetFocusedGroup(urlStage);\r\n\t\t\tsetHasSearched(true);\r\n\t\t\tsetIsSearching(true);\r\n\t\t\tif (inputRef.current) {\r\n\t\t\t\tinputRef.current.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t}, [urlQuery, urlStage]);\r\n\r\n\tconst [searchResults, setSearchResults] = useState<IGallerySearchResults>();\r\n\r\n\tconst { thumbnailDictionary } = useShowroomThumbnailState((selectors) => selectors.getState(), []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (isSearching) {\r\n\t\t\tsetPage(1);\r\n\t\t\tsetRedirectAppId(-2);\r\n\t\t\tsetIsUnlistedClientResult(false);\r\n\t\t\tconst results = SearchStages(query, 0, stageTree, categoryTree);\r\n\t\t\tsetSearchResults(results);\r\n\t\t\tif (results.resultCount === 0 && userCanSeeLinkToUnlisted) {\r\n\t\t\t\tsetIsUnlistedClientResult(true);\r\n\t\t\t\tsetRedirectAppId(-1);\r\n\t\t\t\ttryForClientIdMatch(query);\r\n\t\t\t}\r\n\t\t\tsetIsSearching(false);\r\n\t\t}\r\n\t}, [categoryTree, isSearching, query, stageTree, tryForClientIdMatch, userCanSeeLinkToUnlisted]);\r\n\r\n\t//#endregion\r\n\r\n\tconst recordsToShow = useMemo(() => {\r\n\t\tif (\r\n\t\t\t!hasSearched ||\r\n\t\t\t!searchResults ||\r\n\t\t\t!searchResults.resultGroups ||\r\n\t\t\tsearchResults.resultGroups.length === 0\r\n\t\t) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tlet displayGroups: { [index: string]: ISearchResultGroup } = {};\r\n\r\n\t\tconst isFocusedGroupSet = focusedGroup && focusedGroup.trim();\r\n\t\tsearchResults.resultGroups.forEach((group: IGallerySearchResultGroup) => {\r\n\t\t\tif (isFocusedGroupSet && group.topLevelStageName !== focusedGroup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!displayGroups[group.topLevelStageName]) {\r\n\t\t\t\tdisplayGroups[group.topLevelStageName] = {\r\n\t\t\t\t\tgroupName: group.topLevelStageName,\r\n\t\t\t\t\tgroupDisclaimer: group.topLevelDisclaimer,\r\n\t\t\t\t\tgroupColor: showroomPrimary,\r\n\t\t\t\t\tlistings: [],\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tdisplayGroups[group.topLevelStageName].listings.push(\r\n\t\t\t\t...group.listings.map((value: IGalleryListingSearchResult) => {\r\n\t\t\t\t\tconst resultItem: ISearchResultItem = {\r\n\t\t\t\t\t\tid: value.teaser.listingId,\r\n\t\t\t\t\t\tname: value.teaser.name,\r\n\t\t\t\t\t\t...value,\r\n\t\t\t\t\t\tcurrentStageName: value.currentStageName,\r\n\t\t\t\t\t\tsubStageName: value.subStageName,\r\n\t\t\t\t\t\tgroupColor: value.subStageColor,\r\n\t\t\t\t\t\tgalleryIcon: value.subStageGalleryIcon,\r\n\t\t\t\t\t\tprimaryCategoryName: value.teaser.primaryCategoryName,\r\n\t\t\t\t\t\tisComingSoon: value.teaser.isComingSoon,\r\n\t\t\t\t\t\tstageComingSoonBackgroundImagePath: value.stageComingSoonBackgroundImagePath,\r\n\t\t\t\t\t};\r\n\t\t\t\t\treturn resultItem;\r\n\t\t\t\t}),\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tlet returnGroups: ISearchResultGroup[] = [];\r\n\t\tfor (let groupName in displayGroups) {\r\n\t\t\tlet group: ISearchResultGroup = displayGroups[groupName];\r\n\t\t\tgroup.listings.sort((result1, result2) => result2.matchStrength - result1.matchStrength);\r\n\t\t\treturnGroups.push(group);\r\n\t\t}\r\n\r\n\t\treturnGroups.sort(\r\n\t\t\t(group1, group2) => group2.listings[0].matchStrength - group1.listings[0].matchStrength,\r\n\t\t);\r\n\r\n\t\tif (isFocusedGroupSet && returnGroups.length > 0) {\r\n\t\t\tsetPageCount(Math.ceil(returnGroups[0].listings.length / pageSize));\r\n\t\t} else {\r\n\t\t\tsetPageCount(0);\r\n\t\t}\r\n\r\n\t\treturn returnGroups;\r\n\t}, [focusedGroup, hasSearched, searchResults]);\r\n\r\n\tconst pageStart = useMemo(() => {\r\n\t\tif (focusedGroup && focusedGroup.trim()) {\r\n\t\t\treturn (page - 1) * pageSize;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}, [focusedGroup, page]);\r\n\r\n\tconst pageLength = useMemo(() => {\r\n\t\tif (focusedGroup && focusedGroup.trim()) {\r\n\t\t\treturn pageSize;\r\n\t\t} else {\r\n\t\t\treturn previewPageSize;\r\n\t\t}\r\n\t}, [focusedGroup]);\r\n\r\n\tconst searchResultElements = useMemo(() => {\r\n\t\tif (!hasSearched) {\r\n\t\t\treturn (\r\n\t\t\t\t<Center>\r\n\t\t\t\t\t<Text fontSize=\"xl\">Enter a search term to get started.</Text>\r\n\t\t\t\t</Center>\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (!recordsToShow || recordsToShow.length === 0) {\r\n\t\t\treturn (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Center>\r\n\t\t\t\t\t\t<Text fontSize=\"xl\">\r\n\t\t\t\t\t\t\t{userSecurity.userId\r\n\t\t\t\t\t\t\t\t? `No results found in ${siteInfo.galleryTokens.galleryName}.`\r\n\t\t\t\t\t\t\t\t: `No results found in ${siteInfo.galleryTokens.galleryName}. If you are a community member searching for an app by client ID, log in to ${config.SiteName} and use the downloads page.`}\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t</Center>\r\n\t\t\t\t\t{userCanSeeLinkToUnlisted && isUnlistedClientResult && (\r\n\t\t\t\t\t\t<Center mt=\"30px\">\r\n\t\t\t\t\t\t\t<LoadingClientIdMatchPlaceholder\r\n\t\t\t\t\t\t\t\tinProgressIndicator={<WidgetSpinner />}\r\n\t\t\t\t\t\t\t\terrorTitle=\"Error Loading\"\r\n\t\t\t\t\t\t\t\terrorMessage=\"We encountered an error trying to load data from the server.\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{unlistedClientFound && (\r\n\t\t\t\t\t\t\t\t\t<Text>\r\n\t\t\t\t\t\t\t\t\t\tAn app was found that is not in Showroom.{\" \"}\r\n\t\t\t\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\t\t\t\thref={\r\n\t\t\t\t\t\t\t\t\t\t\t\tisLocalhost() || siteInfo.isAdminSite\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `/Download?id=${redirectAppId}`\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `${siteInfo.vendorServicesUrl}Download?id=${redirectAppId}`\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tView it in the downloads page\r\n\t\t\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</LoadingClientIdMatchPlaceholder>\r\n\t\t\t\t\t\t</Center>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</>\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{recordsToShow.map((group, index) => {\r\n\t\t\t\t\tlet pagedListings = group.listings.slice(pageStart, pageStart + pageLength);\r\n\t\t\t\t\tconst boxMarginBottom = !focusedGroup && index < recordsToShow.length - 1 ? \"48px\" : \"0\";\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Box mb={boxMarginBottom}>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t<Center>\r\n\t\t\t\t\t\t\t\t\t<Heading as=\"h2\" color={group.groupColor} fontFamily=\"Jost\">\r\n\t\t\t\t\t\t\t\t\t\t{group.groupName}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t</Center>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t<ThumbnailProvider\r\n\t\t\t\t\t\t\t\tlistingIds={pagedListings.map((x) => x.id)}\r\n\t\t\t\t\t\t\t\tthumbnailDictionary={thumbnailDictionary}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{pagedListings.map((listing) => (\r\n\t\t\t\t\t\t\t\t\t<ShowroomSearchResultCard\r\n\t\t\t\t\t\t\t\t\t\tlisting={listing}\r\n\t\t\t\t\t\t\t\t\t\tthumbnailDictionary={thumbnailDictionary}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</ThumbnailProvider>\r\n\r\n\t\t\t\t\t\t\t{group.groupDisclaimer && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\ttextAlign=\"center\"\r\n\t\t\t\t\t\t\t\t\tfontWeight=\"300\"\r\n\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{ __html: group.groupDisclaimer }}\r\n\t\t\t\t\t\t\t\t\tpt=\"5px\"\r\n\t\t\t\t\t\t\t\t\tpb=\"15px;\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t{!focusedGroup && group.listings.length > previewPageSize && (\r\n\t\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\thandleSeeStage(group.groupName);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\t\t\t\t\t\tif (event.key === \"Enter\") {\r\n\t\t\t\t\t\t\t\t\t\t\thandleSeeStage(group.groupName);\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tAll {group.listings.length} {group.groupName} Results {\"\\u27F6\"}\r\n\t\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\r\n\t\t\t\t{focusedGroup && pageCount > 1 && (\r\n\t\t\t\t\t<Center>\r\n\t\t\t\t\t\t<PaginationControl\r\n\t\t\t\t\t\t\tcurrentPage={page}\r\n\t\t\t\t\t\t\tnumPages={pageCount}\r\n\t\t\t\t\t\t\thandleUpdatePage={handlePageChanged}\r\n\t\t\t\t\t\t></PaginationControl>\r\n\t\t\t\t\t</Center>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t);\r\n\t}, [\r\n\t\thasSearched,\r\n\t\trecordsToShow,\r\n\t\tfocusedGroup,\r\n\t\tpageCount,\r\n\t\tpage,\r\n\t\thandlePageChanged,\r\n\t\tuserCanSeeLinkToUnlisted,\r\n\t\tisUnlistedClientResult,\r\n\t\tLoadingClientIdMatchPlaceholder,\r\n\t\tunlistedClientFound,\r\n\t\tsiteInfo.isAdminSite,\r\n\t\tsiteInfo.vendorServicesUrl,\r\n\t\tredirectAppId,\r\n\t\tpageStart,\r\n\t\tpageLength,\r\n\t\tthumbnailDictionary,\r\n\t\thandleSeeStage,\r\n\t]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<ShowroomContentHeader\r\n\t\t\t\tcolSpan={[10, 8, 6, 4]}\r\n\t\t\t\tbackgroundColor1=\"#D8D8FF\"\r\n\t\t\t\tbackgroundColor2=\"#F0F0FF\"\r\n\t\t\t>\r\n\t\t\t\t<VStack spacing=\"15px\" mb=\"25px\">\r\n\t\t\t\t\t<Center>\r\n\t\t\t\t\t\t<Heading as=\"h2\" color=\"#5C15CD\" pt=\"50px\" fontFamily=\"Jost\">\r\n\t\t\t\t\t\t\t{!focusedGroup && \"Search Results\"}\r\n\t\t\t\t\t\t\t{focusedGroup && `Search ${focusedGroup}`}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t</Center>\r\n\t\t\t\t\t<Box templateColumns=\"repeat(12, 1fr)\" gap={GridGap} w=\"100%\">\r\n\t\t\t\t\t\t<InputGroup w=\"100%\">\r\n\t\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\tplaceholder=\"Search...\"\r\n\t\t\t\t\t\t\t\tmaxLength={100}\r\n\t\t\t\t\t\t\t\tvalue={query}\r\n\t\t\t\t\t\t\t\tborderRadius=\"3xl\"\r\n\t\t\t\t\t\t\t\tbackgroundColor=\"white\"\r\n\t\t\t\t\t\t\t\tonChange={(event) => {\r\n\t\t\t\t\t\t\t\t\tsetQuery(event.target.value);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\t\t\t\t\tif (event.key === \"Enter\") {\r\n\t\t\t\t\t\t\t\t\t\thandleSearch();\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tref={inputRef}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<InputRightElement>\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tonClick={handleSearch}\r\n\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\r\n\t\t\t\t\t\t\t\t\th=\"2rem\"\r\n\t\t\t\t\t\t\t\t\tw=\"1.75rem\"\r\n\t\t\t\t\t\t\t\t\tminW=\"1.75rem\"\r\n\t\t\t\t\t\t\t\t\tborderRadius=\"3xl\"\r\n\t\t\t\t\t\t\t\t\taria-label=\"Search\"\r\n\t\t\t\t\t\t\t\t\ticon={<SearchIcon color={showroomPrimary} />}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</InputRightElement>\r\n\t\t\t\t\t\t</InputGroup>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Center>\r\n\t\t\t\t\t\t{focusedGroup && (\r\n\t\t\t\t\t\t\t<Link\r\n\t\t\t\t\t\t\t\ttabIndex={0}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\thandleSeeStage(\"\");\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\r\n\t\t\t\t\t\t\t\t\tif (event.key === \"Enter\") {\r\n\t\t\t\t\t\t\t\t\t\thandleSeeStage(\"\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{\"\\u27F5\"} Back to All Results\r\n\t\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Center>\r\n\t\t\t\t</VStack>\r\n\t\t\t</ShowroomContentHeader>\r\n\t\t\t<ShowroomContent colSpan={[12, 10]}>\r\n\t\t\t\t{isSearching && <MainContentSpinner />}\r\n\t\t\t\t{!isSearching && searchResultElements}\r\n\t\t\t</ShowroomContent>\r\n\t\t</>\r\n\t);\r\n});\r\n\r\ninterface IShowroomSearchResultCardProps {\r\n\tlisting: ISearchResultItem;\r\n\tthumbnailDictionary: IThumbnailDictionary;\r\n}\r\n\r\nconst ShowroomSearchResultCard: FunctionComponent<IShowroomSearchResultCardProps> = memo((props) => {\r\n\tconst { listing, thumbnailDictionary } = props;\r\n\r\n\tconst [hover, setHover] = useState<boolean>();\r\n\r\n\tconst useExternalLink = !isNullOrEmpty(listing.externalLink);\r\n\r\n\tconst conditionalWatermarkProps: BoxProps = listing.isComingSoon\r\n\t\t? {\r\n\t\t\th: \"63px\",\r\n\t\t\tw: \"63px\",\r\n\t\t\ttop: \"0\",\r\n\t\t\tbackgroundColor: \"none\",\r\n\t\t\tborderRadius: \"0\",\r\n\t\t\tbackgroundImage: `url('${getBaseUrl()}Content/images/${listing.stageComingSoonBackgroundImagePath\r\n\t\t\t\t}')`,\r\n\t\t\tright: listing.externalLink ? \"36px\" : \"0\",\r\n\t\t}\r\n\t\t: { right: listing.externalLink ? \"36px\" : undefined };\r\n\r\n\treturn (\r\n\t\t<ShowroomSearchResultCardWrapper\r\n\t\t\tlistingId={listing.id}\r\n\t\t\tisClickable={listing.isClickable && !useExternalLink}\r\n\t\t\tsetHover={setHover}\r\n\t\t>\r\n\t\t\t<Grid templateColumns=\"repeat(10, 1fr)\" gap={GridGap}>\r\n\t\t\t\t<GridItem colSpan={[5, 3, 2]}>\r\n\t\t\t\t\t<ShowroomSearchResultThumbnailWrapper\r\n\t\t\t\t\t\texternalLink={listing.externalLink}\r\n\t\t\t\t\t\tsetHover={setHover}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Thumbnail\r\n\t\t\t\t\t\t\th=\"100%\"\r\n\t\t\t\t\t\t\tmaxH=\"100%\"\r\n\t\t\t\t\t\t\tobjectFit=\"scale-down\"\r\n\t\t\t\t\t\t\tlistingId={listing.id}\r\n\t\t\t\t\t\t\tsrc={\r\n\t\t\t\t\t\t\t\tlisting.id in thumbnailDictionary\r\n\t\t\t\t\t\t\t\t\t? thumbnailDictionary[listing.id].ImageData\r\n\t\t\t\t\t\t\t\t\t: undefined\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttransform={hover ? \"scale(1.025)\" : \"\"}\r\n\t\t\t\t\t\t\ttransitionDuration=\"200ms\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{listing.galleryIcon ? (\r\n\t\t\t\t\t\t\t<ThumbnailStageWatermark\r\n\t\t\t\t\t\t\t\ticonPath={listing.galleryIcon}\r\n\t\t\t\t\t\t\t\t{...conditionalWatermarkProps}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t) : listing.isComingSoon ? (\r\n\t\t\t\t\t\t\t<ComingSoonMarker\r\n\t\t\t\t\t\t\t\theight=\"63px\"\r\n\t\t\t\t\t\t\t\twidth=\"63px\"\r\n\t\t\t\t\t\t\t\tbackgroundImage={`url('${getBaseUrl()}Content/images/${listing.stageComingSoonBackgroundImagePath\r\n\t\t\t\t\t\t\t\t\t}')`}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t{listing.externalLink && <ThumbnailExternalWatermark />}\r\n\t\t\t\t\t</ShowroomSearchResultThumbnailWrapper>\r\n\t\t\t\t</GridItem>\r\n\t\t\t\t<GridItem colSpan={[5, 7, 8]}>\r\n\t\t\t\t\t<Box overflow=\"hidden\">\r\n\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\tas=\"h3\"\r\n\t\t\t\t\t\t\tfontFamily=\"Jost\"\r\n\t\t\t\t\t\t\tnoOfLines={1}\r\n\t\t\t\t\t\t\ttextDecoration={hover && !useExternalLink ? \"underline\" : \"unset\"}\r\n\t\t\t\t\t\t\ttransitionDuration=\"200ms\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{listing.name}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t{!!listing.primaryCategoryName && (\r\n\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\tas=\"h4\"\r\n\t\t\t\t\t\t\t\tfontFamily=\"Jost\"\r\n\t\t\t\t\t\t\t\tnoOfLines={1}\r\n\t\t\t\t\t\t\t\tfontWeight=\"light\"\r\n\t\t\t\t\t\t\t\tcolor={listing.groupColor}\r\n\t\t\t\t\t\t\t\tmt=\"3px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{listing.primaryCategoryName}\r\n\t\t\t\t\t\t\t\t{` | ${listing.subStageName}`}\r\n\t\t\t\t\t\t\t\t{listing.currentStageName !== listing.subStageName &&\r\n\t\t\t\t\t\t\t\t\t` | ${listing.currentStageName}`}\r\n\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{!listing.primaryCategoryName && (\r\n\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\tas=\"h4\"\r\n\t\t\t\t\t\t\t\tfontFamily=\"Jost\"\r\n\t\t\t\t\t\t\t\tnoOfLines={1}\r\n\t\t\t\t\t\t\t\tfontWeight=\"light\"\r\n\t\t\t\t\t\t\t\tcolor=\"#989898\"\r\n\t\t\t\t\t\t\t\tmt=\"3px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{listing.subStageName}\r\n\t\t\t\t\t\t\t\t{listing.currentStageName !== listing.subStageName &&\r\n\t\t\t\t\t\t\t\t\t` | ${listing.currentStageName}`}\r\n\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<Text\r\n\t\t\t\t\t\t\tnoOfLines={2}\r\n\t\t\t\t\t\t\twhiteSpace=\"pre-line\"\r\n\t\t\t\t\t\t\tmt=\"8px\"\r\n\t\t\t\t\t\t\tcolor={showroomText}\r\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\r\n\t\t\t\t\t\t\t\t__html: listing.matchingText.join(\" - \"),\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</GridItem>\r\n\t\t\t</Grid>\r\n\t\t</ShowroomSearchResultCardWrapper>\r\n\t);\r\n});\r\n\r\ninterface IShowroomSearchResultCardWrapperProps {\r\n\tlistingId: number;\r\n\tisClickable: boolean;\r\n\tsetHover: React.Dispatch<React.SetStateAction<boolean | undefined>>;\r\n\tchildren?: React.ReactNode;\r\n}\r\n\r\nconst ShowroomSearchResultCardWrapper: FunctionComponent<IShowroomSearchResultCardWrapperProps> = memo(\r\n\t(props) => {\r\n\t\tconst { listingId, isClickable, setHover, children } = props;\r\n\r\n\t\tconst { siteInfo } = useSiteInfoState((selectors) => selectors.getState(), []);\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{isClickable ? (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tas={LinkButton}\r\n\t\t\t\t\t\turl={`${siteInfo.showroomRelativeUrl}Listing?id=${listingId}&returnTitle=${BackLinkType.ToSearch}`}\r\n\t\t\t\t\t\tbackground=\"inherit\"\r\n\t\t\t\t\t\t_hover={{\r\n\t\t\t\t\t\t\tbackground: \"inherit\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMouseOver={() => setHover(true)}\r\n\t\t\t\t\t\tonMouseOut={() => setHover(false)}\r\n\t\t\t\t\t\tdisplay=\"block\"\r\n\t\t\t\t\t\twhiteSpace=\"unset\"\r\n\t\t\t\t\t\tfontWeight=\"unset\"\r\n\t\t\t\t\t\th=\"fit-content\"\r\n\t\t\t\t\t\tw=\"100%\"\r\n\t\t\t\t\t\tm=\"10px 0\"\r\n\t\t\t\t\t\tp=\"15px 0\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tbackground=\"inherit\"\r\n\t\t\t\t\t\tdisplay=\"block\"\r\n\t\t\t\t\t\twhiteSpace=\"unset\"\r\n\t\t\t\t\t\tfontWeight=\"unset\"\r\n\t\t\t\t\t\th=\"fit-content\"\r\n\t\t\t\t\t\tw=\"100%\"\r\n\t\t\t\t\t\tm=\"10px 0\"\r\n\t\t\t\t\t\tp=\"15px 0\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t);\r\n\t},\r\n);\r\n\r\ninterface IShowroomSearchResultThumbnailWrapperProps {\r\n\texternalLink: string | undefined;\r\n\tsetHover: React.Dispatch<React.SetStateAction<boolean | undefined>>;\r\n\tchildren?: React.ReactNode;\r\n}\r\n\r\nconst ShowroomSearchResultThumbnailWrapper: FunctionComponent<IShowroomSearchResultThumbnailWrapperProps> = memo(\r\n\t(props) => {\r\n\t\tconst { externalLink, setHover, children } = props;\r\n\r\n\t\tconst sharedProps = {\r\n\t\t\taspectRatio: \"5 / 3\",\r\n\t\t\tstyle: { aspectRatio: \"5 / 3\" },\r\n\t\t\tpadding: \"5px\",\r\n\t\t\tbackground: \"#FFFFFF\",\r\n\t\t\tboxShadow: \"0px 2px 4px #00000029\",\r\n\t\t\tborder: showroomBorder,\r\n\t\t\tborderRadius: \"10px\",\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{externalLink ? (\r\n\t\t\t\t\t<Center\r\n\t\t\t\t\t\tas={Link}\r\n\t\t\t\t\t\tisExternal\r\n\t\t\t\t\t\thref={externalLink}\r\n\t\t\t\t\t\ttitle=\"Access external website\"\r\n\t\t\t\t\t\tcolor={showroomText}\r\n\t\t\t\t\t\t_hover={{ color: showroomText }}\r\n\t\t\t\t\t\tonMouseOver={() => setHover(true)}\r\n\t\t\t\t\t\tonMouseOut={() => setHover(false)}\r\n\t\t\t\t\t\tposition=\"relative\"\r\n\t\t\t\t\t\t{...sharedProps}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Center>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Center position=\"relative\" {...sharedProps}>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</Center>\r\n\t\t\t\t)}\r\n\t\t\t</>\r\n\t\t);\r\n\t},\r\n);\r\n\r\ninterface ISearchResultGroup {\r\n\tgroupName: string;\r\n\tgroupDisclaimer: string;\r\n\tgroupColor: string;\r\n\tlistings: ISearchResultItem[];\r\n}\r\n\r\ninterface ISearchResultItem {\r\n\tid: number;\r\n\tname: string;\r\n\tmatchingText: string[];\r\n\tgroupColor: string;\r\n\tcurrentStageName: string;\r\n\tsubStageName: string;\r\n\tmatchStrength: number;\r\n\tgalleryIcon?: string;\r\n\tprimaryCategoryName: string;\r\n\tisClickable: boolean;\r\n\texternalLink?: string;\r\n\tisComingSoon?: boolean;\r\n\tstageComingSoonBackgroundImagePath?: string;\r\n}\r\n\r\nexport default ShowroomSearch;\r\n","/**\r\n * @copyright Copyright 2024-2025 Epic Systems Corporation\r\n * @file app thumbnail or thumbnail placeholder\r\n * @module Epic.AppOrchard.AppListing.ComingSoonMarker\r\n */\r\n\r\nimport { Box, BoxProps } from \"@chakra-ui/react\";\r\nimport React from \"react\";\r\n\r\nexport const ComingSoonMarker: React.FC<BoxProps> = (props: BoxProps) => {\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tpos={\"absolute\"}\r\n\t\t\ttop={props?.top ?? \"0\"}\r\n\t\t\tright={props?.right ?? \"0\"}\r\n\t\t\twidth={props?.w ?? props?.width ?? \"84px\"}\r\n\t\t\theight={props?.h ?? props?.height ?? \"84px\"}\r\n\t\t\tmaxH={props?.maxHeight ?? props?.maxH ?? \"100%\"}\r\n\t\t\tmaxW={props?.maxWidth ?? props?.maxW ?? \"84px\"}\r\n\t\t\tbackgroundImage={props.backgroundImage ?? \"none\"}\r\n\t\t\tbackgroundSize={\"contain\"}\r\n\t\t\tbackgroundRepeat={\"no-repeat\"}\r\n\t\t\tbackgroundPosition={props?.backgroundPosition ?? \"top right\"}\r\n\t\t\t{...props}\r\n\t\t></Box>\r\n\t);\r\n};\r\n","/**\r\n * @copyright Copyright 2023 Epic Systems Corporation\r\n * @file Content section for Showroom pages. Adds the curve\r\n * @module Epic.AppOrchard.Showroom.ShowroomContent\r\n */\r\n\r\nimport { Box, BoxProps, Grid, GridItem, useBreakpointValue } from \"@chakra-ui/react\";\r\nimport { ContentWidth, GridGap } from \"ao/components/Showroom/Helper\";\r\nimport React, { FunctionComponent, memo, ReactNode, useMemo } from \"react\";\r\n\r\ninterface IProps {\r\n\tchildren: ReactNode;\r\n\tbackground?: string;\r\n\tcolSpan?: Record<string, number> | number[];\r\n\tmaxWidthOverride?: string;\r\n\tisAdjustSwoop?: boolean | undefined; // Whether to push the background swoop down like on the Home page\r\n}\r\n\r\ntype Props = IProps & BoxProps;\r\n\r\nconst curveProps: BoxProps = {\r\n\tborderTopLeftRadius: \"50% 150px\",\r\n\tborderTopRightRadius: \"50% 150px\",\r\n\r\n\tposition: \"relative\",\r\n\twidth: \"150%\",\r\n\theight: \"100%\",\r\n\tleft: \"-25%\",\r\n\tboxShadow: \"0px 0px 10px #00000029;\",\r\n\tpaddingTop: \"50px\",\r\n\tpaddingX: \"25%\",\r\n\tflexGrow: \"1\",\r\n};\r\n\r\nexport const ShowroomContent: FunctionComponent<Props> = memo((props) => {\r\n\tconst { children, background, colSpan, maxWidthOverride, isAdjustSwoop } = props;\r\n\tconst contentColSpan = useBreakpointValue(colSpan || [12]) || 12;\r\n\tconst contentColStart = useMemo(() => {\r\n\t\tconst spanRoundedDownToEven = Math.floor(contentColSpan / 2) * 2;\r\n\t\treturn (14 - spanRoundedDownToEven) / 2;\r\n\t}, [contentColSpan]);\r\n\r\n\treturn (\r\n\t\t<Box\r\n\t\t\t{...curveProps}\r\n\t\t\tdisplay=\"flex\"\r\n\t\t\tflexDirection=\"column\"\r\n\t\t\tbackground={\r\n\t\t\t\tbackground ??\r\n\t\t\t\t\"transparent linear-gradient(169deg, #FFFFFF 0%, #F3F3FF 100%) 0% 0% no-repeat padding-box\"\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t<Box minH=\"100px\" mt=\"-50px\" pb=\"48px\" pt=\"50px\" flexGrow=\"1\">\r\n\t\t\t\t<Box maxW={maxWidthOverride ?? ContentWidth} m=\"0 auto\">\r\n\t\t\t\t\t<Grid\r\n\t\t\t\t\t\ttemplateColumns=\"repeat(12, 1fr)\"\r\n\t\t\t\t\t\tgap={GridGap}\r\n\t\t\t\t\t\tpaddingX={{ base: \"15px\", md: \"0px\" }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<GridItem colSpan={contentColSpan} colStart={contentColStart}>\r\n\t\t\t\t\t\t\t<Box mt={isAdjustSwoop ? \"-150px\" : undefined}>{children}</Box>\r\n\t\t\t\t\t\t</GridItem>\r\n\t\t\t\t\t</Grid>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023 Epic Systems Corporation\r\n * @file Content header for most Showroom pages\r\n * @module Epic.AppOrchard.Showroom.ShowroomContentHeader\r\n */\r\n\r\nimport { Box, BoxProps, Grid, GridItem, useBreakpointValue } from \"@chakra-ui/react\";\r\nimport { ShowroomHomeHeader } from \"ao/components/Frame/ShowroomHeader\";\r\nimport { IGalleryStageWithChildren } from \"ao/types/showroom\";\r\nimport { getBaseUrl } from \"ao/utils/helpers\";\r\nimport React, { FunctionComponent, memo, ReactNode, useMemo } from \"react\";\r\nimport { ContentWidth, GridGap } from \"../../Helper\";\r\n\r\ninterface IProps {\r\n\tchildren: ReactNode;\r\n\tbackground?: string;\r\n\tbackgroundSize?: string;\r\n\tbackgroundColor1: string;\r\n\tbackgroundColor2: string;\r\n\tcolSpan?: Record<string, number> | number[];\r\n\tisAdjustSwoop?: boolean | undefined; // Whether to push the background swoop down like on the Home page\r\n\tisHomePage?: boolean;\r\n\tstageTree?: IGalleryStageWithChildren[];\r\n\ttitle?: string;\r\n}\r\n\r\ntype Props = IProps & BoxProps;\r\n\r\nexport const ShowroomContentHeader: FunctionComponent<Props> = memo((props) => {\r\n\tconst {\r\n\t\tchildren,\r\n\t\tbackground,\r\n\t\tbackgroundSize,\r\n\t\tbackgroundColor1,\r\n\t\tbackgroundColor2,\r\n\t\tcolSpan,\r\n\t\tisAdjustSwoop,\r\n\t\tisHomePage,\r\n\t\tstageTree,\r\n\t\ttitle,\r\n\t} = props;\r\n\r\n\tconst baseUrl = useMemo(() => getBaseUrl(), []);\r\n\tconst isMobile = useBreakpointValue({ base: true, lg: false }) || false;\r\n\tconst contentColSpan = useBreakpointValue(colSpan || [12]) || 12;\r\n\tconst contentColStart = useMemo(() => {\r\n\t\tconst spanRoundedDownToEven = Math.floor(contentColSpan / 2) * 2;\r\n\t\treturn (14 - spanRoundedDownToEven) / 2;\r\n\t}, [contentColSpan]);\r\n\r\n\tconst boxProps = isHomePage\r\n\t\t? {\r\n\t\t\t\tpaddingTop: isMobile ? \"0px\" : \"75px\",\r\n\t\t\t\tpaddingBottom: isAdjustSwoop ? \"150px\" : \"50px\",\r\n\t\t\t\tmarginTop: \"-95px\",\r\n\t\t  }\r\n\t\t: {\r\n\t\t\t\tpaddingTop: !isMobile ? \"30px\" : \"50px\",\r\n\t\t\t\tpaddingBottom: isAdjustSwoop ? \"150px\" : \"50px\",\r\n\t\t\t\tmarginTop: isMobile ? \"-40px\" : \"40px\",\r\n\t\t  };\r\n\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tmb={\"-50px\"}\r\n\t\t\t{...boxProps}\r\n\t\t\tbackgroundSize={backgroundSize || \"cover\"}\r\n\t\t\tbackground={\r\n\t\t\t\tbackground ||\r\n\t\t\t\t`url('${baseUrl}Content/images/Showroom/Bubbles.png') -700px top, url('${baseUrl}Content/images/Showroom/Bubbles.png') right -700px bottom, transparent linear-gradient(90deg, ${backgroundColor1} 0%, ${backgroundColor2} 20%, ${backgroundColor2} 80%, ${backgroundColor1} 100%)`\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t{isHomePage && stageTree && <ShowroomHomeHeader stageTree={stageTree} title={title} />}\r\n\t\t\t<Box maxW={ContentWidth} m=\"0 auto\">\r\n\t\t\t\t<Grid templateColumns=\"repeat(12, 1fr)\" gap={GridGap} paddingX={{ base: \"15px\", md: \"0px\" }}>\r\n\t\t\t\t\t<GridItem colSpan={contentColSpan} colStart={contentColStart}>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</GridItem>\r\n\t\t\t\t</Grid>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2025 Epic Systems Corporation\r\n * @file app thumbnail or thumbnail placeholder\r\n * @module Epic.AppOrchard.AppListing.Thumbnail\r\n */\r\n\r\nimport { ExternalLinkIcon } from \"@chakra-ui/icons\";\r\nimport { Box, BoxProps, Image, ImageProps } from \"@chakra-ui/react\";\r\nimport { config } from \"ao/appConfig\";\r\nimport { getBaseUrl, isNullOrEmpty } from \"ao/utils/helpers\";\r\nimport React, { FunctionComponent, memo, useMemo } from \"react\";\r\n\r\ninterface IProps {\r\n\tsrc?: string;\r\n\tlistingId: number;\r\n\tshowBackground?: boolean;\r\n}\r\n\r\ntype Props = IProps & ImageProps;\r\n\r\nexport const Thumbnail: FunctionComponent<Props> = memo((props) => {\r\n\tconst { src, listingId, showBackground, ...rest } = props;\r\n\r\n\tconst baseUrl = useMemo(() => getBaseUrl(), []);\r\n\r\n\tconst thumbnailSrc = !isNullOrEmpty(src)\r\n\t\t? `data:image/png;base64,${src}`\r\n\t\t: `${baseUrl}Content/images/app_placeholder.png`;\r\n\tconst thumbnailColor = !isNullOrEmpty(src)\r\n\t\t? \"none\"\r\n\t\t: `appThumbnailBackground.${listingId % config.NumAppThumbnailColors}`;\r\n\r\n\treturn (\r\n\t\t<Image\r\n\t\t\tsrc={thumbnailSrc}\r\n\t\t\tbackgroundColor={showBackground ? rest.backgroundColor || thumbnailColor : \"none\"}\r\n\t\t\t{...rest}\r\n\t\t/>\r\n\t);\r\n});\r\n\r\ninterface IThumbnailStageWatermarkProps extends BoxProps {\r\n\ticonPath: string;\r\n}\r\n\r\nexport const ThumbnailStageWatermark: React.FC<IThumbnailStageWatermarkProps> = (\r\n\tprops: IThumbnailStageWatermarkProps,\r\n) => {\r\n\tconst baseUrl = useMemo(() => getBaseUrl(), []);\r\n\r\n\treturn (\r\n\t\t<ThumbnailWatermark {...props}>\r\n\t\t\t<Image\r\n\t\t\t\tsrc={`${baseUrl}Content/images/${props.iconPath}`}\r\n\t\t\t\tfallback={<></>}\r\n\t\t\t\tmaxH=\"26px\"\r\n\t\t\t\tmaxW=\"26px\"\r\n\t\t\t\th=\"26px\"\r\n\t\t\t\tw=\"26px\"\r\n\t\t\t\tp=\"3px\"\r\n\t\t\t\tpos=\"absolute\"\r\n\t\t\t\tright=\"3px\"\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tfilter:\r\n\t\t\t\t\t\t\"drop-shadow(1px 0px 0px white) drop-shadow(-1px 0px 0px white) drop-shadow(0px 1px 0px white) drop-shadow(0px -1px 0px white)\",\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t</ThumbnailWatermark>\r\n\t);\r\n};\r\n\r\ninterface IThumbnailExternalWatermarkProps {\r\n\ttitle?: string;\r\n}\r\n\r\nexport const ThumbnailExternalWatermark: React.FC<IThumbnailExternalWatermarkProps> = (\r\n\tprops: IThumbnailExternalWatermarkProps,\r\n) => {\r\n\treturn (\r\n\t\t<ThumbnailWatermark title={props.title}>\r\n\t\t\t<ExternalLinkIcon maxH=\"26px\" maxW=\"26px\" h=\"26px\" w=\"26px\" p=\"3px\" />\r\n\t\t</ThumbnailWatermark>\r\n\t);\r\n};\r\n\r\nexport const ThumbnailWatermark: React.FC<BoxProps> = (props: BoxProps) => {\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tpos={props?.pos ?? props.position ?? \"absolute\"}\r\n\t\t\ttop={props?.top ?? \"5px\"}\r\n\t\t\tright={props?.right ?? \"5px\"}\r\n\t\t\tborder={props?.border ?? \"0\"}\r\n\t\t\tborderBottom={props?.borderBottom ?? \"0\"}\r\n\t\t\tborderLeft={props?.borderLeft ?? \"0\"}\r\n\t\t\tbackgroundColor={props?.backgroundColor ?? \"white\"}\r\n\t\t\tbackgroundImage={props?.backgroundImage ?? \"none\"}\r\n\t\t\tbackgroundSize={props?.backgroundSize ?? \"contain\"}\r\n\t\t\tbackgroundRepeat={props?.backgroundRepeat ?? \"no-repeat\"}\r\n\t\t\tbackgroundPosition={props?.backgroundPosition ?? \"top right\"}\r\n\t\t\tborderRadius={props?.borderRadius ?? \"50%\"}\r\n\t\t\tpadding={props?.padding ?? \"2px 2px 5px 5px\"}\r\n\t\t\theight={props?.h ?? props.height ?? \"auto\"}\r\n\t\t\twidth={props?.w ?? props.width ?? \"auto\"}\r\n\t\t\tmaxH={props?.maxH ?? props?.maxHeight ?? \"100%\"}\r\n\t\t\tmaxW={props?.maxW ?? props.maxWidth ?? \"84px\"}\r\n\t\t\ttitle={props.title}\r\n\t\t>\r\n\t\t\t{props.children}\r\n\t\t</Box>\r\n\t);\r\n};\r\n\r\nThumbnail.defaultProps = { display: \"inline\", borderRadius: \"10px\" };\r\n","/**\r\n * @copyright Copyright 2023 Epic Systems Corporation\r\n * @file loads thumbnails if they don't exist in the store\r\n * @module Epic.AppOrchard.AppListing.ThumbnailProvider\r\n */\r\n\r\nimport { useAsync } from \"@epic/react-async-hook\";\r\nimport { IThumbnailDictionary, ThumbnailActions } from \"ao/state/showroomThumbnails\";\r\nimport { isNullOrEmpty } from \"ao/utils/helpers\";\r\nimport React, { FunctionComponent, memo, useCallback, useEffect, useMemo } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { getShowroomThumbnails } from \"../../data/data\";\r\n\r\ninterface IProps {\r\n\tlistingIds: number[];\r\n\tthumbnailDictionary: IThumbnailDictionary;\r\n\tchildren?: React.ReactNode;\r\n}\r\n\r\nexport const ThumbnailProvider: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { listingIds, thumbnailDictionary, children } = props;\r\n\r\n\tconst dispatch = useDispatch();\r\n\r\n\tconst handleThumbnailsLoaded = useCallback(\r\n\t\t(response: IThumbnailDictionary) => {\r\n\t\t\tdispatch(ThumbnailActions.setState(response));\r\n\t\t},\r\n\t\t[dispatch],\r\n\t);\r\n\r\n\tconst [, loadThumbnails] = useAsync(getShowroomThumbnails, {\r\n\t\texecuteImmediately: false,\r\n\t\tdisplayName: \"getShowroomThumbnails\",\r\n\t\tonSuccess: handleThumbnailsLoaded,\r\n\t});\r\n\r\n\tconst unloadedIdString = useMemo(() => {\r\n\t\treturn listingIds.filter((id) => !thumbnailDictionary[id]).join(\",\");\r\n\t}, [listingIds, thumbnailDictionary]);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet ids = isNullOrEmpty(unloadedIdString) ? [] : unloadedIdString.split(\",\").map(Number);\r\n\r\n\t\tif (ids.length > 0) {\r\n\t\t\tloadThumbnails(ids);\r\n\t\t}\r\n\t}, [loadThumbnails, unloadedIdString]);\r\n\r\n\treturn <>{children}</>;\r\n});\r\n","import {\n  chakra,\n  forwardRef,\n  ResponsiveValue,\n  HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { cx, mapResponsive, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\ninterface AspectRatioOptions {\n  /**\n   * The aspect ratio of the Box. Common values are:\n   *\n   * `21/9`, `16/9`, `9/16`, `4/3`, `1.85/1`\n   */\n  ratio?: ResponsiveValue<number>\n}\n\nexport interface AspectRatioProps\n  extends HTMLChakraProps<\"div\">,\n    AspectRatioOptions {}\n\n/**\n * React component used to cropping media (videos, images and maps)\n * to a desired aspect ratio.\n *\n * @see Docs https://chakra-ui.com/docs/layout/aspect-ratio\n */\nexport const AspectRatio = forwardRef<AspectRatioProps, \"div\">((props, ref) => {\n  const { ratio = 4 / 3, children, className, ...rest } = props\n\n  // enforce single child\n  const child = React.Children.only(children)\n\n  const _className = cx(\"chakra-aspect-ratio\", className)\n\n  return (\n    <chakra.div\n      ref={ref}\n      position=\"relative\"\n      className={_className}\n      _before={{\n        height: 0,\n        content: `\"\"`,\n        display: \"block\",\n        paddingBottom: mapResponsive(ratio, (r) => `${(1 / r) * 100}%`),\n      }}\n      __css={{\n        \"& > *:not(style)\": {\n          overflow: \"hidden\",\n          position: \"absolute\",\n          top: \"0\",\n          right: \"0\",\n          bottom: \"0\",\n          left: \"0\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          alignItems: \"center\",\n          width: \"100%\",\n          height: \"100%\",\n        },\n        \"& > img, & > video\": {\n          objectFit: \"cover\",\n        }\n      }}\n      {...rest}\n    >\n      {child}\n    </chakra.div>\n  )\n})\n\nif (__DEV__) {\n  AspectRatio.displayName = \"AspectRatio\"\n}\n"],"names":["WidgetActionButton","props","leftIcon","children","rest","_jsx","Button","variant","size","w","whiteSpace","h","minH","display","pt","pb","_jsxs","SimpleGrid","columns","GridItem","colSpan","base","lg","Flex","justify","ml","Center","WidgetAppBadge","memo","title","value","useHoverTooltip","asButton","buttonProps","height","minWidth","content","minW","bg","p","color","borderRadius","Box","fontSize","fontWeight","as","AOTooltip","helptext","_Fragment","WidgetAppRow","appId","appName","subtitle","actions","linkUrl","bottomContent","linkTitle","additionalAppInfo","middleColumnContent","belowLogoContent","onLinkRefCreated","baseUrl","useMemo","getBaseUrl","thumbnailUrl","concat","fallbackThumbnailUrl","thumbnailColor","config","NumAppThumbnailColors","isMobile","useBreakpointValue","linkRef","useRef","useEffect","ListItem","backgroundColor","m","border","AspectRatio","maxW","ratio","flex","Image","src","fallbackSrc","alt","background","childrenWithoutFragment","HStack","spacing","mt","mr","AOLink","ref","url","target","textAlign","Divider","WidgetSpinner","Spinner","role","borderWidth","VisuallyHidden","WidgetTable","noRecordsMessage","entriesPerPage","isExpanded","entriesToShowPerPage","expandedHeight","xl","React","count","fontStyle","List","PaginatedList","overflowX","WidgetTag","tooltipContent","label","icon","iconProps","tooltipProps","rightIcon","rightIconProps","tag","Tag","TagLeftIcon","TagLabel","TagRightIcon","boxProps","width","ShowroomSearch","userSecurity","stageTree","categoryTree","useShowroomState","selectors","getState","siteInfo","useSiteInfoState","hasSearched","setHasSearched","useState","isSearching","setIsSearching","query","setQuery","focusedGroup","setFocusedGroup","isUnlistedClientResult","setIsUnlistedClientResult","unlistedClientFound","setUnlistedClientFound","redirectAppId","setRedirectAppId","page","setPage","pageCount","setPageCount","userCanSeeLinkToUnlisted","isEpicCustomer","isEpicUser","LoadingClientIdMatchPlaceholder","tryForClientIdMatch","useAsync","getClientIdMatch","AsyncPlaceholder","displayName","onSuccess","response","extras","searchedQuery","params","success","results","SearchStages","resultCount","setSearchResults","handlePageChanged","useCallback","newPage","window","scrollTo","top","behavior","inputRef","current","focus","searchParams","setSearchParams","useSearchParams","handleSearch","delete","cleanedQuery","CleanSearchQuery","set","handleSeeStage","groupName","urlQuery","getCaseInsensitiveParam","urlStage","searchResults","thumbnailDictionary","useShowroomThumbnailState","recordsToShow","resultGroups","length","displayGroups","isFocusedGroupSet","trim","forEach","group","topLevelStageName","groupDisclaimer","topLevelDisclaimer","groupColor","showroomPrimary","listings","push","map","id","teaser","listingId","name","currentStageName","subStageName","subStageColor","galleryIcon","subStageGalleryIcon","primaryCategoryName","isComingSoon","stageComingSoonBackgroundImagePath","returnGroups","sort","result1","result2","matchStrength","group1","group2","Math","ceil","pageStart","pageLength","searchResultElements","index","pagedListings","slice","boxMarginBottom","mb","Heading","fontFamily","ThumbnailProvider","listingIds","x","listing","ShowroomSearchResultCard","dangerouslySetInnerHTML","__html","Link","tabIndex","onClick","onKeyDown","event","key","PaginationControl","currentPage","numPages","handleUpdatePage","Text","userId","galleryTokens","galleryName","SiteName","inProgressIndicator","errorTitle","errorMessage","href","isLocalhost","isAdminSite","vendorServicesUrl","ShowroomContentHeader","backgroundColor1","backgroundColor2","VStack","templateColumns","gap","GridGap","InputGroup","Input","type","placeholder","maxLength","onChange","InputRightElement","IconButton","SearchIcon","ShowroomContent","MainContentSpinner","hover","setHover","useExternalLink","isNullOrEmpty","externalLink","conditionalWatermarkProps","backgroundImage","right","undefined","ShowroomSearchResultCardWrapper","isClickable","Grid","ShowroomSearchResultThumbnailWrapper","Thumbnail","maxH","objectFit","ImageData","transform","transitionDuration","ThumbnailStageWatermark","iconPath","ComingSoonMarker","ThumbnailExternalWatermark","overflow","noOfLines","textDecoration","showroomText","matchingText","join","LinkButton","showroomRelativeUrl","BackLinkType","ToSearch","_hover","onMouseOver","onMouseOut","sharedProps","aspectRatio","style","padding","boxShadow","showroomBorder","isExternal","position","_props$top","_props$right","_ref","_props$w","_ref2","_props$h","_ref3","_props$maxHeight","_ref4","_props$maxWidth","_props$backgroundImag","_props$backgroundPosi","pos","maxHeight","maxWidth","backgroundSize","backgroundRepeat","backgroundPosition","curveProps","borderTopLeftRadius","borderTopRightRadius","left","paddingTop","paddingX","flexGrow","maxWidthOverride","isAdjustSwoop","contentColSpan","contentColStart","floor","flexDirection","ContentWidth","md","colStart","isHomePage","paddingBottom","marginTop","ShowroomHomeHeader","showBackground","thumbnailSrc","ThumbnailWatermark","fallback","filter","ExternalLinkIcon","_props$pos","_props$border","_props$borderBottom","_props$borderLeft","_props$backgroundColo","_props$backgroundSize","_props$backgroundRepe","_props$borderRadius","_props$padding","_props$maxH","_ref5","_props$maxW","borderBottom","borderLeft","defaultProps","dispatch","useDispatch","handleThumbnailsLoaded","ThumbnailActions","setState","loadThumbnails","getShowroomThumbnails","executeImmediately","unloadedIdString","ids","split","Number","forwardRef","className","_objectWithoutPropertiesLoose","child","only","_className","cx","chakra","div","_extends","_before","mapResponsive","r","__css","bottom","justifyContent","alignItems","__DEV__"],"sourceRoot":""}