{"version":3,"file":"js/ShowPost-ShowPost-page.0862659de9806404944a.js","mappings":"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","sources":["webpack://fider/./public/pages/ShowPost/components/ShowComment.tsx","webpack://fider/./public/pages/ShowPost/components/CommentInput.tsx","webpack://fider/./public/pages/ShowPost/components/DiscussionPanel.tsx","webpack://fider/./public/assets/images/heroicons-check.svg","webpack://fider/./public/pages/ShowPost/components/TagListItem.tsx","webpack://fider/./public/pages/ShowPost/components/TagsPanel.tsx","webpack://fider/./public/assets/images/heroicons-plus.svg","webpack://fider/./public/pages/ShowPost/components/FollowButton.tsx","webpack://fider/./public/pages/ShowPost/components/VoteSection.tsx","webpack://fider/./public/pages/ShowPost/components/DeletePostModal.tsx","webpack://fider/./public/pages/ShowPost/components/PostSearch.tsx","webpack://fider/./public/pages/ShowPost/components/ResponseModal.tsx","webpack://fider/./public/pages/ShowPost/components/VotesModal.tsx","webpack://fider/./public/pages/ShowPost/components/VotesPanel.tsx","webpack://fider/./public/pages/ShowPost/ShowPost.page.tsx","webpack://fider/./public/assets/images/heroicons-dots-horizontal.svg","webpack://fider/./public/assets/images/heroicons-search.svg"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\"\nimport { Comment, Post, ImageUpload } from \"@fider/models\"\nimport { Reactions, Avatar, UserName, Moment, Form, Button, Markdown, Modal, ImageViewer, MultiImageUploader, Dropdown, Icon } from \"@fider/components\"\nimport { HStack } from \"@fider/components/layout\"\nimport { formatDate, Failure, actions, notify, copyToClipboard, classSet, clearUrlHash } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport IconDotsHorizontal from \"@fider/assets/images/heroicons-dots-horizontal.svg\"\nimport { t } from \"@lingui/core/macro\"\nimport { Trans } from \"@lingui/react/macro\"\nimport CommentEditor from \"@fider/components/common/form/CommentEditor\"\n\ninterface ShowCommentProps {\n  post: Post\n  comment: Comment\n  highlighted?: boolean\n  onToggleReaction?: () => void\n}\n\nexport const ShowComment = (props: ShowCommentProps) => {\n  const fider = useFider()\n  const node = useRef<HTMLDivElement | null>(null)\n  const [isEditing, setIsEditing] = useState(false)\n  const [newContent, setNewContent] = useState<string>(props.comment.content)\n  const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = useState(false)\n  const [attachments, setAttachments] = useState<ImageUpload[]>([])\n  const [localReactionCounts, setLocalReactionCounts] = useState(props.comment.reactionCounts)\n  const emojiSelectorRef = useRef<HTMLDivElement>(null)\n\n  const [error, setError] = useState<Failure>()\n\n  const handleClick = (e: MouseEvent) => {\n    if (node.current == null || !node.current.contains(e.target as Node)) {\n      clearUrlHash()\n    }\n  }\n\n  useEffect(() => {\n    if (props.highlighted) {\n      document.addEventListener(\"mousedown\", handleClick)\n      return () => {\n        document.removeEventListener(\"mousedown\", handleClick)\n      }\n    }\n  }, [props.highlighted])\n\n  const canEditComment = (): boolean => {\n    if (fider.session.isAuthenticated) {\n      return fider.session.user.isCollaborator || props.comment.user.id === fider.session.user.id\n    }\n    return false\n  }\n\n  const clearError = () => setError(undefined)\n\n  const cancelEdit = async () => {\n    setIsEditing(false)\n    setNewContent(props.comment.content)\n    clearError()\n  }\n\n  const saveEdit = async () => {\n    const response = await actions.updateComment(props.post.number, props.comment.id, newContent, attachments)\n    if (response.ok) {\n      location.reload()\n    } else {\n      setError(response.error)\n    }\n  }\n\n  const closeModal = async () => {\n    setIsDeleteConfirmationModalOpen(false)\n  }\n\n  const deleteComment = async () => {\n    const response = await actions.deleteComment(props.post.number, props.comment.id)\n    if (response.ok) {\n      location.reload()\n    }\n  }\n\n  const toggleReaction = async (emoji: string) => {\n    const response = await actions.toggleCommentReaction(props.post.number, comment.id, emoji)\n    if (response.ok) {\n      const added = response.data.added\n\n      setLocalReactionCounts((prevCounts) => {\n        const newCounts = [...(prevCounts ?? [])]\n        const reactionIndex = newCounts.findIndex((r) => r.emoji === emoji)\n        if (reactionIndex !== -1) {\n          const newCount = added ? newCounts[reactionIndex].count + 1 : newCounts[reactionIndex].count - 1\n          if (newCount === 0) {\n            newCounts.splice(reactionIndex, 1)\n          } else {\n            newCounts[reactionIndex] = {\n              ...newCounts[reactionIndex],\n              count: newCount,\n              includesMe: added,\n            }\n          }\n        } else if (added) {\n          newCounts.push({ emoji, count: 1, includesMe: true })\n        }\n        return newCounts\n      })\n    }\n  }\n\n  const onActionSelected = (action: string) => () => {\n    if (action === \"copylink\") {\n      window.location.hash = `#comment-${props.comment.id}`\n      copyToClipboard(window.location.href).then(\n        () => notify.success(t({ id: \"showpost.comment.copylink.success\", message: \"Successfully copied comment link to clipboard\" })),\n        () => notify.error(t({ id: \"showpost.comment.copylink.error\", message: \"Could not copy comment link, please copy page URL\" }))\n      )\n    } else if (action === \"edit\") {\n      setIsEditing(true)\n      clearError()\n    } else if (action === \"delete\") {\n      setIsDeleteConfirmationModalOpen(true)\n    }\n  }\n\n  const modal = () => {\n    return (\n      <Modal.Window isOpen={isDeleteConfirmationModalOpen} onClose={closeModal} center={false} size=\"small\">\n        <Modal.Header>\n          <Trans id=\"modal.deletecomment.header\">Delete Comment</Trans>\n        </Modal.Header>\n        <Modal.Content>\n          <p>\n            <Trans id=\"modal.deletecomment.text\">\n              This process is irreversible. <strong>Are you sure?</strong>\n            </Trans>\n          </p>\n        </Modal.Content>\n\n        <Modal.Footer>\n          <Button variant=\"danger\" onClick={deleteComment}>\n            <Trans id=\"action.delete\">Delete</Trans>\n          </Button>\n          <Button variant=\"tertiary\" onClick={closeModal}>\n            <Trans id=\"action.cancel\">Cancel</Trans>\n          </Button>\n        </Modal.Footer>\n      </Modal.Window>\n    )\n  }\n\n  const comment = props.comment\n\n  const editedMetadata = !!comment.editedAt && !!comment.editedBy && (\n    <span data-tooltip={`This comment has been edited by ${comment.editedBy.name} on ${formatDate(fider.currentLocale, comment.editedAt)}`}>· edited</span>\n  )\n\n  const classList = classSet({\n    \"flex-grow rounded-md p-2\": true,\n    \"bg-gray-100\": !props.highlighted,\n    \"bg-gray-200\": props.highlighted,\n  })\n\n  return (\n    <div id={`comment-${comment.id}`}>\n      <HStack spacing={2} className=\"c-comment flex-items-baseline\">\n        {modal()}\n        <div className=\"pt-4\">\n          <Avatar user={comment.user} />\n        </div>\n        <div ref={node} className={classList}>\n          <div className=\"mb-1\">\n            <HStack justify=\"between\">\n              <HStack>\n                <UserName user={comment.user} />{\" \"}\n                <div className=\"text-xs\">\n                  · <Moment locale={fider.currentLocale} date={comment.createdAt} /> {editedMetadata}\n                </div>\n              </HStack>\n              {!isEditing && (\n                <Dropdown position=\"left\" renderHandle={<Icon sprite={IconDotsHorizontal} width=\"16\" height=\"16\" />}>\n                  <Dropdown.ListItem onClick={onActionSelected(\"copylink\")}>\n                    <Trans id=\"action.copylink\">Copy link</Trans>\n                  </Dropdown.ListItem>\n                  {canEditComment() && (\n                    <>\n                      <Dropdown.Divider />\n                      <Dropdown.ListItem onClick={onActionSelected(\"edit\")}>\n                        <Trans id=\"action.edit\">Edit</Trans>\n                      </Dropdown.ListItem>\n                      <Dropdown.ListItem onClick={onActionSelected(\"delete\")} className=\"text-red-700\">\n                        <Trans id=\"action.delete\">Delete</Trans>\n                      </Dropdown.ListItem>\n                    </>\n                  )}\n                </Dropdown>\n              )}\n            </HStack>\n          </div>\n          <div>\n            {isEditing ? (\n              <Form error={error}>\n                <CommentEditor disabled={!fider.session.isAuthenticated} initialValue={newContent} onChange={setNewContent} placeholder={comment.content} />\n                <MultiImageUploader field=\"attachments\" bkeys={comment.attachments} maxUploads={2} onChange={setAttachments} />\n                <Button size=\"small\" onClick={saveEdit} variant=\"primary\">\n                  <Trans id=\"action.save\">Save</Trans>\n                </Button>\n                <Button variant=\"tertiary\" size=\"small\" onClick={cancelEdit}>\n                  <Trans id=\"action.cancel\">Cancel</Trans>\n                </Button>\n              </Form>\n            ) : (\n              <>\n                <Markdown text={comment.content} style=\"full\" />\n                {comment.attachments && comment.attachments.map((x) => <ImageViewer key={x} bkey={x} />)}\n                <Reactions reactions={localReactionCounts} emojiSelectorRef={emojiSelectorRef} toggleReaction={toggleReaction} />\n              </>\n            )}\n          </div>\n        </div>\n      </HStack>\n    </div>\n  )\n}\n","import React, { useCallback, useState, useEffect } from \"react\"\n\nimport { Post, ImageUpload } from \"@fider/models\"\nimport { Avatar, UserName, Button, Form, MultiImageUploader } from \"@fider/components\"\nimport { SignInModal } from \"@fider/components\"\n\nimport { cache, actions, Failure, Fider } from \"@fider/services\"\nimport { HStack } from \"@fider/components/layout\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\n// import { CommentEditor } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\n// import Tiptap from \"@fider/components/common/form/CommentEditor2\"\nimport CommentEditor from \"@fider/components/common/form/CommentEditor\"\n\ninterface CommentInputProps {\n  post: Post\n}\n\nconst CACHE_TITLE_KEY = \"CommentInput-Comment-\"\n\nexport const CommentInput = (props: CommentInputProps) => {\n  const getCacheKey = () => `${CACHE_TITLE_KEY}${props.post.id}`\n\n  const getContentFromCache = () => {\n    return cache.session.get(getCacheKey())\n  }\n\n  const fider = useFider()\n  // const inputRef = useRef<HTMLTextAreaElement>()\n  // const [content, setContent] = useState<string>((fider.session.isAuthenticated && getContentFromCache()) || \"\")\n  const [isSignInModalOpen, setIsSignInModalOpen] = useState(false)\n  const [attachments, setAttachments] = useState<ImageUpload[]>([])\n  const [error, setError] = useState<Failure | undefined>(undefined)\n  const [isClient, setIsClient] = useState(false)\n\n  // Check if we're running on the client after component mounts\n  useEffect(() => {\n    setIsClient(true)\n  }, [])\n\n  const hideModal = () => setIsSignInModalOpen(false)\n  const clearError = () => setError(undefined)\n\n  const submit = async () => {\n    clearError()\n\n    // Since the comment is being cached, we can save the content that's in the cache\n    const content = getContentFromCache()\n\n    const result = await actions.createComment(props.post.number, content || \"\", attachments)\n    if (result.ok) {\n      cache.session.remove(getCacheKey())\n      location.reload()\n    } else {\n      setError(result.error)\n    }\n  }\n\n  const editorFocused = () => {\n    if (!fider.session.isAuthenticated) {\n      setIsSignInModalOpen(true)\n    }\n  }\n\n  const hasContent = true\n\n  const commentChanged = useCallback((value: string): void => {\n    cache.session.set(getCacheKey(), value)\n  }, [])\n\n  return (\n    <>\n      <SignInModal isOpen={isSignInModalOpen} onClose={hideModal} />\n      <HStack spacing={2} className=\"c-comment-input\" align=\"start\">\n        {Fider.session.isAuthenticated && <Avatar user={Fider.session.user} />}\n        <div className=\"flex-grow bg-gray-100 rounded-md p-2\">\n          <Form error={error}>\n            {Fider.session.isAuthenticated && (\n              <div className=\"mb-1\">\n                <UserName user={Fider.session.user} />\n              </div>\n            )}\n\n            {/* Only render interactive components on the client side */}\n            {isClient ? (\n              <>\n                <CommentEditor\n                  disabled={!Fider.session.isAuthenticated}\n                  onChange={commentChanged}\n                  onFocus={editorFocused}\n                  initialValue={getContentFromCache()}\n                  placeholder={i18n._(\"showpost.commentinput.placeholder\", { message: \"Leave a comment\" })}\n                />\n\n                {hasContent && (\n                  <>\n                    <MultiImageUploader field=\"attachments\" maxUploads={2} onChange={setAttachments} />\n                    <Button variant=\"primary\" onClick={submit}>\n                      <Trans id=\"action.submit\">Submit</Trans>\n                    </Button>\n                  </>\n                )}\n              </>\n            ) : (\n              // Simple placeholder for SSR\n              <div className=\"comment-input-placeholder p-2\">{i18n._(\"showpost.commentinput.placeholder\", { message: \"Leave a comment\" })}</div>\n            )}\n          </Form>\n        </div>\n      </HStack>\n    </>\n  )\n}\n","import React from \"react\"\nimport { CurrentUser, Comment, Post } from \"@fider/models\"\nimport { ShowComment } from \"./ShowComment\"\nimport { CommentInput } from \"./CommentInput\"\nimport { VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface DiscussionPanelProps {\n  user?: CurrentUser\n  post: Post\n  comments: Comment[]\n  highlightedComment?: number\n}\n\nexport const DiscussionPanel = (props: DiscussionPanelProps) => {\n  return (\n    <>\n      <VStack spacing={2} className=\"c-comment-list mt-8\">\n        <span className=\"text-category\">\n          <Trans id=\"label.discussion\">Discussion</Trans>\n        </span>\n        <VStack spacing={4} className=\"c-comment-list\">\n          {props.comments.map((c) => (\n            <ShowComment key={c.id} post={props.post} comment={c} highlighted={props.highlightedComment === c.id} />\n          ))}\n          <CommentInput post={props.post} />\n        </VStack>\n      </VStack>\n    </>\n  )\n}\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"heroicons-check\",\n  \"use\": \"heroicons-check-usage\",\n  \"viewBox\": \"0 0 24 24\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-check\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m5 13 4 4L19 7\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from \"react\"\nimport { Tag } from \"@fider/models\"\nimport { Icon, ShowTag } from \"@fider/components\"\nimport IconCheck from \"@fider/assets/images/heroicons-check.svg\"\nimport { HStack } from \"@fider/components/layout\"\n\ninterface TagListItemProps {\n  tag: Tag\n  assigned: boolean\n  onClick: (tag: Tag) => void\n}\n\nexport const TagListItem = (props: TagListItemProps) => {\n  const onClick = () => {\n    props.onClick(props.tag)\n  }\n\n  return (\n    <HStack className=\"clickable hover:bg-gray-100 rounded py-1\" onClick={onClick}>\n      <Icon sprite={IconCheck} className={`h-4 text-green-600 ${!props.assigned && \"invisible\"}`} />\n      <ShowTag tag={props.tag} />\n    </HStack>\n  )\n}\n","import React, { useState } from \"react\"\nimport { Post, Tag } from \"@fider/models\"\nimport { actions } from \"@fider/services\"\nimport { ShowTag, Button } from \"@fider/components\"\nimport { TagListItem } from \"./TagListItem\"\nimport { useFider } from \"@fider/hooks\"\n\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\n\nexport interface TagsPanelProps {\n  post: Post\n  tags: Tag[]\n}\n\nexport const TagsPanel = (props: TagsPanelProps) => {\n  const fider = useFider()\n  const canEdit = fider.session.isAuthenticated && fider.session.user.isCollaborator && props.tags.length > 0\n\n  const [isEditing, setIsEditing] = useState(false)\n  const [assignedTags, setAssignedTags] = useState(props.tags.filter((t) => props.post.tags.indexOf(t.slug) >= 0))\n\n  const assignOrUnassignTag = async (tag: Tag) => {\n    const idx = assignedTags.indexOf(tag)\n    let nextAssignedTags: Tag[] = []\n\n    if (idx >= 0) {\n      const response = await actions.unassignTag(tag.slug, props.post.number)\n      if (response.ok) {\n        nextAssignedTags = [...assignedTags]\n        nextAssignedTags.splice(idx, 1)\n      }\n    } else {\n      const response = await actions.assignTag(tag.slug, props.post.number)\n      if (response.ok) {\n        nextAssignedTags = [...assignedTags, tag]\n      }\n    }\n\n    setAssignedTags(nextAssignedTags)\n  }\n\n  const onSubtitleClick = () => {\n    if (canEdit) {\n      setIsEditing(!isEditing)\n    }\n  }\n\n  if (!canEdit && assignedTags.length === 0) {\n    return null\n  }\n\n  const tagsList = (\n    <HStack spacing={2} align=\"center\">\n      {assignedTags.length > 0 && assignedTags.map((tag) => <ShowTag key={tag.id} tag={tag} link />)}\n      <HStack spacing={1} align=\"center\" className=\"clickable\" onClick={onSubtitleClick}>\n        <span>\n          <Trans id=\"label.edittags\">Edit tags</Trans>\n        </span>\n      </HStack>\n    </HStack>\n  )\n\n  const editTagsList = props.tags.length > 0 && (\n    <VStack justify=\"between\" className=\"flex-items-start\">\n      {props.tags.map((tag) => (\n        <TagListItem key={tag.id} tag={tag} assigned={assignedTags.indexOf(tag) >= 0} onClick={assignOrUnassignTag} />\n      ))}\n      <Button variant=\"secondary\" size=\"small\" onClick={onSubtitleClick}>\n        <Trans id=\"action.close\">Close</Trans>\n      </Button>\n    </VStack>\n  )\n\n  if (fider.isReadOnly) {\n    return (\n      <VStack>\n        <HStack spacing={2} className=\"text-category\">\n          <Trans id=\"label.tags\">Tags</Trans>\n        </HStack>\n        {tagsList}\n      </VStack>\n    )\n  }\n\n  return (\n    <VStack>\n      <HStack spacing={2} align=\"center\" className=\"text-primary-base text-xs\">\n        {!isEditing && tagsList}\n        {isEditing && editTagsList}\n      </HStack>\n    </VStack>\n  )\n}\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"heroicons-plus\",\n  \"use\": \"heroicons-plus-usage\",\n  \"viewBox\": \"0 0 24 24\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke-width=\\\"1.5\\\" stroke=\\\"currentColor\\\" class=\\\"size-6\\\" id=\\\"heroicons-plus\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" d=\\\"M12 4.5v15m7.5-7.5h-15\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React, { useState } from \"react\"\nimport { Button, Icon } from \"@fider/components\"\nimport { actions } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport IconPlus from \"@fider/assets/images/heroicons-plus.svg\"\nimport IconCheck from \"@fider/assets/images/heroicons-check.svg\"\nimport { VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/macro\"\nimport { Post } from \"@fider/models\"\n\nexport interface NotificationsPanelProps {\n  post: Post\n  subscribed: boolean\n}\n\nexport const FollowButton = (props: NotificationsPanelProps) => {\n  const fider = useFider()\n  const [subscribed, setSubscribed] = useState(props.subscribed)\n\n  const subscribeOrUnsubscribe = async () => {\n    const action = subscribed ? actions.unsubscribe : actions.subscribe\n\n    const response = await action(props.post.number)\n    if (response.ok) {\n      setSubscribed(!subscribed)\n    }\n  }\n\n  if (!fider.session.isAuthenticated) {\n    return null\n  }\n\n  const button = subscribed ? (\n    <Button className=\"w-full text-gray-800 bg-white border border-gray-800 no-focus\" onClick={subscribeOrUnsubscribe} disabled={fider.isReadOnly}>\n      <Icon sprite={IconCheck} />{\" \"}\n      <span>\n        <Trans id=\"label.following\">Following</Trans>\n      </span>\n    </Button>\n  ) : (\n    <Button className=\"w-full text-blue-500 bg-white border border-blue-500 no-focus\" onClick={subscribeOrUnsubscribe} disabled={fider.isReadOnly}>\n      <Icon sprite={IconPlus} />\n      <span>\n        <Trans id=\"label.follow\">Follow</Trans>\n      </span>\n    </Button>\n  )\n\n  return <VStack>{button}</VStack>\n}\n","import React, { useState } from \"react\"\nimport { Post, PostStatus } from \"@fider/models\"\nimport { actions } from \"@fider/services\"\nimport { Button, Icon, SignInModal } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\nimport IconThumbsUp from \"@fider/assets/images/heroicons-thumbsup.svg\"\nimport IconCheck from \"@fider/assets/images/heroicons-check.svg\"\nimport { Trans } from \"@lingui/macro\"\nimport { HStack, VStack } from \"@fider/components/layout\"\n\ninterface VoteSectionProps {\n  post: Post\n  votes: number\n}\n\nexport const VoteSection = (props: VoteSectionProps) => {\n  const fider = useFider()\n  const [votes, setVotes] = useState(props.votes)\n  const [hasVoted, setHasVoted] = useState(props.post.hasVoted)\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 response = await actions.toggleVote(props.post.number)\n    if (response.ok) {\n      setVotes(response.data.voted ? votes + 1 : votes - 1)\n      setHasVoted(response.data.voted)\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 buttonText = hasVoted ? <Trans id=\"action.voted\">Voted!</Trans> : <Trans id=\"action.vote\">Vote for this idea</Trans>\n  const icon = hasVoted ? IconCheck : IconThumbsUp\n\n  return (\n    <VStack spacing={4}>\n      <SignInModal isOpen={isSignInModalOpen} onClose={hideModal} />\n      <div className=\"align-self-start\">\n        <Button variant=\"primary\" onClick={voteOrUndo} disabled={isDisabled} style={{ minWidth: \"180px\" }}>\n          <HStack spacing={2} justify=\"center\" className=\"w-full\">\n            <Icon sprite={icon} /> <span>{buttonText}</span>\n          </HStack>\n        </Button>\n      </div>\n      <HStack align=\"center\">\n        <span className=\"text-semibold text-2xl\" style={{ fontSize: \"32px\", minHeight: \"48px\" }}>\n          {votes}\n        </span>\n        <span className=\"text-semibold text-lg\">{votes === 1 ? \"Vote\" : \"Votes\"}</span>\n      </HStack>\n    </VStack>\n  )\n}\n","import React, { useState } from \"react\"\nimport { PostStatus, Post } from \"@fider/models\"\nimport { actions, navigator, Failure } from \"@fider/services\"\nimport { Form, Modal, Button, TextArea } from \"@fider/components\"\nimport { useFider } from \"@fider/hooks\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface DeletePostModalProps {\n  post: Post\n  showModal: boolean\n  onModalClose: () => void\n}\n\nexport const DeletePostModal = (props: DeletePostModalProps) => {\n  const fider = useFider()\n  const [text, setText] = useState(\"\")\n  const [error, setError] = useState<Failure>()\n\n  const handleDelete = async () => {\n    const response = await actions.deletePost(props.post.number, text)\n    if (response.ok) {\n      props.onModalClose()\n      navigator.goHome()\n    } else if (response.error) {\n      setError(response.error)\n    }\n  }\n\n  const status = PostStatus.Get(props.post.status)\n  if (!fider.session.isAuthenticated || !fider.session.user.isAdministrator || status.closed) {\n    return null\n  }\n\n  const modal = (\n    <Modal.Window isOpen={props.showModal} onClose={props.onModalClose} center={false} size=\"large\">\n      <Modal.Content>\n        <Form error={error}>\n          <TextArea\n            field=\"text\"\n            onChange={setText}\n            value={text}\n            placeholder={i18n._(\"showpost.moderationpanel.text.placeholder\", { message: \"Why are you deleting this post? (optional)\" })}\n          >\n            <span className=\"text-muted\">\n              <Trans id=\"showpost.moderationpanel.text.help\">\n                This operation <strong>cannot</strong> be undone.\n              </Trans>\n            </span>\n          </TextArea>\n        </Form>\n      </Modal.Content>\n\n      <Modal.Footer>\n        <Button variant=\"danger\" onClick={handleDelete}>\n          <Trans id=\"action.delete\">Delete</Trans>\n        </Button>\n        <Button variant=\"tertiary\" onClick={props.onModalClose}>\n          <Trans id=\"action.cancel\">Cancel</Trans>\n        </Button>\n      </Modal.Footer>\n    </Modal.Window>\n  )\n\n  return modal\n}\n","import React, { useEffect, useState } from \"react\"\nimport IconSearch from \"@fider/assets/images/heroicons-search.svg\"\nimport { Input, ShowPostStatus } from \"@fider/components\"\nimport { actions } from \"@fider/services\"\nimport { Post, PostStatus } from \"@fider/models\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface PostSearchProps {\n  exclude?: number[]\n  onChanged(postNumber: number): void\n}\n\nexport const PostSearch = (props: PostSearchProps) => {\n  const [query, setQuery] = useState(\"\")\n  const [posts, setPosts] = useState<Post[]>([])\n  const [selectedPost, setSelectedPost] = useState<Post>()\n\n  useEffect(() => {\n    if (!query) {\n      return\n    }\n\n    const timer = setTimeout(() => {\n      actions.searchPosts({ query, limit: 6 }).then((res) => {\n        if (res.ok) {\n          const filteredPosts =\n            props.exclude && props.exclude.length > 0 ? res.data.filter((i) => props.exclude && props.exclude.indexOf(i.number) === -1) : res.data\n          setPosts(filteredPosts)\n        }\n      })\n    }, 500)\n\n    return () => {\n      clearTimeout(timer)\n    }\n  }, [query])\n\n  const selectPost = (post: Post) => () => {\n    props.onChanged(post.number)\n    setSelectedPost(post)\n  }\n\n  return (\n    <>\n      <Input\n        field=\"query\"\n        icon={IconSearch}\n        placeholder={i18n._(\"showpost.postsearch.query.placeholder\", { message: \"Search original post...\" })}\n        value={query}\n        onChange={setQuery}\n      />\n      <div className=\"grid gap-2 grid-cols-1 lg:grid-cols-3\">\n        {posts.map((p) => (\n          <VStack onClick={selectPost(p)} className={`bg-gray-50 p-4 clickable border-2 rounded ${selectedPost === p ? \"border-primary-base\" : \"\"}`} key={p.id}>\n            <HStack className=\"text-2xs\">\n              <span>#{p.number}</span> <span>&middot;</span> <ShowPostStatus status={PostStatus.Get(p.status)} /> <span>&middot;</span>{\" \"}\n              <span>\n                <Trans id=\"showpost.postsearch.numofvotes\">{p.votesCount} votes</Trans>\n              </span>\n            </HStack>\n            <span>{p.title}</span>\n          </VStack>\n        ))}\n      </div>\n    </>\n  )\n}\n","import React from \"react\"\n\nimport { Modal, Button, DisplayError, Select, Form, TextArea, Field, SelectOption } from \"@fider/components\"\nimport { Post, PostStatus } from \"@fider/models\"\n\nimport { actions, Failure } from \"@fider/services\"\nimport { PostSearch } from \"./PostSearch\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface ResponseModalProps {\n  post: Post\n  showModal: boolean\n  onCloseModal: () => void\n}\n\ninterface ResponseModalState {\n  status: string\n  text: string\n  originalNumber: number\n  error?: Failure\n}\n\nexport class ResponseModal extends React.Component<ResponseModalProps, ResponseModalState> {\n  constructor(props: ResponseModalProps) {\n    super(props)\n\n    this.state = {\n      status: this.props.post.status,\n      originalNumber: 0,\n      text: this.props.post.response ? this.props.post.response.text : \"\",\n    }\n  }\n\n  private submit = async () => {\n    const result = await actions.respond(this.props.post.number, this.state)\n    if (result.ok) {\n      location.reload()\n    } else {\n      this.setState({\n        error: result.error,\n      })\n    }\n  }\n\n  private setStatus = (opt?: SelectOption) => {\n    if (opt) {\n      this.setState({ status: opt.value })\n    }\n  }\n\n  private setOriginalNumber = (originalNumber: number) => {\n    this.setState({ originalNumber })\n  }\n\n  private setText = (text: string) => {\n    this.setState({ text })\n  }\n\n  public render() {\n    const options = PostStatus.All.map((s) => {\n      const id = `enum.poststatus.${s.value.toString()}`\n      return {\n        value: s.value.toString(),\n        label: i18n._(id, { message: s.title }),\n      }\n    })\n\n    const modal = (\n      <Modal.Window isOpen={this.props.showModal} onClose={this.props.onCloseModal} center={false} size=\"large\">\n        <Modal.Content>\n          <Form error={this.state.error} className=\"c-response-form\">\n            <Select field=\"status\" label=\"Status\" defaultValue={this.state.status} options={options} onChange={this.setStatus} />\n            {this.state.status === PostStatus.Duplicate.value ? (\n              <>\n                <Field>\n                  <PostSearch exclude={[this.props.post.number]} onChanged={this.setOriginalNumber} />\n                </Field>\n                <DisplayError fields={[\"originalNumber\"]} error={this.state.error} />\n                <span className=\"text-muted\">\n                  <Trans id=\"showpost.responseform.message.mergedvotes\">Votes from this post will be merged into original post.</Trans>\n                </span>\n              </>\n            ) : (\n              <TextArea\n                field=\"text\"\n                onChange={this.setText}\n                value={this.state.text}\n                minRows={5}\n                placeholder={i18n._(\"showpost.responseform.text.placeholder\", {\n                  message: \"What's going on with this post? Let your users know what are your plans...\",\n                })}\n              />\n            )}\n          </Form>\n        </Modal.Content>\n\n        <Modal.Footer>\n          <Button variant=\"primary\" onClick={this.submit}>\n            <Trans id=\"action.submit\">Submit</Trans>\n          </Button>\n          <Button variant=\"tertiary\" onClick={this.props.onCloseModal}>\n            <Trans id=\"action.cancel\">Cancel</Trans>\n          </Button>\n        </Modal.Footer>\n      </Modal.Window>\n    )\n\n    return modal\n  }\n}\n","import React, { useEffect, useState } from \"react\"\nimport { Post, Vote } from \"@fider/models\"\nimport { Modal, Button, Loader, Avatar, UserName, Moment, Input } from \"@fider/components\"\nimport { actions } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport IconSearch from \"@fider/assets/images/heroicons-search.svg\"\nimport IconX from \"@fider/assets/images/heroicons-x.svg\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { i18n } from \"@lingui/core\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface VotesModalProps {\n  isOpen: boolean\n  post: Post\n  onClose?: () => void\n}\n\nexport const VotesModal: React.FC<VotesModalProps> = (props) => {\n  const [isLoading, setIsLoading] = useState(false)\n  const [query, setQuery] = useState(\"\")\n  const [allVotes, setAllVotes] = useState<Vote[]>([])\n  const [filteredVotes, setFilteredVotes] = useState<Vote[]>([])\n\n  const fider = useFider()\n\n  useEffect(() => {\n    if (props.isOpen) {\n      actions.listVotes(props.post.number).then((response) => {\n        if (response.ok) {\n          setAllVotes(response.data)\n          setFilteredVotes(response.data)\n          setIsLoading(false)\n        }\n      })\n    }\n  }, [props.isOpen])\n\n  const closeModal = async () => {\n    if (props.onClose) {\n      props.onClose()\n    }\n  }\n\n  const clearSearch = () => {\n    handleSearchFilterChanged(\"\")\n  }\n\n  const handleSearchFilterChanged = (query: string) => {\n    const votes = allVotes.filter((x) => x.user.name.toLowerCase().indexOf(query.toLowerCase()) >= 0)\n    setQuery(query)\n    setFilteredVotes(votes)\n  }\n\n  return (\n    <Modal.Window isOpen={props.isOpen} center={false} onClose={closeModal}>\n      <Modal.Content>\n        {isLoading && <Loader />}\n        {!isLoading && (\n          <>\n            <Input\n              field=\"query\"\n              icon={query ? IconX : IconSearch}\n              onIconClick={query ? clearSearch : undefined}\n              placeholder={i18n._(\"modal.showvotes.query.placeholder\", { message: \"Search for users by name...\" })}\n              value={query}\n              onChange={handleSearchFilterChanged}\n            />\n            <VStack spacing={2} className=\"h-max-5xl overflow-auto\">\n              {filteredVotes.map((x) => (\n                <HStack key={x.user.id} justify=\"between\">\n                  <HStack>\n                    <Avatar user={x.user} />\n                    <VStack spacing={0}>\n                      <UserName user={x.user} />\n                      <span className=\"text-muted\">{x.user.email}</span>\n                    </VStack>\n                  </HStack>\n                  <span className=\"text-muted\">\n                    <Moment locale={fider.currentLocale} date={x.createdAt} />\n                  </span>\n                </HStack>\n              ))}\n              {filteredVotes.length === 0 && (\n                <p className=\"text-muted\">\n                  <Trans id=\"modal.showvotes.message.zeromatches\">\n                    No users found matching <strong>{query}</strong>.\n                  </Trans>\n                </p>\n              )}\n            </VStack>\n          </>\n        )}\n      </Modal.Content>\n\n      <Modal.Footer>\n        <Button variant=\"tertiary\" onClick={closeModal}>\n          <Trans id=\"action.close\">Close</Trans>\n        </Button>\n      </Modal.Footer>\n    </Modal.Window>\n  )\n}\n","import React, { useState } from \"react\"\nimport { Post, Vote } from \"@fider/models\"\nimport { AvatarStack, Button } from \"@fider/components\"\nimport { Fider } from \"@fider/services\"\nimport { useFider } from \"@fider/hooks\"\nimport { VotesModal } from \"./VotesModal\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\n\ninterface VotesPanelProps {\n  post: Post\n  hideTitle?: boolean\n  votes: Vote[]\n}\n\nexport const VotesPanel = (props: VotesPanelProps) => {\n  const fider = useFider()\n  const [isVotesModalOpen, setIsVotesModalOpen] = useState(false)\n  const canShowAll = fider.session.isAuthenticated && Fider.session.user.isCollaborator\n\n  const openModal = () => {\n    if (canShowAll) {\n      setIsVotesModalOpen(true)\n    }\n  }\n\n  const closeModal = () => setIsVotesModalOpen(false)\n\n  const extraVotesCount = props.post.votesCount - props.votes.length\n\n  return (\n    <VStack spacing={4}>\n      <VotesModal post={props.post} isOpen={isVotesModalOpen} onClose={closeModal} />\n      {!props.hideTitle && (\n        <span className=\"text-category\">\n          <Trans id=\"label.voters\">Voters</Trans>\n        </span>\n      )}\n      {props.votes.length > 0 && (\n        <HStack spacing={0} className=\"gap-2\">\n          <AvatarStack users={props.votes.map((x) => x.user)} overlap={false} />\n        </HStack>\n      )}\n      {extraVotesCount > 0 && (\n        <Button variant=\"tertiary\" disabled={!canShowAll} size=\"small\" onClick={openModal}>\n          <Trans id=\"showpost.votespanel.more\">+{extraVotesCount} more</Trans>\n        </Button>\n      )}\n      {props.votes.length > 0 && extraVotesCount === 0 && canShowAll && (\n        <Button variant=\"tertiary\" size=\"small\" disabled={!canShowAll} onClick={openModal}>\n          <Trans id=\"showpost.votespanel.seedetails\">see details</Trans>\n        </Button>\n      )}\n      {props.votes.length === 0 && (\n        <span className=\"text-muted\">\n          <Trans id=\"label.none\">None</Trans>\n        </span>\n      )}\n    </VStack>\n  )\n}\n","import \"./ShowPost.page.scss\"\n\nimport React from \"react\"\n\nimport { Comment, Post, Tag, Vote, ImageUpload, CurrentUser, PostStatus } from \"@fider/models\"\nimport { actions, clearUrlHash, Failure, Fider, notify, timeAgo } from \"@fider/services\"\nimport IconDotsHorizontal from \"@fider/assets/images/heroicons-dots-horizontal.svg\"\n\nimport {\n  ResponseDetails,\n  Button,\n  UserName,\n  Moment,\n  Markdown,\n  Input,\n  Form,\n  TextArea,\n  MultiImageUploader,\n  ImageViewer,\n  Icon,\n  Header,\n  PoweredByFider,\n  Avatar,\n  Dropdown,\n} from \"@fider/components\"\nimport { DiscussionPanel } from \"./components/DiscussionPanel\"\n\nimport IconX from \"@fider/assets/images/heroicons-x.svg\"\nimport IconThumbsUp from \"@fider/assets/images/heroicons-thumbsup.svg\"\nimport { HStack, VStack } from \"@fider/components/layout\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { TagsPanel } from \"./components/TagsPanel\"\nimport { FollowButton } from \"./components/FollowButton\"\nimport { VoteSection } from \"./components/VoteSection\"\nimport { DeletePostModal } from \"./components/DeletePostModal\"\nimport { ResponseModal } from \"./components/ResponseModal\"\nimport { VotesPanel } from \"./components/VotesPanel\"\n\ninterface ShowPostPageProps {\n  post: Post\n  subscribed: boolean\n  comments: Comment[]\n  tags: Tag[]\n  votes: Vote[]\n  attachments: string[]\n}\n\ninterface ShowPostPageState {\n  editMode: boolean\n  newTitle: string\n  showDeleteModal: boolean\n  showResponseModal: boolean\n  attachments: ImageUpload[]\n  newDescription: string\n  highlightedComment?: number\n  error?: Failure\n}\n\nconst oneHour = 3600\nconst canEditPost = (user: CurrentUser, post: Post) => {\n  if (user.isCollaborator) {\n    return true\n  }\n\n  return user.id === post.user.id && timeAgo(post.createdAt) <= oneHour\n}\n\nexport default class ShowPostPage extends React.Component<ShowPostPageProps, ShowPostPageState> {\n  constructor(props: ShowPostPageProps) {\n    super(props)\n\n    this.state = {\n      editMode: false,\n      showDeleteModal: false,\n      showResponseModal: false,\n      newTitle: this.props.post.title,\n      newDescription: this.props.post.description,\n      attachments: [],\n    }\n  }\n\n  public componentDidMount() {\n    this.handleHashChange()\n    window.addEventListener(\"hashchange\", this.handleHashChange)\n  }\n\n  public componentWillUnmount() {\n    window.removeEventListener(\"hashchange\", this.handleHashChange)\n  }\n\n  private saveChanges = async () => {\n    const result = await actions.updatePost(this.props.post.number, this.state.newTitle, this.state.newDescription, this.state.attachments)\n    if (result.ok) {\n      location.reload()\n    } else {\n      this.setState({\n        error: result.error,\n      })\n    }\n  }\n\n  private canDeletePost = () => {\n    const status = PostStatus.Get(this.props.post.status)\n    if (!Fider.session.isAuthenticated || !Fider.session.user.isAdministrator || status.closed) {\n      return false\n    }\n    return true\n  }\n\n  private setNewTitle = (newTitle: string) => {\n    this.setState({ newTitle })\n  }\n\n  private setNewDescription = (newDescription: string) => {\n    this.setState({ newDescription })\n  }\n\n  private setAttachments = (attachments: ImageUpload[]) => {\n    this.setState({ attachments })\n  }\n\n  private setShowDeleteModal = (showDeleteModal: boolean) => {\n    this.setState({ showDeleteModal })\n  }\n\n  private setShowResponseModal = (showResponseModal: boolean) => {\n    this.setState({ showResponseModal })\n  }\n\n  private cancelEdit = async () => {\n    this.setState({ error: undefined, editMode: false })\n  }\n\n  private startEdit = async () => {\n    this.setState({ editMode: true })\n  }\n\n  private handleHashChange = (e?: Event) => {\n    const hash = window.location.hash\n    const result = /#comment-([0-9]+)/.exec(hash)\n\n    let highlightedComment\n    if (result === null) {\n      // No match\n      highlightedComment = undefined\n    } else {\n      // Match, extract numeric ID\n      const id = parseInt(result[1])\n      if (this.props.comments.map((comment) => comment.id).includes(id)) {\n        highlightedComment = id\n      } else {\n        // Unknown comment\n        if (e?.cancelable) {\n          e.preventDefault()\n        } else {\n          clearUrlHash(true)\n        }\n        notify.error(<Trans id=\"showpost.comment.unknownhighlighted\">Unknown comment ID #{id}</Trans>)\n        highlightedComment = undefined\n      }\n    }\n    this.setState({ highlightedComment })\n  }\n\n  public onActionSelected = (action: \"copy\" | \"delete\" | \"status\" | \"edit\") => () => {\n    if (action === \"copy\") {\n      navigator.clipboard.writeText(window.location.href)\n      notify.success(<Trans id=\"showpost.copylink.success\">Link copied to clipboard</Trans>)\n    } else if (action === \"delete\") {\n      this.setShowDeleteModal(true)\n    } else if (action === \"status\") {\n      this.setShowResponseModal(true)\n    } else if (action === \"edit\") {\n      this.startEdit()\n    }\n  }\n\n  public render() {\n    return (\n      <>\n        <Header />\n        <div id=\"p-show-post\" className=\"page container\">\n          <div className=\"p-show-post\">\n            <div className=\"p-show-post__main-col\">\n              <div className=\"p-show-post__header-col\">\n                <VStack spacing={8}>\n                  <HStack justify=\"between\">\n                    <VStack align=\"start\">\n                      {!this.state.editMode && (\n                        <HStack>\n                          <Avatar user={this.props.post.user} />\n                          <VStack spacing={1}>\n                            <UserName user={this.props.post.user} />\n                            <Moment className=\"text-muted\" locale={Fider.currentLocale} date={this.props.post.createdAt} />\n                          </VStack>\n                        </HStack>\n                      )}\n                    </VStack>\n\n                    {!this.state.editMode && (\n                      <Dropdown position=\"left\" renderHandle={<Icon sprite={IconDotsHorizontal} width=\"24\" height=\"24\" />}>\n                        <Dropdown.ListItem onClick={this.onActionSelected(\"copy\")}>\n                          <Trans id=\"action.copylink\">Copy link</Trans>\n                        </Dropdown.ListItem>\n                        {Fider.session.isAuthenticated && canEditPost(Fider.session.user, this.props.post) && (\n                          <>\n                            <Dropdown.ListItem onClick={this.onActionSelected(\"edit\")}>\n                              <Trans id=\"action.edit\">Edit</Trans>\n                            </Dropdown.ListItem>\n                            {Fider.session.user.isCollaborator && (\n                              <Dropdown.ListItem onClick={this.onActionSelected(\"status\")}>\n                                <Trans id=\"action.respond\">Respond</Trans>\n                              </Dropdown.ListItem>\n                            )}\n                          </>\n                        )}\n                        {this.canDeletePost() && (\n                          <Dropdown.ListItem onClick={this.onActionSelected(\"delete\")} className=\"text-red-700\">\n                            <Trans id=\"action.delete\">Delete</Trans>\n                          </Dropdown.ListItem>\n                        )}\n                      </Dropdown>\n                    )}\n                  </HStack>\n\n                  <div className=\"flex-grow\">\n                    {this.state.editMode ? (\n                      <Form error={this.state.error}>\n                        <Input field=\"title\" maxLength={100} value={this.state.newTitle} onChange={this.setNewTitle} />\n                      </Form>\n                    ) : (\n                      <>\n                        <h1 className=\"text-large\">{this.props.post.title}</h1>\n                      </>\n                    )}\n                  </div>\n\n                  <DeletePostModal onModalClose={() => this.setShowDeleteModal(false)} showModal={this.state.showDeleteModal} post={this.props.post} />\n                  {Fider.session.isAuthenticated && Fider.session.user.isCollaborator && (\n                    <ResponseModal onCloseModal={() => this.setShowResponseModal(false)} showModal={this.state.showResponseModal} post={this.props.post} />\n                  )}\n                  <VStack>\n                    {this.state.editMode ? (\n                      <Form error={this.state.error}>\n                        <TextArea field=\"description\" value={this.state.newDescription} onChange={this.setNewDescription} />\n                        <MultiImageUploader field=\"attachments\" bkeys={this.props.attachments} maxUploads={3} onChange={this.setAttachments} />\n                      </Form>\n                    ) : (\n                      <>\n                        {this.props.post.description && <Markdown className=\"description\" text={this.props.post.description} style=\"full\" />}\n                        {!this.props.post.description && (\n                          <em className=\"text-muted\">\n                            <Trans id=\"showpost.message.nodescription\">No description provided.</Trans>\n                          </em>\n                        )}\n                        {this.props.attachments.map((x) => (\n                          <ImageViewer key={x} bkey={x} />\n                        ))}\n                      </>\n                    )}\n                  </VStack>\n                  <div className=\"mt-2\">\n                    <TagsPanel post={this.props.post} tags={this.props.tags} />\n                  </div>\n\n                  <VStack spacing={4}>\n                    {!this.state.editMode ? (\n                      <HStack justify=\"between\" align=\"start\">\n                        <VoteSection post={this.props.post} votes={this.props.post.votesCount} />\n                        <FollowButton post={this.props.post} subscribed={this.props.subscribed} />\n                      </HStack>\n                    ) : (\n                      <HStack>\n                        <Button variant=\"primary\" onClick={this.saveChanges} disabled={Fider.isReadOnly}>\n                          <Icon sprite={IconThumbsUp} />{\" \"}\n                          <span>\n                            <Trans id=\"action.save\">Save</Trans>\n                          </span>\n                        </Button>\n                        <Button onClick={this.cancelEdit} disabled={Fider.isReadOnly}>\n                          <Icon sprite={IconX} />\n                          <span>\n                            <Trans id=\"action.cancel\">Cancel</Trans>\n                          </span>\n                        </Button>\n                      </HStack>\n                    )}\n                    <div className=\"border-4 border-blue-500\" />\n                  </VStack>\n\n                  <ResponseDetails status={this.props.post.status} response={this.props.post.response} />\n                </VStack>\n              </div>\n\n              <div className=\"p-show-post__discussion_col\">\n                <DiscussionPanel post={this.props.post} comments={this.props.comments} highlightedComment={this.state.highlightedComment} />\n              </div>\n            </div>\n            <div className=\"p-show-post__action-col\">\n              <VotesPanel post={this.props.post} votes={this.props.votes} />\n              <PoweredByFider slot=\"show-post\" className=\"mt-3\" />\n            </div>\n          </div>\n        </div>\n      </>\n    )\n  }\n}\n","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"heroicons-dots-horizontal\",\n  \"use\": \"heroicons-dots-horizontal-usage\",\n  \"viewBox\": \"0 0 24 24\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-dots-horizontal\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm7 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm7 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n  \"id\": \"heroicons-search\",\n  \"use\": \"heroicons-search-usage\",\n  \"viewBox\": \"0 0 24 24\",\n  \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 24 24\\\" stroke=\\\"currentColor\\\" id=\\\"heroicons-search\\\"><path stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21 21-6-6m2-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol"],"names":["ShowComment","props","fider","useFider","node","useRef","isEditing","setIsEditing","useState","newContent","setNewContent","comment","content","isDeleteConfirmationModalOpen","setIsDeleteConfirmationModalOpen","attachments","setAttachments","localReactionCounts","setLocalReactionCounts","reactionCounts","emojiSelectorRef","error","setError","handleClick","e","current","contains","target","clearUrlHash","useEffect","highlighted","document","addEventListener","removeEventListener","clearError","undefined","closeModal","async","onActionSelected","action","window","location","hash","id","copyToClipboard","href","then","notify","_i18n","_","editedMetadata","editedAt","editedBy","React","name","formatDate","currentLocale","classList","classSet","HStack","spacing","className","Modal","Window","isOpen","onClose","center","size","Header","_Trans","Content","components","0","Footer","Button","variant","onClick","actions","post","number","ok","reload","Avatar","user","ref","justify","UserName","Moment","locale","date","createdAt","Dropdown","position","renderHandle","Icon","sprite","IconDotsHorizontal","width","height","ListItem","session","isAuthenticated","isCollaborator","Divider","Form","CommentEditor","disabled","initialValue","onChange","placeholder","MultiImageUploader","field","bkeys","maxUploads","response","Markdown","text","style","map","x","ImageViewer","key","bkey","Reactions","reactions","toggleReaction","emoji","added","data","prevCounts","newCounts","reactionIndex","findIndex","r","newCount","count","splice","includesMe","push","CommentInput","getCacheKey","getContentFromCache","cache","get","isSignInModalOpen","setIsSignInModalOpen","isClient","setIsClient","commentChanged","useCallback","value","set","SignInModal","hideModal","align","Fider","onFocus","editorFocused","i18n","message","result","remove","DiscussionPanel","VStack","comments","c","highlightedComment","symbol","TagListItem","tag","IconCheck","assigned","ShowTag","TagsPanel","canEdit","tags","length","assignedTags","setAssignedTags","filter","t","indexOf","slug","assignOrUnassignTag","idx","nextAssignedTags","onSubtitleClick","tagsList","link","editTagsList","isReadOnly","FollowButton","subscribed","setSubscribed","subscribeOrUnsubscribe","button","IconPlus","VoteSection","votes","setVotes","hasVoted","setHasVoted","isDisabled","PostStatus","Get","status","closed","buttonText","icon","IconThumbsUp","voted","minWidth","fontSize","minHeight","DeletePostModal","setText","isAdministrator","showModal","onModalClose","TextArea","navigator","goHome","PostSearch","query","setQuery","posts","setPosts","selectedPost","setSelectedPost","timer","setTimeout","limit","res","filteredPosts","exclude","i","clearTimeout","Input","IconSearch","p","onChanged","ShowPostStatus","values","votesCount","title","ResponseModal","constructor","super","_defineProperty","this","state","setState","opt","originalNumber","render","options","All","s","toString","label","onCloseModal","Select","defaultValue","setStatus","Duplicate","Field","setOriginalNumber","DisplayError","fields","minRows","submit","VotesModal","isLoading","setIsLoading","allVotes","setAllVotes","filteredVotes","setFilteredVotes","handleSearchFilterChanged","toLowerCase","Loader","IconX","onIconClick","clearSearch","email","VotesPanel","isVotesModalOpen","setIsVotesModalOpen","canShowAll","openModal","extraVotesCount","hideTitle","AvatarStack","users","overlap","ShowPostPage","newTitle","newDescription","showDeleteModal","showResponseModal","editMode","exec","parseInt","includes","cancelable","preventDefault","clipboard","writeText","setShowDeleteModal","setShowResponseModal","startEdit","description","componentDidMount","handleHashChange","componentWillUnmount","timeAgo","canDeletePost","maxLength","setNewTitle","setNewDescription","saveChanges","cancelEdit","ResponseDetails","PoweredByFider","slot","canEditPost"],"sourceRoot":""}