{"version":3,"file":"js/common.a892f56c51b9f26fc746.js","mappings":"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","sources":["webpack://fider/./public/components/common/HoverInfo.tsx","webpack://fider/./public/components/common/Icon.tsx","webpack://fider/./public/components/ErrorBoundary.tsx","webpack://fider/./public/components/ShowPostResponse.tsx","webpack://fider/./public/components/ShowPostStatus.tsx","webpack://fider/./public/components/common/Button.tsx","webpack://fider/./public/components/common/form/Form.tsx","webpack://fider/./public/components/common/form/DisplayError.tsx","webpack://fider/./public/components/common/form/Input.tsx","webpack://fider/./public/components/common/form/ImageUploader.tsx","webpack://fider/./public/components/common/form/MultiImageUploader.tsx","webpack://fider/./public/components/common/form/TextArea.tsx","webpack://fider/./public/components/common/form/RadioButton.tsx","webpack://fider/./public/components/common/form/Select.tsx","webpack://fider/./public/components/common/form/Field.tsx","webpack://fider/./public/components/common/form/Checkbox.tsx","webpack://fider/./public/components/common/form/ImageViewer.tsx","webpack://fider/./public/components/common/Markdown.tsx","webpack://fider/./public/components/common/DevBanner.tsx","webpack://fider/./public/components/common/Avatar.tsx","webpack://fider/./public/components/common/AvatarStack.tsx","webpack://fider/./public/components/common/Message.tsx","webpack://fider/./public/components/common/Hint.tsx","webpack://fider/./public/components/common/Legal.tsx","webpack://fider/./public/components/common/SocialSignInButton.tsx","webpack://fider/./public/components/common/SignInControl.tsx","webpack://fider/./public/components/common/Moment.tsx","webpack://fider/./public/components/common/Modal.tsx","webpack://fider/./public/components/common/UserName.tsx","webpack://fider/./public/components/common/Loader.tsx","webpack://fider/./public/components/common/Logo.tsx","webpack://fider/./public/components/common/Toggle.tsx","webpack://fider/./public/components/common/PoweredByFider.tsx","webpack://fider/./public/components/common/PageTitle.tsx","webpack://fider/./public/components/common/Dropdown.tsx","webpack://fider/./public/components/common/Money.tsx","webpack://fider/./public/components/ShowTag.tsx","webpack://fider/./public/components/Header.tsx","webpack://fider/./public/components/SignInModal.tsx","webpack://fider/./public/components/VoteCounter.tsx","webpack://fider/./public/components/NotificationIndicator.tsx","webpack://fider/./public/components/UserMenu.tsx","webpack://fider/./public/components/Reactions.tsx","webpack://fider/./public/components/ReadOnlyNotice.tsx","webpack://fider/./public/components/layout/Stack.tsx","webpack://fider/./public/components/layout/Divider.tsx","webpack://fider/./public/models/post.ts","webpack://fider/./public/models/identity.ts","webpack://fider/./public/models/settings.ts","webpack://fider/./public/models/billing.ts","webpack://fider/./public/models/webhook.ts","webpack://fider/./public/services/http.ts","webpack://fider/./public/services/cache.ts","webpack://fider/./public/services/analytics.ts","webpack://fider/./public/services/fider.ts","webpack://fider/./public/services/jwt.ts","webpack://fider/./public/services/utils.ts","webpack://fider/./public/services/i18n.ts","webpack://fider/./public/services/markdown.ts","webpack://fider/./public/services/notify.ts","webpack://fider/./public/services/navigator.ts","webpack://fider/./public/services/querystring.ts","webpack://fider/./public/services/device.ts","webpack://fider/./public/services/actions/user.ts","webpack://fider/./public/services/actions/tag.ts","webpack://fider/./public/services/actions/post.ts","webpack://fider/./public/services/actions/tenant.ts","webpack://fider/./public/services/actions/notification.ts","webpack://fider/./public/services/actions/invite.ts","webpack://fider/./public/services/actions/infra.ts","webpack://fider/./public/services/actions/webhook.ts","webpack://fider/./public/services/actions/billing.ts","webpack://fider/./public/services/toastify.tsx"],"sourcesContent":["import \"./HoverInfo.scss\"\n\nimport React from \"react\"\nimport { Icon } from \"./Icon\"\n\nimport IconInformationCircle from \"@fider/assets/images/heroicons-information-circle.svg\"\nimport { classSet } from \"@fider/services\"\n\ninterface InfoProps {\n text: string\n onClick?: () => void\n href?: string\n target?: \"_self\" | \"_blank\" | \"_parent\" | \"_top\"\n}\n\nexport const HoverInfo = (props: InfoProps) => {\n const Elem = props.href ? \"a\" : \"span\"\n const classList = classSet({\n \"c-hoverinfo\": true,\n clickable: props.onClick !== undefined,\n })\n return (\n \n \n \n )\n}\n","import React from \"react\"\n\ninterface IconProps {\n sprite: SpriteSymbol | string\n height?: string\n width?: string\n className?: string\n onClick?: () => void\n}\n\nexport const Icon = (props: IconProps) => {\n if (typeof props.sprite === \"string\") {\n const styles = { height: props.height && `${props.height}px`, width: props.width && `${props.width}px` }\n return \n }\n\n return (\n \n \n \n )\n}\n","import React from \"react\"\nimport { ErrorPage } from \"@fider/pages/Error/Error.page\"\nimport { FiderContext } from \"@fider/services\"\n\ninterface ErrorBoundaryProps {\n onError?: (err: Error) => void\n}\n\ninterface ErrorBoundaryState {\n error?: Error\n errorInfo?: React.ErrorInfo\n}\n\nexport class ErrorBoundary extends React.Component {\n constructor(props: any) {\n super(props)\n\n this.state = {\n error: undefined,\n errorInfo: undefined,\n }\n }\n\n public componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n const onError = this.props.onError\n if (onError) {\n onError(error)\n }\n\n this.setState({\n error,\n errorInfo,\n })\n }\n\n public render() {\n const { error, errorInfo } = this.state\n\n if (error && errorInfo) {\n return {(fider) => }\n } else {\n return this.props.children\n }\n }\n}\n","import React from \"react\"\nimport { PostResponse, PostStatus } from \"@fider/models\"\nimport { Icon, Markdown } from \"@fider/components\"\nimport HeroIconDuplicate from \"@fider/assets/images/heroicons-duplicate.svg\"\nimport HeroIconCheck from \"@fider/assets/images/heroicons-check-circle.svg\"\nimport HeroIconSparkles from \"@fider/assets/images/heroicons-sparkles-outline.svg\"\nimport HeroIconThumbsUp from \"@fider/assets/images/heroicons-thumbsup.svg\"\nimport HeroIconThumbsDown from \"@fider/assets/images/heroicons-thumbsdown.svg\"\nimport { HStack, VStack } from \"./layout\"\nimport { timeSince } from \"@fider/services\"\n\ninterface PostResponseProps {\n status: string\n response: PostResponse | null\n}\n\nexport const ResponseDetails = (props: PostResponseProps): JSX.Element | null => {\n const status = PostStatus.Get(props.status)\n\n if (!props.response || status === PostStatus.Open) {\n return null\n }\n\n return (\n \n \n
{timeSince(\"en\", new Date(), props.response.respondedAt, \"date\")}
\n {props.response?.text && status !== PostStatus.Duplicate && (\n
\n \n
\n )}\n\n {status === PostStatus.Duplicate && props.response.original && (\n
\n \n {props.response.original.title}\n \n
\n )}\n
\n )\n}\n\nconst getLozengeProps = (status: PostStatus): { icon: SpriteSymbol; bg: string; color: string; border: string } => {\n switch (status) {\n case PostStatus.Declined:\n return { icon: HeroIconThumbsDown, bg: \"bg-red-100\", color: \"text-red-800\", border: \"border-red-300\" }\n case PostStatus.Duplicate:\n return { icon: HeroIconDuplicate, bg: \"bg-yellow-100\", color: \"text-yellow-800\", border: \"border-yellow-400\" }\n case PostStatus.Completed:\n return { icon: HeroIconCheck, bg: \"bg-green-300\", color: \"text-green-800\", border: \"border-green-500\" }\n case PostStatus.Planned:\n return { icon: HeroIconThumbsUp, bg: \"bg-blue-100\", color: \"text-blue-700\", border: \"border-blue-400\" }\n default:\n return { icon: HeroIconSparkles, bg: \"bg-green-100\", color: \"text-green-700\", border: \"border-green-400\" }\n }\n}\n\nexport const ResponseLozenge = (props: PostResponseProps): JSX.Element | null => {\n const status = PostStatus.Get(props.status)\n const { icon, bg, color, border } = getLozengeProps(status)\n\n if (status === PostStatus.Open) {\n return
\n }\n\n return (\n
\n \n \n {status.title}\n \n
\n )\n}\n","// import \"./ShowPostStatus.scss\"\n\nimport React from \"react\"\nimport { PostStatus } from \"@fider/models\"\nimport { t } from \"@lingui/macro\"\n\ninterface ShowPostStatusProps {\n status: PostStatus\n}\n\nexport const ShowPostStatus = (props: ShowPostStatusProps) => {\n const id = `enum.poststatus.${props.status.value}`\n const title = t({ id, message: props.status.title })\n return {title}\n}\n","import \"./Button.scss\"\n\nimport React, { useEffect, useRef, useState } from \"react\"\nimport { classSet } from \"@fider/services\"\n\ninterface ButtonProps {\n className?: string\n disabled?: boolean\n href?: string\n rel?: \"nofollow\"\n target?: \"_self\" | \"_blank\" | \"_parent\" | \"_top\"\n type?: \"button\" | \"submit\"\n variant?: \"primary\" | \"danger\" | \"secondary\" | \"tertiary\"\n size?: \"small\" | \"default\" | \"large\"\n style?: React.CSSProperties\n onClick?: (event: ButtonClickEvent) => Promise | void\n}\nexport class ButtonClickEvent {\n private shouldEnable = true\n public preventEnable(): void {\n this.shouldEnable = false\n }\n public canEnable(): boolean {\n return this.shouldEnable\n }\n}\n\nexport const Button: React.FC = (props) => {\n const [clicked, setClicked] = useState(false)\n const unmountedContainer = useRef(false)\n\n useEffect(() => {\n return () => {\n unmountedContainer.current = true\n }\n }, [])\n\n const className = classSet({\n \"c-button\": true,\n [`c-button--${props.size}`]: props.size,\n [`c-button--${props.variant}`]: props.variant,\n \"c-button--loading\": clicked,\n \"c-button--disabled\": clicked || props.disabled,\n [props.className || \"\"]: props.className,\n \"shadow-sm\": props.variant == \"primary\" || props.variant == \"secondary\",\n })\n\n let buttonContent: JSX.Element\n const onClickProp = props.onClick\n\n if (props.href) {\n buttonContent = (\n \n {props.children}\n \n )\n } else if (onClickProp) {\n const onClick = async (e?: React.SyntheticEvent) => {\n if (e) {\n e.preventDefault()\n e.stopPropagation()\n }\n\n if (clicked) {\n return\n }\n\n const event = new ButtonClickEvent()\n setClicked(true)\n\n await onClickProp(event)\n\n if (!unmountedContainer.current && event.canEnable()) {\n setClicked(false)\n }\n }\n\n buttonContent = (\n \n )\n } else {\n buttonContent = (\n \n )\n }\n\n return buttonContent\n}\n\nButton.defaultProps = {\n size: \"default\",\n variant: \"secondary\",\n type: \"button\",\n}\n","import \"./Form.scss\"\n\nimport React from \"react\"\nimport { Failure, classSet } from \"@fider/services\"\nimport { DisplayError } from \"@fider/components\"\n\ninterface ValidationContext {\n error?: Failure\n}\n\ninterface FormProps {\n className?: string\n error?: Failure\n}\n\nexport const ValidationContext = React.createContext({})\n\nexport const Form: React.FunctionComponent = (props) => {\n const className = classSet({\n \"c-form\": true,\n [props.className || \"\"]: props.className,\n })\n\n return (\n
\n \n {props.children}\n \n )\n}\n","import React from \"react\"\nimport { Failure } from \"@fider/services\"\n\nimport \"./DisplayError.scss\"\n\nconst arrayToTag = (items: string[]) => {\n return items.map((m) =>
  • {m}
  • )\n}\n\ninterface DisplayErrorProps {\n error?: Failure\n fields?: string[]\n}\n\nexport const hasError = (field?: string, error?: Failure): boolean => {\n if (field && error && error.errors) {\n for (const err of error.errors) {\n if (err.field === field) {\n return true\n }\n }\n }\n return false\n}\n\nexport const DisplayError = (props: DisplayErrorProps) => {\n if (!props.error || !props.error.errors) {\n return null\n }\n\n const dict = props.error.errors.reduce((result, err) => {\n result[err.field || \"\"] = result[err.field || \"\"] || []\n result[err.field || \"\"].push(err.message)\n return result\n }, {} as { [key: string]: string[] })\n\n let items: JSX.Element[] = []\n\n if (dict[\"\"] && !props.fields) {\n items = arrayToTag(dict[\"\"])\n } else if (props.fields) {\n for (const field of props.fields || Object.keys(dict)) {\n if (Object.prototype.hasOwnProperty.call(dict, field)) {\n const tags = arrayToTag(dict[field])\n tags.forEach((t) => items.push(t))\n }\n }\n }\n\n return items.length > 0 ? (\n
    \n
      {items}
    \n
    \n ) : null\n}\n","import React from \"react\"\nimport { classSet } from \"@fider/services\"\nimport { ValidationContext } from \"./Form\"\nimport { DisplayError, hasError } from \"./DisplayError\"\nimport { Icon } from \"@fider/components\"\n\nimport \"./Input.scss\"\nimport { HStack } from \"@fider/components/layout\"\n\ninterface InputProps {\n field: string\n label?: string\n className?: string\n autoComplete?: string\n autoFocus?: boolean\n noTabFocus?: boolean\n afterLabel?: JSX.Element\n icon?: SpriteSymbol\n maxLength?: number\n value?: string\n disabled?: boolean\n suffix?: string | JSX.Element\n placeholder?: string\n onIconClick?: () => void\n onFocus?: () => void\n inputRef?: React.MutableRefObject\n onChange?: (value: string) => void\n}\n\nexport const Input: React.FunctionComponent = (props) => {\n const onChange = (e: React.FormEvent) => {\n if (props.onChange) {\n props.onChange(e.currentTarget.value)\n }\n }\n\n const suffix = typeof props.suffix === \"string\" ? {props.suffix} : props.suffix\n\n const icon = props.icon ? : undefined\n\n return (\n \n {(ctx) => (\n \n {!!props.label && (\n \n )}\n \n \n {icon}\n {suffix}\n \n \n {props.children}\n
    \n )}\n \n )\n}\n","import \"./ImageUploader.scss\"\n\nimport React from \"react\"\nimport { ValidationContext } from \"./Form\"\nimport { DisplayError, hasError } from \"./DisplayError\"\nimport { classSet, fileToBase64, uploadedImageURL } from \"@fider/services\"\nimport { Button, Icon, Modal } from \"@fider/components\"\nimport { ImageUpload } from \"@fider/models\"\nimport IconPhotograph from \"@fider/assets/images/heroicons-photograph.svg\"\n\nconst hardFileSizeLimit = 5 * 1024 * 1024\n\ninterface ImageUploaderProps {\n instanceID?: string\n field: string\n label?: string\n bkey?: string\n disabled?: boolean\n onChange(state: ImageUpload, instanceID?: string, previewURL?: string): void\n}\n\ninterface ImageUploaderState extends ImageUpload {\n previewURL?: string\n showModal: boolean\n}\n\nexport class ImageUploader extends React.Component {\n private fileSelector?: HTMLInputElement | null\n\n constructor(props: ImageUploaderProps) {\n super(props)\n this.state = {\n upload: undefined,\n remove: false,\n showModal: false,\n previewURL: uploadedImageURL(this.props.bkey),\n }\n }\n\n public fileChanged = async (e: React.ChangeEvent) => {\n if (e.target.files && e.target.files[0]) {\n const file = e.target.files[0]\n if (file.size > hardFileSizeLimit) {\n alert(\"The image size must be smaller than 5MB.\")\n return\n }\n\n const base64 = await fileToBase64(file)\n this.setState(\n {\n bkey: this.props.bkey,\n upload: {\n fileName: file.name,\n content: base64,\n contentType: file.type,\n },\n remove: false,\n previewURL: `data:${file.type};base64,${base64}`,\n },\n () => {\n this.props.onChange(this.state, this.props.instanceID, this.state.previewURL)\n }\n )\n }\n }\n\n public removeFile = async () => {\n if (this.fileSelector) {\n this.fileSelector.value = \"\"\n }\n\n this.setState(\n {\n bkey: this.props.bkey,\n remove: true,\n upload: undefined,\n previewURL: undefined,\n },\n () => {\n this.props.onChange(\n {\n bkey: this.state.bkey,\n remove: this.state.remove,\n upload: this.state.upload,\n },\n this.props.instanceID,\n this.state.previewURL\n )\n }\n )\n }\n\n public selectFile = async () => {\n if (this.fileSelector) {\n this.fileSelector.click()\n }\n }\n\n private openModal = () => {\n this.setState({ showModal: true })\n }\n\n private closeModal = async () => {\n this.setState({ showModal: false })\n }\n\n private modal() {\n return (\n \n {this.props.bkey ? \"\" : \"\"}\n\n \n \n \n \n )\n }\n\n public render() {\n const isUploading = !!this.state.upload\n const hasFile = (!this.state.remove && this.props.bkey) || isUploading\n\n return (\n \n {(ctx) => (\n \n {this.modal()}\n {this.props.label && }\n\n {hasFile && (\n
    \n \"\"\n {!this.props.disabled && (\n \n )}\n
    \n )}\n\n (this.fileSelector = e)} type=\"file\" onChange={this.fileChanged} accept=\"image/*\" />\n {!hasFile && (\n \n )}\n \n {this.props.children}\n \n )}\n
    \n )\n }\n}\n","import React from \"react\"\nimport { ImageUploader } from \"./ImageUploader\"\nimport { ImageUpload } from \"@fider/models\"\nimport { ValidationContext, hasError, DisplayError } from \"@fider/components\"\nimport { classSet } from \"@fider/services\"\n\nimport \"./MultiImageUploader.scss\"\n\ninterface MultiImageUploaderProps {\n field: string\n maxUploads: number\n bkeys?: string[]\n onChange?: (uploads: ImageUpload[]) => void\n}\n\ninterface MultiImageUploaderInstances {\n [key: string]: {\n element: JSX.Element\n upload?: ImageUpload\n }\n}\n\ninterface MultiImageUploaderState {\n count: number\n instances: MultiImageUploaderInstances\n removed: ImageUpload[]\n}\n\nexport class MultiImageUploader extends React.Component {\n constructor(props: MultiImageUploaderProps) {\n super(props)\n\n let count = 1\n const instances = {}\n if (props.bkeys) {\n for (const bkey of props.bkeys) {\n count++\n this.addNewElement(instances, bkey)\n }\n }\n\n if (count <= this.props.maxUploads) {\n count++\n this.addNewElement(instances)\n }\n\n this.state = { instances, count, removed: [] }\n }\n\n private imageUploaded = (upload: ImageUpload, instanceID: string) => {\n const instances = { ...this.state.instances }\n const removed = [...this.state.removed]\n let count = this.state.count\n if (upload.remove) {\n if (upload.bkey) {\n removed.push(upload)\n }\n delete instances[instanceID]\n if (--count === this.props.maxUploads) {\n this.addNewElement(instances)\n }\n } else {\n instances[instanceID].upload = upload\n if (count++ <= this.props.maxUploads) {\n this.addNewElement(instances)\n }\n }\n this.setState({ instances, count, removed }, this.triggerOnChange)\n }\n\n private triggerOnChange() {\n if (this.props.onChange) {\n const uploads = Object.keys(this.state.instances)\n .map((k) => this.state.instances[k].upload)\n .concat(this.state.removed)\n .filter((x) => !!x) as ImageUpload[]\n this.props.onChange(uploads)\n }\n }\n\n private addNewElement(instances: MultiImageUploaderInstances, bkey?: string) {\n const id = btoa(Math.random().toString())\n instances[id] = {\n element: ,\n }\n }\n\n public render() {\n const elements = Object.keys(this.state.instances).map((k) => this.state.instances[k].element)\n return (\n \n {(ctx) => (\n \n
    {elements}
    \n \n \n )}\n
    \n )\n }\n}\n","import React from \"react\"\nimport { classSet } from \"@fider/services\"\nimport { ValidationContext } from \"../\"\nimport { DisplayError, hasError } from \"./DisplayError\"\nimport Textarea from \"react-textarea-autosize\"\n\nimport \"./TextArea.scss\"\n\ninterface TextAreaProps {\n label?: string\n field: string\n value?: string\n disabled?: boolean\n minRows?: number\n placeholder?: string\n afterLabel?: JSX.Element\n onChange?: (value: string) => void\n inputRef?: React.MutableRefObject\n onFocus?: React.FocusEventHandler\n className?: string\n}\n\nexport const TextArea: React.FunctionComponent = (props) => {\n const onChange = (e: React.FormEvent) => {\n if (props.onChange) {\n props.onChange(e.currentTarget.value)\n }\n }\n\n return (\n \n {(ctx) => (\n <>\n
    \n {!!props.label && (\n \n )}\n \n \n {props.children}\n
    \n \n )}\n
    \n )\n}\n","import { HStack, VStack } from \"@fider/components/layout\"\nimport React, { useState } from \"react\"\n\nimport \"./RadioButton.scss\"\n\ninterface RadioButtonOption {\n value: string\n label: string\n}\n\ninterface RadioButtonProps {\n label: string\n field: string\n defaultOption: RadioButtonOption\n options: RadioButtonOption[]\n onSelect?: (value: RadioButtonOption) => void\n}\n\nexport const RadioButton = (props: RadioButtonProps) => {\n const [selected, setSelected] = useState(props.defaultOption)\n\n const onChange = (option: RadioButtonOption) => () => {\n setSelected(option)\n props.onSelect?.(option)\n }\n\n const inputs = props.options.map((option) => (\n \n \n \n \n ))\n\n return (\n
    \n \n {inputs}\n
    \n )\n}\n","import React from \"react\"\nimport { classSet } from \"@fider/services\"\nimport { ValidationContext } from \"./Form\"\nimport { DisplayError, hasError } from \"./DisplayError\"\n\nimport \"./Select.scss\"\n\nexport interface SelectOption {\n value: string\n label: string\n}\n\ninterface SelectProps {\n field: string\n label?: string\n maxLength?: number\n defaultValue?: string\n options: SelectOption[]\n onChange?: (option?: SelectOption) => void\n}\n\nexport const Select: React.FunctionComponent = (props) => {\n const getOption = (value?: string) => {\n if (value && props.options) {\n const filtered = props.options.filter((x) => x.value === value)\n if (filtered && filtered.length > 0) {\n return filtered[0]\n }\n }\n }\n const [selected, setSelected] = React.useState(getOption(props.defaultValue))\n const onChange = (e: React.FormEvent) => {\n let selected: SelectOption | undefined\n if (e.currentTarget.value) {\n const options = props.options.filter((o) => o.value === e.currentTarget.value)\n if (options && options.length > 0) {\n selected = options[0]\n }\n }\n\n setSelected(selected)\n if (props.onChange) {\n props.onChange(selected)\n }\n }\n\n return (\n \n {(ctx) => (\n <>\n
    \n {!!props.label && }\n \n {props.options.map((option) => (\n \n ))}\n \n \n {props.children}\n
    \n \n )}\n
    \n )\n}\n","import React from \"react\"\nimport { classSet } from \"@fider/services\"\nimport { ValidationContext } from \"./Form\"\nimport { DisplayError, hasError } from \"./DisplayError\"\n\ninterface FieldProps {\n className?: string\n label?: string\n field?: string\n afterLabel?: JSX.Element\n}\n\nexport const Field: React.FunctionComponent = (props) => {\n const fields = props.field ? [props.field] : undefined\n return (\n \n {(ctx) => (\n \n {!!props.label && (\n \n )}\n {props.children}\n \n \n )}\n \n )\n}\n","import React, { useState } from \"react\"\nimport { classSet } from \"@fider/services\"\nimport { DisplayError, ValidationContext, hasError } from \"../\"\nimport { HStack } from \"@fider/components/layout\"\n\nimport \"./Checkbox.scss\"\n\ninterface CheckboxProps {\n field: string\n checked?: boolean\n onChange?: (checked: boolean) => void\n}\n\nexport const Checkbox: React.FC = (props) => {\n const [checked, setChecked] = useState(props.checked || false)\n\n const onChange = (e: React.ChangeEvent) => {\n const isChecked: boolean = e.currentTarget.checked\n\n setChecked(isChecked)\n if (props.onChange) {\n props.onChange(isChecked)\n }\n }\n\n return (\n \n {(ctx) => (\n \n
    \n \n \n \n \n \n
    \n \n )}\n
    \n )\n}\n","import React, { useState } from \"react\"\nimport { uploadedImageURL } from \"@fider/services\"\nimport { Modal, Button, Loader } from \"@fider/components\"\n\nimport \"./ImageViewer.scss\"\nimport { Trans } from \"@lingui/macro\"\n\ninterface ImageViewerModalProps {\n isOpen: boolean\n imgSrc: string | undefined\n loadedPreview: boolean\n onPreviewLoad: () => void\n onClose: () => void\n}\n\nconst ImageViewerModal = (props: ImageViewerModalProps) => (\n \n \n {!props.loadedPreview && }\n \"\"\n \n\n \n \n \n \n)\n\ninterface ImageViewerProps {\n bkey: string\n}\n\nexport const ImageViewer = (props: ImageViewerProps) => {\n const [showModal, setShowModal] = useState(false)\n const [loadedThumbnail, setLoadedThumbnail] = useState(false)\n const [loadedPreview, setLoadedPreview] = useState(false)\n\n const openModal = () => {\n if (loadedThumbnail) {\n setShowModal(true)\n }\n }\n\n const closeModal = () => {\n setShowModal(false)\n }\n\n const onThumbnailLoad = () => {\n setLoadedThumbnail(true)\n }\n\n const onPreviewLoad = () => {\n setLoadedPreview(true)\n }\n\n return (\n
    \n \n {!loadedThumbnail && }\n \"\"\n
    \n )\n}\n","import React from \"react\"\nimport { markdown, truncate } from \"@fider/services\"\n\nimport \"./Markdown.scss\"\n\ninterface MarkdownProps {\n className?: string\n text?: string\n maxLength?: number\n style: \"full\" | \"plainText\"\n}\n\nexport const Markdown = (props: MarkdownProps) => {\n if (!props.text) {\n return null\n }\n\n const html = markdown[props.style](props.text)\n const className = `c-markdown ${props.className || \"\"}`\n const tagName = props.style === \"plainText\" ? \"p\" : \"div\"\n\n return React.createElement(tagName, {\n className,\n dangerouslySetInnerHTML: { __html: props.maxLength ? truncate(html, props.maxLength) : html },\n })\n}\n","import React from \"react\"\nimport { useFider } from \"@fider/hooks\"\n\nimport \"./DevBanner.scss\"\n\nexport const DevBanner = () => {\n const fider = useFider()\n\n if (fider.isProduction()) {\n return null\n }\n\n return
    DEV
    \n}\n","import \"./Avatar.scss\"\n\nimport React from \"react\"\nimport { UserRole } from \"@fider/models\"\n\ninterface AvatarProps {\n user: {\n role?: UserRole\n avatarURL: string\n name: string\n }\n size?: \"small\" | \"normal\"\n}\n\nexport const Avatar = (props: AvatarProps) => {\n const size = props.size === \"small\" ? \"h-6 w-6\" : \"h-8 w-8\"\n return {props.user.name}\n}\n","import \"./AvatarStack.scss\"\n\nimport React from \"react\"\nimport { UserRole } from \"@fider/models\"\nimport { Avatar } from \"./Avatar\"\nimport { classSet } from \"@fider/services\"\n\ninterface AvatarStackProps {\n overlap?: boolean\n users: Array<{\n role?: UserRole\n avatarURL: string\n name: string\n }>\n}\n\nexport const AvatarStack = (props: AvatarStackProps) => {\n const classes = classSet({\n \"c-avatar-stack\": true,\n \"c-avatar-stack--overlap\": props.overlap ?? true,\n })\n\n return (\n
    \n {props.users.map((x, i) => (\n \n ))}\n
    \n )\n}\n","import \"./Message.scss\"\n\nimport React from \"react\"\nimport { classSet } from \"@fider/services\"\nimport IconCheckCircle from \"@fider/assets/images/heroicons-check-circle.svg\"\nimport IconExclamationCircle from \"@fider/assets/images/heroicons-exclamation-circle.svg\"\nimport IconExclamation from \"@fider/assets/images/heroicons-exclamation.svg\"\nimport { HStack } from \"@fider/components/layout\"\nimport { Icon } from \"./Icon\"\n\ninterface MessageProps {\n type: \"success\" | \"warning\" | \"error\"\n className?: string\n alignment?: \"center\"\n showIcon?: boolean\n}\n\nexport const Message: React.FunctionComponent = (props) => {\n const className = classSet({\n \"c-message\": true,\n [`c-message--${props.type}`]: true,\n [`c-message--icon`]: props.showIcon === true,\n [`${props.className}`]: props.className,\n })\n\n const icon = props.type === \"error\" ? IconExclamation : props.type === \"warning\" ? IconExclamationCircle : IconCheckCircle\n\n return (\n \n {props.showIcon === true && }\n {props.children}\n \n )\n}\n","import \"./Hint.scss\"\n\nimport React, { useState } from \"react\"\nimport IconX from \"@fider/assets/images/heroicons-x.svg\"\nimport { HStack } from \"@fider/components/layout\"\nimport { cache } from \"@fider/services\"\nimport { Icon } from \"./Icon\"\n\ninterface HintProps {\n permanentCloseKey?: string\n condition?: boolean\n}\n\nexport const Hint: React.FC = (props) => {\n const cacheKey: string | undefined = props.permanentCloseKey ? `Hint-Closed-${props.permanentCloseKey}` : undefined\n const [isClosed, setIsClosed] = useState(cacheKey ? cache.local.has(cacheKey) : false)\n\n const close = () => {\n if (cacheKey) {\n cache.local.set(cacheKey, \"true\")\n }\n setIsClosed(true)\n }\n\n if (props.condition === false || isClosed) {\n return null\n }\n\n return (\n \n {props.children}\n {cacheKey && }\n \n )\n}\n","import React from \"react\"\nimport { Modal, Checkbox } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\nimport { Trans } from \"@lingui/macro\"\n\ninterface LegalAgreementProps {\n onChange: (agreed: boolean) => void\n}\n\nexport const TermsOfService = () => {\n const fider = useFider()\n\n if (fider.settings.hasLegal) {\n return (\n \n Terms of Service\n \n )\n }\n return null\n}\n\nexport const PrivacyPolicy = () => {\n const fider = useFider()\n\n if (fider.settings.hasLegal) {\n return (\n \n Privacy Policy\n \n )\n }\n return null\n}\n\nexport const LegalNotice = () => {\n const fider = useFider()\n\n if (fider.settings.hasLegal) {\n return (\n

    \n \n By signing in, you agree to the and .\n \n

    \n )\n }\n return null\n}\n\nexport const LegalFooter = () => {\n const fider = useFider()\n\n if (fider.settings.hasLegal) {\n return (\n \n \n \n )\n }\n return null\n}\n\nexport const LegalAgreement: React.FunctionComponent = (props) => {\n const fider = useFider()\n\n if (fider.settings.hasLegal) {\n return (\n \n \n I have read and agree to the and .\n \n \n )\n }\n return null\n}\n","import React from \"react\"\nimport { Button, OAuthProviderLogo } from \"@fider/components\"\n\ninterface SocialSignInButtonProps {\n option: {\n displayName: string\n provider?: string\n url?: string\n logoBlobKey?: string\n logoURL?: string\n }\n className?: string\n redirectTo?: string\n}\n\nexport const SocialSignInButton = (props: SocialSignInButtonProps) => {\n const redirectTo = props.redirectTo || window.location.href\n const href = props.option.url ? `${props.option.url}?redirect=${redirectTo}` : undefined\n\n return (\n \n )\n}\n","import \"./SignInControl.scss\"\n\nimport React, { useState } from \"react\"\nimport { SocialSignInButton, Form, Button, Input, Message } from \"@fider/components\"\nimport { Divider } from \"@fider/components/layout\"\nimport { device, actions, Failure, isCookieEnabled } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport { Trans } from \"@lingui/macro\"\n\ninterface SignInControlProps {\n useEmail: boolean\n redirectTo?: string\n onEmailSent?: (email: string) => void\n}\n\nexport const SignInControl: React.FunctionComponent = (props) => {\n const fider = useFider()\n const [showEmailForm, setShowEmailForm] = useState(fider.session.tenant ? fider.session.tenant.isEmailAuthAllowed : true)\n const [email, setEmail] = useState(\"\")\n const [error, setError] = useState(undefined)\n\n const forceShowEmailForm = (e: React.MouseEvent) => {\n e.preventDefault()\n setShowEmailForm(true)\n }\n\n const signIn = async () => {\n const result = await actions.signIn(email)\n if (result.ok) {\n setEmail(\"\")\n setError(undefined)\n if (props.onEmailSent) {\n props.onEmailSent(email)\n }\n } else if (result.error) {\n setError(result.error)\n }\n }\n\n const providersLen = fider.settings.oauth.length\n\n if (!isCookieEnabled()) {\n return (\n \n

    Cookies Required

    \n

    Cookies are not enabled on your browser. Please enable cookies in your browser preferences to continue.

    \n
    \n )\n }\n\n return (\n
    \n {providersLen > 0 && (\n <>\n
    \n {fider.settings.oauth.map((o) => (\n \n \n \n ))}\n
    \n {props.useEmail && }\n \n )}\n\n {props.useEmail &&\n (showEmailForm ? (\n
    \n

    \n Enter your email address to sign in\n

    \n
    \n \n Sign in\n \n }\n />\n \n {!fider.session.tenant.isEmailAuthAllowed && (\n

    \n Currently only allowed to sign in to an administrator account\n

    \n )}\n
    \n ) : (\n
    \n

    \n \n Email authentication has been disabled by an administrator. If you have an administrator account and need to bypass this restriction, please{\" \"}\n \n click here\n \n .\n \n

    \n
    \n ))}\n
    \n )\n}\n","import React from \"react\"\nimport { classSet, formatDate, timeSince } from \"@fider/services\"\n\ninterface MomentText {\n locale: string\n date: Date | string\n className?: string\n format?: \"relative\" | \"full\" | \"short\" | \"date\"\n}\n\nexport const Moment = (props: MomentText) => {\n if (!props.date) {\n return \n }\n\n const format = props.format || \"relative\"\n\n const now = new Date()\n const date = props.date instanceof Date ? props.date : new Date(props.date)\n const diff = (now.getTime() - date.getTime()) / (60 * 60 * 24 * 1000)\n const display =\n diff >= 365 && format === \"relative\"\n ? formatDate(props.locale, props.date, \"short\")\n : format === \"relative\"\n ? timeSince(props.locale, now, date)\n : format === \"date\"\n ? formatDate(props.locale, props.date, \"date\")\n : formatDate(props.locale, props.date, format)\n\n const tooltip = props.format === \"short\" ? formatDate(props.locale, props.date, \"full\") : undefined\n\n const className = classSet({\n ...(props.className ? { [props.className]: true } : {}),\n date: true,\n })\n\n return (\n \n {display}\n \n )\n}\n","import \"./Modal.scss\"\n\nimport React, { useEffect, useRef } from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { classSet } from \"@fider/services\"\n\ninterface ModalWindowProps {\n className?: string\n isOpen: boolean\n size?: \"small\" | \"large\" | \"fluid\"\n canClose?: boolean\n center?: boolean\n onClose: () => void\n}\n\ninterface ModalFooterProps {\n align?: \"left\" | \"center\" | \"right\"\n children?: React.ReactNode\n}\n\nconst ModalWindow: React.FunctionComponent = (props) => {\n const root = useRef(document.getElementById(\"root-modal\"))\n\n useEffect(() => {\n if (props.isOpen) {\n document.body.style.overflow = \"hidden\"\n document.addEventListener(\"keydown\", keyDown, false)\n } else {\n document.body.style.overflow = \"\"\n document.removeEventListener(\"keydown\", keyDown, false)\n }\n }, [props.isOpen])\n\n const swallow = (evt: React.MouseEvent) => {\n evt.stopPropagation()\n }\n\n const keyDown = (event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n // ESC\n close()\n }\n }\n\n const close = () => {\n if (props.canClose) {\n props.onClose()\n }\n }\n\n if (!props.isOpen || !root.current) {\n return null\n }\n\n const className = classSet({\n \"c-modal-window\": true,\n [`${props.className}`]: !!props.className,\n \"c-modal-window--center\": props.center,\n [`c-modal-window--${props.size}`]: true,\n })\n\n return ReactDOM.createPortal(\n
    \n
    \n
    \n {props.children}\n
    \n
    \n
    ,\n root.current\n )\n}\n\nModalWindow.defaultProps = {\n size: \"small\",\n canClose: true,\n center: true,\n}\n\nconst Header = (props: { children: React.ReactNode }) =>
    {props.children}
    \nconst Content = (props: { children: React.ReactNode }) =>
    {props.children}
    \nconst Footer = (props: ModalFooterProps) => {\n const align = props.align || \"right\"\n const className = classSet({\n \"c-modal-footer\": true,\n [`c-modal-footer--${align}`]: true,\n })\n return
    {props.children}
    \n}\n\nexport const Modal = {\n Window: ModalWindow,\n Header,\n Content,\n Footer,\n}\n","import \"./UserName.scss\"\n\nimport React from \"react\"\nimport { isCollaborator, UserRole } from \"@fider/models\"\nimport { classSet } from \"@fider/services\"\n\ninterface UserNameProps {\n user: {\n id: number\n name: string\n role?: UserRole\n email?: string\n }\n showEmail?: boolean\n}\n\nexport const UserName = (props: UserNameProps) => {\n const isStaff = props.user.role && isCollaborator(props.user.role)\n const className = classSet({\n \"c-username\": true,\n \"c-username--staff\": isStaff,\n })\n\n return (\n
    \n {props.user.name || \"Anonymous\"}\n <>{props.showEmail && props.user.email && ({props.user.email})}\n\n {isStaff && (\n
    \n \n \n \n
    \n )}\n
    \n )\n}\n","import \"./Loader.scss\"\n\nimport React, { useState } from \"react\"\nimport { useTimeout } from \"@fider/hooks\"\nimport { classSet } from \"@fider/services\"\n\ninterface LoaderProps {\n text?: string\n className?: string\n}\n\nexport function Loader(props: LoaderProps) {\n const [show, setShow] = useState(false)\n\n useTimeout(() => {\n setShow(true)\n }, 500)\n\n const className = classSet({\n \"c-loader\": true,\n [props.className || \"\"]: props.className,\n })\n\n return show ? (\n
    \n
    \n {props.text && {props.text}}\n
    \n ) : null\n}\n","import React from \"react\"\nimport { uploadedImageURL } from \"@fider/services\"\n// import { useFider } from \"@fider/hooks\"\nimport { Tenant } from \"@fider/models\"\n\ntype Size = 24 | 50 | 100 | 200\n\ninterface TenantLogoProps {\n size: Size\n useFiderIfEmpty?: boolean\n}\n\nexport const TenantLogoURL = (tenant: Tenant, size: Size): string | undefined => {\n if (tenant && tenant.logoBlobKey) {\n return uploadedImageURL(tenant.logoBlobKey, size)\n }\n return undefined\n}\n\nexport const TenantLogo = (props: TenantLogoProps) => {\n // const fider = useFider()\n\n // const tenant = fider.session.tenant\n // if (tenant && tenant.logoBlobKey) {\n // return {tenant.name}\n // } else if (props.useFiderIfEmpty) {\n // return \"Fider\"\n return \"Human\n // }\n // return null\n}\n\nTenantLogo.defaultProps = {\n useFiderIfEmpty: false,\n}\n\ninterface OAuthProviderLogoProps {\n option: {\n provider?: string\n displayName: string\n logoBlobKey?: string\n }\n}\n\nconst systemProvidersLogo: { [key: string]: string } = {\n google: `data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQwMCA0MDAiIGhlaWdodD0iNDAwcHgiIGlkPSJMYXllcl8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0MDAgNDAwIiB3aWR0aD0iNDAwcHgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxnPjxwYXRoIGQ9Ik0xNDIuOSwyNC4yQzk3LjYsMzkuNyw1OSw3My42LDM3LjUsMTE2LjVjLTcuNSwxNC44LTEyLjksMzAuNS0xNi4yLDQ2LjhjLTguMiw0MC40LTIuNSw4My41LDE2LjEsMTIwLjMgICBjMTIuMSwyNCwyOS41LDQ1LjQsNTAuNSw2Mi4xYzE5LjksMTUuOCw0MywyNy42LDY3LjYsMzQuMWMzMSw4LjMsNjQsOC4xLDk1LjIsMWMyOC4yLTYuNSw1NC45LTIwLDc2LjItMzkuNiAgIGMyMi41LTIwLjcsMzguNi00Ny45LDQ3LjEtNzcuMmM5LjMtMzEuOSwxMC41LTY2LDQuNy05OC44Yy01OC4zLDAtMTE2LjcsMC0xNzUsMGMwLDI0LjIsMCw0OC40LDAsNzIuNmMzMy44LDAsNjcuNiwwLDEwMS40LDAgICBjLTMuOSwyMy4yLTE3LjcsNDQuNC0zNy4yLDU3LjVjLTEyLjMsOC4zLTI2LjQsMTMuNi00MSwxNi4yYy0xNC42LDIuNS0yOS44LDIuOC00NC40LTAuMWMtMTQuOS0zLTI5LTkuMi00MS40LTE3LjkgICBjLTE5LjgtMTMuOS0zNC45LTM0LjItNDIuNi01Ny4xYy03LjktMjMuMy04LTQ5LjIsMC03Mi40YzUuNi0xNi40LDE0LjgtMzEuNSwyNy00My45YzE1LTE1LjQsMzQuNS0yNi40LDU1LjYtMzAuOSAgIGMxOC0zLjgsMzctMy4xLDU0LjYsMi4yYzE1LDQuNSwyOC44LDEyLjgsNDAuMSwyMy42YzExLjQtMTEuNCwyMi44LTIyLjgsMzQuMi0zNC4yYzYtNi4xLDEyLjMtMTIsMTguMS0xOC4zICAgYy0xNy4zLTE2LTM3LjctMjguOS01OS45LTM3LjFDMjI4LjIsMTAuNiwxODMuMiwxMC4zLDE0Mi45LDI0LjJ6IiBmaWxsPSIjRkZGRkZGIi8+PGc+PHBhdGggZD0iTTE0Mi45LDI0LjJjNDAuMi0xMy45LDg1LjMtMTMuNiwxMjUuMywxLjFjMjIuMiw4LjIsNDIuNSwyMSw1OS45LDM3LjFjLTUuOCw2LjMtMTIuMSwxMi4yLTE4LjEsMTguMyAgICBjLTExLjQsMTEuNC0yMi44LDIyLjgtMzQuMiwzNC4yYy0xMS4zLTEwLjgtMjUuMS0xOS00MC4xLTIzLjZjLTE3LjYtNS4zLTM2LjYtNi4xLTU0LjYtMi4yYy0yMSw0LjUtNDAuNSwxNS41LTU1LjYsMzAuOSAgICBjLTEyLjIsMTIuMy0yMS40LDI3LjUtMjcsNDMuOWMtMjAuMy0xNS44LTQwLjYtMzEuNS02MS00Ny4zQzU5LDczLjYsOTcuNiwzOS43LDE0Mi45LDI0LjJ6IiBmaWxsPSIjRUE0MzM1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0yMS40LDE2My4yYzMuMy0xNi4yLDguNy0zMiwxNi4yLTQ2LjhjMjAuMywxNS44LDQwLjYsMzEuNSw2MSw0Ny4zYy04LDIzLjMtOCw0OS4yLDAsNzIuNCAgICBjLTIwLjMsMTUuOC00MC42LDMxLjYtNjAuOSw0Ny4zQzE4LjksMjQ2LjcsMTMuMiwyMDMuNiwyMS40LDE2My4yeiIgZmlsbD0iI0ZCQkMwNSIvPjwvZz48Zz48cGF0aCBkPSJNMjAzLjcsMTY1LjFjNTguMywwLDExNi43LDAsMTc1LDBjNS44LDMyLjcsNC41LDY2LjgtNC43LDk4LjhjLTguNSwyOS4zLTI0LjYsNTYuNS00Ny4xLDc3LjIgICAgYy0xOS43LTE1LjMtMzkuNC0zMC42LTU5LjEtNDUuOWMxOS41LTEzLjEsMzMuMy0zNC4zLDM3LjItNTcuNWMtMzMuOCwwLTY3LjYsMC0xMDEuNCwwQzIwMy43LDIxMy41LDIwMy43LDE4OS4zLDIwMy43LDE2NS4xeiIgZmlsbD0iIzQyODVGNCIvPjwvZz48Zz48cGF0aCBkPSJNMzcuNSwyODMuNWMyMC4zLTE1LjcsNDAuNi0zMS41LDYwLjktNDcuM2M3LjgsMjIuOSwyMi44LDQzLjIsNDIuNiw1Ny4xYzEyLjQsOC43LDI2LjYsMTQuOSw0MS40LDE3LjkgICAgYzE0LjYsMywyOS43LDIuNiw0NC40LDAuMWMxNC42LTIuNiwyOC43LTcuOSw0MS0xNi4yYzE5LjcsMTUuMywzOS40LDMwLjYsNTkuMSw0NS45Yy0yMS4zLDE5LjctNDgsMzMuMS03Ni4yLDM5LjYgICAgYy0zMS4yLDcuMS02NC4yLDcuMy05NS4yLTFjLTI0LjYtNi41LTQ3LjctMTguMi02Ny42LTM0LjFDNjcsMzI4LjksNDkuNiwzMDcuNSwzNy41LDI4My41eiIgZmlsbD0iIzM0QTg1MyIvPjwvZz48L2c+PC9zdmc+`,\n facebook: `data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0L0RURC9zdmcxMC5kdGQnPjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzIgMzIiIGhlaWdodD0iMzJweCIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDMyIDMyIiB3aWR0aD0iMzJweCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGc+PHBhdGggZD0iTTMyLDMwYzAsMS4xMDQtMC44OTYsMi0yLDJIMmMtMS4xMDQsMC0yLTAuODk2LTItMlYyYzAtMS4xMDQsMC44OTYtMiwyLTJoMjhjMS4xMDQsMCwyLDAuODk2LDIsMlYzMHoiIGZpbGw9IiMzQjU5OTgiLz48cGF0aCBkPSJNMjIsMzJWMjBoNGwxLTVoLTV2LTJjMC0yLDEuMDAyLTMsMy0zaDJWNWMtMSwwLTIuMjQsMC00LDBjLTMuNjc1LDAtNiwyLjg4MS02LDd2M2gtNHY1aDR2MTJIMjJ6IiBmaWxsPSIjRkZGRkZGIiBpZD0iZiIvPjwvZz48Zy8+PGcvPjxnLz48Zy8+PGcvPjxnLz48L3N2Zz4=`,\n github:\n \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0L0RURC9zdmcxMC5kdGQnPjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzIgMzIiIGhlaWdodD0iMzJweCIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDMyIDMyIiB3aWR0aD0iMzJweCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTYuMDAzLDBDNy4xNywwLDAuMDA4LDcuMTYyLDAuMDA4LDE1Ljk5NyAgYzAsNy4wNjcsNC41ODIsMTMuMDYzLDEwLjk0LDE1LjE3OWMwLjgsMC4xNDYsMS4wNTItMC4zMjgsMS4wNTItMC43NTJjMC0wLjM4LDAuMDA4LTEuNDQyLDAtMi43NzcgIGMtNC40NDksMC45NjctNS4zNzEtMi4xMDctNS4zNzEtMi4xMDdjLTAuNzI3LTEuODQ4LTEuNzc1LTIuMzQtMS43NzUtMi4zNGMtMS40NTItMC45OTIsMC4xMDktMC45NzMsMC4xMDktMC45NzMgIGMxLjYwNSwwLjExMywyLjQ1MSwxLjY0OSwyLjQ1MSwxLjY0OWMxLjQyNywyLjQ0MywzLjc0MywxLjczNyw0LjY1NCwxLjMyOWMwLjE0Ni0xLjAzNCwwLjU2LTEuNzM5LDEuMDE3LTIuMTM5ICBjLTMuNTUyLTAuNDA0LTcuMjg2LTEuNzc2LTcuMjg2LTcuOTA2YzAtMS43NDcsMC42MjMtMy4xNzQsMS42NDYtNC4yOTJDNy4yOCwxMC40NjQsNi43Myw4LjgzNyw3LjYwMiw2LjYzNCAgYzAsMCwxLjM0My0wLjQzLDQuMzk4LDEuNjQxYzEuMjc2LTAuMzU1LDIuNjQ1LTAuNTMyLDQuMDA1LTAuNTM4YzEuMzU5LDAuMDA2LDIuNzI3LDAuMTgzLDQuMDA1LDAuNTM4ICBjMy4wNTUtMi4wNyw0LjM5Ni0xLjY0MSw0LjM5Ni0xLjY0MWMwLjg3MiwyLjIwMywwLjMyMywzLjgzLDAuMTU5LDQuMjM0YzEuMDIzLDEuMTE4LDEuNjQ0LDIuNTQ1LDEuNjQ0LDQuMjkyICBjMCw2LjE0Ni0zLjc0LDcuNDk4LTcuMzA0LDcuODkzQzE5LjQ3OSwyMy41NDgsMjAsMjQuNTA4LDIwLDI2YzAsMiwwLDMuOTAyLDAsNC40MjhjMCwwLjQyOCwwLjI1OCwwLjkwMSwxLjA3LDAuNzQ2ICBDMjcuNDIyLDI5LjA1NSwzMiwyMy4wNjIsMzIsMTUuOTk3QzMyLDcuMTYyLDI0LjgzOCwwLDE2LjAwMywweiIgZmlsbD0iIzE4MTYxNiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PGcvPjxnLz48Zy8+PGcvPjxnLz48Zy8+PC9zdmc+\",\n}\n\nexport const OAuthProviderLogoURL = (logoBlobKey?: string): string | undefined => {\n if (logoBlobKey) {\n return uploadedImageURL(logoBlobKey, 100)\n }\n return undefined\n}\n\nexport const OAuthProviderLogo = (props: OAuthProviderLogoProps) => {\n if (props.option.logoBlobKey) {\n return {props.option.displayName}\n }\n\n if (props.option.provider && props.option.provider in systemProvidersLogo) {\n return {props.option.displayName}\n }\n\n return null\n}\n","import \"./Toggle.scss\"\n\nimport React, { useState } from \"react\"\nimport { classSet } from \"@fider/services\"\nimport { HStack } from \"../layout\"\nimport { DisplayError, ValidationContext } from \"@fider/components\"\n\ninterface ToggleProps {\n field?: string\n label?: string\n active: boolean\n disabled?: boolean\n onToggle?: (active: boolean) => void\n}\n\nexport const Toggle: React.FC = (props) => {\n const [active, setActive] = useState(props.active)\n\n const toggle = () => {\n if (props.disabled) {\n return\n }\n\n const newActive = !active\n setActive(newActive)\n if (props.onToggle) {\n props.onToggle(newActive)\n }\n }\n\n const className = classSet({\n \"c-toggle\": true,\n \"c-toggle--enabled\": active,\n \"c-toggle--disabled\": !!props.disabled,\n })\n\n return (\n \n {(ctx) => (\n <>\n \n \n {props.label && {props.label}}\n \n {props.field && }\n \n )}\n \n )\n}\n","import React from \"react\"\nimport { classSet } from \"@fider/services\"\n\nimport \"./PoweredByFider.scss\"\n\ninterface PoweredByFiderProps {\n slot: string\n className?: string\n}\n\nexport const PoweredByFider = (props: PoweredByFiderProps) => {\n const source = encodeURIComponent(window?.location?.host || \"\")\n const medium = \"powered-by\"\n const campaign = props.slot\n\n const className = classSet({\n \"c-powered\": true,\n [props.className || \"\"]: props.className,\n })\n\n return (\n \n )\n}\n","import React from \"react\"\nimport { classSet } from \"@fider/services\"\n\ninterface PageTitleLogo {\n title: string\n subtitle?: string\n className?: string\n}\n\nexport const PageTitle = (props: PageTitleLogo) => {\n const className = classSet({\n \"mb-4\": true,\n [`${props.className}`]: props.className,\n })\n\n return (\n
    \n
    {props.title}
    \n
    {props.subtitle}
    \n
    \n )\n}\n","import \"./Dropdown.scss\"\n\nimport React, { createContext, useContext, useEffect, useRef, useState } from \"react\"\nimport { classSet } from \"@fider/services\"\n\ninterface DropdownListItemProps {\n href?: string\n onClick?: () => void\n className?: string\n children: React.ReactNode\n}\n\nconst ListItem = (props: DropdownListItemProps) => {\n const ctx = useContext(DropdownContext)\n const handleClick = () => {\n if (props.onClick) {\n props.onClick()\n }\n\n ctx?.close()\n }\n\n if (props.href) {\n return (\n \n {props.children}\n \n )\n }\n\n return (\n
    \n {props.children}\n
    \n )\n}\n\nconst Divider = () => {\n return
    \n}\n\ninterface DropdownProps {\n renderHandle: JSX.Element\n position?: \"left\" | \"right\"\n onToggled?: (isOpen: boolean) => void\n children: React.ReactNode\n wide?: boolean\n fullsceenSm?: boolean\n}\n\ninterface DropdownContextFuncs {\n close(): void\n}\n\nconst DropdownContext = createContext(null)\nDropdownContext.displayName = \"DropdownContext\"\n\nexport const Dropdown = (props: DropdownProps) => {\n const node = useRef(null)\n const [isOpen, setIsOpen] = useState(false)\n const position = props.position || \"right\"\n\n const changeToggleState = (newState: boolean) => {\n setIsOpen(newState)\n if (props.onToggled) {\n props.onToggled(newState)\n }\n }\n\n const toggleIsOpen = () => {\n changeToggleState(!isOpen)\n }\n\n const close = () => {\n changeToggleState(false)\n }\n\n const handleClick = (e: MouseEvent) => {\n if (node.current && node.current.contains(e.target as Node)) {\n return\n }\n\n close()\n }\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClick)\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClick)\n }\n }, [])\n\n const listClassName = classSet({\n \"c-dropdown__list--wide\": props.wide,\n \"c-dropdown__list shadow-lg\": true,\n \"c-dropdown__list--fullscreen-small\": props.fullsceenSm,\n [`c-dropdown__list--${position}`]: position === \"left\",\n })\n\n return (\n \n
    \n \n {isOpen &&
    {props.children}
    }\n
    \n
    \n )\n}\n\nDropdown.ListItem = ListItem\nDropdown.Divider = Divider\n","import React from \"react\"\n\ninterface MomentProps {\n locale: string\n amount: number\n currency: string\n}\n\nexport const Money = (props: MomentProps) => {\n const formatter = new Intl.NumberFormat(props.locale, {\n style: \"currency\",\n currency: props.currency,\n })\n\n return {formatter.format(props.amount)}\n}\n","import \"./ShowTag.scss\"\n\nimport React from \"react\"\nimport { Tag } from \"@fider/models\"\nimport { classSet } from \"@fider/services\"\nimport ShieldCheck from \"@fider/assets/images/heroicons-shieldcheck.svg\"\nimport { Icon } from \"./common\"\n\ninterface TagProps {\n tag: Tag\n circular?: boolean\n link?: boolean\n}\n\n// const textColor = (color: string) => {\n// const components = getRGB(color)\n// const bgDelta = components.R * 0.299 + components.G * 0.587 + components.B * 0.114\n// return bgDelta > 140 ? \"#333\" : \"#fff\"\n// }\n\nexport const ShowTag = (props: TagProps) => {\n const className = classSet({\n \"c-tag\": true,\n \"c-tag--circular\": props.circular === true,\n })\n\n return (\n \n \n {!props.tag.isPublic && !props.circular && }\n {props.circular ? \"\" : props.tag.name || \"Tag\"}\n \n )\n}\n","import React, { useState } from \"react\"\nimport { SignInModal, TenantLogo, NotificationIndicator, UserMenu } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\nimport { HStack } from \"./layout\"\nimport { Trans } from \"@lingui/macro\"\n\nexport const Header = () => {\n const fider = useFider()\n const [isSignInModalOpen, setIsSignInModalOpen] = useState(false)\n\n const showModal = (e: React.MouseEvent) => {\n e.preventDefault()\n setIsSignInModalOpen(true)\n }\n\n const hideModal = () => setIsSignInModalOpen(false)\n\n return (\n
    \n
    \n \n \n
    \n \n \n \n

    {fider.session.tenant.name}

    \n
    \n {fider.session.isAuthenticated && (\n \n \n \n \n )}\n {!fider.session.isAuthenticated && (\n \n Sign in\n \n )}\n
    \n
    \n
    \n
    \n )\n}\n","import React, { useState, useEffect } from \"react\"\nimport { Modal, SignInControl, LegalFooter } from \"@fider/components\"\nimport { Button } from \"./common\"\nimport { Trans } from \"@lingui/macro\"\n\ninterface SignInModalProps {\n isOpen: boolean\n onClose: () => void\n}\n\nexport const SignInModal: React.StatelessComponent = (props) => {\n const [email, setEmail] = useState(\"\")\n\n useEffect(() => {\n if (email) {\n setTimeout(() => setEmail(\"\"), 5000)\n }\n }, [email])\n\n const onEmailSent = (value: string): void => {\n setEmail(value)\n }\n\n const closeModal = () => {\n setEmail(\"\")\n props.onClose()\n }\n\n const content = email ? (\n <>\n

    \n \n We have just sent a confirmation link to {email}. Click the link and you’ll be signed in.\n \n

    \n

    \n \n

    \n \n ) : (\n \n )\n\n return (\n \n \n Sign in to participate and vote\n \n {content}\n \n \n )\n}\n","import \"./VoteCounter.scss\"\n\nimport React, { useState } from \"react\"\nimport { Post, PostStatus } from \"@fider/models\"\nimport { actions, classSet } from \"@fider/services\"\nimport { Icon, SignInModal } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\nimport FaCaretUp from \"@fider/assets/images/fa-caretup.svg\"\n\nexport interface VoteCounterProps {\n post: Post\n}\n\nexport const VoteCounter = (props: VoteCounterProps) => {\n const fider = useFider()\n const [hasVoted, setHasVoted] = useState(props.post.hasVoted)\n const [votesCount, setVotesCount] = useState(props.post.votesCount)\n const [isSignInModalOpen, setIsSignInModalOpen] = useState(false)\n\n const voteOrUndo = async () => {\n if (!fider.session.isAuthenticated) {\n setIsSignInModalOpen(true)\n return\n }\n\n const action = hasVoted ? actions.removeVote : actions.addVote\n\n const response = await action(props.post.number)\n if (response.ok) {\n setVotesCount(votesCount + (hasVoted ? -1 : 1))\n setHasVoted(!hasVoted)\n }\n }\n\n const hideModal = () => setIsSignInModalOpen(false)\n\n const status = PostStatus.Get(props.post.status)\n const isDisabled = status.closed || fider.isReadOnly\n\n const className = classSet({\n \"border-gray-200 border rounded-md bg-gray-100\": true,\n \"c-vote-counter__button\": true,\n \"c-vote-counter__button--voted\": !status.closed && hasVoted,\n \"c-vote-counter__button--disabled\": isDisabled,\n })\n\n const vote = (\n \n )\n\n const disabled = (\n \n )\n\n return (\n <>\n \n
    {isDisabled ? disabled : vote}
    \n \n )\n}\n","import \"./NotificationIndicator.scss\"\nimport NoDataIllustration from \"@fider/assets/images/undraw-empty.svg\"\n\nimport React, { useEffect, useState } from \"react\"\nimport IconBell from \"@fider/assets/images/heroicons-bell.svg\"\nimport { useFider } from \"@fider/hooks\"\nimport { actions, Fider } from \"@fider/services\"\nimport { Avatar, Icon, Markdown, Moment } from \"./common\"\nimport { Dropdown } from \"./common/Dropdown\"\nimport { Notification } from \"@fider/models\"\nimport { HStack, VStack } from \"./layout\"\n\nimport { Trans } from \"@lingui/macro\"\n\nexport const NotificationItem = ({ notification }: { notification: Notification }) => {\n const openNotification = () => {\n window.location.href = `/notifications/${notification.id}`\n }\n\n return (\n \n \n
    \n \n \n \n \n
    \n
    \n )\n}\n\nconst NotificationIcon = ({ unreadNotifications }: { unreadNotifications: number }) => {\n return (\n <>\n \n \n {unreadNotifications > 0 &&
    }\n \n \n )\n}\n\nexport const NotificationIndicator = () => {\n const fider = useFider()\n const [unreadNotifications, setUnreadNotifications] = useState(0)\n const [showingNotifications, setShowingNotifications] = useState(false)\n const [recent, setRecent] = useState()\n const [unread, setUnread] = useState()\n\n useEffect(() => {\n if (fider.session.isAuthenticated) {\n actions.getTotalUnreadNotifications().then((result) => {\n if (result.ok && result.data > 0) {\n setUnreadNotifications(result.data)\n }\n })\n }\n }, [fider.session.isAuthenticated])\n\n useEffect(() => {\n if (showingNotifications) {\n actions.getAllNotifications().then((result) => {\n if (result) {\n const [unread, recent] = (result.data || []).reduce(\n (result, item) => {\n result[item.read ? 1 : 0].push(item)\n return result\n },\n [[] as Notification[], [] as Notification[]]\n )\n setRecent(recent)\n setUnread(unread)\n setUnreadNotifications(unread.length)\n }\n })\n }\n }, [showingNotifications])\n\n const markAllAsRead = async (e: React.MouseEvent) => {\n e.preventDefault()\n const response = await actions.markAllAsRead()\n if (response.ok) {\n location.reload()\n }\n }\n\n return (\n setShowingNotifications(isOpen)}\n renderHandle={}\n >\n
    \n {showingNotifications && (unread !== undefined || recent !== undefined) && (\n <>\n {unread !== undefined && unread?.length > 0 ? (\n <>\n

    \n Unread notifications\n {unread.length > 1 && (\n \n Mark All as Read\n \n )}\n

    \n \n {unread.map((n) => (\n \n ))}\n \n \n ) : (\n
    \n

    \n No new notifications\n

    \n {recent?.length === 0 && }\n
    \n )}\n {recent !== undefined && recent?.length > 0 && (\n <>\n

    \n Previous notifications\n

    \n \n {recent.map((n) => (\n \n ))}\n \n \n )}\n \n )}\n
    \n \n )\n}\n","import React from \"react\"\nimport { useFider } from \"@fider/hooks\"\nimport { Avatar, Dropdown } from \"./common\"\nimport { Trans } from \"@lingui/macro\"\n\nexport const UserMenu = () => {\n const fider = useFider()\n\n return (\n
    \n }>\n
    {fider.session.user.name}
    \n \n My Settings\n \n \n\n {fider.session.user.isCollaborator && (\n <>\n
    \n Administration\n
    \n \n Site Settings\n \n \n \n )}\n \n Sign out\n \n
    \n
    \n )\n}\n","import React, { useEffect, useState } from \"react\"\nimport { ReactionCount } from \"@fider/models\"\nimport { Icon } from \"@fider/components\"\nimport ReactionAdd from \"@fider/assets/images/reaction-add.svg\"\nimport { HStack } from \"@fider/components/layout\"\nimport { classSet } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport \"./Reactions.scss\"\n\ninterface ReactionsProps {\n emojiSelectorRef: React.RefObject\n toggleReaction: (emoji: string) => void\n reactions?: ReactionCount[]\n}\n\nconst availableEmojis = [\"👍\", \"👎\", \"😄\", \"🎉\", \"😕\", \"❤️\", \"🚀\", \"👀\"]\n\nexport const Reactions: React.FC = ({ emojiSelectorRef, toggleReaction, reactions }) => {\n const fider = useFider()\n const [isEmojiSelectorOpen, setIsEmojiSelectorOpen] = useState(false)\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (emojiSelectorRef.current && !emojiSelectorRef.current.contains(event.target as Node)) {\n setIsEmojiSelectorOpen(false)\n }\n }\n\n document.addEventListener(\"click\", handleClickOutside)\n return () => {\n document.removeEventListener(\"click\", handleClickOutside)\n }\n }, [])\n\n return (\n
    \n \n {fider.session.isAuthenticated && (\n <>\n setIsEmojiSelectorOpen(!isEmojiSelectorOpen)}\n className=\"c-reactions-add-reaction relative text-gray-600 clickable inline-flex items-center px-1 py-1 rounded-full text-xs bg-blue-100 hover:bg-blue-200\"\n >\n \n \n {isEmojiSelectorOpen && (\n
    \n {availableEmojis.map((emoji) => (\n {\n toggleReaction(emoji)\n setIsEmojiSelectorOpen(false)\n }}\n >\n {emoji}\n \n ))}\n
    \n )}\n \n )}\n {reactions !== undefined && (\n <>\n {reactions.map((reaction) => (\n toggleReaction(reaction.emoji) })}\n className={classSet({\n \"inline-flex items-center px-2 py-1 rounded-full text-xs\": true,\n \"bg-blue-100\": reaction.includesMe,\n \"bg-gray-100\": !reaction.includesMe,\n \"clickable hover:bg-blue-200\": fider.session.isAuthenticated && reaction.includesMe,\n \"clickable hover:bg-gray-200\": fider.session.isAuthenticated && !reaction.includesMe,\n })}\n >\n {reaction.emoji} {reaction.count}\n \n ))}\n \n )}\n
    \n
    \n )\n}\n","import React from \"react\"\nimport { useFider } from \"@fider/hooks\"\nimport { Message } from \"./common\"\n\nexport const ReadOnlyNotice = () => {\n const fider = useFider()\n if (!fider.isReadOnly) {\n return null\n }\n\n if (fider.session.isAuthenticated && fider.session.user.isAdministrator) {\n return (\n \n This website is currently in read-only mode because there is no active subscription. Visit{\" \"}\n \n Billing\n {\" \"}\n to subscribe.\n \n )\n }\n\n return (\n \n This website is currently in read-only mode.\n \n )\n}\n","import React from \"react\"\nimport { classSet } from \"@fider/services\"\n\ninterface StackProps {\n className?: string\n children: React.ReactNode\n onClick?: () => void\n divide?: boolean\n justify?: \"between\" | \"evenly\" | \"full\" | \"center\"\n align?: \"start\" | \"center\" | \"end\"\n spacing?: 0 | 1 | 2 | 4 | 6 | 8\n}\n\nconst Stack = (props: StackProps, dir: \"x\" | \"y\") => {\n const spacing = props.spacing === undefined ? 2 : props.spacing\n const className = classSet({\n [`${props.className}`]: props.className,\n flex: true,\n \"flex-x\": dir === \"x\",\n \"flex-y\": dir === \"y\",\n [`flex--spacing-${spacing}`]: spacing > 0 && !props.divide,\n [`flex--divide-${spacing}`]: spacing > 0 && !!props.divide,\n \"justify-between\": props.justify === \"between\",\n \"justify-evenly\": props.justify === \"evenly\",\n \"justify-full\": props.justify === \"full\",\n \"justify-center\": props.justify === \"center\",\n \"flex-items-start\": props.align === \"start\",\n \"flex-items-center\": props.align === \"center\" || (dir === \"x\" && props.align === undefined),\n \"flex-items-end\": props.align === \"end\",\n })\n\n return (\n
    \n {props.children}\n
    \n )\n}\n\nexport const HStack = (props: StackProps) => {\n return Stack(props, \"x\")\n}\n\nexport const VStack = (props: StackProps) => {\n return Stack(props, \"y\")\n}\n","import \"./Divider.scss\"\n\nimport React from \"react\"\nimport { Trans } from \"@lingui/macro\"\n\nexport const Divider = () => {\n return (\n
    \n OR\n
    \n )\n}\n","import { User } from \"./identity\"\n\nexport interface Post {\n id: number\n number: number\n slug: string\n title: string\n description: string\n createdAt: string\n status: string\n user: User\n hasVoted: boolean\n response: PostResponse | null\n votesCount: number\n commentsCount: number\n tags: string[]\n}\n\nexport class PostStatus {\n constructor(public title: string, public value: string, public show: boolean, public closed: boolean, public filterable: boolean) {}\n\n public static Open = new PostStatus(\"Open\", \"open\", false, false, true)\n public static Planned = new PostStatus(\"Planned\", \"planned\", true, false, true)\n public static Started = new PostStatus(\"Started\", \"started\", true, false, true)\n public static Completed = new PostStatus(\"Completed\", \"completed\", true, true, true)\n public static Declined = new PostStatus(\"Declined\", \"declined\", true, true, true)\n public static Duplicate = new PostStatus(\"Duplicate\", \"duplicate\", true, true, true)\n public static Deleted = new PostStatus(\"Deleted\", \"deleted\", false, true, true)\n\n public static Get(value: string): PostStatus {\n for (const status of PostStatus.All) {\n if (status.value === value) {\n return status\n }\n }\n throw new Error(`PostStatus not found for value ${value}.`)\n }\n\n public static All = [PostStatus.Open, PostStatus.Planned, PostStatus.Started, PostStatus.Completed, PostStatus.Duplicate, PostStatus.Declined]\n}\n\nexport interface PostResponse {\n user: User\n text: string\n respondedAt: Date\n original?: {\n number: number\n title: string\n slug: string\n status: string\n }\n}\n\nexport interface ReactionCount {\n emoji: string\n count: number\n includesMe: boolean\n}\n\nexport interface Comment {\n id: number\n content: string\n createdAt: string\n user: User\n attachments?: string[]\n reactionCounts?: ReactionCount[]\n editedAt?: string\n editedBy?: User\n}\n\nexport interface Tag {\n id: number\n slug: string\n name: string\n color: string\n isPublic: boolean\n}\n\nexport interface Vote {\n createdAt: Date\n user: {\n id: number\n name: string\n email: string\n avatarURL: string\n }\n}\n","export interface Tenant {\n id: number\n name: string\n cname: string\n subdomain: string\n locale: string\n invitation: string\n welcomeMessage: string\n status: TenantStatus\n isPrivate: boolean\n logoBlobKey: string\n isEmailAuthAllowed: boolean\n}\n\nexport enum TenantStatus {\n Active = 1,\n Pending = 2,\n Locked = 3,\n Disabled = 4,\n}\n\nexport interface User {\n id: number\n name: string\n email?: string\n role: UserRole\n status: UserStatus\n avatarURL: string\n}\n\nexport enum UserAvatarType {\n Letter = \"letter\",\n Gravatar = \"gravatar\",\n Custom = \"custom\",\n}\n\nexport enum UserStatus {\n Active = \"active\",\n Deleted = \"deleted\",\n Blocked = \"blocked\",\n}\n\nexport enum UserRole {\n Visitor = \"visitor\",\n Collaborator = \"collaborator\",\n Administrator = \"administrator\",\n}\n\nexport const isCollaborator = (role: UserRole): boolean => {\n return role === UserRole.Collaborator || role === UserRole.Administrator\n}\n\nexport interface CurrentUser {\n id: number\n name: string\n email: string\n avatarType: UserAvatarType\n avatarBlobKey: string\n avatarURL: string\n role: UserRole\n status: UserStatus\n isAdministrator: boolean\n isCollaborator: boolean\n}\n","export interface OAuthProviderOption {\n provider: string\n displayName: string\n clientID: string\n url: string\n callbackURL: string\n logoBlobKey: string\n isCustomProvider: boolean\n isEnabled: boolean\n}\n\nexport interface SystemSettings {\n mode: string\n locale: string\n version: string\n environment: string\n domain: string\n hasLegal: boolean\n isBillingEnabled: boolean\n baseURL: string\n assetsURL: string\n oauth: OAuthProviderOption[]\n}\n\nexport interface UserSettings {\n [key: string]: string\n}\n\nexport const OAuthConfigStatus = {\n Disabled: 1,\n Enabled: 2,\n}\n\nexport interface OAuthConfig {\n provider: string\n displayName: string\n status: number\n clientID: string\n clientSecret: string\n authorizeURL: string\n tokenURL: string\n profileURL: string\n logoBlobKey: string\n scope: string\n jsonUserIDPath: string\n jsonUserNamePath: string\n jsonUserEmailPath: string\n isTrusted: boolean\n}\n\nexport interface ImageUpload {\n bkey?: string\n upload?: {\n fileName?: string\n content?: string\n contentType?: string\n }\n remove: boolean\n}\n\nexport enum EmailVerificationKind {\n SignIn = 1,\n SignUp = 2,\n ChangeEmail = 3,\n UserInvitation = 4,\n}\n","export enum BillingStatus {\n Trial = 1,\n Active = 2,\n Cancelled = 3,\n FreeForever = 4,\n OpenCollective = 5,\n}\n","import { StringObject } from \"@fider/services\"\n\nexport interface WebhookData {\n name: string\n type: WebhookType\n status: WebhookStatus\n url: string\n content: string\n http_method: string\n http_headers: HttpHeaders\n}\n\nexport interface Webhook extends WebhookData {\n id: number\n}\n\nexport enum WebhookType {\n NEW_POST = \"new_post\",\n NEW_COMMENT = \"new_comment\",\n CHANGE_STATUS = \"change_status\",\n DELETE_POST = \"delete_post\",\n}\n\nexport enum WebhookStatus {\n ENABLED = \"enabled\",\n DISABLED = \"disabled\",\n FAILED = \"failed\",\n}\n\nexport type HttpHeaders = StringObject\n\nexport interface WebhookTriggerResult {\n webhook: Webhook\n props: StringObject\n success: boolean\n url: string\n content: string\n status_code: number\n message: string\n error: string\n}\n\nexport interface WebhookPreviewResult {\n url: PreviewedField\n content: PreviewedField\n}\n\nexport interface PreviewedField {\n value: string\n message: string\n error: string\n}\n","import { analytics, notify, truncate } from \"@fider/services\"\n\nexport interface ErrorItem {\n field?: string\n message: string\n}\n\nexport interface Failure {\n errors?: ErrorItem[]\n}\n\nexport interface Result {\n ok: boolean\n data: T\n error?: Failure\n}\n\nasync function toResult(response: Response): Promise> {\n const body = await response.json()\n\n if (response.status < 400) {\n return {\n ok: true,\n data: body as T,\n }\n }\n\n if (response.status === 500) {\n notify.error(\"An unexpected error occurred while processing your request.\")\n } else if (response.status === 401) {\n notify.error(\"You need to be authenticated to perform this operation.\")\n } else if (response.status === 403) {\n notify.error(\"You are not authorized to perform this operation.\")\n }\n\n return {\n ok: false,\n data: body as T,\n error: {\n errors: body.errors,\n },\n }\n}\nasync function request(url: string, method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\", body?: any): Promise> {\n const headers = [\n [\"Accept\", \"application/json\"],\n [\"Content-Type\", \"application/json\"],\n ]\n try {\n const response = await fetch(url, {\n method,\n headers,\n body: JSON.stringify(body),\n credentials: \"same-origin\",\n })\n return await toResult(response)\n } catch (err) {\n const truncatedBody = truncate(body ? JSON.stringify(body) : \"\", 1000)\n throw new Error(`Failed to ${method} ${url} with body '${truncatedBody}'`)\n }\n}\n\nexport const http = {\n get: async (url: string): Promise> => {\n return await request(url, \"GET\")\n },\n post: async (url: string, body?: any): Promise> => {\n return await request(url, \"POST\", body)\n },\n put: async (url: string, body?: any): Promise> => {\n return await request(url, \"PUT\", body)\n },\n delete: async (url: string, body?: any): Promise> => {\n return await request(url, \"DELETE\", body)\n },\n event:\n (category: string, action: string) =>\n (result: Result): Result => {\n if (result && result.ok) {\n analytics.event(category, action)\n }\n return result\n },\n}\n","const set = (storage: Storage, key: string, value: string): void => {\n if (storage) {\n storage.setItem(key, value)\n }\n}\n\nconst get = (storage: Storage, key: string): string | null => {\n if (window.localStorage) {\n return storage.getItem(key)\n }\n return null\n}\n\nconst has = (storage: Storage, key: string): boolean => {\n if (storage) {\n return !!storage.getItem(key)\n }\n return false\n}\n\nconst remove = (storage: Storage, ...keys: string[]): void => {\n if (storage && keys) {\n for (const key of keys) {\n storage.removeItem(key)\n }\n }\n}\n\nexport const cache = {\n local: {\n set: (key: string, value: string): void => {\n set(window.localStorage, key, value)\n },\n get: (key: string): string | null => {\n return get(window.localStorage, key)\n },\n has: (key: string): boolean => {\n return has(window.localStorage, key)\n },\n remove: (...keys: string[]): void => {\n remove(window.localStorage, ...keys)\n },\n },\n session: {\n set: (key: string, value: string): void => {\n set(window.sessionStorage, key, value)\n },\n get: (key: string): string | null => {\n return get(window.sessionStorage, key)\n },\n has: (key: string): boolean => {\n return has(window.sessionStorage, key)\n },\n remove: (...keys: string[]): void => {\n remove(window.sessionStorage, ...keys)\n },\n },\n}\n","export const analytics = {\n event: (eventCategory: string, eventAction: string): void => {\n if (window.ga) {\n window.ga(\"send\", \"event\", {\n eventCategory,\n eventAction,\n })\n }\n },\n error: (err?: Error): void => {\n if (window.ga) {\n window.ga(\"send\", \"exception\", {\n exDescription: err ? err.stack : \"\",\n exFatal: false,\n })\n }\n },\n}\n","import { createContext } from \"react\"\nimport { CurrentUser, SystemSettings, Tenant, TenantStatus } from \"@fider/models\"\n\nexport class FiderSession {\n private pPage: string\n private pContextID: string\n private pTenant: Tenant\n private pUser: CurrentUser | undefined\n private pProps: { [key: string]: any } = {}\n\n constructor(data: any) {\n this.pPage = data.page\n this.pContextID = data.contextID\n this.pProps = data.props\n this.pUser = data.user\n this.pTenant = data.tenant\n }\n\n public get page(): string {\n return this.pPage\n }\n\n public get contextID(): string {\n return this.pContextID\n }\n\n public get user(): CurrentUser {\n if (!this.pUser) throw new Error(\"User is undefined\")\n return this.pUser\n }\n\n public get tenant(): Tenant {\n return this.pTenant\n }\n\n public get props(): { [key: string]: any } {\n return this.pProps\n }\n\n public get isAuthenticated(): boolean {\n return !!this.pUser\n }\n}\n\nexport class FiderImpl {\n private pSettings!: SystemSettings\n private pSession!: FiderSession\n\n public initialize = (initData?: any): FiderImpl => {\n if (initData) {\n this.pSettings = initData.settings\n this.pSession = new FiderSession(initData)\n return this\n }\n\n const el = document.getElementById(\"server-data\")\n const data = el ? JSON.parse(el.textContent || el.innerText) : {}\n this.pSettings = data.settings\n this.pSession = new FiderSession(data)\n return this\n }\n\n public get currentLocale(): string {\n if (this.session.tenant) {\n return this.session.tenant.locale\n }\n return this.settings.locale\n }\n\n public get session(): FiderSession {\n return this.pSession\n }\n\n public get settings(): SystemSettings {\n return this.pSettings\n }\n\n public get isReadOnly(): boolean {\n return this.session.tenant && this.session.tenant.status === TenantStatus.Locked\n }\n\n public isProduction(): boolean {\n return this.pSettings.environment === \"production\"\n }\n\n public isSingleHostMode(): boolean {\n return this.pSettings.mode === \"single\"\n }\n}\n\nexport const Fider = new FiderImpl()\n\nexport const FiderContext = createContext(Fider)\n","export const jwt = {\n decode: (token: string): any => {\n if (token) {\n const segments = token.split(\".\")\n try {\n return JSON.parse(window.atob(segments[1]))\n } catch {\n return undefined\n }\n }\n },\n}\n","import { Fider } from \".\"\n\nexport const delay = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport const classSet = (input?: any): string => {\n let classes = \"\"\n if (input) {\n for (const key in input) {\n if (key && !!input[key]) {\n classes += ` ${key}`\n }\n }\n return classes.trim()\n }\n return \"\"\n}\n\ntype DateFormat = \"full\" | \"short\" | \"date\"\ntype DateOptsMap = {\n [key in DateFormat]: Intl.DateTimeFormatOptions\n}\n\nconst dateOpts: DateOptsMap = {\n date: { day: \"numeric\", month: \"short\", year: \"numeric\" },\n short: { month: \"short\", year: \"numeric\" },\n full: { day: \"2-digit\", month: \"long\", year: \"numeric\", hour: \"numeric\", minute: \"numeric\" },\n}\n\nexport const formatDate = (locale: string, input: Date | string, format: DateFormat = \"full\"): string => {\n const date = input instanceof Date ? input : new Date(input)\n\n try {\n return new Intl.DateTimeFormat(locale, dateOpts[format]).format(date)\n } catch {\n return date.toLocaleString(locale)\n }\n}\n\nexport const timeSince = (locale: string, now: Date, date: Date, dateFormat: DateFormat = \"short\"): string => {\n try {\n const seconds = Math.round((now.getTime() - date.getTime()) / 1000)\n const minutes = Math.round(seconds / 60)\n const hours = Math.round(minutes / 60)\n const days = Math.round(hours / 24)\n const months = Math.round(days / 30)\n const years = Math.round(days / 365)\n\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: \"auto\" })\n return (\n (seconds < 60 && rtf.format(-1 * seconds, \"seconds\")) ||\n (minutes < 60 && rtf.format(-1 * minutes, \"minutes\")) ||\n (hours < 24 && rtf.format(-1 * hours, \"hours\")) ||\n (days < 30 && rtf.format(-1 * days, \"days\")) ||\n (days < 365 && rtf.format(-1 * months, \"months\")) ||\n rtf.format(-1 * years, \"years\")\n )\n } catch {\n return formatDate(locale, date, dateFormat)\n }\n}\nexport const fileToBase64 = async (file: File): Promise => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.addEventListener(\n \"load\",\n () => {\n const parts = (reader.result as string).split(\"base64,\")\n resolve(parts[1])\n },\n false\n )\n\n reader.addEventListener(\n \"error\",\n () => {\n reject(reader.error)\n },\n false\n )\n\n reader.readAsDataURL(file)\n })\n}\n\nexport const timeAgo = (date: string | Date): number => {\n const d = date instanceof Date ? date : new Date(date)\n return (new Date().getTime() - d.getTime()) / 1000\n}\n\nexport const isCookieEnabled = (): boolean => {\n try {\n document.cookie = \"cookietest=1\"\n const ret = document.cookie.indexOf(\"cookietest=\") !== -1\n document.cookie = \"cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT\"\n return ret\n } catch (e) {\n return false\n }\n}\n\nexport const uploadedImageURL = (bkey: string | undefined, size?: number): string | undefined => {\n if (bkey) {\n if (size) {\n return `${Fider.settings.assetsURL}/static/images/${bkey}?size=${size}`\n }\n return `${Fider.settings.assetsURL}/static/images/${bkey}`\n }\n return undefined\n}\n\nexport const truncate = (input: string, maxLength: number): string => {\n if (input && input.length > maxLength) {\n return `${input.substr(0, maxLength)}...`\n }\n return input\n}\n\nexport type StringObject = {\n [key: string]: T\n}\n\nexport const copyToClipboard = (text: string): Promise => {\n if (window.navigator && window.navigator.clipboard && window.navigator.clipboard.writeText) {\n return window.navigator.clipboard.writeText(text)\n }\n return Promise.reject(new Error(\"Clipboard API not available\"))\n}\n\nexport const clearUrlHash = (replace?: boolean) => {\n const oldURL = window.location.href\n const newURL = window.location.pathname + window.location.search\n if (replace) {\n window.history.replaceState(\"\", document.title, newURL)\n } else {\n window.history.pushState(\"\", document.title, newURL)\n }\n // Trigger event manually\n const hashChangeEvent = new HashChangeEvent(\"hashchange\", {\n oldURL,\n newURL,\n cancelable: true,\n bubbles: true,\n composed: false,\n })\n if (!window.dispatchEvent(hashChangeEvent)) {\n // Event got cancelled\n window.history.replaceState(\"\", document.title, oldURL)\n }\n}\n","import { i18n, I18n } from \"@lingui/core\"\nimport { en, pt, fr, el, de, se, pl, ru, sk, nl, es, tr, it, zh } from \"make-plural/plurals\"\n\nexport function activateI18NSync(locale: string, messages?: any): I18n {\n i18n.loadLocaleData(\"en\", { plurals: en })\n i18n.loadLocaleData(\"pt-BR\", { plurals: pt })\n i18n.loadLocaleData(\"sv-SE\", { plurals: se })\n i18n.loadLocaleData(\"es-ES\", { plurals: es })\n i18n.loadLocaleData(\"el\", { plurals: el })\n i18n.loadLocaleData(\"it\", { plurals: it })\n i18n.loadLocaleData(\"nl\", { plurals: nl })\n i18n.loadLocaleData(\"de\", { plurals: de })\n i18n.loadLocaleData(\"fr\", { plurals: fr })\n i18n.loadLocaleData(\"pl\", { plurals: pl })\n i18n.loadLocaleData(\"ru\", { plurals: ru })\n i18n.loadLocaleData(\"sk\", { plurals: sk })\n i18n.loadLocaleData(\"tr\", { plurals: tr })\n i18n.loadLocaleData(\"zh-CH\", { plurals: zh })\n i18n.load(locale, messages)\n i18n.activate(locale)\n return i18n\n}\n\nexport async function activateI18N(locale: string): Promise {\n try {\n const content = await import(\n /* webpackChunkName: \"locale-[request]\" */\n `@locale/${locale}/client.json`\n )\n return activateI18NSync(locale, content.messages)\n } catch (err) {\n console.error(err)\n return activateI18NSync(locale)\n }\n}\n","import { marked } from \"marked\"\nimport DOMPurify from \"dompurify\"\n\nmarked.setOptions({\n headerIds: false,\n xhtml: true,\n smartLists: true,\n gfm: true,\n breaks: true,\n})\n\nif (DOMPurify.isSupported) {\n DOMPurify.setConfig({\n USE_PROFILES: {\n html: true,\n },\n ADD_ATTR: [\"target\"],\n })\n}\n\nconst link = (href: string, title: string, text: string) => {\n const titleAttr = title ? ` title=${title}` : \"\"\n return `${text}`\n}\n\nconst fullRenderer = new marked.Renderer()\nfullRenderer.image = () => \"\"\nfullRenderer.link = link\n\nconst plainTextRenderer = new marked.Renderer()\nplainTextRenderer.link = (_href, _title, text) => text\nplainTextRenderer.image = () => \"\"\nplainTextRenderer.br = () => \" \"\nplainTextRenderer.strong = (text) => text\nplainTextRenderer.list = (body) => body\nplainTextRenderer.listitem = (text) => `${text} `\nplainTextRenderer.heading = (text) => text\nplainTextRenderer.paragraph = (text) => ` ${text} `\nplainTextRenderer.code = (code) => code\nplainTextRenderer.codespan = (code) => code\nplainTextRenderer.html = (html) => html\nplainTextRenderer.del = (text) => text\n\nconst entities: { [key: string]: string } = {\n \"<\": \"<\",\n \">\": \">\",\n}\n\nconst encodeHTML = (s: string) => s.replace(/[<>]/g, (tag) => entities[tag] || tag)\nconst sanitize = (input: string) => (DOMPurify.isSupported ? DOMPurify.sanitize(input) : input)\n\nexport const full = (input: string): string => {\n return sanitize(marked(encodeHTML(input), { renderer: fullRenderer }).trim())\n}\n\nexport const plainText = (input: string): string => {\n return sanitize(marked(encodeHTML(input), { renderer: plainTextRenderer }).trim())\n}\n","const toastify = () => import(/* webpackChunkName: \"toastify\" */ \"./toastify\")\n\nexport const success = (content: string | JSX.Element) => {\n return toastify().then((toast) => {\n toast.success(content)\n })\n}\n\nexport const error = (content: string | JSX.Element) => {\n return toastify().then((toast) => {\n toast.error(content)\n })\n}\n","import { Fider } from \"@fider/services\"\n\nconst navigator = {\n url: () => {\n return window.location.href\n },\n goHome: () => {\n window.location.href = \"/\"\n },\n goTo: (url: string) => {\n const isEqual = window.location.href === url || window.location.pathname === url\n if (!isEqual) {\n window.location.href = url\n }\n },\n replaceState: (path: string): void => {\n if (history.replaceState !== undefined) {\n const newURL = Fider.settings.baseURL + path\n window.history.replaceState({ path: newURL }, \"\", newURL)\n }\n },\n}\n\nexport default navigator\n","import navigator from \"./navigator\"\n\nexport const getNumber = (name: string): number | undefined => {\n return parseInt(get(name), 10) || undefined\n}\n\nexport const set = (name: string, value: any): string => {\n const uri = navigator.url()\n const re = new RegExp(\"([?&])\" + name + \"=.*?(&|$)\", \"i\")\n if (uri.match(re)) {\n return uri.replace(re, \"$1\" + name + \"=\" + value + \"$2\")\n } else {\n const separator = uri.indexOf(\"?\") !== -1 ? \"&\" : \"?\"\n return uri + separator + name + \"=\" + value\n }\n}\n\nexport const get = (name: string): string => {\n name = name.replace(/[[\\]]/g, \"\\\\$&\")\n const regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\")\n const url = navigator.url()\n const results = regex.exec(url)\n\n if (!results || !results[2]) {\n return \"\"\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"))\n}\n\nexport const getArray = (name: string): string[] => {\n const qs = get(name)\n if (qs) {\n return qs.split(\",\").filter((i) => i)\n }\n\n return []\n}\n\nexport interface QueryString {\n [key: string]: string | string[] | number | undefined\n}\n\nexport const stringify = (object: QueryString | undefined): string => {\n if (!object) {\n return \"\"\n }\n\n let qs = \"\"\n\n for (const key of Object.keys(object)) {\n const symbol = qs ? \"&\" : \"?\"\n const value = object[key]\n if (value instanceof Array) {\n if (value.length > 0) {\n qs += `${symbol}${key}=${value.join(\",\")}`\n }\n } else if (value) {\n qs += `${symbol}${key}=${encodeURIComponent(value.toString()).replace(/%20/g, \"+\")}`\n }\n }\n\n return qs\n}\n","export const isTouch = (): boolean => {\n return \"ontouchstart\" in window || navigator.maxTouchPoints > 0\n}\n","import { http, Result } from \"@fider/services/http\"\nimport { UserSettings, UserAvatarType, ImageUpload } from \"@fider/models\"\n\ninterface UpdateUserSettings {\n name: string\n avatar?: ImageUpload\n avatarType: UserAvatarType\n settings: UserSettings\n}\n\nexport const updateUserSettings = async (request: UpdateUserSettings): Promise => {\n return await http.post(\"/_api/user/settings\", request)\n}\n\nexport const changeUserEmail = async (email: string): Promise => {\n return await http.post(\"/_api/user/change-email\", {\n email,\n })\n}\n\nexport const deleteCurrentAccount = async (): Promise => {\n return await http.delete(\"/_api/user\")\n}\n\nexport const regenerateAPIKey = async (): Promise> => {\n return await http.post<{ apiKey: string }>(\"/_api/user/regenerate-apikey\")\n}\n","import { http, Result } from \"@fider/services/http\"\nimport { Tag } from \"@fider/models\"\n\nexport const createTag = async (name: string, color: string, isPublic: boolean): Promise> => {\n return http.post(`/api/v1/tags`, { name, color, isPublic }).then(http.event(\"tag\", \"create\"))\n}\n\nexport const updateTag = async (slug: string, name: string, color: string, isPublic: boolean): Promise> => {\n return http.put(`/api/v1/tags/${slug}`, { name, color, isPublic }).then(http.event(\"tag\", \"update\"))\n}\n\nexport const deleteTag = async (slug: string): Promise => {\n return http.delete(`/api/v1/tags/${slug}`).then(http.event(\"tag\", \"delete\"))\n}\n\nexport const assignTag = async (slug: string, postNumber: number): Promise => {\n return http.post(`/api/v1/posts/${postNumber}/tags/${slug}`).then(http.event(\"tag\", \"assign\"))\n}\n\nexport const unassignTag = async (slug: string, postNumber: number): Promise => {\n return http.delete(`/api/v1/posts/${postNumber}/tags/${slug}`).then(http.event(\"tag\", \"unassign\"))\n}\n","import { http, Result, querystring } from \"@fider/services\"\nimport { Post, Vote, ImageUpload } from \"@fider/models\"\n\nexport const getAllPosts = async (): Promise> => {\n return await http.get(\"/api/v1/posts\")\n}\n\nexport interface SearchPostsParams {\n query?: string\n view?: string\n limit?: number\n tags?: string[]\n myVotes?: boolean\n statuses?: string[]\n}\n\nexport const searchPosts = async (params: SearchPostsParams): Promise> => {\n let qsParams = querystring.stringify({\n tags: params.tags,\n statuses: params.statuses,\n query: params.query,\n view: params.view,\n limit: params.limit,\n })\n if (params.myVotes) {\n qsParams += `&myvotes=true`\n }\n return await http.get(`/api/v1/posts${qsParams}`)\n}\n\nexport const deletePost = async (postNumber: number, text: string): Promise => {\n return http\n .delete(`/api/v1/posts/${postNumber}`, {\n text,\n })\n .then(http.event(\"post\", \"delete\"))\n}\n\nexport const addVote = async (postNumber: number): Promise => {\n return http.post(`/api/v1/posts/${postNumber}/votes`).then(http.event(\"post\", \"vote\"))\n}\n\nexport const removeVote = async (postNumber: number): Promise => {\n return http.delete(`/api/v1/posts/${postNumber}/votes`).then(http.event(\"post\", \"unvote\"))\n}\n\nexport const toggleVote = async (postNumber: number): Promise> => {\n return http.post<{ voted: boolean }>(`/api/v1/posts/${postNumber}/votes/toggle`).then(http.event(\"post\", \"toggle-vote\"))\n}\n\nexport const subscribe = async (postNumber: number): Promise => {\n return http.post(`/api/v1/posts/${postNumber}/subscription`).then(http.event(\"post\", \"subscribe\"))\n}\n\nexport const unsubscribe = async (postNumber: number): Promise => {\n return http.delete(`/api/v1/posts/${postNumber}/subscription`).then(http.event(\"post\", \"unsubscribe\"))\n}\n\nexport const listVotes = async (postNumber: number): Promise> => {\n return http.get(`/api/v1/posts/${postNumber}/votes`)\n}\n\nexport const createComment = async (postNumber: number, content: string, attachments: ImageUpload[]): Promise => {\n return http.post(`/api/v1/posts/${postNumber}/comments`, { content, attachments }).then(http.event(\"comment\", \"create\"))\n}\n\nexport const updateComment = async (postNumber: number, commentID: number, content: string, attachments: ImageUpload[]): Promise => {\n return http.put(`/api/v1/posts/${postNumber}/comments/${commentID}`, { content, attachments }).then(http.event(\"comment\", \"update\"))\n}\n\nexport const deleteComment = async (postNumber: number, commentID: number): Promise => {\n return http.delete(`/api/v1/posts/${postNumber}/comments/${commentID}`).then(http.event(\"comment\", \"delete\"))\n}\ninterface ToggleReactionResponse {\n added: boolean\n}\n\nexport const toggleCommentReaction = async (postNumber: number, commentID: number, emoji: string): Promise> => {\n return http.post(`/api/v1/posts/${postNumber}/comments/${commentID}/reactions/${emoji}`)\n}\n\ninterface SetResponseInput {\n status: string\n text: string\n originalNumber: number\n}\n\nexport const respond = async (postNumber: number, input: SetResponseInput): Promise => {\n return http\n .put(`/api/v1/posts/${postNumber}/status`, {\n status: input.status,\n text: input.text,\n originalNumber: input.originalNumber,\n })\n .then(http.event(\"post\", \"respond\"))\n}\n\ninterface CreatePostResponse {\n id: number\n number: number\n title: string\n slug: string\n}\n\nexport const createPost = async (title: string, description: string, attachments: ImageUpload[]): Promise> => {\n return http.post(`/api/v1/posts`, { title, description, attachments }).then(http.event(\"post\", \"create\"))\n}\n\nexport const updatePost = async (postNumber: number, title: string, description: string, attachments: ImageUpload[]): Promise => {\n return http.put(`/api/v1/posts/${postNumber}`, { title, description, attachments }).then(http.event(\"post\", \"update\"))\n}\n","import { http, Result } from \"@fider/services/http\"\nimport { UserRole, OAuthConfig, ImageUpload, EmailVerificationKind } from \"@fider/models\"\n\nexport interface CheckAvailabilityResponse {\n message: string\n}\n\nexport interface CreateTenantRequest {\n legalAgreement: boolean\n tenantName: string\n subdomain?: string\n name?: string\n token?: string\n email?: string\n}\n\nexport interface CreateTenantResponse {\n token?: string\n}\n\nexport const createTenant = async (request: CreateTenantRequest): Promise> => {\n return await http.post(\"/_api/tenants\", request)\n}\n\nexport interface UpdateTenantSettingsRequest {\n logo?: ImageUpload\n title: string\n invitation: string\n welcomeMessage: string\n cname: string\n locale: string\n}\n\nexport const updateTenantSettings = async (request: UpdateTenantSettingsRequest): Promise => {\n return await http.post(\"/_api/admin/settings/general\", request)\n}\n\nexport const updateTenantAdvancedSettings = async (customCSS: string): Promise => {\n return await http.post(\"/_api/admin/settings/advanced\", { customCSS })\n}\n\nexport const updateTenantPrivacy = async (isPrivate: boolean): Promise => {\n return await http.post(\"/_api/admin/settings/privacy\", {\n isPrivate,\n })\n}\n\nexport const updateTenantEmailAuthAllowed = async (isEmailAuthAllowed: boolean): Promise => {\n return await http.post(\"/_api/admin/settings/emailauth\", {\n isEmailAuthAllowed,\n })\n}\n\nexport const checkAvailability = async (subdomain: string): Promise> => {\n return await http.get(`/_api/tenants/${subdomain}/availability`)\n}\n\nexport const signIn = async (email: string): Promise => {\n return await http.post(\"/_api/signin\", {\n email,\n })\n}\n\nexport const completeProfile = async (kind: EmailVerificationKind, key: string, name: string): Promise => {\n return await http.post(\"/_api/signin/complete\", {\n kind,\n key,\n name,\n })\n}\n\nexport const changeUserRole = async (userID: number, role: UserRole): Promise => {\n return await http.post(`/_api/admin/roles/${role}/users`, {\n userID,\n })\n}\n\nexport const blockUser = async (userID: number): Promise => {\n return await http.put(`/_api/admin/users/${userID}/block`)\n}\n\nexport const unblockUser = async (userID: number): Promise => {\n return await http.delete(`/_api/admin/users/${userID}/block`)\n}\n\nexport const getOAuthConfig = async (provider: string): Promise> => {\n return await http.get(`/_api/admin/oauth/${provider}`)\n}\n\nexport interface CreateEditOAuthConfigRequest {\n provider: string\n status: number\n displayName: string\n clientID: string\n clientSecret: string\n authorizeURL: string\n tokenURL: string\n scope: string\n profileURL: string\n jsonUserIDPath: string\n jsonUserNamePath: string\n jsonUserEmailPath: string\n logo?: ImageUpload\n isTrusted: boolean\n}\n\nexport const saveOAuthConfig = async (request: CreateEditOAuthConfigRequest): Promise => {\n return await http.post(\"/_api/admin/oauth\", request)\n}\n","import { http, Result } from \"@fider/services\"\nimport { Notification } from \"@fider/models\"\n\nexport const getTotalUnreadNotifications = async (): Promise> => {\n return http.get<{ total: number }>(\"/_api/notifications/unread/total\").then((result) => {\n return {\n ok: result.ok,\n error: result.error,\n data: result.data ? result.data.total : 0,\n }\n })\n}\n\nexport const getAllNotifications = async (): Promise> => {\n return http.get(\"/_api/notifications/unread\")\n}\n\nexport const markAllAsRead = async (): Promise => {\n return await http.post(\"/_api/notifications/read-all\")\n}\n","import { http, Result } from \"@fider/services\"\n\nexport const sendInvites = async (subject: string, message: string, recipients: string[]): Promise => {\n return http.post(\"/api/v1/invitations/send\", { subject, message, recipients }).then(http.event(\"invite\", \"send\"))\n}\n\nexport const sendSampleInvite = async (subject: string, message: string): Promise => {\n return http.post(\"/api/v1/invitations/sample\", { subject, message }).then(http.event(\"invite\", \"sample\"))\n}\n","import { http, Result, navigator, analytics } from \"@fider/services\"\n\nconst ignoreErrors = [\n \"http://gj.track.uc.cn/collect\", // CSP error: UC Browser tries to use sendBeacon to this domain, which is blocked by our CSP rule\n \"null is not an object (evaluating 'c.sheet.insertRule')\", // CSP error: UC Browser throws this error even when page is loaded sucessfully\n \"Refused to evaluate a string as JavaScript because 'unsafe-eval'\", // CSP error: usually thrown because of bad Chrome Extensions\n \"vid_mate_check is not defined\", // CSP error: thrown by VidMate, an Android Browser\n \"SecurityError: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules\", // CSP error: usually thrown because of bad Chrome Extensions\n]\n\nexport const logError = async (message: string, err?: Error): Promise => {\n for (const pattern of ignoreErrors) {\n if (message.indexOf(pattern) >= 0) {\n return\n }\n }\n\n const data = {\n url: navigator.url(),\n stack: err ? err.stack : \"\",\n }\n\n try {\n analytics.error(err)\n return await http.post(\"/_api/log-error\", { message, data })\n } catch (err) {\n console.error(err)\n }\n}\n","import { http, Result, StringObject } from \"@fider/services\"\nimport { WebhookData, WebhookPreviewResult, WebhookTriggerResult, WebhookType } from \"@fider/models\"\n\nexport const createWebhook = async (data: WebhookData): Promise> => {\n return await http.post(`/_api/admin/webhook`, data)\n}\n\nexport const updateWebhook = async (id: number, data: WebhookData): Promise => {\n return await http.put(`/_api/admin/webhook/${id}`, data)\n}\n\nexport const deleteWebhook = async (id: number): Promise => {\n return await http.delete(`/_api/admin/webhook/${id}`)\n}\n\nexport const testWebhook = async (id: number): Promise> => {\n return await http.get(`/_api/admin/webhook/test/${id}`)\n}\n\nexport const previewWebhook = async (type: WebhookType, url: string, content: string): Promise> => {\n return await http.post(\"/_api/admin/webhook/preview\", { type, url, content })\n}\n\nexport const getWebhookHelp = async (type: WebhookType): Promise> => {\n return await http.get(`/_api/admin/webhook/props/${type}`)\n}\n","import { http, Result } from \"../http\"\n\ninterface CheckoutPageLink {\n url: string\n}\n\nexport const generateCheckoutLink = async (planId: string): Promise> => {\n return await http.post(\"/_api/billing/checkout-link\", { planId })\n}\n","import { I18nProvider } from \"@lingui/react\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { i18n } from \"@lingui/core\"\n\nimport { ToastContainer, toast, ToastContent, ToastOptions } from \"react-toastify\"\nimport \"react-toastify/dist/ReactToastify.css\"\n\nlet hasContainer = false\n\nconst setup = () => {\n if (!hasContainer) {\n hasContainer = true\n ReactDOM.render(\n \n \n ,\n document.getElementById(\"root-toastify\")\n )\n }\n}\n\nexport const success = (content: ToastContent, options?: ToastOptions) => {\n setup()\n toast.success(content, options)\n}\n\nexport const error = (content: ToastContent, options?: ToastOptions) => {\n setup()\n toast.error(content, options)\n}\n"],"names":["HoverInfo","props","Elem","href","classList","classSet","clickable","undefined","onClick","React","className","text","target","Icon","width","height","sprite","IconInformationCircle","styles","style","src","viewBox","xlinkHref","id","ErrorBoundary","constructor","super","this","state","error","errorInfo","componentDidCatch","onError","setState","render","FiderContext","Consumer","fider","ErrorPage","showDetails","isProduction","children","ResponseDetails","_props$response","status","PostStatus","Get","response","Open","VStack","align","spacing","ResponseLozenge","timeSince","Date","respondedAt","Duplicate","Markdown","original","number","slug","title","icon","bg","color","border","Declined","HeroIconThumbsDown","HeroIconDuplicate","Completed","HeroIconCheck","Planned","HeroIconThumbsUp","HeroIconSparkles","getLozengeProps","HStack","value","ShowPostStatus","i18n","_","message","ButtonClickEvent","preventEnable","shouldEnable","canEnable","Button","clicked","setClicked","useState","unmountedContainer","useRef","useEffect","current","size","variant","disabled","buttonContent","onClickProp","rel","async","e","preventDefault","stopPropagation","event","type","defaultProps","ValidationContext","Form","autoComplete","DisplayError","Provider","arrayToTag","items","map","m","key","hasError","field","errors","err","dict","reduce","result","push","fields","Object","keys","prototype","hasOwnProperty","call","forEach","t","length","Input","onChange","currentTarget","suffix","onIconClick","ctx","label","htmlFor","afterLabel","tabIndex","noTabFocus","ref","inputRef","autoFocus","onFocus","maxLength","placeholder","ImageUploader","_defineProperty","files","file","alert","base64","fileToBase64","bkey","upload","fileName","name","content","contentType","remove","previewURL","instanceID","fileSelector","click","showModal","uploadedImageURL","modal","Modal","Window","isOpen","onClose","closeModal","center","Content","alt","Footer","isUploading","hasFile","openModal","removeFile","fileChanged","accept","selectFile","IconPhotograph","MultiImageUploader","instances","removed","count","maxUploads","addNewElement","triggerOnChange","bkeys","uploads","k","concat","filter","x","btoa","Math","random","toString","element","imageUploaded","elements","TextArea","Textarea","minRows","RadioButton","selected","setSelected","defaultOption","option","_props$onSelect","onSelect","inputs","options","checked","Select","filtered","getOption","defaultValue","o","Field","Checkbox","setChecked","isChecked","ImageViewerModal","loadedPreview","Loader","onLoad","onPreviewLoad","imgSrc","Trans","ImageViewer","setShowModal","loadedThumbnail","setLoadedThumbnail","setLoadedPreview","onThumbnailLoad","html","markdown","tagName","dangerouslySetInnerHTML","__html","truncate","DevBanner","useFider","Avatar","user","avatarURL","AvatarStack","classes","overlap","users","i","Message","showIcon","IconExclamation","IconExclamationCircle","IconCheckCircle","justify","alignment","Hint","cacheKey","permanentCloseKey","isClosed","setIsClosed","cache","local","has","condition","IconX","close","set","TermsOfService","settings","hasLegal","PrivacyPolicy","LegalNotice","components","0","1","LegalFooter","LegalAgreement","SocialSignInButton","redirectTo","window","location","url","logoURL","displayName","OAuthProviderLogo","SignInControl","showEmailForm","setShowEmailForm","session","tenant","isEmailAuthAllowed","email","setEmail","setError","providersLen","oauth","isCookieEnabled","provider","useEmail","Divider","device","actions","ok","onEmailSent","Moment","date","format","now","display","getTime","formatDate","locale","tooltip","ModalWindow","root","document","getElementById","body","overflow","addEventListener","keyDown","removeEventListener","keyCode","canClose","ReactDOM","evt","Header","UserName","isStaff","role","isCollaborator","showEmail","xmlns","fill","fillRule","d","clipRule","show","setShow","useTimeout","TenantLogo","useFiderIfEmpty","systemProvidersLogo","google","facebook","github","OAuthProviderLogoURL","logoBlobKey","Toggle","active","setActive","toggle","newActive","onToggle","PoweredByFider","_window","_window$location","source","encodeURIComponent","host","campaign","slot","PageTitle","subtitle","DropdownContext","createContext","Dropdown","node","setIsOpen","position","changeToggleState","newState","onToggled","handleClick","contains","listClassName","wide","fullsceenSm","toggleIsOpen","renderHandle","ListItem","useContext","Money","formatter","Intl","NumberFormat","currency","amount","ShowTag","circular","link","tag","isPublic","backgroundColor","ShieldCheck","isSignInModalOpen","setIsSignInModalOpen","SignInModal","hideModal","isAuthenticated","NotificationIndicator","UserMenu","setTimeout","values","VoteCounter","hasVoted","setHasVoted","post","votesCount","setVotesCount","isDisabled","closed","isReadOnly","vote","action","FaCaretUp","NotificationItem","_ref","notification","openNotification","authorName","Fider","currentLocale","createdAt","NotificationIcon","_ref2","unreadNotifications","IconBell","setUnreadNotifications","showingNotifications","setShowingNotifications","recent","setRecent","unread","setUnread","then","data","item","read","reload","divide","n","NoDataIllustration","availableEmojis","Reactions","emojiSelectorRef","toggleReaction","reactions","isEmojiSelectorOpen","setIsEmojiSelectorOpen","handleClickOutside","ReactionAdd","emoji","reaction","_extends","includesMe","ReadOnlyNotice","isAdministrator","Stack","dir","flex","filterable","All","Error","TenantStatus","UserAvatarType","UserStatus","UserRole","Started","Collaborator","Administrator","OAuthConfigStatus","Disabled","Enabled","EmailVerificationKind","BillingStatus","WebhookType","WebhookStatus","request","method","headers","fetch","JSON","stringify","credentials","json","notify","toResult","truncatedBody","http","get","put","delete","category","analytics","storage","setItem","localStorage","getItem","_len","arguments","Array","_key","removeItem","_len2","_key2","sessionStorage","_len3","_key3","eventCategory","eventAction","ga","exDescription","stack","exFatal","FiderSession","pPage","page","pContextID","contextID","pProps","pUser","pTenant","initData","pSettings","pSession","el","parse","textContent","innerText","Locked","environment","isSingleHostMode","mode","jwt","decode","token","segments","split","atob","input","trim","dateOpts","day","month","year","short","full","hour","minute","DateTimeFormat","toLocaleString","dateFormat","seconds","round","minutes","hours","days","months","years","rtf","RelativeTimeFormat","numeric","Promise","resolve","reject","reader","FileReader","parts","readAsDataURL","timeAgo","cookie","ret","indexOf","assetsURL","substr","copyToClipboard","navigator","clipboard","writeText","clearUrlHash","replace","oldURL","newURL","pathname","search","history","replaceState","pushState","hashChangeEvent","HashChangeEvent","cancelable","bubbles","composed","dispatchEvent","activateI18NSync","messages","loadLocaleData","plurals","en","pt","se","es","it","nl","de","fr","pl","ru","sk","tr","zh","load","activate","activateI18N","console","marked","setOptions","headerIds","xhtml","smartLists","gfm","breaks","DOMPurify","USE_PROFILES","ADD_ATTR","fullRenderer","Renderer","image","plainTextRenderer","_href","_title","br","strong","list","listitem","heading","paragraph","code","codespan","del","entities","encodeHTML","s","sanitize","renderer","plainText","toastify","success","toast","goHome","goTo","path","baseURL","getNumber","parseInt","uri","re","RegExp","match","separator","regex","results","exec","decodeURIComponent","getArray","qs","object","symbol","join","isTouch","maxTouchPoints","updateUserSettings","changeUserEmail","deleteCurrentAccount","regenerateAPIKey","createTag","updateTag","deleteTag","assignTag","postNumber","unassignTag","getAllPosts","searchPosts","qsParams","querystring","tags","params","statuses","query","view","limit","myVotes","deletePost","addVote","removeVote","toggleVote","subscribe","unsubscribe","listVotes","createComment","attachments","updateComment","commentID","deleteComment","toggleCommentReaction","respond","originalNumber","createPost","description","updatePost","createTenant","updateTenantSettings","updateTenantAdvancedSettings","customCSS","updateTenantPrivacy","isPrivate","updateTenantEmailAuthAllowed","checkAvailability","subdomain","signIn","completeProfile","kind","changeUserRole","userID","blockUser","unblockUser","getOAuthConfig","saveOAuthConfig","getTotalUnreadNotifications","total","getAllNotifications","markAllAsRead","sendInvites","subject","recipients","sendSampleInvite","ignoreErrors","logError","pattern","createWebhook","updateWebhook","deleteWebhook","testWebhook","previewWebhook","getWebhookHelp","generateCheckoutLink","planId","hasContainer","setup","I18nProvider","ToastContainer","POSITION","TOP_RIGHT"],"sourceRoot":""}