@drodil/backstage-plugin-qeta-react 3.59.5 → 3.59.7

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.
@@ -120,9 +120,9 @@ const FilterPanel = (props) => {
120
120
  }, [searchParams, onChange]);
121
121
  useEffect(() => {
122
122
  identityApi.getBackstageIdentity().then((identity) => {
123
- catalogApi.getEntities({
124
- filter: {
125
- "spec.owner": identity.ownershipEntityRefs
123
+ catalogApi.queryEntities({
124
+ query: {
125
+ "spec.owner": { $in: identity.ownershipEntityRefs }
126
126
  },
127
127
  fields: ["kind", "metadata.name", "metadata.namespace"]
128
128
  }).then((data) => {
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPanel.esm.js","sources":["../../../src/components/FilterPanel/FilterPanel.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { DateRangeFilter } from './DateRangeFilter';\nimport { PostStatus, PostType } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { EntitiesInput } from '../PostForm/EntitiesInput';\nimport { TagInput } from '../PostForm/TagInput';\nimport {\n catalogApiRef,\n useStarredEntities,\n} from '@backstage/plugin-catalog-react';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n Box,\n Checkbox,\n Divider,\n FormControl,\n FormControlLabel,\n FormGroup,\n FormLabel,\n Grid,\n IconButton,\n makeStyles,\n Radio,\n RadioGroup,\n Tooltip,\n} from '@material-ui/core';\nimport AdjustIcon from '@material-ui/icons/Adjust';\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport SortIcon from '@material-ui/icons/Sort';\nimport SwapVertIcon from '@material-ui/icons/SwapVert';\nimport TuneIcon from '@material-ui/icons/Tune';\nimport { compact } from 'lodash';\n\nconst radioSelect = (value: string, label: string) => {\n return (\n <FormControlLabel\n value={value}\n control={<Radio size=\"small\" />}\n label={label}\n />\n );\n};\n\nexport const filterKeys = [\n 'orderBy',\n 'order',\n 'noAnswers',\n 'noCorrectAnswer',\n 'noVotes',\n 'dateRange',\n 'tags',\n 'tagsRelation',\n 'entities',\n 'entitiesRelation',\n 'status',\n] as const;\nexport type FilterKey = (typeof filterKeys)[number];\n\nexport type Filters = {\n order?: 'asc' | 'desc';\n orderBy?: string;\n searchQuery?: string;\n entities?: string[];\n entitiesRelation?: 'and' | 'or';\n entity?: string;\n tags?: string[];\n tagsRelation?: 'and' | 'or';\n dateRange?: string;\n status?: PostStatus;\n};\n\nexport type PostFilters = Filters & {\n orderBy?:\n | 'rank'\n | 'created'\n | 'title'\n | 'views'\n | 'score'\n | 'trend'\n | 'answersCount'\n | 'updated';\n noAnswers?: 'true' | 'false';\n noCorrectAnswer?: 'true' | 'false';\n noVotes?: 'true' | 'false';\n collectionId?: number;\n type?: PostType;\n author?: string;\n entities?: string[];\n tags?: string[];\n tagsRelation?: 'and' | 'or';\n entitiesRelation?: 'and' | 'or';\n status?: PostStatus;\n};\n\nexport type AnswerFilters = Filters & {\n orderBy?: 'created' | 'score' | 'updated';\n noVotes?: 'true' | 'false';\n noCorrectAnswer?: 'true' | 'false';\n};\n\nexport type CollectionFilters = Filters & {\n orderBy?:\n | 'created'\n | 'title'\n | 'postsCount'\n | 'questionsCount'\n | 'articlesCount'\n | 'linksCount'\n | 'followerCount';\n};\n\nexport type TagFilters = Filters & {\n orderBy?:\n | 'postsCount'\n | 'questionsCount'\n | 'articlesCount'\n | 'linksCount'\n | 'followerCount'\n | 'tag';\n};\n\nexport type EntityFilters = Filters & {\n orderBy?:\n | 'postsCount'\n | 'questionsCount'\n | 'articlesCount'\n | 'linksCount'\n | 'followerCount'\n | 'entityRef';\n};\n\nexport type UserFilters = Filters & {\n orderBy?:\n | 'totalPosts'\n | 'totalQuestions'\n | 'totalAnswers'\n | 'totalArticles'\n | 'totalLinks'\n | 'totalViews'\n | 'totalVotes'\n | 'followerCount'\n | 'reputation'\n | 'userRef';\n};\n\nfunction isPostFilters(filters: Filters): filters is PostFilters {\n return (filters as PostFilters).noAnswers !== undefined;\n}\n\nfunction isAnswerFilters(filters: Filters): filters is AnswerFilters {\n return (\n (filters as AnswerFilters).noVotes !== undefined &&\n (filters as PostFilters).noAnswers === undefined\n );\n}\n\nfunction isCollectionFilters(filters: Filters): filters is CollectionFilters {\n return (filters as PostFilters).noAnswers === undefined;\n}\n\nexport type Change<T extends Filters> = {\n key: keyof T;\n value?: string | string[];\n};\n\nexport interface CommonFilterPanelProps {\n showEntityFilter?: boolean;\n showTagFilter?: boolean;\n answerFilters?: boolean;\n type?: PostType;\n mode?: 'posts' | 'collections' | 'tags' | 'entities' | 'users';\n}\n\nexport interface FilterPanelProps<\n T extends Filters,\n> extends CommonFilterPanelProps {\n onChange: (changes: Change<T> | Change<T>[]) => void;\n filters: T;\n}\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n padding: '1.5em',\n marginTop: '0',\n marginBottom: '2em',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.background.paper,\n },\n label: {\n display: 'flex',\n alignItems: 'center',\n textTransform: 'uppercase',\n fontSize: '0.75rem',\n fontWeight: 'bold',\n marginBottom: '0.75em',\n color: theme.palette.text.secondary,\n '& > svg': {\n marginRight: '0.25em',\n fontSize: '1.1rem',\n },\n },\n }),\n { name: 'QetaFilterPanel' },\n);\n\nexport const FilterPanel = <T extends Filters>(props: FilterPanelProps<T>) => {\n const {\n onChange,\n filters,\n showEntityFilter = true,\n showTagFilter = true,\n type,\n mode = 'posts',\n } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const [entities, setEntities] = useState<Entity[] | undefined>(undefined);\n const [starredEntities, setStarredEntities] = useState(false);\n const [ownedEntities, setOwnedEntities] = useState(false);\n const [ownedEntityRefs, setOwnedEntityRefs] = useState<string[]>([]);\n const starredEntitiesApi = useStarredEntities();\n const catalogApi = useApi(catalogApiRef);\n const identityApi = useApi(identityApiRef);\n const styles = useStyles();\n const [searchParams, setSearchParams] = useSearchParams();\n const initializedRef = useRef(false);\n\n // Initialize filters from URL parameters only once\n useEffect(() => {\n if (initializedRef.current) {\n return;\n }\n initializedRef.current = true;\n\n const changes: Change<T>[] = [];\n searchParams.forEach((value, key) => {\n if (!value) {\n return;\n }\n if (filterKeys.includes(key as FilterKey)) {\n if (key === 'tags' || key === 'entities') {\n changes.push({ key: key as keyof T, value: value.split(',') });\n } else {\n changes.push({ key: key as keyof T, value });\n }\n }\n });\n if (changes.length > 0) {\n onChange(changes);\n }\n }, [searchParams, onChange]);\n\n // Handle owned entities\n useEffect(() => {\n identityApi.getBackstageIdentity().then(identity => {\n catalogApi\n .getEntities({\n filter: {\n 'spec.owner': identity.ownershipEntityRefs,\n },\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n })\n .then(data => {\n const entityRefs = data.items.map(e => stringifyEntityRef(e));\n setOwnedEntityRefs(entityRefs);\n });\n });\n }, [catalogApi, identityApi]);\n\n const handleChange = (event: {\n target: {\n value?: string | string[];\n type?: string;\n name: string;\n checked?: boolean;\n };\n }) => {\n let value = event.target.value;\n if (event.target.type === 'checkbox') {\n value = event.target.checked ? 'true' : 'false';\n }\n\n // Update URL parameters\n setSearchParams(prev => {\n const newParams = new URLSearchParams(prev);\n if (\n !value ||\n value === 'false' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n newParams.delete(event.target.name);\n } else if (Array.isArray(value)) {\n newParams.set(event.target.name, value.join(','));\n } else {\n newParams.set(event.target.name, value);\n }\n return newParams;\n });\n\n onChange({ key: event.target.name as keyof T, value });\n };\n\n const handleStarredEntities = useCallback(\n (checked: boolean) => {\n setStarredEntities(checked);\n setEntities([]);\n if (checked) {\n onChange({\n key: 'entities',\n value: [...starredEntitiesApi.starredEntities],\n });\n } else {\n onChange({ key: 'entities', value: [] });\n }\n },\n [onChange, starredEntitiesApi.starredEntities],\n );\n\n const handleOwnedEntities = useCallback(\n (checked: boolean) => {\n setOwnedEntities(checked);\n setEntities([]);\n if (checked) {\n onChange([\n { key: 'entities', value: ownedEntityRefs },\n { key: 'entitiesRelation', value: 'or' },\n ]);\n } else {\n onChange([\n { key: 'entities', value: [] },\n { key: 'entitiesRelation', value: 'and' },\n ]);\n }\n },\n [onChange, ownedEntityRefs],\n );\n\n useEffect(() => {\n if (filters.entities) {\n catalogApi\n .getEntitiesByRefs({\n entityRefs: filters.entities,\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n })\n .then(data => {\n setEntities(compact(data.items));\n });\n }\n }, [catalogApi, filters.entities]);\n\n const postFilters = isPostFilters(filters);\n const answerFilters = isAnswerFilters(filters);\n const collectionFilters = isCollectionFilters(filters);\n\n const showBottomSection =\n mode !== 'tags' && mode !== 'entities' && mode !== 'users';\n\n return (\n <Box className={styles.root}>\n <Grid\n container\n spacing={3}\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n >\n {(postFilters || answerFilters) && (\n <Grid item xs={12} md={4}>\n <FormGroup>\n <FormLabel id=\"qeta-filter-quick\" className={styles.label}>\n <FilterListIcon />\n {t('filterPanel.quickFilters.label')}\n </FormLabel>\n {postFilters && type === 'question' && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"noAnswers\"\n onChange={handleChange}\n checked={filters.noAnswers === 'true'}\n />\n }\n label={t('filterPanel.noAnswers.label')}\n />\n )}\n {postFilters && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"status\"\n onChange={e => {\n const newStatus = e.target.checked\n ? 'draft'\n : undefined;\n handleChange({\n target: { name: 'status', value: newStatus },\n });\n }}\n checked={filters.status === 'draft'}\n />\n }\n label={t('filterPanel.drafts.label')}\n />\n )}\n {(postFilters || answerFilters) && type === 'question' && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"noCorrectAnswer\"\n checked={filters.noCorrectAnswer === 'true'}\n onChange={handleChange}\n />\n }\n label={t('filterPanel.noCorrectAnswers.label')}\n />\n )}\n {(postFilters || answerFilters) && type !== 'link' && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"noVotes\"\n checked={filters.noVotes === 'true'}\n onChange={handleChange}\n />\n }\n label={t('filterPanel.noVotes.label')}\n />\n )}\n {starredEntitiesApi.starredEntities.size > 0 && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"starredEntities\"\n onChange={e => handleStarredEntities(e.target.checked)}\n checked={starredEntities}\n />\n }\n label={t('filterPanel.starredEntities.label')}\n />\n )}\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"ownedEntities\"\n onChange={e => handleOwnedEntities(e.target.checked)}\n checked={ownedEntities}\n />\n }\n label={t('filterPanel.ownedEntities.label')}\n />\n </FormGroup>\n </Grid>\n )}\n <Grid item xs={12} md={5}>\n <FormControl component=\"fieldset\" style={{ width: '100%' }}>\n <FormLabel id=\"qeta-filter-order-by\" className={styles.label}>\n <SortIcon />\n {t('filterPanel.orderBy.label')}\n </FormLabel>\n <RadioGroup\n aria-labelledby=\"qeta-filter-order-by\"\n name=\"orderBy\"\n value={filters.orderBy}\n onChange={handleChange}\n style={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '0 1em',\n }}\n >\n {postFilters &&\n filters.collectionId !== undefined &&\n radioSelect('rank', t('filterPanel.orderBy.rank'))}\n {mode !== 'users' &&\n mode !== 'tags' &&\n mode !== 'entities' &&\n radioSelect('created', t('filterPanel.orderBy.created'))}\n {(postFilters || collectionFilters) &&\n mode !== 'tags' &&\n mode !== 'entities' &&\n mode !== 'users' &&\n radioSelect('title', t('filterPanel.orderBy.title'))}\n {postFilters &&\n type !== 'link' &&\n radioSelect('views', t('filterPanel.orderBy.views'))}\n {(postFilters || answerFilters) &&\n radioSelect(\n 'score',\n type !== 'link'\n ? t('filterPanel.orderBy.score')\n : t('filterPanel.orderBy.clicks'),\n )}\n {postFilters &&\n radioSelect('trend', t('filterPanel.orderBy.trend'))}\n {postFilters &&\n type === 'question' &&\n radioSelect('answersCount', t('filterPanel.orderBy.answers'))}\n {(postFilters || answerFilters) &&\n radioSelect('updated', t('filterPanel.orderBy.updated'))}\n\n {mode === 'tags' &&\n radioSelect('tag', t('filterPanel.orderBy.tag'))}\n {mode === 'entities' &&\n radioSelect('entityRef', t('filterPanel.orderBy.entityRef'))}\n {mode === 'users' &&\n radioSelect('userRef', t('filterPanel.orderBy.user'))}\n\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect('postsCount', t('filterPanel.orderBy.posts'))}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect(\n 'questionsCount',\n t('filterPanel.orderBy.questions'),\n )}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect('articlesCount', t('filterPanel.orderBy.articles'))}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect('linksCount', t('filterPanel.orderBy.links'))}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'users' ||\n mode === 'collections') &&\n radioSelect(\n 'followerCount',\n t('filterPanel.orderBy.followers'),\n )}\n\n {mode === 'users' &&\n radioSelect('totalPosts', t('filterPanel.orderBy.posts'))}\n {mode === 'users' &&\n radioSelect(\n 'totalQuestions',\n t('filterPanel.orderBy.questions'),\n )}\n {mode === 'users' &&\n radioSelect('totalAnswers', t('filterPanel.orderBy.answers'))}\n {mode === 'users' &&\n radioSelect('totalArticles', t('filterPanel.orderBy.articles'))}\n {mode === 'users' &&\n radioSelect('totalLinks', t('filterPanel.orderBy.links'))}\n {mode === 'users' &&\n radioSelect('totalViews', t('filterPanel.orderBy.views'))}\n {mode === 'users' &&\n radioSelect('totalVotes', t('filterPanel.orderBy.votes'))}\n {mode === 'users' &&\n radioSelect('reputation', t('filterPanel.orderBy.reputation'))}\n </RadioGroup>\n </FormControl>\n </Grid>\n <Grid item xs={12} md={3}>\n <FormControl component=\"fieldset\">\n <FormLabel id=\"qeta-filter-order\" className={styles.label}>\n <SwapVertIcon />\n {t('filterPanel.order.label')}\n </FormLabel>\n <RadioGroup\n aria-labelledby=\"qeta-filter-order\"\n name=\"order\"\n value={filters.order}\n onChange={handleChange}\n >\n {radioSelect('desc', t('filterPanel.order.desc'))}\n {radioSelect('asc', t('filterPanel.order.asc'))}\n </RadioGroup>\n </FormControl>\n </Grid>\n </Grid>\n {showBottomSection && (\n <>\n <Box marginY=\"24px\">\n <Divider />\n </Box>\n <Box marginBottom=\"1em\">\n <FormLabel className={styles.label}>\n <TuneIcon />\n {t('filterPanel.filters.label')}\n </FormLabel>\n </Box>\n <Grid\n container\n spacing={2}\n alignItems=\"flex-start\"\n justifyContent=\"flex-start\"\n >\n <Grid item xs={12} md={4}>\n <DateRangeFilter\n value={filters.dateRange}\n onChange={val => onChange({ key: 'dateRange', value: val })}\n />\n </Grid>\n {showEntityFilter && (\n <Grid item xs={12} md={4}>\n <Grid container alignItems=\"center\">\n <Grid item xs>\n <EntitiesInput\n disabled={starredEntities || ownedEntities}\n style={{ width: '100%' }}\n onChange={(newEntities?: Entity[]) => {\n const entityRefs = (newEntities ?? []).map(e =>\n stringifyEntityRef(e),\n );\n handleChange({\n target: { name: 'entities', value: entityRefs },\n });\n setEntities(newEntities);\n }}\n value={entities}\n useOnlyUsedEntities\n hideHelpText\n />\n </Grid>\n {entities && entities?.length > 1 && (\n <Grid item>\n <Tooltip\n title={\n filters.entitiesRelation === 'or'\n ? t('filterPanel.toggleEntityRelation.and')\n : t('filterPanel.toggleEntityRelation.or')\n }\n >\n <IconButton\n disabled={starredEntities || ownedEntities}\n onClick={() => {\n if (filters.entitiesRelation === 'or') {\n onChange({\n key: 'entitiesRelation',\n value: 'and',\n });\n } else {\n onChange({\n key: 'entitiesRelation',\n value: 'or',\n });\n }\n }}\n >\n {filters.entitiesRelation === 'or' ? (\n <AdjustIcon />\n ) : (\n <FiberManualRecordIcon />\n )}\n </IconButton>\n </Tooltip>\n </Grid>\n )}\n </Grid>\n </Grid>\n )}\n {showTagFilter && (\n <Grid item xs={12} md={4}>\n <Grid container alignItems=\"center\">\n <Grid item xs>\n <TagInput\n style={{ width: '100%' }}\n onChange={(newTags: string[]) =>\n onChange({ key: 'tags', value: newTags })\n }\n value={filters.tags}\n hideHelpText\n allowCreate={false}\n />\n </Grid>\n {filters.tags && filters.tags?.length > 1 && (\n <Grid item>\n <Tooltip\n title={\n filters.tagsRelation === 'or'\n ? t('filterPanel.toggleTagRelation.and')\n : t('filterPanel.toggleTagRelation.or')\n }\n >\n <IconButton\n onClick={() => {\n if (filters.tagsRelation === 'or') {\n onChange({ key: 'tagsRelation', value: 'and' });\n } else {\n onChange({ key: 'tagsRelation', value: 'or' });\n }\n }}\n >\n {filters.tagsRelation === 'or' ? (\n <AdjustIcon />\n ) : (\n <FiberManualRecordIcon />\n )}\n </IconButton>\n </Tooltip>\n </Grid>\n )}\n </Grid>\n </Grid>\n )}\n </Grid>\n </>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAqCA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAe,KAAA,KAAkB;AACpD,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA,kBAAS,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,CAAA;AAAA,MAC7B;AAAA;AAAA,GACF;AAEJ,CAAA;AAEO,MAAM,UAAA,GAAa;AAAA,EACxB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AA0FA,SAAS,cAAc,OAAA,EAA0C;AAC/D,EAAA,OAAQ,QAAwB,SAAA,KAAc,MAAA;AAChD;AAEA,SAAS,gBAAgB,OAAA,EAA4C;AACnE,EAAA,OACG,OAAA,CAA0B,OAAA,KAAY,MAAA,IACtC,OAAA,CAAwB,SAAA,KAAc,MAAA;AAE3C;AAEA,SAAS,oBAAoB,OAAA,EAAgD;AAC3E,EAAA,OAAQ,QAAwB,SAAA,KAAc,MAAA;AAChD;AAsBA,MAAM,SAAA,GAAY,UAAA;AAAA,EAChB,CAAA,KAAA,MAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAW,GAAA;AAAA,MACX,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,MAC1C,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,MAC1B,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW;AAAA,KAC5C;AAAA,IACA,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,aAAA,EAAe,WAAA;AAAA,MACf,QAAA,EAAU,SAAA;AAAA,MACV,UAAA,EAAY,MAAA;AAAA,MACZ,YAAA,EAAc,QAAA;AAAA,MACd,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,MAC1B,SAAA,EAAW;AAAA,QACT,WAAA,EAAa,QAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF,CAAA;AAAA,EACA,EAAE,MAAM,iBAAA;AACV,CAAA;AAEO,MAAM,WAAA,GAAc,CAAoB,KAAA,KAA+B;AAC5E,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA,GAAmB,IAAA;AAAA,IACnB,aAAA,GAAgB,IAAA;AAAA,IAChB,IAAA;AAAA,IACA,IAAA,GAAO;AAAA,GACT,GAAI,KAAA;AACJ,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAA+B,MAAS,CAAA;AACxE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AACnE,EAAA,MAAM,qBAAqB,kBAAA,EAAmB;AAC9C,EAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAA,EAAgB;AACxD,EAAA,MAAM,cAAA,GAAiB,OAAO,KAAK,CAAA;AAGnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAEzB,IAAA,MAAM,UAAuB,EAAC;AAC9B,IAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AACnC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AACA,MAAA,IAAI,UAAA,CAAW,QAAA,CAAS,GAAgB,CAAA,EAAG;AACzC,QAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,UAAA,EAAY;AACxC,UAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAqB,KAAA,EAAO,MAAM,KAAA,CAAM,GAAG,GAAG,CAAA;AAAA,QAC/D,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAqB,KAAA,EAAO,CAAA;AAAA,QAC7C;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,oBAAA,EAAqB,CAAE,IAAA,CAAK,CAAA,QAAA,KAAY;AAClD,MAAA,UAAA,CACG,WAAA,CAAY;AAAA,QACX,MAAA,EAAQ;AAAA,UACN,cAAc,QAAA,CAAS;AAAA,SACzB;AAAA,QACA,MAAA,EAAQ,CAAC,MAAA,EAAQ,eAAA,EAAiB,oBAAoB;AAAA,OACvD,CAAA,CACA,IAAA,CAAK,CAAA,IAAA,KAAQ;AACZ,QAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAA,KAAK,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAC5D,QAAA,kBAAA,CAAmB,UAAU,CAAA;AAAA,MAC/B,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,UAAA,EAAY,WAAW,CAAC,CAAA;AAE5B,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAOhB;AACJ,IAAA,IAAI,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA;AACzB,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACpC,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,OAAA,GAAU,MAAA,GAAS,OAAA;AAAA,IAC1C;AAGA,IAAA,eAAA,CAAgB,CAAA,IAAA,KAAQ;AACtB,MAAA,MAAM,SAAA,GAAY,IAAI,eAAA,CAAgB,IAAI,CAAA;AAC1C,MAAA,IACE,CAAC,KAAA,IACD,KAAA,KAAU,OAAA,IACT,KAAA,CAAM,QAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA,EAC1C;AACA,QAAA,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,MACpC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,QAAA,SAAA,CAAU,IAAI,KAAA,CAAM,MAAA,CAAO,MAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,MAClD,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,SAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,EAAE,GAAA,EAAK,KAAA,CAAM,MAAA,CAAO,IAAA,EAAiB,OAAO,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,WAAA;AAAA,IAC5B,CAAC,OAAA,KAAqB;AACpB,MAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS;AAAA,UACP,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,CAAC,GAAG,kBAAA,CAAmB,eAAe;AAAA,SAC9C,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,IAAI,CAAA;AAAA,MACzC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,kBAAA,CAAmB,eAAe;AAAA,GAC/C;AAEA,EAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,IAC1B,CAAC,OAAA,KAAqB;AACpB,MAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS;AAAA,UACP,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,eAAA,EAAgB;AAAA,UAC1C,EAAE,GAAA,EAAK,kBAAA,EAAoB,KAAA,EAAO,IAAA;AAAK,SACxC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,QAAA,CAAS;AAAA,UACP,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,EAAC,EAAE;AAAA,UAC7B,EAAE,GAAA,EAAK,kBAAA,EAAoB,KAAA,EAAO,KAAA;AAAM,SACzC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU,eAAe;AAAA,GAC5B;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,UAAA,CACG,iBAAA,CAAkB;AAAA,QACjB,YAAY,OAAA,CAAQ,QAAA;AAAA,QACpB,MAAA,EAAQ,CAAC,MAAA,EAAQ,eAAA,EAAiB,oBAAoB;AAAA,OACvD,CAAA,CACA,IAAA,CAAK,CAAA,IAAA,KAAQ;AACZ,QAAA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACjC,CAAC,CAAA;AAAA,IACL;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAEjC,EAAA,MAAM,WAAA,GAAc,cAAc,OAAO,CAAA;AACzC,EAAA,MAAM,aAAA,GAAgB,gBAAgB,OAAO,CAAA;AAC7C,EAAA,MAAM,iBAAA,GAAoB,oBAAoB,OAAO,CAAA;AAErD,EAAA,MAAM,iBAAA,GACJ,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,cAAc,IAAA,KAAS,OAAA;AAErD,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,IAAA,EACrB,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,CAAA;AAAA,QACT,UAAA,EAAW,YAAA;AAAA,QACX,cAAA,EAAe,eAAA;AAAA,QAEb,QAAA,EAAA;AAAA,UAAA,CAAA,WAAA,IAAe,aAAA,qBACf,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,mBAAA,EAAoB,SAAA,EAAW,OAAO,KAAA,EAClD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA;AAAA,cACf,EAAE,gCAAgC;AAAA,aAAA,EACrC,CAAA;AAAA,YACC,WAAA,IAAe,SAAS,UAAA,oBACvB,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,WAAA;AAAA,oBACL,QAAA,EAAU,YAAA;AAAA,oBACV,OAAA,EAAS,QAAQ,SAAA,KAAc;AAAA;AAAA,iBACjC;AAAA,gBAEF,KAAA,EAAO,EAAE,6BAA6B;AAAA;AAAA,aACxC;AAAA,YAED,WAAA,oBACC,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,QAAA;AAAA,oBACL,UAAU,CAAA,CAAA,KAAK;AACb,sBAAA,MAAM,SAAA,GAAY,CAAA,CAAE,MAAA,CAAO,OAAA,GACvB,OAAA,GACA,MAAA;AACJ,sBAAA,YAAA,CAAa;AAAA,wBACX,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,SAAA;AAAU,uBAC5C,CAAA;AAAA,oBACH,CAAA;AAAA,oBACA,OAAA,EAAS,QAAQ,MAAA,KAAW;AAAA;AAAA,iBAC9B;AAAA,gBAEF,KAAA,EAAO,EAAE,0BAA0B;AAAA;AAAA,aACrC;AAAA,YAAA,CAEA,WAAA,IAAe,aAAA,KAAkB,IAAA,KAAS,UAAA,oBAC1C,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,iBAAA;AAAA,oBACL,OAAA,EAAS,QAAQ,eAAA,KAAoB,MAAA;AAAA,oBACrC,QAAA,EAAU;AAAA;AAAA,iBACZ;AAAA,gBAEF,KAAA,EAAO,EAAE,oCAAoC;AAAA;AAAA,aAC/C;AAAA,YAAA,CAEA,WAAA,IAAe,aAAA,KAAkB,IAAA,KAAS,MAAA,oBAC1C,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,SAAA;AAAA,oBACL,OAAA,EAAS,QAAQ,OAAA,KAAY,MAAA;AAAA,oBAC7B,QAAA,EAAU;AAAA;AAAA,iBACZ;AAAA,gBAEF,KAAA,EAAO,EAAE,2BAA2B;AAAA;AAAA,aACtC;AAAA,YAED,kBAAA,CAAmB,eAAA,CAAgB,IAAA,GAAO,CAAA,oBACzC,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,iBAAA;AAAA,oBACL,QAAA,EAAU,CAAA,CAAA,KAAK,qBAAA,CAAsB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,oBACrD,OAAA,EAAS;AAAA;AAAA,iBACX;AAAA,gBAEF,KAAA,EAAO,EAAE,mCAAmC;AAAA;AAAA,aAC9C;AAAA,4BAEF,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,eAAA;AAAA,oBACL,QAAA,EAAU,CAAA,CAAA,KAAK,mBAAA,CAAoB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,oBACnD,OAAA,EAAS;AAAA;AAAA,iBACX;AAAA,gBAEF,KAAA,EAAO,EAAE,iCAAiC;AAAA;AAAA;AAC5C,WAAA,EACF,CAAA,EACF,CAAA;AAAA,8BAED,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,IAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,WAAU,UAAA,EAAW,KAAA,EAAO,EAAE,KAAA,EAAO,QAAO,EACvD,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,sBAAA,EAAuB,SAAA,EAAW,OAAO,KAAA,EACrD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA;AAAA,cACT,EAAE,2BAA2B;AAAA,aAAA,EAChC,CAAA;AAAA,4BACA,IAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,iBAAA,EAAgB,sBAAA;AAAA,gBAChB,IAAA,EAAK,SAAA;AAAA,gBACL,OAAO,OAAA,CAAQ,OAAA;AAAA,gBACf,QAAA,EAAU,YAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,OAAA,EAAS,MAAA;AAAA,kBACT,mBAAA,EAAqB,SAAA;AAAA,kBACrB,GAAA,EAAK;AAAA,iBACP;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,WAAA,IACC,QAAQ,YAAA,KAAiB,MAAA,IACzB,YAAY,MAAA,EAAQ,CAAA,CAAE,0BAA0B,CAAC,CAAA;AAAA,kBAClD,IAAA,KAAS,OAAA,IACR,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,cACT,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAAA,CACvD,WAAA,IAAe,iBAAA,KACf,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,OAAA,IACT,WAAA,CAAY,OAAA,EAAS,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACpD,eACC,IAAA,KAAS,MAAA,IACT,YAAY,OAAA,EAAS,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBAAA,CACnD,eAAe,aAAA,KACf,WAAA;AAAA,oBACE,OAAA;AAAA,oBACA,SAAS,MAAA,GACL,CAAA,CAAE,2BAA2B,CAAA,GAC7B,EAAE,4BAA4B;AAAA,mBACpC;AAAA,kBACD,WAAA,IACC,WAAA,CAAY,OAAA,EAAS,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACpD,eACC,IAAA,KAAS,UAAA,IACT,YAAY,cAAA,EAAgB,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAAA,CAC5D,eAAe,aAAA,KACf,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAExD,SAAS,MAAA,IACR,WAAA,CAAY,KAAA,EAAO,CAAA,CAAE,yBAAyB,CAAC,CAAA;AAAA,kBAChD,SAAS,UAAA,IACR,WAAA,CAAY,WAAA,EAAa,CAAA,CAAE,+BAA+B,CAAC,CAAA;AAAA,kBAC5D,SAAS,OAAA,IACR,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,0BAA0B,CAAC,CAAA;AAAA,kBAAA,CAEpD,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,kBACT,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBAAA,CACxD,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,SAAS,aAAA,KACT,WAAA;AAAA,oBACE,gBAAA;AAAA,oBACA,EAAE,+BAA+B;AAAA,mBACnC;AAAA,kBAAA,CACA,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,kBACT,WAAA,CAAY,eAAA,EAAiB,CAAA,CAAE,8BAA8B,CAAC,CAAA;AAAA,kBAAA,CAC9D,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,kBACT,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBAAA,CACxD,SAAS,MAAA,IACT,IAAA,KAAS,cACT,IAAA,KAAS,OAAA,IACT,SAAS,aAAA,KACT,WAAA;AAAA,oBACE,eAAA;AAAA,oBACA,EAAE,+BAA+B;AAAA,mBACnC;AAAA,kBAED,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA;AAAA,oBACE,gBAAA;AAAA,oBACA,EAAE,+BAA+B;AAAA,mBACnC;AAAA,kBACD,SAAS,OAAA,IACR,WAAA,CAAY,cAAA,EAAgB,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAC7D,SAAS,OAAA,IACR,WAAA,CAAY,eAAA,EAAiB,CAAA,CAAE,8BAA8B,CAAC,CAAA;AAAA,kBAC/D,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,gCAAgC,CAAC;AAAA;AAAA;AAAA;AACjE,WAAA,EACF,CAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,UAAA,EACrB,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,mBAAA,EAAoB,SAAA,EAAW,OAAO,KAAA,EAClD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,YAAA,EAAA,EAAa,CAAA;AAAA,cACb,EAAE,yBAAyB;AAAA,aAAA,EAC9B,CAAA;AAAA,4BACA,IAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,iBAAA,EAAgB,mBAAA;AAAA,gBAChB,IAAA,EAAK,OAAA;AAAA,gBACL,OAAO,OAAA,CAAQ,KAAA;AAAA,gBACf,QAAA,EAAU,YAAA;AAAA,gBAET,QAAA,EAAA;AAAA,kBAAA,WAAA,CAAY,MAAA,EAAQ,CAAA,CAAE,wBAAwB,CAAC,CAAA;AAAA,kBAC/C,WAAA,CAAY,KAAA,EAAO,CAAA,CAAE,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAChD,WAAA,EACF,CAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,IACC,qCACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EACX,QAAA,kBAAA,GAAA,CAAC,WAAQ,CAAA,EACX,CAAA;AAAA,sBACA,GAAA,CAAC,OAAI,YAAA,EAAa,KAAA,EAChB,+BAAC,SAAA,EAAA,EAAU,SAAA,EAAW,OAAO,KAAA,EAC3B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA;AAAA,QACT,EAAE,2BAA2B;AAAA,OAAA,EAChC,CAAA,EACF,CAAA;AAAA,sBACA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,CAAA;AAAA,UACT,UAAA,EAAW,YAAA;AAAA,UACX,cAAA,EAAe,YAAA;AAAA,UAEf,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,OAAO,OAAA,CAAQ,SAAA;AAAA,gBACf,QAAA,EAAU,SAAO,QAAA,CAAS,EAAE,KAAK,WAAA,EAAa,KAAA,EAAO,KAAK;AAAA;AAAA,aAC5D,EACF,CAAA;AAAA,YACC,gBAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,MAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,YAAW,QAAA,EACzB,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAE,IAAA,EACX,QAAA,kBAAA,GAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,eAAA,IAAmB,aAAA;AAAA,kBAC7B,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,kBACvB,QAAA,EAAU,CAAC,WAAA,KAA2B;AACpC,oBAAA,MAAM,UAAA,GAAA,CAAc,WAAA,IAAe,EAAC,EAAG,GAAA;AAAA,sBAAI,CAAA,CAAA,KACzC,mBAAmB,CAAC;AAAA,qBACtB;AACA,oBAAA,YAAA,CAAa;AAAA,sBACX,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,UAAA;AAAW,qBAC/C,CAAA;AACD,oBAAA,WAAA,CAAY,WAAW,CAAA;AAAA,kBACzB,CAAA;AAAA,kBACA,KAAA,EAAO,QAAA;AAAA,kBACP,mBAAA,EAAmB,IAAA;AAAA,kBACnB,YAAA,EAAY;AAAA;AAAA,eACd,EACF,CAAA;AAAA,cACC,YAAY,QAAA,EAAU,MAAA,GAAS,qBAC9B,GAAA,CAAC,IAAA,EAAA,EAAK,MAAI,IAAA,EACR,QAAA,kBAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EACE,QAAQ,gBAAA,KAAqB,IAAA,GACzB,EAAE,sCAAsC,CAAA,GACxC,EAAE,qCAAqC,CAAA;AAAA,kBAG7C,QAAA,kBAAA,GAAA;AAAA,oBAAC,UAAA;AAAA,oBAAA;AAAA,sBACC,UAAU,eAAA,IAAmB,aAAA;AAAA,sBAC7B,SAAS,MAAM;AACb,wBAAA,IAAI,OAAA,CAAQ,qBAAqB,IAAA,EAAM;AACrC,0BAAA,QAAA,CAAS;AAAA,4BACP,GAAA,EAAK,kBAAA;AAAA,4BACL,KAAA,EAAO;AAAA,2BACR,CAAA;AAAA,wBACH,CAAA,MAAO;AACL,0BAAA,QAAA,CAAS;AAAA,4BACP,GAAA,EAAK,kBAAA;AAAA,4BACL,KAAA,EAAO;AAAA,2BACR,CAAA;AAAA,wBACH;AAAA,sBACF,CAAA;AAAA,sBAEC,kBAAQ,gBAAA,KAAqB,IAAA,uBAC3B,UAAA,EAAA,EAAW,CAAA,uBAEX,qBAAA,EAAA,EAAsB;AAAA;AAAA;AAE3B;AAAA,eACF,EACF;AAAA,aAAA,EAEJ,CAAA,EACF,CAAA;AAAA,YAED,aAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,MAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,YAAW,QAAA,EACzB,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAE,IAAA,EACX,QAAA,kBAAA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,kBACvB,QAAA,EAAU,CAAC,OAAA,KACT,QAAA,CAAS,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,kBAE1C,OAAO,OAAA,CAAQ,IAAA;AAAA,kBACf,YAAA,EAAY,IAAA;AAAA,kBACZ,WAAA,EAAa;AAAA;AAAA,eACf,EACF,CAAA;AAAA,cACC,OAAA,CAAQ,QAAQ,OAAA,CAAQ,IAAA,EAAM,SAAS,CAAA,oBACtC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EACE,QAAQ,YAAA,KAAiB,IAAA,GACrB,EAAE,mCAAmC,CAAA,GACrC,EAAE,kCAAkC,CAAA;AAAA,kBAG1C,QAAA,kBAAA,GAAA;AAAA,oBAAC,UAAA;AAAA,oBAAA;AAAA,sBACC,SAAS,MAAM;AACb,wBAAA,IAAI,OAAA,CAAQ,iBAAiB,IAAA,EAAM;AACjC,0BAAA,QAAA,CAAS,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,OAAO,CAAA;AAAA,wBAChD,CAAA,MAAO;AACL,0BAAA,QAAA,CAAS,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,MAAM,CAAA;AAAA,wBAC/C;AAAA,sBACF,CAAA;AAAA,sBAEC,kBAAQ,YAAA,KAAiB,IAAA,uBACvB,UAAA,EAAA,EAAW,CAAA,uBAEX,qBAAA,EAAA,EAAsB;AAAA;AAAA;AAE3B;AAAA,eACF,EACF;AAAA,aAAA,EAEJ,CAAA,EACF;AAAA;AAAA;AAAA;AAEJ,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"FilterPanel.esm.js","sources":["../../../src/components/FilterPanel/FilterPanel.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { DateRangeFilter } from './DateRangeFilter';\nimport { PostStatus, PostType } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\nimport { EntitiesInput } from '../PostForm/EntitiesInput';\nimport { TagInput } from '../PostForm/TagInput';\nimport {\n catalogApiRef,\n useStarredEntities,\n} from '@backstage/plugin-catalog-react';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n Box,\n Checkbox,\n Divider,\n FormControl,\n FormControlLabel,\n FormGroup,\n FormLabel,\n Grid,\n IconButton,\n makeStyles,\n Radio,\n RadioGroup,\n Tooltip,\n} from '@material-ui/core';\nimport AdjustIcon from '@material-ui/icons/Adjust';\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport SortIcon from '@material-ui/icons/Sort';\nimport SwapVertIcon from '@material-ui/icons/SwapVert';\nimport TuneIcon from '@material-ui/icons/Tune';\nimport { compact } from 'lodash';\n\nconst radioSelect = (value: string, label: string) => {\n return (\n <FormControlLabel\n value={value}\n control={<Radio size=\"small\" />}\n label={label}\n />\n );\n};\n\nexport const filterKeys = [\n 'orderBy',\n 'order',\n 'noAnswers',\n 'noCorrectAnswer',\n 'noVotes',\n 'dateRange',\n 'tags',\n 'tagsRelation',\n 'entities',\n 'entitiesRelation',\n 'status',\n] as const;\nexport type FilterKey = (typeof filterKeys)[number];\n\nexport type Filters = {\n order?: 'asc' | 'desc';\n orderBy?: string;\n searchQuery?: string;\n entities?: string[];\n entitiesRelation?: 'and' | 'or';\n entity?: string;\n tags?: string[];\n tagsRelation?: 'and' | 'or';\n dateRange?: string;\n status?: PostStatus;\n};\n\nexport type PostFilters = Filters & {\n orderBy?:\n | 'rank'\n | 'created'\n | 'title'\n | 'views'\n | 'score'\n | 'trend'\n | 'answersCount'\n | 'updated';\n noAnswers?: 'true' | 'false';\n noCorrectAnswer?: 'true' | 'false';\n noVotes?: 'true' | 'false';\n collectionId?: number;\n type?: PostType;\n author?: string;\n entities?: string[];\n tags?: string[];\n tagsRelation?: 'and' | 'or';\n entitiesRelation?: 'and' | 'or';\n status?: PostStatus;\n};\n\nexport type AnswerFilters = Filters & {\n orderBy?: 'created' | 'score' | 'updated';\n noVotes?: 'true' | 'false';\n noCorrectAnswer?: 'true' | 'false';\n};\n\nexport type CollectionFilters = Filters & {\n orderBy?:\n | 'created'\n | 'title'\n | 'postsCount'\n | 'questionsCount'\n | 'articlesCount'\n | 'linksCount'\n | 'followerCount';\n};\n\nexport type TagFilters = Filters & {\n orderBy?:\n | 'postsCount'\n | 'questionsCount'\n | 'articlesCount'\n | 'linksCount'\n | 'followerCount'\n | 'tag';\n};\n\nexport type EntityFilters = Filters & {\n orderBy?:\n | 'postsCount'\n | 'questionsCount'\n | 'articlesCount'\n | 'linksCount'\n | 'followerCount'\n | 'entityRef';\n};\n\nexport type UserFilters = Filters & {\n orderBy?:\n | 'totalPosts'\n | 'totalQuestions'\n | 'totalAnswers'\n | 'totalArticles'\n | 'totalLinks'\n | 'totalViews'\n | 'totalVotes'\n | 'followerCount'\n | 'reputation'\n | 'userRef';\n};\n\nfunction isPostFilters(filters: Filters): filters is PostFilters {\n return (filters as PostFilters).noAnswers !== undefined;\n}\n\nfunction isAnswerFilters(filters: Filters): filters is AnswerFilters {\n return (\n (filters as AnswerFilters).noVotes !== undefined &&\n (filters as PostFilters).noAnswers === undefined\n );\n}\n\nfunction isCollectionFilters(filters: Filters): filters is CollectionFilters {\n return (filters as PostFilters).noAnswers === undefined;\n}\n\nexport type Change<T extends Filters> = {\n key: keyof T;\n value?: string | string[];\n};\n\nexport interface CommonFilterPanelProps {\n showEntityFilter?: boolean;\n showTagFilter?: boolean;\n answerFilters?: boolean;\n type?: PostType;\n mode?: 'posts' | 'collections' | 'tags' | 'entities' | 'users';\n}\n\nexport interface FilterPanelProps<\n T extends Filters,\n> extends CommonFilterPanelProps {\n onChange: (changes: Change<T> | Change<T>[]) => void;\n filters: T;\n}\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n padding: '1.5em',\n marginTop: '0',\n marginBottom: '2em',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.background.paper,\n },\n label: {\n display: 'flex',\n alignItems: 'center',\n textTransform: 'uppercase',\n fontSize: '0.75rem',\n fontWeight: 'bold',\n marginBottom: '0.75em',\n color: theme.palette.text.secondary,\n '& > svg': {\n marginRight: '0.25em',\n fontSize: '1.1rem',\n },\n },\n }),\n { name: 'QetaFilterPanel' },\n);\n\nexport const FilterPanel = <T extends Filters>(props: FilterPanelProps<T>) => {\n const {\n onChange,\n filters,\n showEntityFilter = true,\n showTagFilter = true,\n type,\n mode = 'posts',\n } = props;\n const { t } = useTranslationRef(qetaTranslationRef);\n const [entities, setEntities] = useState<Entity[] | undefined>(undefined);\n const [starredEntities, setStarredEntities] = useState(false);\n const [ownedEntities, setOwnedEntities] = useState(false);\n const [ownedEntityRefs, setOwnedEntityRefs] = useState<string[]>([]);\n const starredEntitiesApi = useStarredEntities();\n const catalogApi = useApi(catalogApiRef);\n const identityApi = useApi(identityApiRef);\n const styles = useStyles();\n const [searchParams, setSearchParams] = useSearchParams();\n const initializedRef = useRef(false);\n\n // Initialize filters from URL parameters only once\n useEffect(() => {\n if (initializedRef.current) {\n return;\n }\n initializedRef.current = true;\n\n const changes: Change<T>[] = [];\n searchParams.forEach((value, key) => {\n if (!value) {\n return;\n }\n if (filterKeys.includes(key as FilterKey)) {\n if (key === 'tags' || key === 'entities') {\n changes.push({ key: key as keyof T, value: value.split(',') });\n } else {\n changes.push({ key: key as keyof T, value });\n }\n }\n });\n if (changes.length > 0) {\n onChange(changes);\n }\n }, [searchParams, onChange]);\n\n // Handle owned entities\n useEffect(() => {\n identityApi.getBackstageIdentity().then(identity => {\n catalogApi\n .queryEntities({\n query: {\n 'spec.owner': { $in: identity.ownershipEntityRefs },\n },\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n })\n .then(data => {\n const entityRefs = data.items.map(e => stringifyEntityRef(e));\n setOwnedEntityRefs(entityRefs);\n });\n });\n }, [catalogApi, identityApi]);\n\n const handleChange = (event: {\n target: {\n value?: string | string[];\n type?: string;\n name: string;\n checked?: boolean;\n };\n }) => {\n let value = event.target.value;\n if (event.target.type === 'checkbox') {\n value = event.target.checked ? 'true' : 'false';\n }\n\n // Update URL parameters\n setSearchParams(prev => {\n const newParams = new URLSearchParams(prev);\n if (\n !value ||\n value === 'false' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n newParams.delete(event.target.name);\n } else if (Array.isArray(value)) {\n newParams.set(event.target.name, value.join(','));\n } else {\n newParams.set(event.target.name, value);\n }\n return newParams;\n });\n\n onChange({ key: event.target.name as keyof T, value });\n };\n\n const handleStarredEntities = useCallback(\n (checked: boolean) => {\n setStarredEntities(checked);\n setEntities([]);\n if (checked) {\n onChange({\n key: 'entities',\n value: [...starredEntitiesApi.starredEntities],\n });\n } else {\n onChange({ key: 'entities', value: [] });\n }\n },\n [onChange, starredEntitiesApi.starredEntities],\n );\n\n const handleOwnedEntities = useCallback(\n (checked: boolean) => {\n setOwnedEntities(checked);\n setEntities([]);\n if (checked) {\n onChange([\n { key: 'entities', value: ownedEntityRefs },\n { key: 'entitiesRelation', value: 'or' },\n ]);\n } else {\n onChange([\n { key: 'entities', value: [] },\n { key: 'entitiesRelation', value: 'and' },\n ]);\n }\n },\n [onChange, ownedEntityRefs],\n );\n\n useEffect(() => {\n if (filters.entities) {\n catalogApi\n .getEntitiesByRefs({\n entityRefs: filters.entities,\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n })\n .then(data => {\n setEntities(compact(data.items));\n });\n }\n }, [catalogApi, filters.entities]);\n\n const postFilters = isPostFilters(filters);\n const answerFilters = isAnswerFilters(filters);\n const collectionFilters = isCollectionFilters(filters);\n\n const showBottomSection =\n mode !== 'tags' && mode !== 'entities' && mode !== 'users';\n\n return (\n <Box className={styles.root}>\n <Grid\n container\n spacing={3}\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n >\n {(postFilters || answerFilters) && (\n <Grid item xs={12} md={4}>\n <FormGroup>\n <FormLabel id=\"qeta-filter-quick\" className={styles.label}>\n <FilterListIcon />\n {t('filterPanel.quickFilters.label')}\n </FormLabel>\n {postFilters && type === 'question' && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"noAnswers\"\n onChange={handleChange}\n checked={filters.noAnswers === 'true'}\n />\n }\n label={t('filterPanel.noAnswers.label')}\n />\n )}\n {postFilters && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"status\"\n onChange={e => {\n const newStatus = e.target.checked\n ? 'draft'\n : undefined;\n handleChange({\n target: { name: 'status', value: newStatus },\n });\n }}\n checked={filters.status === 'draft'}\n />\n }\n label={t('filterPanel.drafts.label')}\n />\n )}\n {(postFilters || answerFilters) && type === 'question' && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"noCorrectAnswer\"\n checked={filters.noCorrectAnswer === 'true'}\n onChange={handleChange}\n />\n }\n label={t('filterPanel.noCorrectAnswers.label')}\n />\n )}\n {(postFilters || answerFilters) && type !== 'link' && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"noVotes\"\n checked={filters.noVotes === 'true'}\n onChange={handleChange}\n />\n }\n label={t('filterPanel.noVotes.label')}\n />\n )}\n {starredEntitiesApi.starredEntities.size > 0 && (\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"starredEntities\"\n onChange={e => handleStarredEntities(e.target.checked)}\n checked={starredEntities}\n />\n }\n label={t('filterPanel.starredEntities.label')}\n />\n )}\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n name=\"ownedEntities\"\n onChange={e => handleOwnedEntities(e.target.checked)}\n checked={ownedEntities}\n />\n }\n label={t('filterPanel.ownedEntities.label')}\n />\n </FormGroup>\n </Grid>\n )}\n <Grid item xs={12} md={5}>\n <FormControl component=\"fieldset\" style={{ width: '100%' }}>\n <FormLabel id=\"qeta-filter-order-by\" className={styles.label}>\n <SortIcon />\n {t('filterPanel.orderBy.label')}\n </FormLabel>\n <RadioGroup\n aria-labelledby=\"qeta-filter-order-by\"\n name=\"orderBy\"\n value={filters.orderBy}\n onChange={handleChange}\n style={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '0 1em',\n }}\n >\n {postFilters &&\n filters.collectionId !== undefined &&\n radioSelect('rank', t('filterPanel.orderBy.rank'))}\n {mode !== 'users' &&\n mode !== 'tags' &&\n mode !== 'entities' &&\n radioSelect('created', t('filterPanel.orderBy.created'))}\n {(postFilters || collectionFilters) &&\n mode !== 'tags' &&\n mode !== 'entities' &&\n mode !== 'users' &&\n radioSelect('title', t('filterPanel.orderBy.title'))}\n {postFilters &&\n type !== 'link' &&\n radioSelect('views', t('filterPanel.orderBy.views'))}\n {(postFilters || answerFilters) &&\n radioSelect(\n 'score',\n type !== 'link'\n ? t('filterPanel.orderBy.score')\n : t('filterPanel.orderBy.clicks'),\n )}\n {postFilters &&\n radioSelect('trend', t('filterPanel.orderBy.trend'))}\n {postFilters &&\n type === 'question' &&\n radioSelect('answersCount', t('filterPanel.orderBy.answers'))}\n {(postFilters || answerFilters) &&\n radioSelect('updated', t('filterPanel.orderBy.updated'))}\n\n {mode === 'tags' &&\n radioSelect('tag', t('filterPanel.orderBy.tag'))}\n {mode === 'entities' &&\n radioSelect('entityRef', t('filterPanel.orderBy.entityRef'))}\n {mode === 'users' &&\n radioSelect('userRef', t('filterPanel.orderBy.user'))}\n\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect('postsCount', t('filterPanel.orderBy.posts'))}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect(\n 'questionsCount',\n t('filterPanel.orderBy.questions'),\n )}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect('articlesCount', t('filterPanel.orderBy.articles'))}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'collections') &&\n radioSelect('linksCount', t('filterPanel.orderBy.links'))}\n {(mode === 'tags' ||\n mode === 'entities' ||\n mode === 'users' ||\n mode === 'collections') &&\n radioSelect(\n 'followerCount',\n t('filterPanel.orderBy.followers'),\n )}\n\n {mode === 'users' &&\n radioSelect('totalPosts', t('filterPanel.orderBy.posts'))}\n {mode === 'users' &&\n radioSelect(\n 'totalQuestions',\n t('filterPanel.orderBy.questions'),\n )}\n {mode === 'users' &&\n radioSelect('totalAnswers', t('filterPanel.orderBy.answers'))}\n {mode === 'users' &&\n radioSelect('totalArticles', t('filterPanel.orderBy.articles'))}\n {mode === 'users' &&\n radioSelect('totalLinks', t('filterPanel.orderBy.links'))}\n {mode === 'users' &&\n radioSelect('totalViews', t('filterPanel.orderBy.views'))}\n {mode === 'users' &&\n radioSelect('totalVotes', t('filterPanel.orderBy.votes'))}\n {mode === 'users' &&\n radioSelect('reputation', t('filterPanel.orderBy.reputation'))}\n </RadioGroup>\n </FormControl>\n </Grid>\n <Grid item xs={12} md={3}>\n <FormControl component=\"fieldset\">\n <FormLabel id=\"qeta-filter-order\" className={styles.label}>\n <SwapVertIcon />\n {t('filterPanel.order.label')}\n </FormLabel>\n <RadioGroup\n aria-labelledby=\"qeta-filter-order\"\n name=\"order\"\n value={filters.order}\n onChange={handleChange}\n >\n {radioSelect('desc', t('filterPanel.order.desc'))}\n {radioSelect('asc', t('filterPanel.order.asc'))}\n </RadioGroup>\n </FormControl>\n </Grid>\n </Grid>\n {showBottomSection && (\n <>\n <Box marginY=\"24px\">\n <Divider />\n </Box>\n <Box marginBottom=\"1em\">\n <FormLabel className={styles.label}>\n <TuneIcon />\n {t('filterPanel.filters.label')}\n </FormLabel>\n </Box>\n <Grid\n container\n spacing={2}\n alignItems=\"flex-start\"\n justifyContent=\"flex-start\"\n >\n <Grid item xs={12} md={4}>\n <DateRangeFilter\n value={filters.dateRange}\n onChange={val => onChange({ key: 'dateRange', value: val })}\n />\n </Grid>\n {showEntityFilter && (\n <Grid item xs={12} md={4}>\n <Grid container alignItems=\"center\">\n <Grid item xs>\n <EntitiesInput\n disabled={starredEntities || ownedEntities}\n style={{ width: '100%' }}\n onChange={(newEntities?: Entity[]) => {\n const entityRefs = (newEntities ?? []).map(e =>\n stringifyEntityRef(e),\n );\n handleChange({\n target: { name: 'entities', value: entityRefs },\n });\n setEntities(newEntities);\n }}\n value={entities}\n useOnlyUsedEntities\n hideHelpText\n />\n </Grid>\n {entities && entities?.length > 1 && (\n <Grid item>\n <Tooltip\n title={\n filters.entitiesRelation === 'or'\n ? t('filterPanel.toggleEntityRelation.and')\n : t('filterPanel.toggleEntityRelation.or')\n }\n >\n <IconButton\n disabled={starredEntities || ownedEntities}\n onClick={() => {\n if (filters.entitiesRelation === 'or') {\n onChange({\n key: 'entitiesRelation',\n value: 'and',\n });\n } else {\n onChange({\n key: 'entitiesRelation',\n value: 'or',\n });\n }\n }}\n >\n {filters.entitiesRelation === 'or' ? (\n <AdjustIcon />\n ) : (\n <FiberManualRecordIcon />\n )}\n </IconButton>\n </Tooltip>\n </Grid>\n )}\n </Grid>\n </Grid>\n )}\n {showTagFilter && (\n <Grid item xs={12} md={4}>\n <Grid container alignItems=\"center\">\n <Grid item xs>\n <TagInput\n style={{ width: '100%' }}\n onChange={(newTags: string[]) =>\n onChange({ key: 'tags', value: newTags })\n }\n value={filters.tags}\n hideHelpText\n allowCreate={false}\n />\n </Grid>\n {filters.tags && filters.tags?.length > 1 && (\n <Grid item>\n <Tooltip\n title={\n filters.tagsRelation === 'or'\n ? t('filterPanel.toggleTagRelation.and')\n : t('filterPanel.toggleTagRelation.or')\n }\n >\n <IconButton\n onClick={() => {\n if (filters.tagsRelation === 'or') {\n onChange({ key: 'tagsRelation', value: 'and' });\n } else {\n onChange({ key: 'tagsRelation', value: 'or' });\n }\n }}\n >\n {filters.tagsRelation === 'or' ? (\n <AdjustIcon />\n ) : (\n <FiberManualRecordIcon />\n )}\n </IconButton>\n </Tooltip>\n </Grid>\n )}\n </Grid>\n </Grid>\n )}\n </Grid>\n </>\n )}\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAqCA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAe,KAAA,KAAkB;AACpD,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA,kBAAS,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAK,OAAA,EAAQ,CAAA;AAAA,MAC7B;AAAA;AAAA,GACF;AAEJ,CAAA;AAEO,MAAM,UAAA,GAAa;AAAA,EACxB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AA0FA,SAAS,cAAc,OAAA,EAA0C;AAC/D,EAAA,OAAQ,QAAwB,SAAA,KAAc,MAAA;AAChD;AAEA,SAAS,gBAAgB,OAAA,EAA4C;AACnE,EAAA,OACG,OAAA,CAA0B,OAAA,KAAY,MAAA,IACtC,OAAA,CAAwB,SAAA,KAAc,MAAA;AAE3C;AAEA,SAAS,oBAAoB,OAAA,EAAgD;AAC3E,EAAA,OAAQ,QAAwB,SAAA,KAAc,MAAA;AAChD;AAsBA,MAAM,SAAA,GAAY,UAAA;AAAA,EAChB,CAAA,KAAA,MAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAW,GAAA;AAAA,MACX,YAAA,EAAc,KAAA;AAAA,MACd,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,MAC1C,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,MAC1B,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW;AAAA,KAC5C;AAAA,IACA,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,aAAA,EAAe,WAAA;AAAA,MACf,QAAA,EAAU,SAAA;AAAA,MACV,UAAA,EAAY,MAAA;AAAA,MACZ,YAAA,EAAc,QAAA;AAAA,MACd,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,MAC1B,SAAA,EAAW;AAAA,QACT,WAAA,EAAa,QAAA;AAAA,QACb,QAAA,EAAU;AAAA;AACZ;AACF,GACF,CAAA;AAAA,EACA,EAAE,MAAM,iBAAA;AACV,CAAA;AAEO,MAAM,WAAA,GAAc,CAAoB,KAAA,KAA+B;AAC5E,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA,GAAmB,IAAA;AAAA,IACnB,aAAA,GAAgB,IAAA;AAAA,IAChB,IAAA;AAAA,IACA,IAAA,GAAO;AAAA,GACT,GAAI,KAAA;AACJ,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAClD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAA+B,MAAS,CAAA;AACxE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AACnE,EAAA,MAAM,qBAAqB,kBAAA,EAAmB;AAC9C,EAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAA,EAAgB;AACxD,EAAA,MAAM,cAAA,GAAiB,OAAO,KAAK,CAAA;AAGnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAEzB,IAAA,MAAM,UAAuB,EAAC;AAC9B,IAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AACnC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AACA,MAAA,IAAI,UAAA,CAAW,QAAA,CAAS,GAAgB,CAAA,EAAG;AACzC,QAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,UAAA,EAAY;AACxC,UAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAqB,KAAA,EAAO,MAAM,KAAA,CAAM,GAAG,GAAG,CAAA;AAAA,QAC/D,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAqB,KAAA,EAAO,CAAA;AAAA,QAC7C;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,oBAAA,EAAqB,CAAE,IAAA,CAAK,CAAA,QAAA,KAAY;AAClD,MAAA,UAAA,CACG,aAAA,CAAc;AAAA,QACb,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,EAAE,GAAA,EAAK,QAAA,CAAS,mBAAA;AAAoB,SACpD;AAAA,QACA,MAAA,EAAQ,CAAC,MAAA,EAAQ,eAAA,EAAiB,oBAAoB;AAAA,OACvD,CAAA,CACA,IAAA,CAAK,CAAA,IAAA,KAAQ;AACZ,QAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAA,KAAK,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAC5D,QAAA,kBAAA,CAAmB,UAAU,CAAA;AAAA,MAC/B,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,UAAA,EAAY,WAAW,CAAC,CAAA;AAE5B,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAOhB;AACJ,IAAA,IAAI,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA;AACzB,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACpC,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,OAAA,GAAU,MAAA,GAAS,OAAA;AAAA,IAC1C;AAGA,IAAA,eAAA,CAAgB,CAAA,IAAA,KAAQ;AACtB,MAAA,MAAM,SAAA,GAAY,IAAI,eAAA,CAAgB,IAAI,CAAA;AAC1C,MAAA,IACE,CAAC,KAAA,IACD,KAAA,KAAU,OAAA,IACT,KAAA,CAAM,QAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA,EAC1C;AACA,QAAA,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,MACpC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,QAAA,SAAA,CAAU,IAAI,KAAA,CAAM,MAAA,CAAO,MAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,MAClD,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,SAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,EAAE,GAAA,EAAK,KAAA,CAAM,MAAA,CAAO,IAAA,EAAiB,OAAO,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,WAAA;AAAA,IAC5B,CAAC,OAAA,KAAqB;AACpB,MAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS;AAAA,UACP,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,CAAC,GAAG,kBAAA,CAAmB,eAAe;AAAA,SAC9C,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,IAAI,CAAA;AAAA,MACzC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,kBAAA,CAAmB,eAAe;AAAA,GAC/C;AAEA,EAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,IAC1B,CAAC,OAAA,KAAqB;AACpB,MAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS;AAAA,UACP,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,eAAA,EAAgB;AAAA,UAC1C,EAAE,GAAA,EAAK,kBAAA,EAAoB,KAAA,EAAO,IAAA;AAAK,SACxC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,QAAA,CAAS;AAAA,UACP,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,EAAC,EAAE;AAAA,UAC7B,EAAE,GAAA,EAAK,kBAAA,EAAoB,KAAA,EAAO,KAAA;AAAM,SACzC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU,eAAe;AAAA,GAC5B;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,UAAA,CACG,iBAAA,CAAkB;AAAA,QACjB,YAAY,OAAA,CAAQ,QAAA;AAAA,QACpB,MAAA,EAAQ,CAAC,MAAA,EAAQ,eAAA,EAAiB,oBAAoB;AAAA,OACvD,CAAA,CACA,IAAA,CAAK,CAAA,IAAA,KAAQ;AACZ,QAAA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACjC,CAAC,CAAA;AAAA,IACL;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAEjC,EAAA,MAAM,WAAA,GAAc,cAAc,OAAO,CAAA;AACzC,EAAA,MAAM,aAAA,GAAgB,gBAAgB,OAAO,CAAA;AAC7C,EAAA,MAAM,iBAAA,GAAoB,oBAAoB,OAAO,CAAA;AAErD,EAAA,MAAM,iBAAA,GACJ,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,cAAc,IAAA,KAAS,OAAA;AAErD,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,IAAA,EACrB,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,CAAA;AAAA,QACT,UAAA,EAAW,YAAA;AAAA,QACX,cAAA,EAAe,eAAA;AAAA,QAEb,QAAA,EAAA;AAAA,UAAA,CAAA,WAAA,IAAe,aAAA,qBACf,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,mBAAA,EAAoB,SAAA,EAAW,OAAO,KAAA,EAClD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA;AAAA,cACf,EAAE,gCAAgC;AAAA,aAAA,EACrC,CAAA;AAAA,YACC,WAAA,IAAe,SAAS,UAAA,oBACvB,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,WAAA;AAAA,oBACL,QAAA,EAAU,YAAA;AAAA,oBACV,OAAA,EAAS,QAAQ,SAAA,KAAc;AAAA;AAAA,iBACjC;AAAA,gBAEF,KAAA,EAAO,EAAE,6BAA6B;AAAA;AAAA,aACxC;AAAA,YAED,WAAA,oBACC,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,QAAA;AAAA,oBACL,UAAU,CAAA,CAAA,KAAK;AACb,sBAAA,MAAM,SAAA,GAAY,CAAA,CAAE,MAAA,CAAO,OAAA,GACvB,OAAA,GACA,MAAA;AACJ,sBAAA,YAAA,CAAa;AAAA,wBACX,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,SAAA;AAAU,uBAC5C,CAAA;AAAA,oBACH,CAAA;AAAA,oBACA,OAAA,EAAS,QAAQ,MAAA,KAAW;AAAA;AAAA,iBAC9B;AAAA,gBAEF,KAAA,EAAO,EAAE,0BAA0B;AAAA;AAAA,aACrC;AAAA,YAAA,CAEA,WAAA,IAAe,aAAA,KAAkB,IAAA,KAAS,UAAA,oBAC1C,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,iBAAA;AAAA,oBACL,OAAA,EAAS,QAAQ,eAAA,KAAoB,MAAA;AAAA,oBACrC,QAAA,EAAU;AAAA;AAAA,iBACZ;AAAA,gBAEF,KAAA,EAAO,EAAE,oCAAoC;AAAA;AAAA,aAC/C;AAAA,YAAA,CAEA,WAAA,IAAe,aAAA,KAAkB,IAAA,KAAS,MAAA,oBAC1C,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,SAAA;AAAA,oBACL,OAAA,EAAS,QAAQ,OAAA,KAAY,MAAA;AAAA,oBAC7B,QAAA,EAAU;AAAA;AAAA,iBACZ;AAAA,gBAEF,KAAA,EAAO,EAAE,2BAA2B;AAAA;AAAA,aACtC;AAAA,YAED,kBAAA,CAAmB,eAAA,CAAgB,IAAA,GAAO,CAAA,oBACzC,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,iBAAA;AAAA,oBACL,QAAA,EAAU,CAAA,CAAA,KAAK,qBAAA,CAAsB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,oBACrD,OAAA,EAAS;AAAA;AAAA,iBACX;AAAA,gBAEF,KAAA,EAAO,EAAE,mCAAmC;AAAA;AAAA,aAC9C;AAAA,4BAEF,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,kBACE,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,IAAA,EAAK,eAAA;AAAA,oBACL,QAAA,EAAU,CAAA,CAAA,KAAK,mBAAA,CAAoB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,oBACnD,OAAA,EAAS;AAAA;AAAA,iBACX;AAAA,gBAEF,KAAA,EAAO,EAAE,iCAAiC;AAAA;AAAA;AAC5C,WAAA,EACF,CAAA,EACF,CAAA;AAAA,8BAED,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,IAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,WAAU,UAAA,EAAW,KAAA,EAAO,EAAE,KAAA,EAAO,QAAO,EACvD,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,sBAAA,EAAuB,SAAA,EAAW,OAAO,KAAA,EACrD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA;AAAA,cACT,EAAE,2BAA2B;AAAA,aAAA,EAChC,CAAA;AAAA,4BACA,IAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,iBAAA,EAAgB,sBAAA;AAAA,gBAChB,IAAA,EAAK,SAAA;AAAA,gBACL,OAAO,OAAA,CAAQ,OAAA;AAAA,gBACf,QAAA,EAAU,YAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,OAAA,EAAS,MAAA;AAAA,kBACT,mBAAA,EAAqB,SAAA;AAAA,kBACrB,GAAA,EAAK;AAAA,iBACP;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,WAAA,IACC,QAAQ,YAAA,KAAiB,MAAA,IACzB,YAAY,MAAA,EAAQ,CAAA,CAAE,0BAA0B,CAAC,CAAA;AAAA,kBAClD,IAAA,KAAS,OAAA,IACR,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,cACT,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAAA,CACvD,WAAA,IAAe,iBAAA,KACf,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,OAAA,IACT,WAAA,CAAY,OAAA,EAAS,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACpD,eACC,IAAA,KAAS,MAAA,IACT,YAAY,OAAA,EAAS,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBAAA,CACnD,eAAe,aAAA,KACf,WAAA;AAAA,oBACE,OAAA;AAAA,oBACA,SAAS,MAAA,GACL,CAAA,CAAE,2BAA2B,CAAA,GAC7B,EAAE,4BAA4B;AAAA,mBACpC;AAAA,kBACD,WAAA,IACC,WAAA,CAAY,OAAA,EAAS,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACpD,eACC,IAAA,KAAS,UAAA,IACT,YAAY,cAAA,EAAgB,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAAA,CAC5D,eAAe,aAAA,KACf,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAExD,SAAS,MAAA,IACR,WAAA,CAAY,KAAA,EAAO,CAAA,CAAE,yBAAyB,CAAC,CAAA;AAAA,kBAChD,SAAS,UAAA,IACR,WAAA,CAAY,WAAA,EAAa,CAAA,CAAE,+BAA+B,CAAC,CAAA;AAAA,kBAC5D,SAAS,OAAA,IACR,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,0BAA0B,CAAC,CAAA;AAAA,kBAAA,CAEpD,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,kBACT,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBAAA,CACxD,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,SAAS,aAAA,KACT,WAAA;AAAA,oBACE,gBAAA;AAAA,oBACA,EAAE,+BAA+B;AAAA,mBACnC;AAAA,kBAAA,CACA,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,kBACT,WAAA,CAAY,eAAA,EAAiB,CAAA,CAAE,8BAA8B,CAAC,CAAA;AAAA,kBAAA,CAC9D,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UAAA,IACT,IAAA,KAAS,kBACT,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBAAA,CACxD,SAAS,MAAA,IACT,IAAA,KAAS,cACT,IAAA,KAAS,OAAA,IACT,SAAS,aAAA,KACT,WAAA;AAAA,oBACE,eAAA;AAAA,oBACA,EAAE,+BAA+B;AAAA,mBACnC;AAAA,kBAED,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA;AAAA,oBACE,gBAAA;AAAA,oBACA,EAAE,+BAA+B;AAAA,mBACnC;AAAA,kBACD,SAAS,OAAA,IACR,WAAA,CAAY,cAAA,EAAgB,CAAA,CAAE,6BAA6B,CAAC,CAAA;AAAA,kBAC7D,SAAS,OAAA,IACR,WAAA,CAAY,eAAA,EAAiB,CAAA,CAAE,8BAA8B,CAAC,CAAA;AAAA,kBAC/D,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,2BAA2B,CAAC,CAAA;AAAA,kBACzD,SAAS,OAAA,IACR,WAAA,CAAY,YAAA,EAAc,CAAA,CAAE,gCAAgC,CAAC;AAAA;AAAA;AAAA;AACjE,WAAA,EACF,CAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,UAAA,EACrB,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,mBAAA,EAAoB,SAAA,EAAW,OAAO,KAAA,EAClD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,YAAA,EAAA,EAAa,CAAA;AAAA,cACb,EAAE,yBAAyB;AAAA,aAAA,EAC9B,CAAA;AAAA,4BACA,IAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,iBAAA,EAAgB,mBAAA;AAAA,gBAChB,IAAA,EAAK,OAAA;AAAA,gBACL,OAAO,OAAA,CAAQ,KAAA;AAAA,gBACf,QAAA,EAAU,YAAA;AAAA,gBAET,QAAA,EAAA;AAAA,kBAAA,WAAA,CAAY,MAAA,EAAQ,CAAA,CAAE,wBAAwB,CAAC,CAAA;AAAA,kBAC/C,WAAA,CAAY,KAAA,EAAO,CAAA,CAAE,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAChD,WAAA,EACF,CAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,IACC,qCACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EACX,QAAA,kBAAA,GAAA,CAAC,WAAQ,CAAA,EACX,CAAA;AAAA,sBACA,GAAA,CAAC,OAAI,YAAA,EAAa,KAAA,EAChB,+BAAC,SAAA,EAAA,EAAU,SAAA,EAAW,OAAO,KAAA,EAC3B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA;AAAA,QACT,EAAE,2BAA2B;AAAA,OAAA,EAChC,CAAA,EACF,CAAA;AAAA,sBACA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,CAAA;AAAA,UACT,UAAA,EAAW,YAAA;AAAA,UACX,cAAA,EAAe,YAAA;AAAA,UAEf,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EAAI,IAAI,CAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,OAAO,OAAA,CAAQ,SAAA;AAAA,gBACf,QAAA,EAAU,SAAO,QAAA,CAAS,EAAE,KAAK,WAAA,EAAa,KAAA,EAAO,KAAK;AAAA;AAAA,aAC5D,EACF,CAAA;AAAA,YACC,gBAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,MAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,YAAW,QAAA,EACzB,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAE,IAAA,EACX,QAAA,kBAAA,GAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,eAAA,IAAmB,aAAA;AAAA,kBAC7B,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,kBACvB,QAAA,EAAU,CAAC,WAAA,KAA2B;AACpC,oBAAA,MAAM,UAAA,GAAA,CAAc,WAAA,IAAe,EAAC,EAAG,GAAA;AAAA,sBAAI,CAAA,CAAA,KACzC,mBAAmB,CAAC;AAAA,qBACtB;AACA,oBAAA,YAAA,CAAa;AAAA,sBACX,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,UAAA;AAAW,qBAC/C,CAAA;AACD,oBAAA,WAAA,CAAY,WAAW,CAAA;AAAA,kBACzB,CAAA;AAAA,kBACA,KAAA,EAAO,QAAA;AAAA,kBACP,mBAAA,EAAmB,IAAA;AAAA,kBACnB,YAAA,EAAY;AAAA;AAAA,eACd,EACF,CAAA;AAAA,cACC,YAAY,QAAA,EAAU,MAAA,GAAS,qBAC9B,GAAA,CAAC,IAAA,EAAA,EAAK,MAAI,IAAA,EACR,QAAA,kBAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EACE,QAAQ,gBAAA,KAAqB,IAAA,GACzB,EAAE,sCAAsC,CAAA,GACxC,EAAE,qCAAqC,CAAA;AAAA,kBAG7C,QAAA,kBAAA,GAAA;AAAA,oBAAC,UAAA;AAAA,oBAAA;AAAA,sBACC,UAAU,eAAA,IAAmB,aAAA;AAAA,sBAC7B,SAAS,MAAM;AACb,wBAAA,IAAI,OAAA,CAAQ,qBAAqB,IAAA,EAAM;AACrC,0BAAA,QAAA,CAAS;AAAA,4BACP,GAAA,EAAK,kBAAA;AAAA,4BACL,KAAA,EAAO;AAAA,2BACR,CAAA;AAAA,wBACH,CAAA,MAAO;AACL,0BAAA,QAAA,CAAS;AAAA,4BACP,GAAA,EAAK,kBAAA;AAAA,4BACL,KAAA,EAAO;AAAA,2BACR,CAAA;AAAA,wBACH;AAAA,sBACF,CAAA;AAAA,sBAEC,kBAAQ,gBAAA,KAAqB,IAAA,uBAC3B,UAAA,EAAA,EAAW,CAAA,uBAEX,qBAAA,EAAA,EAAsB;AAAA;AAAA;AAE3B;AAAA,eACF,EACF;AAAA,aAAA,EAEJ,CAAA,EACF,CAAA;AAAA,YAED,aAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,MAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,YAAW,QAAA,EACzB,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAE,IAAA,EACX,QAAA,kBAAA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,kBACvB,QAAA,EAAU,CAAC,OAAA,KACT,QAAA,CAAS,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,kBAE1C,OAAO,OAAA,CAAQ,IAAA;AAAA,kBACf,YAAA,EAAY,IAAA;AAAA,kBACZ,WAAA,EAAa;AAAA;AAAA,eACf,EACF,CAAA;AAAA,cACC,OAAA,CAAQ,QAAQ,OAAA,CAAQ,IAAA,EAAM,SAAS,CAAA,oBACtC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EACE,QAAQ,YAAA,KAAiB,IAAA,GACrB,EAAE,mCAAmC,CAAA,GACrC,EAAE,kCAAkC,CAAA;AAAA,kBAG1C,QAAA,kBAAA,GAAA;AAAA,oBAAC,UAAA;AAAA,oBAAA;AAAA,sBACC,SAAS,MAAM;AACb,wBAAA,IAAI,OAAA,CAAQ,iBAAiB,IAAA,EAAM;AACjC,0BAAA,QAAA,CAAS,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,OAAO,CAAA;AAAA,wBAChD,CAAA,MAAO;AACL,0BAAA,QAAA,CAAS,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,MAAM,CAAA;AAAA,wBAC/C;AAAA,sBACF,CAAA;AAAA,sBAEC,kBAAQ,YAAA,KAAiB,IAAA,uBACvB,UAAA,EAAA,EAAW,CAAA,uBAEX,qBAAA,EAAA,EAAsB;AAAA;AAAA;AAE3B;AAAA,eACF,EACF;AAAA,aAAA,EAEJ,CAAA,EACF;AAAA;AAAA;AAAA;AAEJ,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
@@ -143,7 +143,7 @@ const MarkdownEditor = (props) => {
143
143
  return NO_SUGGESTIONS;
144
144
  }
145
145
  const entities = await catalogApi.queryEntities({
146
- filter: { kind: enabledMentionKinds },
146
+ query: { kind: { $in: enabledMentionKinds } },
147
147
  limit: 5,
148
148
  fields: [
149
149
  "metadata.name",
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditor.esm.js","sources":["../../../src/components/MarkdownEditor/MarkdownEditor.tsx"],"sourcesContent":["/* eslint-disable no-console */\nimport { useState } from 'react';\nimport ReactMde from 'react-mde';\nimport 'react-mde/lib/styles/css/react-mde.css';\nimport 'react-mde/lib/styles/css/react-mde-editor.css';\nimport 'react-mde/lib/styles/css/react-mde-toolbar.css';\nimport { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { imageUpload } from '../../utils';\nimport { makeStyles } from '@material-ui/core';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport {\n Entity,\n GroupEntity,\n stringifyEntityRef,\n UserEntity,\n} from '@backstage/catalog-model';\nimport { findTagMentions } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport type QetaMarkdownEditorClassKey =\n | 'markdownEditor'\n | 'markdownEditorError'\n | 'markdownPreview'\n | 'suggestionsDropdown';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n markdownEditor: {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n border: `1px solid ${theme.palette.action.disabled}`,\n borderRadius: theme.shape.borderRadius,\n '&:hover': {\n borderColor: theme.palette.action.active,\n },\n '&:focus-within': {\n borderColor: theme.palette.primary.main,\n },\n '& .mde-header': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n borderBottom: `1px solid ${theme.palette.action.selected}`,\n '& .mde-tabs button, .mde-header-item > button': {\n color: `${theme.palette.text.primary} !important`,\n },\n },\n '& .mde-preview-content': {\n padding: '10px',\n },\n '& .mde-text, .mde-preview': {\n fontSize: theme.typography.body1.fontSize,\n fontFamily: theme.typography.body1.fontFamily,\n lineHeight: theme.typography.body1.lineHeight,\n },\n '& .mde-text': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n outline: 'none',\n },\n '& .image-tip': {\n color: theme.palette.text.primary,\n backgroundColor: 'initial',\n },\n },\n markdownEditorError: {\n border: `1px solid ${theme.palette.error.main} !important`,\n },\n markdownPreview: {\n '& *': {\n wordBreak: 'break-word',\n },\n '&.inline': {\n display: 'inline-block',\n },\n '& > :first-child': {\n marginTop: '0px !important',\n },\n '& > :last-child': {\n marginBottom: '0px !important',\n },\n },\n suggestionsDropdown: {\n position: 'absolute',\n minWidth: '180px',\n margin: '20px 0 0',\n listStyle: 'none',\n padding: '0',\n cursor: 'pointer',\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n '& li': {\n width: '100%',\n padding: '0.5rem',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n },\n hide: {\n display: 'none',\n },\n };\n },\n { name: 'QetaMarkdownEditor' },\n);\n\nexport type MarkdownEditorProps = {\n value: string;\n onChange: (value: string) => void;\n onTagsChange?: (tags: string[]) => void;\n height: number;\n name?: string;\n error?: boolean;\n placeholder?: string;\n onImageUpload?: (imageId: number) => void;\n disableToolbar?: boolean;\n disableAttachments?: boolean;\n disablePreview?: boolean;\n postId?: number;\n disabled?: boolean;\n answerId?: number;\n collectionId?: number;\n autoFocus?: boolean;\n required?: boolean;\n};\n\nconst NO_SUGGESTIONS = [{ preview: 'No suggestions', value: '' }];\n\nexport const MarkdownEditor = (props: MarkdownEditorProps) => {\n const {\n value,\n onChange,\n height,\n disabled,\n error,\n placeholder,\n disableAttachments,\n onTagsChange,\n name,\n disableToolbar,\n disablePreview,\n postId,\n answerId,\n collectionId,\n autoFocus,\n required = true,\n } = props;\n const [selectedTab, setSelectedTab] = useState<'write' | 'preview'>('write');\n const styles = useStyles();\n const errorApi = useApi(errorApiRef);\n const qetaApi = useApi(qetaApiRef);\n const catalogApi = useApi(catalogApiRef);\n const config = useApi(configApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const supportedMentionKinds = config.getOptionalStringArray(\n 'qeta.mentions.supportedKinds',\n ) || ['user'];\n const enabledMentionKinds = supportedMentionKinds.filter(kind =>\n ['user', 'group'].includes(kind.toLowerCase()),\n );\n const maxTags = config.getOptionalNumber('qeta.tags.max') ?? 5;\n\n const suggestionChars: string[] = [];\n if (enabledMentionKinds.length > 0) {\n suggestionChars.push('@');\n }\n if (maxTags > 0) {\n suggestionChars.push('#');\n }\n\n const loadEntitySuggestions = async (text: string) => {\n if (!text) {\n return NO_SUGGESTIONS;\n }\n const entities = await catalogApi.queryEntities({\n filter: { kind: enabledMentionKinds },\n limit: 5,\n fields: [\n 'metadata.name',\n 'metadata.namespace',\n 'kind',\n 'metadata.title',\n 'spec.profile.displayName',\n ],\n fullTextFilter: {\n term: text,\n fields: [\n 'metadata.name',\n 'metadata.title',\n 'spec.profile.displayName',\n 'spec.profile.email',\n ],\n },\n });\n\n if (entities.items.length === 0) {\n return NO_SUGGESTIONS;\n }\n\n return entities.items.map(entity => {\n const mentionEntity = entity as Entity & (UserEntity | GroupEntity);\n return {\n preview:\n mentionEntity.spec?.profile?.displayName ??\n mentionEntity.metadata.title ??\n mentionEntity.metadata.name,\n value: `@${stringifyEntityRef(entity)}`,\n };\n });\n };\n\n const loadTagSuggestions = async (text: string) => {\n if (!text) {\n return NO_SUGGESTIONS;\n }\n const tags = await qetaApi.getTags({ searchQuery: text });\n if (tags.tags.length === 0) {\n return NO_SUGGESTIONS;\n }\n return tags.tags.map(tag => {\n return {\n preview: tag.tag,\n value: `#${tag.tag}`,\n };\n });\n };\n\n const loadSuggestions = async (text: string, triggeredBy: string) => {\n if (!text || !triggeredBy) {\n return NO_SUGGESTIONS;\n }\n if (triggeredBy === '@') {\n return loadEntitySuggestions(text);\n }\n if (triggeredBy === '#') {\n return loadTagSuggestions(text);\n }\n return NO_SUGGESTIONS;\n };\n\n const isUploadDisabled =\n config?.getOptionalBoolean('qeta.storage.disabled') ||\n disableAttachments ||\n false;\n\n const toolbarCommands = [\n ['header', 'bold', 'italic', 'strikethrough'],\n ['link', 'quote', 'code', 'image'],\n ['unordered-list', 'ordered-list'],\n ];\n\n return (\n <ReactMde\n classes={{\n reactMde: `qetaMarkdownEditorEdit ${styles.markdownEditor}`,\n textArea: error\n ? `qetaMarkdownEditorError ${styles.markdownEditorError}`\n : undefined,\n preview: 'qetaMarkdownEditorPreview',\n toolbar: `${\n disableToolbar ? styles.hide : ''\n } qetaMarkdownEditorToolbar`,\n suggestionsDropdown: styles.suggestionsDropdown,\n }}\n disablePreview={disablePreview}\n value={value}\n onChange={onChange}\n selectedTab={selectedTab}\n onTabChange={setSelectedTab}\n minEditorHeight={height}\n l18n={{\n write: t('markdownEditor.write'),\n preview: t('markdownEditor.preview'),\n uploadingImage: t('markdownEditor.uploadingImage'),\n pasteDropSelect: t('markdownEditor.pasteDropSelect'),\n }}\n minPreviewHeight={height - 10}\n childProps={{\n textArea: {\n required,\n placeholder,\n disabled,\n autoFocus,\n name,\n onBlur: () => {\n if (onTagsChange) {\n onTagsChange(findTagMentions(value).map(tag => tag.slice(1)));\n }\n },\n },\n }}\n suggestionTriggerCharacters={suggestionChars}\n loadSuggestions={loadSuggestions}\n suggestionsAutoplace\n generateMarkdownPreview={content =>\n Promise.resolve(\n <MarkdownRenderer\n content={content}\n className={`qetaMarkdownEditorPreview ${styles.markdownPreview}`}\n useBlankLinks\n />,\n )\n }\n paste={\n isUploadDisabled\n ? undefined\n : {\n saveImage: imageUpload({\n qetaApi,\n errorApi,\n onImageUpload: props.onImageUpload,\n postId,\n answerId,\n collectionId,\n }),\n }\n }\n toolbarCommands={toolbarCommands}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA4BO,MAAM,SAAA,GAAY,UAAA;AAAA,EACvB,CAAA,KAAA,KAAS;AACP,IAAA,OAAO;AAAA,MACL,cAAA,EAAgB;AAAA,QACd,eAAA,EAAiB,SAAA;AAAA,QACjB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,QAC1B,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,QAAQ,CAAA,CAAA;AAAA,QAClD,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,QAC1B,SAAA,EAAW;AAAA,UACT,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA,SACpC;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA,SACrC;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,UAC1B,YAAA,EAAc,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,QAAQ,CAAA,CAAA;AAAA,UACxD,+CAAA,EAAiD;AAAA,YAC/C,KAAA,EAAO,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,KAAK,OAAO,CAAA,WAAA;AAAA;AACtC,SACF;AAAA,QACA,wBAAA,EAA0B;AAAA,UACxB,OAAA,EAAS;AAAA,SACX;AAAA,QACA,2BAAA,EAA6B;AAAA,UAC3B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,UACjC,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,UAAA;AAAA,UACnC,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM;AAAA,SACrC;AAAA,QACA,aAAA,EAAe;AAAA,UACb,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,UAC1B,OAAA,EAAS;AAAA,SACX;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,UAC1B,eAAA,EAAiB;AAAA;AACnB,OACF;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,MAAM,IAAI,CAAA,WAAA;AAAA,OAC/C;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,KAAA,EAAO;AAAA,UACL,SAAA,EAAW;AAAA,SACb;AAAA,QACA,UAAA,EAAY;AAAA,UACV,OAAA,EAAS;AAAA,SACX;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,SAAA,EAAW;AAAA,SACb;AAAA,QACA,iBAAA,EAAmB;AAAA,UACjB,YAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,OAAA;AAAA,QACV,MAAA,EAAQ,UAAA;AAAA,QACR,SAAA,EAAW,MAAA;AAAA,QACX,OAAA,EAAS,GAAA;AAAA,QACT,MAAA,EAAQ,SAAA;AAAA,QACR,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,KAAA;AAAA,QACrC,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,QAC1C,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,QAC1B,MAAA,EAAQ;AAAA,UACN,KAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAS,QAAA;AAAA,UACT,SAAA,EAAW;AAAA,YACT,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA;AACxC;AACF,OACF;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EACF,CAAA;AAAA,EACA,EAAE,MAAM,oBAAA;AACV;AAsBA,MAAM,iBAAiB,CAAC,EAAE,SAAS,gBAAA,EAAkB,KAAA,EAAO,IAAI,CAAA;AAEzD,MAAM,cAAA,GAAiB,CAAC,KAAA,KAA+B;AAC5D,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA,GAAW;AAAA,GACb,GAAI,KAAA;AACJ,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAA8B,OAAO,CAAA;AAC3E,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,OAAO,UAAU,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,kBAAkB,CAAA;AAElD,EAAA,MAAM,wBAAwB,MAAA,CAAO,sBAAA;AAAA,IACnC;AAAA,GACF,IAAK,CAAC,MAAM,CAAA;AACZ,EAAA,MAAM,sBAAsB,qBAAA,CAAsB,MAAA;AAAA,IAAO,CAAA,IAAA,KACvD,CAAC,MAAA,EAAQ,OAAO,EAAE,QAAA,CAAS,IAAA,CAAK,aAAa;AAAA,GAC/C;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,iBAAA,CAAkB,eAAe,CAAA,IAAK,CAAA;AAE7D,EAAA,MAAM,kBAA4B,EAAC;AACnC,EAAA,IAAI,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAClC,IAAA,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,qBAAA,GAAwB,OAAO,IAAA,KAAiB;AACpD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,aAAA,CAAc;AAAA,MAC9C,MAAA,EAAQ,EAAE,IAAA,EAAM,mBAAA,EAAoB;AAAA,MACpC,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ;AAAA,QACN,eAAA;AAAA,QACA,oBAAA;AAAA,QACA,MAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM,IAAA;AAAA,QACN,MAAA,EAAQ;AAAA,UACN,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,0BAAA;AAAA,UACA;AAAA;AACF;AACF,KACD,CAAA;AAED,IAAA,IAAI,QAAA,CAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC/B,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,CAAA,MAAA,KAAU;AAClC,MAAA,MAAM,aAAA,GAAgB,MAAA;AACtB,MAAA,OAAO;AAAA,QACL,OAAA,EACE,cAAc,IAAA,EAAM,OAAA,EAAS,eAC7B,aAAA,CAAc,QAAA,CAAS,KAAA,IACvB,aAAA,CAAc,QAAA,CAAS,IAAA;AAAA,QACzB,KAAA,EAAO,CAAA,CAAA,EAAI,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,OACvC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,KAAiB;AACjD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,QAAQ,EAAE,WAAA,EAAa,MAAM,CAAA;AACxD,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO;AAC1B,MAAA,OAAO;AAAA,QACL,SAAS,GAAA,CAAI,GAAA;AAAA,QACb,KAAA,EAAO,CAAA,CAAA,EAAI,GAAA,CAAI,GAAG,CAAA;AAAA,OACpB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAO,IAAA,EAAc,WAAA,KAAwB;AACnE,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,EAAa;AACzB,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAgB,GAAA,EAAK;AACvB,MAAA,OAAO,sBAAsB,IAAI,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,gBAAgB,GAAA,EAAK;AACvB,MAAA,OAAO,mBAAmB,IAAI,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,cAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,gBAAA,GACJ,MAAA,EAAQ,kBAAA,CAAmB,uBAAuB,KAClD,kBAAA,IACA,KAAA;AAEF,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,CAAC,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,eAAe,CAAA;AAAA,IAC5C,CAAC,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACjC,CAAC,kBAAkB,cAAc;AAAA,GACnC;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS;AAAA,QACP,QAAA,EAAU,CAAA,uBAAA,EAA0B,MAAA,CAAO,cAAc,CAAA,CAAA;AAAA,QACzD,QAAA,EAAU,KAAA,GACN,CAAA,wBAAA,EAA2B,MAAA,CAAO,mBAAmB,CAAA,CAAA,GACrD,MAAA;AAAA,QACJ,OAAA,EAAS,2BAAA;AAAA,QACT,OAAA,EAAS,CAAA,EACP,cAAA,GAAiB,MAAA,CAAO,OAAO,EACjC,CAAA,0BAAA,CAAA;AAAA,QACA,qBAAqB,MAAA,CAAO;AAAA,OAC9B;AAAA,MACA,cAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA,EAAa,cAAA;AAAA,MACb,eAAA,EAAiB,MAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,sBAAsB,CAAA;AAAA,QAC/B,OAAA,EAAS,EAAE,wBAAwB,CAAA;AAAA,QACnC,cAAA,EAAgB,EAAE,+BAA+B,CAAA;AAAA,QACjD,eAAA,EAAiB,EAAE,gCAAgC;AAAA,OACrD;AAAA,MACA,kBAAkB,MAAA,GAAS,EAAA;AAAA,MAC3B,UAAA,EAAY;AAAA,QACV,QAAA,EAAU;AAAA,UACR,QAAA;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA;AAAA,UACA,IAAA;AAAA,UACA,QAAQ,MAAM;AACZ,YAAA,IAAI,YAAA,EAAc;AAChB,cAAA,YAAA,CAAa,eAAA,CAAgB,KAAK,CAAA,CAAE,GAAA,CAAI,SAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,YAC9D;AAAA,UACF;AAAA;AACF,OACF;AAAA,MACA,2BAAA,EAA6B,eAAA;AAAA,MAC7B,eAAA;AAAA,MACA,oBAAA,EAAoB,IAAA;AAAA,MACpB,uBAAA,EAAyB,aACvB,OAAA,CAAQ,OAAA;AAAA,wBACN,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,SAAA,EAAW,CAAA,0BAAA,EAA6B,MAAA,CAAO,eAAe,CAAA,CAAA;AAAA,YAC9D,aAAA,EAAa;AAAA;AAAA;AACf,OACF;AAAA,MAEF,KAAA,EACE,mBACI,MAAA,GACA;AAAA,QACE,WAAW,WAAA,CAAY;AAAA,UACrB,OAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAe,KAAA,CAAM,aAAA;AAAA,UACrB,MAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACD;AAAA,OACH;AAAA,MAEN;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"MarkdownEditor.esm.js","sources":["../../../src/components/MarkdownEditor/MarkdownEditor.tsx"],"sourcesContent":["/* eslint-disable no-console */\nimport { useState } from 'react';\nimport ReactMde from 'react-mde';\nimport 'react-mde/lib/styles/css/react-mde.css';\nimport 'react-mde/lib/styles/css/react-mde-editor.css';\nimport 'react-mde/lib/styles/css/react-mde-toolbar.css';\nimport { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api';\nimport { qetaApiRef } from '../../api';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport { imageUpload } from '../../utils';\nimport { makeStyles } from '@material-ui/core';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport {\n Entity,\n GroupEntity,\n stringifyEntityRef,\n UserEntity,\n} from '@backstage/catalog-model';\nimport { findTagMentions } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../../translation.ts';\n\nexport type QetaMarkdownEditorClassKey =\n | 'markdownEditor'\n | 'markdownEditorError'\n | 'markdownPreview'\n | 'suggestionsDropdown';\n\nexport const useStyles = makeStyles(\n theme => {\n return {\n markdownEditor: {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n border: `1px solid ${theme.palette.action.disabled}`,\n borderRadius: theme.shape.borderRadius,\n '&:hover': {\n borderColor: theme.palette.action.active,\n },\n '&:focus-within': {\n borderColor: theme.palette.primary.main,\n },\n '& .mde-header': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n borderBottom: `1px solid ${theme.palette.action.selected}`,\n '& .mde-tabs button, .mde-header-item > button': {\n color: `${theme.palette.text.primary} !important`,\n },\n },\n '& .mde-preview-content': {\n padding: '10px',\n },\n '& .mde-text, .mde-preview': {\n fontSize: theme.typography.body1.fontSize,\n fontFamily: theme.typography.body1.fontFamily,\n lineHeight: theme.typography.body1.lineHeight,\n },\n '& .mde-text': {\n backgroundColor: 'initial',\n color: theme.palette.text.primary,\n outline: 'none',\n },\n '& .image-tip': {\n color: theme.palette.text.primary,\n backgroundColor: 'initial',\n },\n },\n markdownEditorError: {\n border: `1px solid ${theme.palette.error.main} !important`,\n },\n markdownPreview: {\n '& *': {\n wordBreak: 'break-word',\n },\n '&.inline': {\n display: 'inline-block',\n },\n '& > :first-child': {\n marginTop: '0px !important',\n },\n '& > :last-child': {\n marginBottom: '0px !important',\n },\n },\n suggestionsDropdown: {\n position: 'absolute',\n minWidth: '180px',\n margin: '20px 0 0',\n listStyle: 'none',\n padding: '0',\n cursor: 'pointer',\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n '& li': {\n width: '100%',\n padding: '0.5rem',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n },\n hide: {\n display: 'none',\n },\n };\n },\n { name: 'QetaMarkdownEditor' },\n);\n\nexport type MarkdownEditorProps = {\n value: string;\n onChange: (value: string) => void;\n onTagsChange?: (tags: string[]) => void;\n height: number;\n name?: string;\n error?: boolean;\n placeholder?: string;\n onImageUpload?: (imageId: number) => void;\n disableToolbar?: boolean;\n disableAttachments?: boolean;\n disablePreview?: boolean;\n postId?: number;\n disabled?: boolean;\n answerId?: number;\n collectionId?: number;\n autoFocus?: boolean;\n required?: boolean;\n};\n\nconst NO_SUGGESTIONS = [{ preview: 'No suggestions', value: '' }];\n\nexport const MarkdownEditor = (props: MarkdownEditorProps) => {\n const {\n value,\n onChange,\n height,\n disabled,\n error,\n placeholder,\n disableAttachments,\n onTagsChange,\n name,\n disableToolbar,\n disablePreview,\n postId,\n answerId,\n collectionId,\n autoFocus,\n required = true,\n } = props;\n const [selectedTab, setSelectedTab] = useState<'write' | 'preview'>('write');\n const styles = useStyles();\n const errorApi = useApi(errorApiRef);\n const qetaApi = useApi(qetaApiRef);\n const catalogApi = useApi(catalogApiRef);\n const config = useApi(configApiRef);\n const { t } = useTranslationRef(qetaTranslationRef);\n\n const supportedMentionKinds = config.getOptionalStringArray(\n 'qeta.mentions.supportedKinds',\n ) || ['user'];\n const enabledMentionKinds = supportedMentionKinds.filter(kind =>\n ['user', 'group'].includes(kind.toLowerCase()),\n );\n const maxTags = config.getOptionalNumber('qeta.tags.max') ?? 5;\n\n const suggestionChars: string[] = [];\n if (enabledMentionKinds.length > 0) {\n suggestionChars.push('@');\n }\n if (maxTags > 0) {\n suggestionChars.push('#');\n }\n\n const loadEntitySuggestions = async (text: string) => {\n if (!text) {\n return NO_SUGGESTIONS;\n }\n const entities = await catalogApi.queryEntities({\n query: { kind: { $in: enabledMentionKinds } },\n limit: 5,\n fields: [\n 'metadata.name',\n 'metadata.namespace',\n 'kind',\n 'metadata.title',\n 'spec.profile.displayName',\n ],\n fullTextFilter: {\n term: text,\n fields: [\n 'metadata.name',\n 'metadata.title',\n 'spec.profile.displayName',\n 'spec.profile.email',\n ],\n },\n });\n\n if (entities.items.length === 0) {\n return NO_SUGGESTIONS;\n }\n\n return entities.items.map(entity => {\n const mentionEntity = entity as Entity & (UserEntity | GroupEntity);\n return {\n preview:\n mentionEntity.spec?.profile?.displayName ??\n mentionEntity.metadata.title ??\n mentionEntity.metadata.name,\n value: `@${stringifyEntityRef(entity)}`,\n };\n });\n };\n\n const loadTagSuggestions = async (text: string) => {\n if (!text) {\n return NO_SUGGESTIONS;\n }\n const tags = await qetaApi.getTags({ searchQuery: text });\n if (tags.tags.length === 0) {\n return NO_SUGGESTIONS;\n }\n return tags.tags.map(tag => {\n return {\n preview: tag.tag,\n value: `#${tag.tag}`,\n };\n });\n };\n\n const loadSuggestions = async (text: string, triggeredBy: string) => {\n if (!text || !triggeredBy) {\n return NO_SUGGESTIONS;\n }\n if (triggeredBy === '@') {\n return loadEntitySuggestions(text);\n }\n if (triggeredBy === '#') {\n return loadTagSuggestions(text);\n }\n return NO_SUGGESTIONS;\n };\n\n const isUploadDisabled =\n config?.getOptionalBoolean('qeta.storage.disabled') ||\n disableAttachments ||\n false;\n\n const toolbarCommands = [\n ['header', 'bold', 'italic', 'strikethrough'],\n ['link', 'quote', 'code', 'image'],\n ['unordered-list', 'ordered-list'],\n ];\n\n return (\n <ReactMde\n classes={{\n reactMde: `qetaMarkdownEditorEdit ${styles.markdownEditor}`,\n textArea: error\n ? `qetaMarkdownEditorError ${styles.markdownEditorError}`\n : undefined,\n preview: 'qetaMarkdownEditorPreview',\n toolbar: `${\n disableToolbar ? styles.hide : ''\n } qetaMarkdownEditorToolbar`,\n suggestionsDropdown: styles.suggestionsDropdown,\n }}\n disablePreview={disablePreview}\n value={value}\n onChange={onChange}\n selectedTab={selectedTab}\n onTabChange={setSelectedTab}\n minEditorHeight={height}\n l18n={{\n write: t('markdownEditor.write'),\n preview: t('markdownEditor.preview'),\n uploadingImage: t('markdownEditor.uploadingImage'),\n pasteDropSelect: t('markdownEditor.pasteDropSelect'),\n }}\n minPreviewHeight={height - 10}\n childProps={{\n textArea: {\n required,\n placeholder,\n disabled,\n autoFocus,\n name,\n onBlur: () => {\n if (onTagsChange) {\n onTagsChange(findTagMentions(value).map(tag => tag.slice(1)));\n }\n },\n },\n }}\n suggestionTriggerCharacters={suggestionChars}\n loadSuggestions={loadSuggestions}\n suggestionsAutoplace\n generateMarkdownPreview={content =>\n Promise.resolve(\n <MarkdownRenderer\n content={content}\n className={`qetaMarkdownEditorPreview ${styles.markdownPreview}`}\n useBlankLinks\n />,\n )\n }\n paste={\n isUploadDisabled\n ? undefined\n : {\n saveImage: imageUpload({\n qetaApi,\n errorApi,\n onImageUpload: props.onImageUpload,\n postId,\n answerId,\n collectionId,\n }),\n }\n }\n toolbarCommands={toolbarCommands}\n />\n );\n};\n"],"names":[],"mappings":"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"}