@blateral/b.kit 2.5.2 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/cjs/TableBlock-f2c59d9b.js +2 -0
- package/cjs/TableBlock-f2c59d9b.js.map +1 -0
- package/cjs/{VideoBlock-a7d6ff7d.js → VideoBlock-dea7de8a.js} +2 -2
- package/cjs/{VideoBlock-a7d6ff7d.js.map → VideoBlock-dea7de8a.js.map} +1 -1
- package/cjs/blocks.js +1 -1
- package/cjs/sections.events.js +1 -1
- package/cjs/sections.events.js.map +1 -1
- package/cjs/sections.js +1 -1
- package/cjs/sections.js.map +1 -1
- package/cjs/sections.news.js +1 -1
- package/cjs/sections.news.js.map +1 -1
- package/esm/{TableBlock-cc49e089.js → TableBlock-67fe2385.js} +186 -14
- package/esm/TableBlock-67fe2385.js.map +1 -0
- package/esm/{VideoBlock-5fe94711.js → VideoBlock-b227ae6e.js} +2 -2
- package/esm/{VideoBlock-5fe94711.js.map → VideoBlock-b227ae6e.js.map} +1 -1
- package/esm/blocks.js +2 -2
- package/esm/sections.events.js +6 -6
- package/esm/sections.events.js.map +1 -1
- package/esm/sections.js +56 -52
- package/esm/sections.js.map +1 -1
- package/esm/sections.news.js +19 -15
- package/esm/sections.news.js.map +1 -1
- package/package.json +2 -2
- package/types/components/base/icons/ButtonLeft.d.ts +9 -0
- package/types/components/base/icons/ButtonLeft.d.ts.map +1 -0
- package/types/components/base/icons/ButtonRight.d.ts +9 -0
- package/types/components/base/icons/ButtonRight.d.ts.map +1 -0
- package/types/components/blocks/TableBlock.d.ts +2 -2
- package/types/components/blocks/TableBlock.d.ts.map +1 -1
- package/types/components/sections/Table.d.ts.map +1 -1
- package/types/components/sections/events/EventDetail.d.ts.map +1 -1
- package/types/components/sections/news/NewsTable.d.ts.map +1 -1
- package/cjs/TableBlock-007f8e34.js +0 -2
- package/cjs/TableBlock-007f8e34.js.map +0 -1
- package/esm/TableBlock-cc49e089.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections.events.js","sources":["../src/components/sections/events/EventOverview.tsx","../src/components/sections/events/EventList.tsx","../src/components/sections/events/EventDetail.tsx"],"sourcesContent":["import Filter from 'components/base/icons/Filter';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport Tag, { TagProps } from 'components/blocks/Tag';\nimport Pointer from 'components/buttons/Pointer';\nimport Copy from 'components/typography/Copy';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { concat } from 'utils/concat';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\nimport useMounted from 'utils/useMounted';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\nconst TagContainer = styled.div`\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n &:not(:only-child) {\n margin-bottom: ${spacings.nudge * 6}px;\n }\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst Events = styled.ul<{ hasBg?: boolean }>`\n list-style-type: none;\n margin: 0;\n padding: 0;\n\n /* & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n } */\n\n & > * + * {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst FilterIcon = styled(Copy)`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n padding: ${spacings.nudge / 2}px ${spacings.nudge}px 0 0;\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n`;\n\nconst EventItem = styled.li`\n /* padding: ${spacings.nudge * 3}px 0; */\n`;\n\nconst ListFooter = styled.div`\n margin-top: ${spacings.nudge * 6}px;\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\nexport const getEventFilterParams = (\n url: string,\n theme: DefaultTheme,\n tags: string[] = []\n) => {\n if (!url || !theme) return '';\n if (!isValidArray(tags, false)) return url;\n\n const filterName = theme.globals.sections.eventFilterName;\n if (!filterName) return url;\n\n try {\n const validUrl = new URL(url);\n const newParams = new URLSearchParams(validUrl.search);\n newParams.set(filterName, encodeURIComponent(tags.join(',')));\n\n return `${url}?${newParams.toString()}`;\n } catch (err) {\n return `${url}?${filterName}=${encodeURIComponent(tags.join(','))}`;\n }\n};\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventOverview: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Tags for events filtering */\n tags?: string[];\n\n /** Initial data. If not defined the component tries to collect this from URL params */\n initial?: {\n activeTags?: string[];\n visibleRows?: number;\n };\n\n /** Text for load more toggle. Only visible if browser doesn't support IntersectionObserver. */\n showMoreText?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /**\n * Callback function to handle tag click outside of component\n * If no callback is defined filtering is controlled on client\n * */\n onTagClick?: (tag: TagProps, insideList?: boolean) => void;\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLElement>) => void;\n }) => React.ReactNode;\n}> = ({\n tags,\n events,\n bgMode,\n anchorId,\n initial,\n showMoreText,\n onTagClick,\n customTag,\n}) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.eventFilterName;\n\n const [selectedTags, setSelectedTags] = React.useState<string[]>(\n initial?.activeTags || []\n );\n const [itemsPerRow] = React.useState(1);\n const [visibleRows, setVisibleRows] = React.useState(\n initial?.visibleRows || 3\n );\n\n const targetRef = React.useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n const isMounted = useMounted();\n\n const eventCount = events?.length || 0;\n const setNewPos = useScrollTo(800);\n\n const getFilters = useCallback(() => {\n const tags: string[] = [];\n\n const filters = getUrlParams()[filterName];\n if (filters) {\n const tagsFilter = filters?.split(',');\n if (isValidArray(tagsFilter, false)) {\n tags.push(...tagsFilter);\n }\n }\n return tags;\n }, [filterName]);\n\n useEffect(() => {\n // if initial data is defined exit hook\n if (initial) return;\n\n // if no initial data provied try to find needed params in URL\n const paramTags = getFilters();\n\n if (isValidArray(paramTags, false)) {\n setSelectedTags(paramTags);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getFilters, initial]);\n\n useEffect(() => {\n if (!initial || isMounted) return;\n\n // set inital data into URL\n setUrlParam('rows', initial?.visibleRows || 3);\n\n if (isValidArray(initial?.activeTags, false)) {\n setUrlParam(filterName, initial?.activeTags?.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, initial, isMounted]);\n\n useUpdateEffect(() => {\n setUrlParam('rows', visibleRows);\n }, [visibleRows]);\n\n useUpdateEffect(() => {\n if (onTagClick || !isValidArray(selectedTags)) return;\n\n // set filters to URL params\n if (selectedTags.length > 0) {\n setUrlParam(filterName, selectedTags.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [selectedTags]);\n\n const handleTagClick = (tag: TagProps, enableToggling = true) => {\n setSelectedTags((prev) => {\n const prevCopy = [...prev];\n const itemIndex = tag.name ? prev.indexOf(tag.name) : -1;\n\n if (itemIndex === -1 && tag.name) {\n return [...prevCopy, tag.name];\n }\n if (enableToggling) {\n prevCopy.splice(itemIndex, 1);\n return prevCopy;\n }\n return prev;\n });\n setVisibleRows(3);\n };\n\n const filteredEvents = useMemo(() => {\n const tagFilterFn = (item: EventItem) => {\n if (!isValidArray(selectedTags, false)) return true;\n if (!item.tags) return false;\n\n let hasTags = false;\n for (let i = 0; i < item.tags.length; i++) {\n if (selectedTags.indexOf(item.tags[i].name || '') !== -1) {\n hasTags = true;\n break;\n }\n }\n return hasTags;\n };\n\n let filtered = isValidArray(events) ? [...events] : [];\n\n // adding filter\n filtered = filtered?.filter(tagFilterFn);\n\n return filtered;\n }, [events, selectedTags]);\n\n const visibleEvents = useMemo(() => {\n return (\n filteredEvents?.filter((_, i) => i < visibleRows * itemsPerRow) ||\n []\n );\n }, [filteredEvents, itemsPerRow, visibleRows]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more events\n if (\n visibleRows <\n Math.ceil(filteredEvents.length / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [\n itemsPerRow,\n eventCount,\n visibleRows,\n observerSupported,\n filteredEvents.length,\n ]);\n\n const filteredTags = useMemo(() => {\n return tags?.filter((tag) => tag);\n }, [tags]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {isValidArray(filteredTags, false) && (\n <TagContainer>\n <FilterIcon\n size=\"small\"\n type=\"copy\"\n isInverted={isInverted}\n >\n <Filter />\n <span>Filter</span>\n </FilterIcon>\n {filteredTags.map((tag, i) => (\n <TagWrapper key={i}>\n {customTag ? (\n customTag({\n key: i,\n name: tag,\n isInverted: isInverted,\n isActive:\n selectedTags.indexOf(tag) !== -1,\n clickHandler: (ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else onTagClick({ name: tag });\n },\n })\n ) : (\n <Tag\n isInverted={isInverted}\n onClick={(ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else\n onTagClick(\n { name: tag },\n false\n );\n }}\n isActive={\n selectedTags.indexOf(tag) !== -1\n }\n >\n {tag}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n <Events hasBg={hasBg}>\n {visibleEvents.map((item, i) => {\n let timespan = '';\n\n if (item.date) {\n const formatter = new StatusFormatter(\n item.date.getTime(),\n '',\n globals.sections.eventDateFormat(item.date),\n globals.sections.eventTimeFormat(item.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n item.date,\n item.duration\n ),\n item.duration\n );\n }\n\n const text = concat([timespan, item.address], ' | ');\n\n return (\n <EventItem key={`${i}_event_${item.title}`}>\n <EventBlock\n hasBg={bgMode === 'full'}\n {...item}\n text={text}\n tags={item.tags?.map((tag) => ({\n name: tag.name,\n }))}\n isInverted={isInverted}\n onTagClick={(tag) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n handleTagClick(\n { name: tag.name },\n false\n );\n } else {\n onTagClick(\n { name: tag.name },\n true\n );\n }\n }}\n customTag={customTag}\n />\n </EventItem>\n );\n })}\n </Events>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {events && events.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={events.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(\n filteredEvents.length /\n itemsPerRow\n )\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows <\n filteredEvents.length / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventOverviewComponent = EventOverview;\nexport default withLibTheme(EventOverview);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport { getColors as color, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { LinkProps } from 'components/typography/Link';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { concat } from 'utils/concat';\nimport { getEventFilterParams } from './EventOverview';\n\nconst List = styled.ul<{ hasBg?: boolean }>`\n list-style: none;\n margin: 0;\n padding: 0;\n\n /* & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n } */\n\n & > * + * {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst ListItem = styled.li`\n /* padding: ${spacings.nudge * 3}px 0; */\n`;\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, events, bgMode, customTag }) => {\n const { colors, globals, theme } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List hasBg={hasBg}>\n {events?.map((event, i) => {\n let timespan = '';\n\n if (event.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n event.date,\n event.duration\n ),\n event.duration\n );\n }\n\n const text = concat([timespan, event.address], ' | ');\n\n return (\n <ListItem key={i}>\n <EventBlock\n hasBg={bgMode === 'full'}\n {...event}\n tags={event.tags?.map((tag) => {\n let tagHref: string | undefined =\n undefined;\n\n if (tag.name && tag.link?.href) {\n tagHref = getEventFilterParams(\n tag.link.href,\n theme,\n [tag.name]\n );\n }\n\n return {\n name: tag.name,\n link: tag.link?.href\n ? {\n ...tag.link,\n href: tagHref,\n }\n : undefined,\n };\n })}\n isInverted={isInverted}\n text={text}\n customTag={customTag}\n />\n </ListItem>\n );\n })}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventListComponent = EventList;\nexport default withLibTheme(EventList);\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { EventProps } from 'components/blocks/EventBlock';\nimport Image from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { LinkProps } from 'components/typography/Link';\nimport { mq, spacings, getGlobals as global } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\nimport StatusFormatter from 'utils/statusFormatter';\nimport InfoList from 'components/blocks/InfoList';\nimport { isValidArray } from 'utils/arrays';\n\nconst ImageContainer = styled.div<{ hAlign?: 'left' | 'center' | 'right' }>`\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: ${({ hAlign }) => {\n switch (hAlign) {\n case 'center':\n return 'center';\n\n case 'right':\n return 'flex-end';\n\n case 'left':\n default:\n return 'flex-start';\n }\n }};\n\n overflow: hidden;\n\n margin-bottom: ${spacings.spacer}px;\n`;\n\nconst StyledImage = styled(Image)`\n &:not(:first-child) {\n display: none;\n }\n\n @media ${mq.medium} {\n max-width: 50%;\n\n &:not(:first-child) {\n display: inline-block;\n }\n\n & + & {\n margin-left: ${spacings.nudge}px;\n }\n }\n`;\n\nconst ImageBackground = styled.div<{ isInverted?: boolean }>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n background-color: ${({ theme, isInverted }) =>\n isInverted\n ? global(theme).sections.imagePlaceholderBg.inverted\n : global(theme).sections.imagePlaceholderBg.default};\n\n filter: blur(10px);\n transform: scale(1.5);\n z-index: -1;\n`;\n\nconst StyledTextImage = styled(Image)`\n margin-top: ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n display: none;\n }\n`;\n\nconst TagContainer = styled.div`\n max-width: 880px;\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst EventTitle = styled(Heading)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* number of lines to show */\n line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n`;\n\nconst EventDateTime = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst EventAddress = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n ${EventDateTime} + & {\n margin-top: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst EventText = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nexport type DetailEventProps = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'link'\n>;\n\nexport interface EventInfoGroup {\n title?: string;\n items: EventInfo[];\n}\n\nexport interface EventInfo {\n /** icon injection function */\n icon?: (isInverted?: boolean) => React.ReactNode;\n /** Event info text (richtText) */\n text?: string;\n}\n\nconst EventDetail: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n event?: DetailEventProps & { address?: string; abstract?: string };\n\n /** Additional event infos */\n infos?: EventInfoGroup[];\n\n /** Use image as blurred background for single images */\n useImageAsBg?: boolean;\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, event, infos, useImageAsBg, bgMode, customTag }) => {\n const { colors, globals } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasInfos = useMemo(() => {\n return isValidArray(\n infos?.filter((info) => isValidArray(info.items, false)),\n false\n );\n }, [infos]);\n\n let publishedAt = '';\n let timespan = '';\n\n if (event?.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(event.date, event.duration),\n event.duration\n );\n }\n\n const images = useMemo(() => event?.images?.slice(0, 2), [event?.images]);\n const secondaryImage = images?.[1];\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {isValidArray(images, false) && (\n <ImageContainer hAlign={useImageAsBg ? 'center' : 'left'}>\n {images.map((img, i) => {\n if (!img.small) return null;\n return (\n <StyledImage\n key={i}\n {...img}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n ratios={{ small: { w: 4, h: 3 } }}\n />\n );\n })}\n <ImageBackground\n isInverted={isInverted}\n style={{\n backgroundImage:\n useImageAsBg && images.length < 2\n ? `url(${event?.images?.[0].small})`\n : undefined,\n }}\n />\n </ImageContainer>\n )}\n <Grid.Row\n gutter={spacings.nudge * 5}\n semilarge={{ gutter: spacings.spacer }}\n >\n <Grid.Col semilarge={{ span: hasInfos ? 5.7 / 8 : 1 }}>\n {event?.tags && (\n <TagContainer>\n {event.tags.map((tag, i) => (\n <TagWrapper key={'tag_' + i}>\n {customTag ? (\n customTag({\n key: `headtag-${i}`,\n name: tag.name || '',\n isInverted: isInverted,\n isActive: false,\n link: tag.link,\n })\n ) : (\n <Tag\n link={tag.link}\n isInverted={isInverted}\n >\n {tag.name}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n {event?.title && (\n <EventTitle\n size=\"heading-2\"\n isInverted={isInverted}\n >\n {event.title}\n </EventTitle>\n )}\n {publishedAt && (\n <EventDateTime\n size=\"big\"\n type=\"copy-b\"\n isInverted={isInverted}\n >\n {publishedAt || ''}\n {publishedAt && timespan ? ' | ' : ''}\n {timespan}\n </EventDateTime>\n )}\n {event?.address && (\n <EventAddress\n size=\"big\"\n type=\"copy\"\n innerHTML={event.address}\n isInverted={isInverted}\n />\n )}\n {event?.abstract && (\n <EventText\n size=\"medium\"\n type=\"copy-b\"\n isInverted={isInverted}\n >\n {event.abstract}\n </EventText>\n )}\n {secondaryImage && (\n <StyledTextImage\n {...secondaryImage}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n ratios={{ small: { w: 4, h: 3 } }}\n />\n )}\n {event?.text && (\n <EventText\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={event.text}\n />\n )}\n </Grid.Col>\n {hasInfos && (\n <Grid.Col semilarge={{ span: 2.3 / 8 }}>\n <InfoList isInverted={isInverted} items={infos} />\n </Grid.Col>\n )}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventDetailComponent = EventDetail;\nexport default withLibTheme(EventDetail);\n"],"names":["TagContainer","styled","div","withConfig","displayName","componentId","templateObject_1","__makeTemplateObject","spacings","nudge","TagWrapper","templateObject_2","Events","ul","_a","theme","hasBg","color","elementBg","light","medium","FilterIcon","Copy","templateObject_4","EventItem","li","ListFooter","templateObject_6","mq","ShowMore","span","templateObject_7","itemCount","EventOverview$1","withLibTheme","tags","events","bgMode","anchorId","initial","showMoreText","onTagClick","customTag","isInverted","_b","useLibTheme","colors","globals","filterName","sections","eventFilterName","_c","React","useState","activeTags","selectedTags","setSelectedTags","itemsPerRow","_d","visibleRows","setVisibleRows","targetRef","useRef","observerSupported","useObserverSupport","isMounted","useMounted","eventCount","length","setNewPos","useScrollTo","getFilters","useCallback","filters","getUrlParams","tagsFilter","split","isValidArray","push","apply","useEffect","paramTags","setUrlParam","join","deleteUrlParam","useUpdateEffect","handleTagClick","tag","enableToggling","prev","prevCopy","__spreadArray","itemIndex","name","indexOf","splice","filteredEvents","useMemo","filtered","filter","item","hasTags","i","visibleEvents","_","observer","element","current","IntersectionObserver","entries","entry","isIntersecting","Math","ceil","rootMargin","threshold","observe","disconnect","filteredTags","createElement","Section","addSeperation","bgColor","sectionBg","dark","mapToBgMode","Wrapper","addWhitespace","size","type","Filter","map","key","isActive","clickHandler","ev","preventDefault","Tag","onClick","timespan","date","StatusFormatter","getTime","eventDateFormat","eventTimeFormat","eventLocaleKey","getFormattedTimespan","eventTimespanFormat","duration","text","concat","address","title","EventBlock","__assign","ref","Pointer","View","as","Label","List","ListItem","EventList$1","event","tagHref","undefined","link","href","url","validUrl","URL","newParams","URLSearchParams","search","set","encodeURIComponent","toString","err","getEventFilterParams","ImageContainer","hAlign","spacer","StyledImage","Image","ImageBackground","templateObject_3","global","getGlobals","imagePlaceholderBg","inverted","default","StyledTextImage","templateObject_5","EventTitle","Heading","semilarge","EventDateTime","templateObject_8","EventAddress","templateObject_9","EventText","templateObject_10","EventDetail$1","infos","useImageAsBg","hasInfos","info","items","publishedAt","formatter","getFormattedDate","images","slice","secondaryImage","img","small","coverSpace","allowEdgeRadius","ratios","w","h","style","backgroundImage","Grid","Row","gutter","Col","innerHTML","abstract","InfoList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sections.events.js","sources":["../src/components/sections/events/EventOverview.tsx","../src/components/sections/events/EventList.tsx","../src/components/sections/events/EventDetail.tsx"],"sourcesContent":["import Filter from 'components/base/icons/Filter';\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport Tag, { TagProps } from 'components/blocks/Tag';\nimport Pointer from 'components/buttons/Pointer';\nimport Copy from 'components/typography/Copy';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport { isValidArray } from 'utils/arrays';\nimport { concat } from 'utils/concat';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { getColors as color, mq, spacings } from 'utils/styles';\nimport { deleteUrlParam, getUrlParams, setUrlParam } from 'utils/urlParams';\nimport useMounted from 'utils/useMounted';\nimport { useObserverSupport } from 'utils/useObserverSupport';\nimport { useScrollTo } from 'utils/useScrollTo';\nimport useUpdateEffect from 'utils/useUpdateEffect';\n\nconst TagContainer = styled.div`\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n\n &:not(:only-child) {\n margin-bottom: ${spacings.nudge * 6}px;\n }\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst Events = styled.ul<{ hasBg?: boolean }>`\n list-style-type: none;\n margin: 0;\n padding: 0;\n\n /* & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n } */\n\n & > * + * {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst FilterIcon = styled(Copy)`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n padding: ${spacings.nudge / 2}px ${spacings.nudge}px 0 0;\n\n & > * + * {\n margin-left: ${spacings.nudge}px;\n }\n`;\n\nconst EventItem = styled.li`\n /* padding: ${spacings.nudge * 3}px 0; */\n`;\n\nconst ListFooter = styled.div`\n margin-top: ${spacings.nudge * 6}px;\n text-align: center;\n\n @media ${mq.medium} {\n text-align: left;\n }\n`;\n\nconst ShowMore = styled.span<{ itemCount?: number }>`\n display: ${({ itemCount }) =>\n itemCount && itemCount > 2 ? 'block' : 'none'};\n`;\n\nexport const getEventFilterParams = (\n url: string,\n theme: DefaultTheme,\n tags: string[] = []\n) => {\n if (!url || !theme) return '';\n if (!isValidArray(tags, false)) return url;\n\n const filterName = theme.globals.sections.eventFilterName;\n if (!filterName) return url;\n\n try {\n const validUrl = new URL(url);\n const newParams = new URLSearchParams(validUrl.search);\n newParams.set(filterName, encodeURIComponent(tags.join(',')));\n\n return `${url}?${newParams.toString()}`;\n } catch (err) {\n return `${url}?${filterName}=${encodeURIComponent(tags.join(','))}`;\n }\n};\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventOverview: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Tags for events filtering */\n tags?: string[];\n\n /** Initial data. If not defined the component tries to collect this from URL params */\n initial?: {\n activeTags?: string[];\n visibleRows?: number;\n };\n\n /** Text for load more toggle. Only visible if browser doesn't support IntersectionObserver. */\n showMoreText?: string;\n\n /** Section background */\n bgMode?: 'full' | 'inverted';\n\n /**\n * Callback function to handle tag click outside of component\n * If no callback is defined filtering is controlled on client\n * */\n onTagClick?: (tag: TagProps, insideList?: boolean) => void;\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n clickHandler?: (ev?: React.SyntheticEvent<HTMLElement>) => void;\n }) => React.ReactNode;\n}> = ({\n tags,\n events,\n bgMode,\n anchorId,\n initial,\n showMoreText,\n onTagClick,\n customTag,\n}) => {\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n const { colors, globals } = useLibTheme();\n const filterName = globals.sections.eventFilterName;\n\n const [selectedTags, setSelectedTags] = React.useState<string[]>(\n initial?.activeTags || []\n );\n const [itemsPerRow] = React.useState(1);\n const [visibleRows, setVisibleRows] = React.useState(\n initial?.visibleRows || 3\n );\n\n const targetRef = React.useRef<HTMLDivElement>(null);\n const observerSupported = useObserverSupport();\n const isMounted = useMounted();\n\n const eventCount = events?.length || 0;\n const setNewPos = useScrollTo(800);\n\n const getFilters = useCallback(() => {\n const tags: string[] = [];\n\n const filters = getUrlParams()[filterName];\n if (filters) {\n const tagsFilter = filters?.split(',');\n if (isValidArray(tagsFilter, false)) {\n tags.push(...tagsFilter);\n }\n }\n return tags;\n }, [filterName]);\n\n useEffect(() => {\n // if initial data is defined exit hook\n if (initial) return;\n\n // if no initial data provied try to find needed params in URL\n const paramTags = getFilters();\n\n if (isValidArray(paramTags, false)) {\n setSelectedTags(paramTags);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getFilters, initial]);\n\n useEffect(() => {\n if (!initial || isMounted) return;\n\n // set inital data into URL\n setUrlParam('rows', initial?.visibleRows || 3);\n\n if (isValidArray(initial?.activeTags, false)) {\n setUrlParam(filterName, initial?.activeTags?.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [filterName, initial, isMounted]);\n\n useUpdateEffect(() => {\n setUrlParam('rows', visibleRows);\n }, [visibleRows]);\n\n useUpdateEffect(() => {\n if (onTagClick || !isValidArray(selectedTags)) return;\n\n // set filters to URL params\n if (selectedTags.length > 0) {\n setUrlParam(filterName, selectedTags.join(','));\n } else {\n deleteUrlParam(filterName);\n }\n }, [selectedTags]);\n\n const handleTagClick = (tag: TagProps, enableToggling = true) => {\n setSelectedTags((prev) => {\n const prevCopy = [...prev];\n const itemIndex = tag.name ? prev.indexOf(tag.name) : -1;\n\n if (itemIndex === -1 && tag.name) {\n return [...prevCopy, tag.name];\n }\n if (enableToggling) {\n prevCopy.splice(itemIndex, 1);\n return prevCopy;\n }\n return prev;\n });\n setVisibleRows(3);\n };\n\n const filteredEvents = useMemo(() => {\n const tagFilterFn = (item: EventItem) => {\n if (!isValidArray(selectedTags, false)) return true;\n if (!item.tags) return false;\n\n let hasTags = false;\n for (let i = 0; i < item.tags.length; i++) {\n if (selectedTags.indexOf(item.tags[i].name || '') !== -1) {\n hasTags = true;\n break;\n }\n }\n return hasTags;\n };\n\n let filtered = isValidArray(events) ? [...events] : [];\n\n // adding filter\n filtered = filtered?.filter(tagFilterFn);\n\n return filtered;\n }, [events, selectedTags]);\n\n const visibleEvents = useMemo(() => {\n return (\n filteredEvents?.filter((_, i) => i < visibleRows * itemsPerRow) ||\n []\n );\n }, [filteredEvents, itemsPerRow, visibleRows]);\n\n useEffect(() => {\n // cancel if intersection observers are not supported\n if (!observerSupported) return;\n\n const element = targetRef.current;\n let observer: IntersectionObserver;\n\n if (element) {\n const options = {\n rootMargin: '0px 0px 100px 0px',\n threshold: 0,\n };\n\n observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (entry?.isIntersecting) {\n // on bottom of the wrapper load more events\n if (\n visibleRows <\n Math.ceil(filteredEvents.length / itemsPerRow)\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }\n }, options);\n observer.observe(element);\n }\n\n return () => {\n if (observer) observer.disconnect();\n };\n }, [\n itemsPerRow,\n eventCount,\n visibleRows,\n observerSupported,\n filteredEvents.length,\n ]);\n\n const filteredTags = useMemo(() => {\n return tags?.filter((tag) => tag);\n }, [tags]);\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : 'transparent'\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {isValidArray(filteredTags, false) && (\n <TagContainer>\n <FilterIcon\n size=\"small\"\n type=\"copy\"\n isInverted={isInverted}\n >\n <Filter />\n <span>Filter</span>\n </FilterIcon>\n {filteredTags.map((tag, i) => (\n <TagWrapper key={i}>\n {customTag ? (\n customTag({\n key: i,\n name: tag,\n isInverted: isInverted,\n isActive:\n selectedTags.indexOf(tag) !== -1,\n clickHandler: (ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else onTagClick({ name: tag });\n },\n })\n ) : (\n <Tag\n isInverted={isInverted}\n onClick={(ev) => {\n ev?.preventDefault();\n if (!onTagClick) {\n handleTagClick({ name: tag });\n } else\n onTagClick(\n { name: tag },\n false\n );\n }}\n isActive={\n selectedTags.indexOf(tag) !== -1\n }\n >\n {tag}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n <Events hasBg={hasBg}>\n {visibleEvents.map((item, i) => {\n let timespan = '';\n\n if (item.date) {\n const formatter = new StatusFormatter(\n item.date.getTime(),\n '',\n globals.sections.eventDateFormat(item.date),\n globals.sections.eventTimeFormat(item.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n item.date,\n item.duration\n ),\n item.duration\n );\n }\n\n const text = concat([timespan, item.address], ' | ');\n\n return (\n <EventItem key={`${i}_event_${item.title}`}>\n <EventBlock\n hasBg={bgMode === 'full'}\n {...item}\n text={text}\n tags={item.tags?.map((tag) => ({\n name: tag.name,\n }))}\n isInverted={isInverted}\n onTagClick={(tag) => {\n // scroll back to top\n setNewPos(0);\n if (!onTagClick) {\n // if no callback is defined handle filtering on client side inside the component\n handleTagClick(\n { name: tag.name },\n false\n );\n } else {\n onTagClick(\n { name: tag.name },\n true\n );\n }\n }}\n customTag={customTag}\n />\n </EventItem>\n );\n })}\n </Events>\n <div ref={targetRef} />\n {!observerSupported && (\n <ListFooter>\n {events && events.length > 0 && (\n <Copy\n type=\"copy\"\n size=\"medium\"\n isInverted={isInverted}\n >\n <ShowMore\n itemCount={events.length}\n onClick={(ev) => {\n ev.preventDefault();\n if (\n visibleRows <\n Math.ceil(\n filteredEvents.length /\n itemsPerRow\n )\n ) {\n setVisibleRows((prev) => prev + 1);\n }\n }}\n >\n {visibleRows <\n filteredEvents.length / itemsPerRow && (\n <Pointer.View\n as=\"button\"\n isInverted={isInverted}\n >\n <Pointer.Label>\n {showMoreText ||\n 'mehr anzeigen'}\n </Pointer.Label>\n </Pointer.View>\n )}\n </ShowMore>\n </Copy>\n )}\n </ListFooter>\n )}\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventOverviewComponent = EventOverview;\nexport default withLibTheme(EventOverview);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport EventBlock, { EventProps } from 'components/blocks/EventBlock';\nimport { getColors as color, spacings } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport { LinkProps } from 'components/typography/Link';\nimport StatusFormatter from 'utils/statusFormatter';\nimport { concat } from 'utils/concat';\nimport { getEventFilterParams } from './EventOverview';\n\nconst List = styled.ul<{ hasBg?: boolean }>`\n list-style: none;\n margin: 0;\n padding: 0;\n\n /* & > * + * {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:first-of-type {\n border-top: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n }\n\n & > *:last-of-type {\n border-bottom: 1px solid\n ${({ theme, hasBg }) =>\n hasBg ? color(theme).elementBg.light : color(theme).elementBg.medium};\n } */\n\n & > * + * {\n padding-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst ListItem = styled.li`\n /* padding: ${spacings.nudge * 3}px 0; */\n`;\n\nexport type EventItem = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'text'\n> & { address?: string };\n\nconst EventList: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n events?: EventItem[];\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, events, bgMode, customTag }) => {\n const { colors, globals, theme } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : bgMode\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n <List hasBg={hasBg}>\n {events?.map((event, i) => {\n let timespan = '';\n\n if (event.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(\n event.date,\n event.duration\n ),\n event.duration\n );\n }\n\n const text = concat([timespan, event.address], ' | ');\n\n return (\n <ListItem key={i}>\n <EventBlock\n hasBg={bgMode === 'full'}\n {...event}\n tags={event.tags?.map((tag) => {\n let tagHref: string | undefined =\n undefined;\n\n if (tag.name && tag.link?.href) {\n tagHref = getEventFilterParams(\n tag.link.href,\n theme,\n [tag.name]\n );\n }\n\n return {\n name: tag.name,\n link: tag.link?.href\n ? {\n ...tag.link,\n href: tagHref,\n }\n : undefined,\n };\n })}\n isInverted={isInverted}\n text={text}\n customTag={customTag}\n />\n </ListItem>\n );\n })}\n </List>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventListComponent = EventList;\nexport default withLibTheme(EventList);\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport Section, { mapToBgMode } from 'components/base/Section';\nimport Wrapper from 'components/base/Wrapper';\nimport { EventProps } from 'components/blocks/EventBlock';\nimport Image from 'components/blocks/Image';\nimport Tag from 'components/blocks/Tag';\nimport Copy from 'components/typography/Copy';\nimport Heading from 'components/typography/Heading';\nimport { LinkProps } from 'components/typography/Link';\nimport { mq, spacings, getGlobals as global } from 'utils/styles';\nimport { useLibTheme, withLibTheme } from 'utils/LibThemeProvider';\nimport Grid from 'components/base/Grid';\nimport StatusFormatter from 'utils/statusFormatter';\nimport InfoList from 'components/blocks/InfoList';\nimport { isValidArray } from 'utils/arrays';\n\nconst ImageContainer = styled.div<{ hAlign?: 'left' | 'center' | 'right' }>`\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: ${({ hAlign }) => {\n switch (hAlign) {\n case 'center':\n return 'center';\n\n case 'right':\n return 'flex-end';\n\n case 'left':\n default:\n return 'flex-start';\n }\n }};\n\n overflow: hidden;\n\n margin-bottom: ${spacings.spacer}px;\n`;\n\nconst ImgWrapper = styled.div`\n flex: 0 0 100%;\n margin-bottom: -6px;\n\n &:not(:first-child) {\n display: none;\n }\n\n @media ${mq.medium} {\n max-width: 50%;\n flex: 0 0 50%;\n\n &:not(:first-child) {\n display: inline-block;\n }\n\n & + & {\n margin-left: ${spacings.nudge}px;\n }\n }\n`;\n\nconst ImageBackground = styled.div<{ isInverted?: boolean }>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n background-color: ${({ theme, isInverted }) =>\n isInverted\n ? global(theme).sections.imagePlaceholderBg.inverted\n : global(theme).sections.imagePlaceholderBg.default};\n\n filter: blur(10px);\n transform: scale(1.5);\n z-index: -1;\n`;\n\nconst StyledTextImage = styled(Image)`\n margin-top: ${spacings.nudge * 3}px;\n\n @media ${mq.medium} {\n display: none;\n }\n`;\n\nconst TagContainer = styled.div`\n max-width: 880px;\n margin-top: -${spacings.nudge}px;\n margin-left: -${spacings.nudge}px;\n\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagWrapper = styled.div`\n padding-top: ${spacings.nudge}px;\n padding-left: ${spacings.nudge}px;\n`;\n\nconst EventTitle = styled(Heading)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2; /* number of lines to show */\n line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n`;\n\nconst EventDateTime = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nconst EventAddress = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n\n ${EventDateTime} + & {\n margin-top: ${spacings.nudge}px;\n }\n\n @media ${mq.semilarge} {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst EventText = styled(Copy)`\n max-width: 880px;\n\n &:not(:first-child) {\n margin-top: ${spacings.nudge * 3}px;\n }\n`;\n\nexport type DetailEventProps = Omit<\n EventProps,\n 'customTag' | 'isInverted' | 'onTagClick' | 'link'\n>;\n\nexport interface EventInfoGroup {\n title?: string;\n items: EventInfo[];\n}\n\nexport interface EventInfo {\n /** icon injection function */\n icon?: (isInverted?: boolean) => React.ReactNode;\n /** Event info text (richtText) */\n text?: string;\n}\n\nconst EventDetail: React.FC<{\n /** ID value for targeting section with anchor hashes */\n anchorId?: string;\n\n /** Array of event item settings */\n event?: DetailEventProps & { address?: string; abstract?: string };\n\n /** Additional event infos */\n infos?: EventInfoGroup[];\n\n /** Use image as blurred background for single images */\n useImageAsBg?: boolean;\n\n /** Section background */\n bgMode?: 'inverted' | 'full';\n\n /** Function to inject custom tag node */\n customTag?: (props: {\n key: React.Key;\n name: string;\n isInverted?: boolean;\n isActive?: boolean;\n link?: LinkProps;\n }) => React.ReactNode;\n}> = ({ anchorId, event, infos, useImageAsBg, bgMode, customTag }) => {\n const { colors, globals } = useLibTheme();\n const isInverted = bgMode === 'inverted';\n const hasBg = bgMode === 'full';\n const hasInfos = useMemo(() => {\n return isValidArray(\n infos?.filter((info) => isValidArray(info.items, false)),\n false\n );\n }, [infos]);\n\n let publishedAt = '';\n let timespan = '';\n\n if (event?.date) {\n const formatter = new StatusFormatter(\n event.date.getTime(),\n '',\n globals.sections.eventDateFormat(event.date),\n globals.sections.eventTimeFormat(event.date),\n globals.sections.eventLocaleKey\n );\n publishedAt = formatter.getFormattedDate();\n\n timespan = formatter.getFormattedTimespan(\n globals.sections.eventTimespanFormat(event.date, event.duration),\n event.duration\n );\n }\n\n const images = useMemo(() => event?.images?.slice(0, 2), [event?.images]);\n const secondaryImage = images?.[1];\n\n return (\n <Section\n addSeperation\n anchorId={anchorId}\n bgColor={\n isInverted\n ? colors.sectionBg.dark\n : hasBg\n ? colors.sectionBg.medium\n : colors.sectionBg.light\n }\n bgMode={mapToBgMode(bgMode, true)}\n >\n <Wrapper addWhitespace>\n {isValidArray(images, false) && (\n <ImageContainer hAlign={useImageAsBg ? 'center' : 'left'}>\n {images.map((img, i) => {\n if (!img.small) return null;\n return (\n <ImgWrapper key={i}>\n <Image\n {...img}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n ratios={{ small: { w: 4, h: 3 } }}\n />\n </ImgWrapper>\n );\n })}\n <ImageBackground\n isInverted={isInverted}\n style={{\n backgroundImage:\n useImageAsBg && images.length < 2\n ? `url(${event?.images?.[0].small})`\n : undefined,\n }}\n />\n </ImageContainer>\n )}\n <Grid.Row\n gutter={spacings.nudge * 5}\n semilarge={{ gutter: spacings.spacer }}\n >\n <Grid.Col semilarge={{ span: hasInfos ? 5.7 / 8 : 1 }}>\n {event?.tags && (\n <TagContainer>\n {event.tags.map((tag, i) => (\n <TagWrapper key={'tag_' + i}>\n {customTag ? (\n customTag({\n key: `headtag-${i}`,\n name: tag.name || '',\n isInverted: isInverted,\n isActive: false,\n link: tag.link,\n })\n ) : (\n <Tag\n link={tag.link}\n isInverted={isInverted}\n >\n {tag.name}\n </Tag>\n )}\n </TagWrapper>\n ))}\n </TagContainer>\n )}\n {event?.title && (\n <EventTitle\n size=\"heading-2\"\n isInverted={isInverted}\n >\n {event.title}\n </EventTitle>\n )}\n {publishedAt && (\n <EventDateTime\n size=\"big\"\n type=\"copy-b\"\n isInverted={isInverted}\n >\n {publishedAt || ''}\n {publishedAt && timespan ? ' | ' : ''}\n {timespan}\n </EventDateTime>\n )}\n {event?.address && (\n <EventAddress\n size=\"big\"\n type=\"copy\"\n innerHTML={event.address}\n isInverted={isInverted}\n />\n )}\n {event?.abstract && (\n <EventText\n size=\"medium\"\n type=\"copy-b\"\n isInverted={isInverted}\n >\n {event.abstract}\n </EventText>\n )}\n {secondaryImage && (\n <StyledTextImage\n {...secondaryImage}\n coverSpace\n allowEdgeRadius\n isInverted={isInverted}\n ratios={{ small: { w: 4, h: 3 } }}\n />\n )}\n {event?.text && (\n <EventText\n size=\"medium\"\n isInverted={isInverted}\n innerHTML={event.text}\n />\n )}\n </Grid.Col>\n {hasInfos && (\n <Grid.Col semilarge={{ span: 2.3 / 8 }}>\n <InfoList isInverted={isInverted} items={infos} />\n </Grid.Col>\n )}\n </Grid.Row>\n </Wrapper>\n </Section>\n );\n};\n\nexport const EventDetailComponent = EventDetail;\nexport default withLibTheme(EventDetail);\n"],"names":["TagContainer","styled","div","withConfig","displayName","componentId","templateObject_1","__makeTemplateObject","spacings","nudge","TagWrapper","templateObject_2","Events","ul","_a","theme","hasBg","color","elementBg","light","medium","FilterIcon","Copy","templateObject_4","EventItem","li","ListFooter","templateObject_6","mq","ShowMore","span","templateObject_7","itemCount","EventOverview$1","withLibTheme","tags","events","bgMode","anchorId","initial","showMoreText","onTagClick","customTag","isInverted","_b","useLibTheme","colors","globals","filterName","sections","eventFilterName","_c","React","useState","activeTags","selectedTags","setSelectedTags","itemsPerRow","_d","visibleRows","setVisibleRows","targetRef","useRef","observerSupported","useObserverSupport","isMounted","useMounted","eventCount","length","setNewPos","useScrollTo","getFilters","useCallback","filters","getUrlParams","tagsFilter","split","isValidArray","push","apply","useEffect","paramTags","setUrlParam","join","deleteUrlParam","useUpdateEffect","handleTagClick","tag","enableToggling","prev","prevCopy","__spreadArray","itemIndex","name","indexOf","splice","filteredEvents","useMemo","filtered","filter","item","hasTags","i","visibleEvents","_","observer","element","current","IntersectionObserver","entries","entry","isIntersecting","Math","ceil","rootMargin","threshold","observe","disconnect","filteredTags","createElement","Section","addSeperation","bgColor","sectionBg","dark","mapToBgMode","Wrapper","addWhitespace","size","type","Filter","map","key","isActive","clickHandler","ev","preventDefault","Tag","onClick","timespan","date","StatusFormatter","getTime","eventDateFormat","eventTimeFormat","eventLocaleKey","getFormattedTimespan","eventTimespanFormat","duration","text","concat","address","title","EventBlock","__assign","ref","Pointer","View","as","Label","List","ListItem","EventList$1","event","tagHref","undefined","link","href","url","validUrl","URL","newParams","URLSearchParams","search","set","encodeURIComponent","toString","err","getEventFilterParams","ImageContainer","hAlign","spacer","ImgWrapper","ImageBackground","templateObject_3","global","getGlobals","imagePlaceholderBg","inverted","default","StyledTextImage","Image","templateObject_5","EventTitle","Heading","semilarge","EventDateTime","templateObject_8","EventAddress","templateObject_9","EventText","templateObject_10","EventDetail$1","infos","useImageAsBg","hasInfos","info","items","publishedAt","formatter","getFormattedDate","images","slice","secondaryImage","img","small","coverSpace","allowEdgeRadius","ratios","w","h","style","backgroundImage","Grid","Row","gutter","Col","innerHTML","abstract","InfoList"],"mappings":"ulCAoBMA,EAAeC,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,8BAAAC,YAAA,eAAGJ,CAAUK,IAAAA,EAAAC,EAAAA,qBAAA,CAAA,sBAAA,0BAAA,iIAAA,gBAAA,CAAA,sBACE,0BACC,iIAOS,kBARxBC,EAAAA,SAASC,MACRD,WAASC,MAOa,EAAjBD,EAAQA,SAACC,OAI5BC,EAAaT,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,4BAAAC,YAAA,eAAGJ,CAAUU,IAAAA,EAAAJ,EAAAA,qBAAA,CAAA,sBAAA,0BAAA,SAAA,CAAA,sBACI,0BACC,WADfC,EAAQA,SAACC,MACRD,EAAAA,SAASC,OAGvBG,EAASX,EAAAA,QAAOY,GAAVV,WAAA,CAAAC,YAAA,wBAAAC,YAAA,eAAGJ,uZAA8B,mIAQ+B,qFAMA,uFAMA,wDAInC,mBAjB3B,SAACa,OAAEC,EAAKD,EAAAC,MACd,OADqBD,EAAAE,MACbC,EAAAA,UAAMF,GAAOG,UAAUC,MAAQF,EAAAA,UAAMF,GAAOG,UAAUE,UAKxD,SAACN,OAAEC,EAAKD,EAAAC,MACd,OADqBD,EAAAE,MACbC,EAAAA,UAAMF,GAAOG,UAAUC,MAAQF,EAAAA,UAAMF,GAAOG,UAAUE,UAKxD,SAACN,OAAEC,EAAKD,EAAAC,MACd,OADqBD,EAAAE,MACbC,EAAAA,UAAMF,GAAOG,UAAUC,MAAQF,EAAAA,UAAMF,GAAOG,UAAUE,SAI9B,EAAjBZ,EAAQA,SAACC,OAI1BY,EAAapB,EAAM,QAACqB,QAAVnB,WAAA,CAAAC,YAAA,4BAAAC,YAAA,eAAGJ,CAAYsB,IAAAA,EAAAhB,EAAAA,qBAAA,CAAA,4FAAA,MAAA,oDAAA,gBAAA,CAAA,4FAKE,MAAoB,oDAGhB,kBAHtBC,EAAAA,SAASC,MAAQ,EAAOD,EAAAA,SAASC,MAGzBD,WAASC,OAI1Be,EAAYvB,EAAAA,QAAOwB,GAAVtB,WAAA,CAAAC,YAAA,2BAAAC,YAAA,eAAGJ,mEAAS,qBACS,gBAAD,EAAjBO,EAAQA,SAACC,OAGrBiB,EAAazB,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,4BAAAC,YAAA,eAAGJ,CAAU0B,IAAAA,EAAApB,EAAAA,qBAAA,CAAA,qBAAA,8CAAA,0CAAA,CAAA,qBACO,8CAGd,4CAHa,EAAjBC,EAAQA,SAACC,MAGdmB,EAAAA,GAAGR,QAKVS,EAAW5B,EAAAA,QAAO6B,KAAV3B,WAAA,CAAAC,YAAA,0BAAAC,YAAA,eAAGJ,CAAmC8B,IAAAA,EAAAxB,EAAAA,qBAAA,CAAA,kBAAA,OAAA,CAAA,kBAEC,UADtC,SAACO,GAAE,IAAAkB,EAASlB,EAAAkB,UACnBA,OAAAA,GAAaA,EAAY,EAAI,QAAU,UAyZ/CC,EAAeC,EAAYA,cAvVtB,SAACpB,OACFqB,EAAIrB,EAAAqB,KACJC,EAAMtB,EAAAsB,OACNC,EAAMvB,EAAAuB,OACNC,EAAQxB,EAAAwB,SACRC,EAAOzB,EAAAyB,QACPC,EAAY1B,EAAA0B,aACZC,EAAU3B,EAAA2B,WACVC,EAAS5B,EAAA4B,UAEHC,EAAwB,aAAXN,EACbrB,EAAmB,SAAXqB,EAERO,EAAsBC,EAAAA,cAApBC,EAAMF,EAAAE,OAAEC,EAAOH,EAAAG,QACjBC,EAAaD,EAAQE,SAASC,gBAE9BC,EAAkCC,EAAK,QAACC,UAC1Cd,MAAAA,OAAA,EAAAA,EAASe,aAAc,IADpBC,EAAYJ,EAAA,GAAEK,EAAeL,EAAA,GAG7BM,EAAeL,EAAAA,QAAMC,SAAS,GAAE,GACjCK,EAAgCN,EAAK,QAACC,UACxCd,MAAAA,OAAA,EAAAA,EAASoB,cAAe,GADrBA,EAAWD,EAAA,GAAEE,EAAcF,EAAA,GAI5BG,EAAYT,EAAAA,QAAMU,OAAuB,MACzCC,EAAoBC,EAAAA,qBACpBC,EAAYC,EAAAA,aAEZC,GAAa/B,MAAAA,OAAA,EAAAA,EAAQgC,SAAU,EAC/BC,EAAYC,cAAY,KAExBC,EAAaC,EAAAA,aAAY,WACrBrC,IAAAA,EAAiB,GAEjBsC,EAAUC,EAAAA,eAAe1B,GAC/B,GAAIyB,EAAS,CACT,IAAME,EAAaF,MAAAA,OAAO,EAAPA,EAASG,MAAM,KAC9BC,EAAYA,aAACF,GAAY,IACzBxC,EAAK2C,KAAIC,MAAT5C,EAAawC,GAGrB,OAAOxC,IACR,CAACa,IAEJgC,EAAAA,WAAU,WAEFzC,IAAAA,EAAAA,CAGE0C,IAAAA,EAAYV,IAEdM,EAAYA,aAACI,GAAW,IACxBzB,EAAgByB,MAIrB,CAACV,EAAYhC,IAEhByC,EAAAA,WAAU,iBACDzC,IAAW0B,IAGhBiB,EAAAA,YAAY,QAAQ3C,MAAAA,OAAA,EAAAA,EAASoB,cAAe,GAExCkB,eAAatC,MAAAA,OAAO,EAAPA,EAASe,YAAY,GAClC4B,cAAYlC,EAAiC,QAArBlC,EAAAyB,MAAAA,OAAO,EAAPA,EAASe,kBAAY,IAAAxC,OAAA,EAAAA,EAAAqE,KAAK,MAElDC,EAAcA,eAACpC,MAEpB,CAACA,EAAYT,EAAS0B,IAEzBoB,EAAAA,iBAAgB,WACZH,cAAY,OAAQvB,KACrB,CAACA,IAEJ0B,EAAAA,iBAAgB,YACR5C,GAAeoC,eAAatB,KAG5BA,EAAaa,OAAS,EACtBc,EAAAA,YAAYlC,EAAYO,EAAa4B,KAAK,MAE1CC,EAAcA,eAACpC,MAEpB,CAACO,IAEJ,IAAM+B,GAAiB,SAACC,EAAeC,QAAA,IAAAA,IAAAA,GAAqB,GACxDhC,GAAgB,SAACiC,GACPC,IAAAA,EAAQC,EAAAA,cAAA,GAAOF,GAAI,GACnBG,EAAYL,EAAIM,KAAOJ,EAAKK,QAAQP,EAAIM,OAAS,EAEnDD,OAAe,IAAfA,GAAoBL,EAAIM,KACxBF,gBAAAA,EAAAA,cAAA,GAAWD,GAAQ,GAAA,CAAEH,EAAIM,OAAM,GAE/BL,GACAE,EAASK,OAAOH,EAAW,GACpBF,GAEJD,KAEX7B,EAAe,IAGboC,GAAiBC,EAAAA,SAAQ,WAC3B,IAcIC,EAAWrB,eAAazC,GAASuD,EAAAA,cAAA,GAAKvD,GAAM,GAAI,GAKpD,OAFA8D,EAAWA,MAAAA,OAAQ,EAARA,EAAUC,QAjBD,SAACC,GACb,IAACvB,EAAAA,aAAatB,GAAc,GAAQ,OAAO,EAC/C,IAAK6C,EAAKjE,KAAM,OAAO,EAGvB,IADIkE,IAAAA,GAAU,EACLC,EAAI,EAAGA,EAAIF,EAAKjE,KAAKiC,OAAQkC,IAClC,IAAuD,IAAnD/C,EAAauC,QAAQM,EAAKjE,KAAKmE,GAAGT,MAAQ,IAAY,CACtDQ,GAAU,EACV,MAGR,OAAOA,OASZ,CAACjE,EAAQmB,IAENgD,GAAgBN,EAAAA,SAAQ,WAEtB,OAAAD,MAAAA,QAAA,EAAAA,GAAgBG,QAAO,SAACK,EAAGF,GAAM,OAAAA,EAAI3C,EAAcF,OACnD,KAEL,CAACuC,GAAgBvC,EAAaE,IAEjCqB,EAAAA,WAAU,WAEF,GAACjB,EAAD,CAEJ,IACI0C,EADEC,EAAU7C,EAAU8C,QAG1B,GAAID,EAAS,EAMTD,EAAW,IAAIG,sBAAqB,SAACC,GACjC,IAAMC,EAAQD,EAAQ,IAClBC,MAAAA,SAAAA,EAAOC,iBAGHpD,EACAqD,KAAKC,KAAKjB,GAAe5B,OAASX,IAElCG,GAAe,SAAC6B,GAASA,OAAAA,EAAO,OAb5B,CACZyB,WAAY,oBACZC,UAAW,KAeNC,QAAQV,GAGrB,OAAO,WACCD,GAAUA,EAASY,iBAE5B,CACC5D,EACAU,EACAR,EACAI,EACAiC,GAAe5B,SAGnB,IAAMkD,GAAerB,EAAAA,SAAQ,WACzB,OAAO9D,MAAAA,OAAA,EAAAA,EAAMgE,QAAO,SAACZ,GAAQ,OAAAA,OAC9B,CAACpD,IAEJ,OACIiB,EAAA,QAAAmE,cAACC,UAAO,CACJC,eAAa,EACbnF,SAAUA,EACVoF,QACI/E,EACMG,EAAO6E,UAAUC,KACjB5G,EACA8B,EAAO6E,UAAUvG,OACjB,cAEViB,OAAQwF,EAAAA,YAAYxF,GAAQ,IAE5Be,EAAC,QAAAmE,cAAAO,WAAQC,eAAa,GACjBlD,eAAayC,IAAc,IACxBlE,wBAACpD,EAAY,KACToD,UAAAmE,cAAClG,EAAU,CACP2G,KAAK,QACLC,KAAK,OACLtF,WAAYA,GAEZS,EAAAA,QAAAmE,cAACW,EAAAA,OAAS,MACV9E,EAAA,QAAAmE,cAAA,OAAA,KAAA,WAEHD,GAAaa,KAAI,SAAC5C,EAAKe,GAAM,OAC1BlD,EAAA,QAAAmE,cAAC7G,EAAW,CAAA0H,IAAK9B,GACZ5D,EACGA,EAAU,CACN0F,IAAK9B,EACLT,KAAMN,EACN5C,WAAYA,EACZ0F,UACmC,IAA/B9E,EAAauC,QAAQP,GACzB+C,aAAc,SAACC,GACXA,MAAAA,GAAAA,EAAIC,iBACC/F,EAEEA,EAAW,CAAEoD,KAAMN,IADtBD,GAAe,CAAEO,KAAMN,OAKnCnC,EAAAA,QAACmE,cAAAkB,MACG,CAAA9F,WAAYA,EACZ+F,QAAS,SAACH,GACNA,MAAAA,GAAAA,EAAIC,iBACC/F,EAGDA,EACI,CAAEoD,KAAMN,IACR,GAJJD,GAAe,CAAEO,KAAMN,KAO/B8C,UACmC,IAA/B9E,EAAauC,QAAQP,IAGxBA,QAOzBnC,EAAAA,QAAAmE,cAAC3G,EAAM,CAACI,MAAOA,GACVuF,GAAc4B,KAAI,SAAC/B,EAAME,SAClBqC,EAAW,GAEXvC,EAAKwC,OASLD,EARkB,IAAIE,EAAJA,gBACdzC,EAAKwC,KAAKE,UACV,GACA/F,EAAQE,SAAS8F,gBAAgB3C,EAAKwC,MACtC7F,EAAQE,SAAS+F,gBAAgB5C,EAAKwC,MACtC7F,EAAQE,SAASgG,gBAGAC,qBACjBnG,EAAQE,SAASkG,oBACb/C,EAAKwC,KACLxC,EAAKgD,UAEThD,EAAKgD,WAIb,IAAMC,EAAOC,EAAAA,OAAO,CAACX,EAAUvC,EAAKmD,SAAU,OAE9C,OACInG,EAAA,QAAAmE,cAAC/F,EAAS,CAAC4G,IAAK,GAAGkB,OAAAhD,EAAW,WAAAgD,OAAAlD,EAAKoD,QAC/BpG,UAACmE,cAAAkC,EAADA,WACIC,WAAA,CAAA1I,MAAkB,SAAXqB,GACH+D,EACJ,CAAAiD,KAAMA,EACNlH,KAAe,QAATrB,EAAAsF,EAAKjE,YAAI,IAAArB,OAAA,EAAAA,EAAEqH,KAAI,SAAC5C,GAAS,MAAA,CAC3BM,KAAMN,EAAIM,SAEdlD,WAAYA,EACZF,WAAY,SAAC8C,GAETlB,EAAU,GACL5B,EAODA,EACI,CAAEoD,KAAMN,EAAIM,OACZ,GAPJP,GACI,CAAEO,KAAMN,EAAIM,OACZ,IASZnD,UAAWA,UAM/BU,EAAAA,QAAKmE,cAAA,MAAA,CAAAoC,IAAK9F,KACRE,GACEX,EAAA,QAAAmE,cAAC7F,EAAU,KACNU,GAAUA,EAAOgC,OAAS,GACvBhB,EAAAA,QAAAmE,cAACjG,EAAAA,KAAI,CACD2G,KAAK,OACLD,KAAK,SACLrF,WAAYA,GAEZS,EAAC,QAAAmE,cAAA1F,EACG,CAAAG,UAAWI,EAAOgC,OAClBsE,QAAS,SAACH,GACNA,EAAGC,iBAEC7E,EACAqD,KAAKC,KACDjB,GAAe5B,OACXX,IAGRG,GAAe,SAAC6B,GAASA,OAAAA,EAAO,OAIvC9B,EACGqC,GAAe5B,OAASX,GACxBL,EAAAA,QAACmE,cAAAqC,EAAOA,QAACC,MACLC,GAAG,SACHnH,WAAYA,GAEZS,UAAAmE,cAACqC,EAAOA,QAACG,MAAK,KACTvH,GACG,0BC1d9CwH,EAAO/J,EAAAA,QAAOY,GAAVV,WAAA,CAAAC,YAAA,kBAAAC,YAAA,gBAAGJ,kZAA8B,8HAQiC,qFAMA,uFAMA,wDAInC,mBAjB3B,SAACa,OAAEC,EAAKD,EAAAC,MACd,OADqBD,EAAAE,MACbC,EAAAA,UAAMF,GAAOG,UAAUC,MAAQF,EAAAA,UAAMF,GAAOG,UAAUE,UAKxD,SAACN,OAAEC,EAAKD,EAAAC,MACd,OADqBD,EAAAE,MACbC,EAAAA,UAAMF,GAAOG,UAAUC,MAAQF,EAAAA,UAAMF,GAAOG,UAAUE,UAKxD,SAACN,OAAEC,EAAKD,EAAAC,MACd,OADqBD,EAAAE,MACbC,EAAAA,UAAMF,GAAOG,UAAUC,MAAQF,EAAAA,UAAMF,GAAOG,UAAUE,SAI9B,EAAjBZ,EAAQA,SAACC,OAI1BwJ,GAAWhK,EAAAA,QAAOwB,GAAVtB,WAAA,CAAAC,YAAA,sBAAAC,YAAA,gBAAGJ,mEAAS,qBACU,gBAAD,EAAjBO,EAAQA,SAACC,OA8G3ByJ,GAAehI,EAAYA,cApFtB,SAACpB,OAAEwB,EAAQxB,EAAAwB,SAAEF,EAAMtB,EAAAsB,OAAEC,EAAMvB,EAAAuB,OAAEK,EAAS5B,EAAA4B,UACjCE,EAA6BC,EAAAA,cAA3BC,EAAMF,EAAAE,OAAEC,EAAOH,EAAAG,QAAEhC,EAAK6B,EAAA7B,MACxB4B,EAAwB,aAAXN,EACbrB,EAAmB,SAAXqB,EAEd,OACIe,EAAA,QAAAmE,cAACC,UAAO,CACJC,eAAa,EACbnF,SAAUA,EACVoF,QACI/E,EACMG,EAAO6E,UAAUC,KACjBvF,EACAS,EAAO6E,UAAUvG,OACjB0B,EAAO6E,UAAUxG,MAE3BkB,OAAQwF,EAAAA,YAAYxF,GAAQ,IAE5Be,EAAC,QAAAmE,cAAAO,WAAQC,eAAa,GAClB3E,EAAA,QAAAmE,cAACyC,EAAK,CAAAhJ,MAAOA,GACRoB,MAAAA,OAAM,EAANA,EAAQ+F,KAAI,SAACgC,EAAO7D,SACbqC,EAAW,GAEXwB,EAAMvB,OASND,EARkB,IAAIE,EAAJA,gBACdsB,EAAMvB,KAAKE,UACX,GACA/F,EAAQE,SAAS8F,gBAAgBoB,EAAMvB,MACvC7F,EAAQE,SAAS+F,gBAAgBmB,EAAMvB,MACvC7F,EAAQE,SAASgG,gBAGAC,qBACjBnG,EAAQE,SAASkG,oBACbgB,EAAMvB,KACNuB,EAAMf,UAEVe,EAAMf,WAId,IAAMC,EAAOC,EAAAA,OAAO,CAACX,EAAUwB,EAAMZ,SAAU,OAE/C,OACInG,EAAC,QAAAmE,cAAA0C,GAAS,CAAA7B,IAAK9B,GACXlD,UAACmE,cAAAkC,EAADA,uBACIzI,MAAkB,SAAXqB,GACH8H,EAAK,CACThI,aAAMrB,EAAAqJ,EAAMhI,2BAAMgG,KAAI,SAAC5C,WACf6E,OACAC,EAUG,OARH9E,EAAIM,OAAgB,QAAR/E,EAAAyE,EAAI+E,YAAI,IAAAxJ,OAAA,EAAAA,EAAEyJ,QACtBH,EDzBR,SAChCI,EACAzJ,EACAoB,GAEA,QAFA,IAAAA,IAAAA,EAAmB,KAEdqI,IAAQzJ,EAAO,MAAO,GACvB,IAAC8D,EAAAA,aAAa1C,GAAM,GAAQ,OAAOqI,EAEjCxH,IAAAA,EAAajC,EAAMgC,QAAQE,SAASC,gBAC1C,IAAKF,EAAY,OAAOwH,EAEpB,IACA,IAAMC,EAAW,IAAIC,IAAIF,GACnBG,EAAY,IAAIC,gBAAgBH,EAASI,QAG/C,OAFAF,EAAUG,IAAI9H,EAAY+H,mBAAmB5I,EAAKgD,KAAK,OAEhD,GAAAmE,OAAGkB,EAAO,KAAAlB,OAAAqB,EAAUK,YAC7B,MAAOC,GACE,MAAA,GAAG3B,OAAAkB,EAAO,KAAAlB,OAAAtG,cAAc+H,mBAAmB5I,EAAKgD,KAAK,QCOd+F,CACN3F,EAAI+E,KAAKC,KACTxJ,EACA,CAACwE,EAAIM,QAIN,CACHA,KAAMN,EAAIM,KACVyE,cAAM1H,EAAA2C,EAAI+E,2BAAMC,MACXb,EAAAA,SAAAA,EAAAA,SAAA,GACQnE,EAAI+E,MAAI,CACXC,KAAMH,SAEVC,MAGd1H,WAAYA,EACZ0G,KAAMA,EACN3G,UAAWA,eC1HzCyI,GAAiBlL,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,8BAAAC,YAAA,gBAAGJ,CAAUK,IAAAA,EAAAC,EAAAA,qBAAA,CAAA,+HAAA,oDAAA,SAAA,CAA0C,+HAiBtE,oDAI+B,YAhBb,SAACO,GAChB,OADwBA,EAAAsK,QAEpB,IAAK,SACD,MAAO,SAEX,IAAK,QACD,MAAO,WAGX,QACI,MAAO,gBAMF5K,EAAAA,SAAS6K,QAGxBC,GAAarL,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,0BAAAC,YAAA,gBAAGJ,CAAUU,IAAAA,EAAAJ,EAAAA,qBAAA,CAAA,6HAAA,oLAAA,2BAAA,CAAA,6HAQP,oLASmB,6BAT5BqB,EAAEA,GAACR,OASWZ,EAAAA,SAASC,OAK9B8K,GAAkBtL,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,+BAAAC,YAAA,gBAAGJ,CAAoCuL,IAAAA,EAAAjL,EAAAA,qBAAA,CAAA,wNAAA,gFAAA,CAAA,wNAaG,mFAHvC,SAACO,OAAEC,EAAKD,EAAAC,MACxB4B,OADoC7B,EAAA6B,WAE9B8I,EAAMC,WAAC3K,GAAOkC,SAAS0I,mBAAmBC,SAC1CH,EAAAA,WAAO1K,GAAOkC,SAAS0I,mBAAmBE,WAOlDC,GAAkB7L,EAAM,QAAC8L,SAAV5L,WAAA,CAAAC,YAAA,+BAAAC,YAAA,gBAAGJ,CAAasB,IAAAA,EAAAhB,EAAAA,qBAAA,CAAA,qBAAA,qBAAA,uCAAA,CAAA,qBACD,qBAEd,yCAFa,EAAjBC,EAAQA,SAACC,MAEdmB,EAAAA,GAAGR,QAKVpB,GAAeC,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,4BAAAC,YAAA,gBAAGJ,CAAU+L,IAAAA,EAAAzL,EAAAA,qBAAA,CAAA,6CAAA,0BAAA,+EAAA,CAAA,6CAEE,0BACC,iFADfC,EAAQA,SAACC,MACRD,EAAAA,SAASC,OAOvBC,GAAaT,EAAAA,QAAOC,IAAVC,WAAA,CAAAC,YAAA,0BAAAC,YAAA,gBAAGJ,CAAU0B,IAAAA,EAAApB,EAAAA,qBAAA,CAAA,sBAAA,0BAAA,SAAA,CAAA,sBACI,0BACC,WADfC,EAAQA,SAACC,MACRD,EAAAA,SAASC,OAGvBwL,GAAahM,EAAM,QAACiM,WAAV/L,WAAA,CAAAC,YAAA,0BAAAC,YAAA,gBAAGJ,CAAe8B,IAAAA,EAAAxB,EAAAA,qBAAA,CAAA,6EAAA,4BAAA,wOAAA,CAAA,6EAIM,4BAGf,0OAHc,EAAjBC,EAAQA,SAACC,MAGlBmB,EAAAA,GAAGuK,WAUVC,GAAgBnM,EAAM,QAACqB,QAAVnB,WAAA,CAAAC,YAAA,6BAAAC,YAAA,gBAAGJ,CAAYoM,IAAAA,EAAA9L,EAAAA,qBAAA,CAAA,6EAAA,gBAAA,CAAA,6EAIM,kBAAD,EAAjBC,EAAQA,SAACC,OAIzB6L,GAAerM,EAAM,QAACqB,QAAVnB,WAAA,CAAAC,YAAA,4BAAAC,YAAA,gBAAGJ,CAAYsM,IAAAA,EAAAhM,EAAAA,qBAAA,CAAA,6EAAA,qBAAA,+BAAA,4BAAA,0GAAA,CAAA,6EAIO,qBAGrB,+BACiB,4BAGX,4GAPc,EAAjBC,EAAQA,SAACC,MAGzB2L,GACgB5L,EAAAA,SAASC,MAGlBmB,EAAEA,GAACuK,WAOVK,GAAYvM,EAAM,QAACqB,QAAVnB,WAAA,CAAAC,YAAA,yBAAAC,YAAA,gBAAGJ,CAAYwM,IAAAA,EAAAlM,EAAAA,qBAAA,CAAA,6EAAA,gBAAA,CAAA,6EAIU,kBAAD,EAAjBC,EAAQA,SAACC,OAqN/BiM,GAAexK,EAAYA,cAxKtB,SAACpB,SAAEwB,EAAQxB,EAAAwB,SAAE6H,EAAKrJ,EAAAqJ,MAAEwC,EAAK7L,EAAA6L,MAAEC,iBAAcvK,EAAMvB,EAAAuB,OAAEK,EAAS5B,EAAA4B,UACrDS,EAAsBN,EAAAA,cAApBC,EAAMK,EAAAL,OAAEC,EAAOI,EAAAJ,QACjBJ,EAAwB,aAAXN,EACbrB,EAAmB,SAAXqB,EACRwK,EAAW5G,EAAAA,SAAQ,WACdpB,OAAAA,eACH8H,MAAAA,OAAK,EAALA,EAAOxG,QAAO,SAAC2G,GAAS,OAAAjI,eAAaiI,EAAKC,OAAO,OACjD,KAEL,CAACJ,IAEAK,EAAc,GACdrE,EAAW,GAEf,GAAIwB,MAAAA,SAAAA,EAAOvB,KAAM,CACb,IAAMqE,EAAY,IAAIpE,EAAJA,gBACdsB,EAAMvB,KAAKE,UACX,GACA/F,EAAQE,SAAS8F,gBAAgBoB,EAAMvB,MACvC7F,EAAQE,SAAS+F,gBAAgBmB,EAAMvB,MACvC7F,EAAQE,SAASgG,gBAErB+D,EAAcC,EAAUC,mBAExBvE,EAAWsE,EAAU/D,qBACjBnG,EAAQE,SAASkG,oBAAoBgB,EAAMvB,KAAMuB,EAAMf,UACvDe,EAAMf,UAId,IAAM+D,EAASlH,EAAAA,SAAQ,iBAAM,eAAAnF,EAAAqJ,MAAAA,OAAA,EAAAA,EAAOgD,6BAAQC,MAAM,EAAG,KAAI,CAACjD,MAAAA,SAAAA,EAAOgD,SAC3DE,EAAiBF,MAAAA,SAAAA,EAAS,GAEhC,OACI/J,EAAA,QAAAmE,cAACC,UAAO,CACJC,eAAa,EACbnF,SAAUA,EACVoF,QACI/E,EACMG,EAAO6E,UAAUC,KACjB5G,EACA8B,EAAO6E,UAAUvG,OACjB0B,EAAO6E,UAAUxG,MAE3BkB,OAAQwF,EAAAA,YAAYxF,GAAQ,IAE5Be,EAAC,QAAAmE,cAAAO,WAAQC,eAAa,GACjBlD,EAAAA,aAAasI,GAAQ,IAClB/J,wBAAC+H,GAAc,CAACC,OAAQwB,EAAe,SAAW,QAC7CO,EAAOhF,KAAI,SAACmF,EAAKhH,GACd,OAAKgH,EAAIC,MAELnK,EAAC,QAAAmE,cAAA+D,GAAW,CAAAlD,IAAK9B,GACblD,EAAAA,QAAAmE,cAACwE,EAAAA,MAAKrC,EAAAA,SAAA,GACE4D,EAAG,CACPE,YAAU,EACVC,iBAAe,EACf9K,WAAYA,EACZ+K,OAAQ,CAAEH,MAAO,CAAEI,EAAG,EAAGC,EAAG,QARjB,QAa3BxK,EAAAA,QAAAmE,cAACgE,GACG,CAAA5I,WAAYA,EACZkL,MAAO,CACHC,gBACIlB,GAAgBO,EAAO/I,OAAS,EAC1B,OAAAkF,OAAoB,QAAb1G,EAAAuH,MAAAA,OAAK,EAALA,EAAOgD,cAAM,IAAAvK,OAAA,EAAAA,EAAG,GAAG2K,MAAQ,UAClClD,MAK1BjH,EAAC,QAAAmE,cAAAwG,EAAAA,KAAKC,IAAG,CACLC,OAAyB,EAAjBzN,EAAAA,SAASC,MACjB0L,UAAW,CAAE8B,OAAQzN,EAAQA,SAAC6K,SAE9BjI,UAACmE,cAAAwG,EAAIA,KAACG,IAAG,CAAC/B,UAAW,CAAErK,KAAM+K,EAAW,IAAM,EAAI,KAC7C1C,MAAAA,SAAAA,EAAOhI,OACJiB,EAAC,QAAAmE,cAAAvH,QACImK,EAAMhI,KAAKgG,KAAI,SAAC5C,EAAKe,GAAM,OACxBlD,wBAAC1C,GAAU,CAAC0H,IAAK,OAAS9B,GACrB5D,EACGA,EAAU,CACN0F,IAAK,WAAWkB,OAAAhD,GAChBT,KAAMN,EAAIM,MAAQ,GAClBlD,WAAYA,EACZ0F,UAAU,EACViC,KAAM/E,EAAI+E,OAGdlH,EAAAA,QAAAmE,cAACkB,MAAG,CACA6B,KAAM/E,EAAI+E,KACV3H,WAAYA,GAEX4C,EAAIM,YAO5BsE,MAAAA,OAAA,EAAAA,EAAOX,QACJpG,EAAAA,QAAAmE,cAAC0E,GAAU,CACPjE,KAAK,YACLrF,WAAYA,GAEXwH,EAAMX,OAGdwD,GACG5J,EAAC,QAAAmE,cAAA6E,IACGpE,KAAK,MACLC,KAAK,SACLtF,WAAYA,GAEXqK,GAAe,GACfA,GAAerE,EAAW,MAAQ,GAClCA,IAGRwB,MAAAA,OAAK,EAALA,EAAOZ,UACJnG,EAAAA,QAAAmE,cAAC+E,GAAY,CACTtE,KAAK,MACLC,KAAK,OACLkG,UAAWhE,EAAMZ,QACjB5G,WAAYA,KAGnBwH,MAAAA,OAAK,EAALA,EAAOiE,WACJhL,UAAAmE,cAACiF,GAAS,CACNxE,KAAK,SACLC,KAAK,SACLtF,WAAYA,GAEXwH,EAAMiE,UAGdf,GACGjK,EAAAA,QAACmE,cAAAuE,GACOpC,EAAAA,SAAA,GAAA2D,EACJ,CAAAG,YACA,EAAAC,iBACA,EAAA9K,WAAYA,EACZ+K,OAAQ,CAAEH,MAAO,CAAEI,EAAG,EAAGC,EAAG,QAGnCzD,MAAAA,OAAA,EAAAA,EAAOd,OACJjG,EAAAA,QAACmE,cAAAiF,GACG,CAAAxE,KAAK,SACLrF,WAAYA,EACZwL,UAAWhE,EAAMd,QAI5BwD,GACGzJ,EAAAA,QAACmE,cAAAwG,EAAAA,KAAKG,IAAG,CAAC/B,UAAW,CAAErK,KAAM,IAAM,IAC/BsB,EAAA,QAAAmE,cAAC8G,WAAS,CAAA1L,WAAYA,EAAYoK,MAAOJ"}
|