VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /opt/mattermost/client/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/mattermost/client/1119.b438684e4a1347d38d5b.js.map
{"version":3,"file":"1119.b438684e4a1347d38d5b.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/components/channel_bookmarks/bookmark_delete_modal.tsx","webpack://mattermost-webapp/./src/components/channel_bookmarks/bookmark_dot_menu.tsx","webpack://mattermost-webapp/./src/components/channel_bookmarks/bookmark_item.tsx","webpack://mattermost-webapp/./src/components/channel_bookmarks/channel_bookmarks.tsx"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\n\nimport {GenericModal} from '@mattermost/components';\n\ntype Props = {\n    displayName: string;\n    onConfirm: () => void;\n    onCancel?: () => void;\n    onExited: () => void;\n}\n\nconst noop = () => {};\n\nfunction BookmarkDeleteModal({\n    displayName,\n    onExited,\n    onCancel,\n    onConfirm,\n}: Props) {\n    const {formatMessage} = useIntl();\n\n    const title = formatMessage({\n        id: 'channel_bookmarks.confirm.delete.title',\n        defaultMessage: 'Delete bookmark',\n    });\n\n    const confirmButtonText = formatMessage({\n        id: 'channel_bookmarks.confirm.delete.button',\n        defaultMessage: 'Yes, delete',\n    });\n\n    const message = (\n        <FormattedMessage\n            id={'channel_bookmarks.confirm.delete.text'}\n            defaultMessage={'Are you sure you want to delete the bookmark <strong>{displayName}</strong>?'}\n            values={{\n                strong: (chunk: string) => <strong>{chunk}</strong>,\n                displayName,\n            }}\n        />\n    );\n\n    return (\n        <GenericModal\n            confirmButtonText={confirmButtonText}\n            handleCancel={onCancel ?? noop}\n            handleConfirm={onConfirm}\n            modalHeaderText={title}\n            onExited={onExited}\n            compassDesign={true}\n            isDeleteModal={true}\n        >\n            {message}\n        </GenericModal>\n    );\n}\n\nexport default BookmarkDeleteModal;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useCallback} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useDispatch} from 'react-redux';\n\nimport {\n    DotsHorizontalIcon,\n    PencilOutlineIcon,\n    LinkVariantIcon,\n    TrashCanOutlineIcon,\n    ArrowExpandIcon,\n    OpenInNewIcon,\n    BookOutlineIcon,\n} from '@mattermost/compass-icons/components';\nimport type {ChannelBookmark, ChannelBookmarkPatch} from '@mattermost/types/channel_bookmarks';\n\nimport type {ActionResult} from 'mattermost-redux/types/actions';\nimport {getFileDownloadUrl} from 'mattermost-redux/utils/file_utils';\n\nimport {editBookmark, deleteBookmark} from 'actions/channel_bookmarks';\nimport {openModal} from 'actions/views/modals';\n\nimport GetPublicModal from 'components/get_public_link_modal';\nimport * as Menu from 'components/menu';\n\nimport {ModalIdentifiers} from 'utils/constants';\nimport {getSiteURL, shouldOpenInNewTab} from 'utils/url';\nimport {copyToClipboard} from 'utils/utils';\n\nimport BookmarkDeleteModal from './bookmark_delete_modal';\nimport ChannelBookmarksCreateModal from './channel_bookmarks_create_modal';\nimport {useCanGetPublicLink, useChannelBookmarkPermission} from './utils';\n\ntype Props = {bookmark: ChannelBookmark; open: () => void};\nconst BookmarkItemDotMenu = ({\n    bookmark,\n    open,\n}: Props) => {\n    const {formatMessage} = useIntl();\n    const dispatch = useDispatch();\n\n    const siteURL = getSiteURL();\n    const openInNewTab = bookmark.type === 'link' && bookmark.link_url && shouldOpenInNewTab(bookmark.link_url, siteURL);\n\n    let openIcon;\n    if (bookmark.type === 'file') {\n        openIcon = <ArrowExpandIcon size={18}/>;\n    } else if (bookmark.link_url) {\n        openIcon = openInNewTab ? <OpenInNewIcon size={18}/> : <BookOutlineIcon size={18}/>;\n    }\n\n    const canEdit = useChannelBookmarkPermission(bookmark.channel_id, 'edit');\n    const canDelete = useChannelBookmarkPermission(bookmark.channel_id, 'delete');\n    const canGetPublicLink = useCanGetPublicLink();\n\n    const editLabel = formatMessage({id: 'channel_bookmarks.edit', defaultMessage: 'Edit'});\n    const openLabel = formatMessage({id: 'channel_bookmarks.open', defaultMessage: 'Open'});\n    const copyLinkLabel = formatMessage({id: 'channel_bookmarks.copy', defaultMessage: 'Copy link'});\n    const copyFileLabel = formatMessage({id: 'channel_bookmarks.copyFilePublicLink', defaultMessage: 'Get a public link'});\n    const deleteLabel = formatMessage({id: 'channel_bookmarks.delete', defaultMessage: 'Delete'});\n\n    const handleEdit = useCallback(() => {\n        dispatch(openModal({\n            modalId: ModalIdentifiers.CHANNEL_BOOKMARK_CREATE,\n            dialogType: ChannelBookmarksCreateModal,\n            dialogProps: {\n                bookmark,\n                channelId: bookmark.channel_id,\n                onConfirm: async (data: ChannelBookmarkPatch) => dispatch(editBookmark(bookmark.channel_id, bookmark.id, data)) as ActionResult<boolean>,\n            },\n        }));\n    }, [editBookmark, dispatch, bookmark]);\n\n    const copyLink = useCallback(() => {\n        if (bookmark.type === 'link' && bookmark.link_url) {\n            copyToClipboard(bookmark.link_url);\n        } else if (bookmark.type === 'file' && bookmark.file_id) {\n            copyToClipboard(getFileDownloadUrl(bookmark.file_id));\n        }\n    }, [bookmark.type, bookmark.link_url, bookmark.file_id]);\n\n    const handleDelete = useCallback(() => {\n        dispatch(openModal({\n            modalId: ModalIdentifiers.CHANNEL_BOOKMARK_DELETE,\n            dialogType: BookmarkDeleteModal,\n            dialogProps: {\n                displayName: bookmark.display_name,\n                onConfirm: () => dispatch(deleteBookmark(bookmark.channel_id, bookmark.id)),\n            },\n        }));\n    }, [deleteBookmark, dispatch, bookmark]);\n\n    const handleGetPublicLink = useCallback(() => {\n        if (!bookmark.file_id) {\n            return;\n        }\n\n        dispatch(openModal({\n            modalId: ModalIdentifiers.GET_PUBLIC_LINK_MODAL,\n            dialogType: GetPublicModal,\n            dialogProps: {\n                fileId: bookmark.file_id,\n            },\n        }));\n    }, [bookmark.file_id, dispatch]);\n\n    return (\n        <Menu.Container\n            anchorOrigin={{vertical: 'bottom', horizontal: 'right'}}\n            transformOrigin={{vertical: 'top', horizontal: 'right'}}\n            menuButton={{\n                id: `channelBookmarksDotMenuButton-${bookmark.id}`,\n                class: 'channelBookmarksDotMenuButton',\n                children: <DotsHorizontalIcon size={18}/>,\n                'aria-label': formatMessage({id: 'channel_bookmarks.editBookmarkLabel', defaultMessage: 'Bookmark menu'}),\n            }}\n            menu={{\n                id: 'channelBookmarksDotMenuDropdown',\n            }}\n        >\n            <Menu.Item\n                key='channelBookmarksOpen'\n                id='channelBookmarksOpen'\n                onClick={open}\n                leadingElement={openIcon}\n                labels={<span>{openLabel}</span>}\n                aria-label={openLabel}\n            />\n            {canEdit && (\n                <Menu.Item\n                    key='channelBookmarksEdit'\n                    id='channelBookmarksEdit'\n                    onClick={handleEdit}\n                    leadingElement={<PencilOutlineIcon size={18}/>}\n                    labels={<span>{editLabel}</span>}\n                    aria-label={editLabel}\n                />\n            )}\n            {bookmark.type === 'link' && (\n                <Menu.Item\n                    key='channelBookmarksLinkCopy'\n                    id='channelBookmarksLinkCopy'\n                    onClick={copyLink}\n                    leadingElement={<LinkVariantIcon size={18}/>}\n                    labels={<span>{copyLinkLabel}</span>}\n                    aria-label={copyLinkLabel}\n                />\n            )}\n            {bookmark.type === 'file' && canGetPublicLink && (\n                <Menu.Item\n                    key='channelBookmarksFileCopy'\n                    id='channelBookmarksFileCopy'\n                    onClick={handleGetPublicLink}\n                    leadingElement={<LinkVariantIcon size={18}/>}\n                    labels={<span>{copyFileLabel}</span>}\n                    aria-label={copyFileLabel}\n                />\n            )}\n            {canDelete && (\n                <Menu.Item\n                    key='channelBookmarksDelete'\n                    id='channelBookmarksDelete'\n                    onClick={handleDelete}\n                    leadingElement={<TrashCanOutlineIcon size={18}/>}\n                    labels={<span>{deleteLabel}</span>}\n                    aria-label={deleteLabel}\n                    isDestructive={true}\n                />\n            )}\n        </Menu.Container>\n    );\n};\n\nexport default BookmarkItemDotMenu;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnchorHTMLAttributes} from 'react';\nimport React, {cloneElement, forwardRef, useRef} from 'react';\nimport type {DraggableProvided} from 'react-beautiful-dnd';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Link} from 'react-router-dom';\nimport styled, {css} from 'styled-components';\n\nimport type {ChannelBookmark} from '@mattermost/types/channel_bookmarks';\nimport type {FileInfo} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\n\nimport {getFile} from 'mattermost-redux/selectors/entities/files';\nimport {getFileDownloadUrl} from 'mattermost-redux/utils/file_utils';\n\nimport {openModal} from 'actions/views/modals';\n\nimport ExternalLink from 'components/external_link';\nimport FilePreviewModal from 'components/file_preview_modal';\n\nimport {ModalIdentifiers} from 'utils/constants';\nimport {getSiteURL, shouldOpenInNewTab} from 'utils/url';\n\nimport type {GlobalState} from 'types/store';\n\nimport BookmarkItemDotMenu from './bookmark_dot_menu';\nimport BookmarkIcon from './bookmark_icon';\n\nconst useBookmarkLink = (bookmark: ChannelBookmark) => {\n    const linkRef = useRef<HTMLAnchorElement>(null);\n    const dispatch = useDispatch();\n    const fileInfo: FileInfo | undefined = useSelector((state: GlobalState) => (bookmark?.file_id && getFile(state, bookmark.file_id)) || undefined);\n\n    const open = () => {\n        linkRef.current?.click();\n    };\n\n    const handleOpenFile = (e: React.MouseEvent<HTMLAnchorElement>) => {\n        e.preventDefault();\n\n        if (fileInfo) {\n            dispatch(openModal({\n                modalId: ModalIdentifiers.FILE_PREVIEW_MODAL,\n                dialogType: FilePreviewModal,\n                dialogProps: {\n                    post: {user_id: bookmark.owner_id, channel_id: bookmark.channel_id} as Post,\n                    fileInfos: [fileInfo],\n                    startIndex: 0,\n                },\n            }));\n        }\n    };\n\n    const icon = (\n        <BookmarkIcon\n            type={bookmark.type}\n            emoji={bookmark.emoji}\n            imageUrl={bookmark.image_url}\n            fileInfo={fileInfo}\n        />\n    );\n    let link;\n\n    if (bookmark.type === 'link' && bookmark.link_url) {\n        link = (\n            <DynamicLink\n                href={bookmark.link_url}\n                ref={linkRef}\n                isFile={false}\n            >\n                {icon}\n                <Label>{bookmark.display_name}</Label>\n            </DynamicLink>\n        );\n    } else if (bookmark.type === 'file' && bookmark.file_id) {\n        link = (\n            <DynamicLink\n                href={getFileDownloadUrl(bookmark.file_id)}\n                onClick={handleOpenFile}\n                ref={linkRef}\n                isFile={true}\n            >\n                {icon}\n                <Label>{bookmark.display_name}</Label>\n            </DynamicLink>\n        );\n    }\n\n    return {\n        link,\n        icon,\n        open,\n    } as const;\n};\n\ntype Props = {\n    bookmark: ChannelBookmark;\n    drag: DraggableProvided;\n    isDragging: boolean;\n    disableInteractions: boolean;\n};\nconst BookmarkItem = (({bookmark, drag, disableInteractions}: Props) => {\n    const {link, open} = useBookmarkLink(bookmark);\n\n    return (\n        <Chip\n            ref={drag.innerRef}\n            {...drag.draggableProps}\n            $disableInteractions={disableInteractions}\n        >\n            {link && cloneElement(link, {...drag.dragHandleProps, role: 'link'})}\n            <BookmarkItemDotMenu\n                bookmark={bookmark}\n                open={open}\n            />\n        </Chip>\n    );\n});\n\nconst Chip = styled.div<{$disableInteractions: boolean}>`\n    position: relative;\n    border-radius: 12px;\n    overflow: hidden;\n    margin: 1px 0;\n    flex-shrink: 0;\n    min-width: 5rem;\n    max-width: 25rem;\n\n    button {\n        position: absolute;\n        visibility: hidden;\n        right: 6px;\n        top: 3px;\n    }\n\n    ${({$disableInteractions}) => !$disableInteractions && css`\n        &:hover,\n        &:focus-within,\n        &:has([aria-expanded=\"true\"]) {\n            button {\n                visibility: visible;\n            }\n        }\n\n        &:hover,\n        &:focus-within {\n            a {\n                text-decoration: none;\n                cursor: pointer;\n            }\n        }\n\n        &:hover,\n        &:focus-within,\n        &:has([aria-expanded=\"true\"]) {\n            a {\n                background: rgba(var(--center-channel-color-rgb), 0.08);\n                color: rgba(var(--center-channel-color-rgb), 1);\n            }\n        }\n\n        &:active:not(:has(button:active)),\n        &--active,\n        &--active:hover {\n            a {\n                background: rgba(var(--button-bg-rgb), 0.08);\n                color: rgb(var(--button-bg-rgb)) !important;\n\n                .icon__text {\n                    color: rgb(var(--button-bg));\n                }\n\n                .icon {\n                    color: rgb(var(--button-bg));\n                }\n            }\n        }\n    `}\n`;\n\nconst Label = styled.span`\n    white-space: nowrap;\n    padding: 4px 0;\n    text-overflow: ellipsis;\n    overflow: hidden;\n`;\n\nconst TARGET_BLANK_URL_PREFIX = '!';\n\ntype DynamicLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {\n    href: string;\n    children: React.ReactNode;\n    isFile: boolean;\n};\nconst DynamicLink = forwardRef<HTMLAnchorElement, DynamicLinkProps>(({\n    href,\n    children,\n    isFile,\n    onClick,\n    ...otherProps\n}, ref) => {\n    const siteURL = getSiteURL();\n    const openInNewTab = shouldOpenInNewTab(href, siteURL);\n\n    const prefixed = href[0] === TARGET_BLANK_URL_PREFIX;\n\n    if (prefixed || openInNewTab) {\n        return (\n            <StyledExternalLink\n                {...otherProps}\n                href={prefixed ? href.substring(1) : href}\n                rel='noopener noreferrer'\n                target='_blank'\n                location='channel_bookmarks.item'\n                ref={ref}\n            >\n                {children}\n            </StyledExternalLink>\n        );\n    }\n\n    if (href.startsWith(siteURL) && !isFile) {\n        return (\n            <StyledLink\n                {...otherProps}\n                to={href.slice(siteURL.length)}\n                ref={ref}\n            >\n                {children}\n            </StyledLink>\n        );\n    }\n\n    return (\n        <StyledAnchor\n            {...otherProps}\n            href={href}\n            ref={ref}\n            onClick={onClick}\n        >\n            {children}\n        </StyledAnchor>\n    );\n});\n\nconst linkStyles = css`\n    display: flex;\n    padding: 0 12px 0 6px;\n    gap: 5px;\n\n    color: rgba(var(--center-channel-color-rgb), 1);\n    font-family: Open Sans;\n    font-size: 12px;\n    font-style: normal;\n    font-weight: 600;\n    line-height: 16px;\n`;\n\nconst StyledAnchor = styled.a`\n    &&&& {\n        ${linkStyles}\n    }\n`;\n\nconst StyledLink = styled(Link)`\n    &&&& {\n        ${linkStyles}\n    }\n`;\n\nconst StyledExternalLink = styled(ExternalLink)`\n    &&&& {\n        ${linkStyles}\n    }\n`;\n\nexport default BookmarkItem;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ComponentProps} from 'react';\nimport React from 'react';\nimport {DragDropContext, Draggable, Droppable} from 'react-beautiful-dnd';\nimport styled from 'styled-components';\n\nimport type {ChannelBookmark} from '@mattermost/types/channel_bookmarks';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport BookmarkItem from './bookmark_item';\nimport BookmarksMenu from './channel_bookmarks_menu';\nimport {useChannelBookmarks, MAX_BOOKMARKS_PER_CHANNEL, useCanUploadFiles, useChannelBookmarkPermission} from './utils';\n\nimport './channel_bookmarks.scss';\n\ntype Props = {\n    channelId: string;\n};\n\nfunction ChannelBookmarks({\n    channelId,\n}: Props) {\n    const {order, bookmarks, reorder} = useChannelBookmarks(channelId);\n    const canReorder = useChannelBookmarkPermission(channelId, 'order');\n    const canUploadFiles = useCanUploadFiles();\n    const hasBookmarks = Boolean(order?.length);\n    const limitReached = order.length >= MAX_BOOKMARKS_PER_CHANNEL;\n\n    if (!hasBookmarks) {\n        return null;\n    }\n\n    const handleOnDragEnd: ComponentProps<typeof DragDropContext>['onDragEnd'] = ({source, destination, draggableId}) => {\n        if (destination) {\n            reorder(draggableId, source.index, destination.index);\n        }\n    };\n\n    return (\n        <DragDropContext\n            onDragEnd={handleOnDragEnd}\n        >\n            <Droppable\n                droppableId='channel-bookmarks'\n                direction='horizontal'\n            >\n                {(drop, snap) => {\n                    return (\n                        <Container\n                            ref={drop.innerRef}\n                            data-testid='channel-bookmarks-container'\n                            {...drop.droppableProps}\n                        >\n                            {order.map(makeItemRenderer(bookmarks, snap.isDraggingOver, !canReorder))}\n                            {drop.placeholder}\n                            <BookmarksMenu\n                                channelId={channelId}\n                                hasBookmarks={hasBookmarks}\n                                limitReached={limitReached}\n                                canUploadFiles={canUploadFiles}\n                            />\n                        </Container>\n                    );\n                }}\n            </Droppable>\n        </DragDropContext>\n    );\n}\n\nconst makeItemRenderer = (bookmarks: IDMappedObjects<ChannelBookmark>, disableInteractions: boolean, disableDrag: boolean) => (id: string, index: number) => {\n    return (\n        <Draggable\n            key={id}\n            draggableId={id}\n            index={index}\n            isDragDisabled={disableDrag}\n        >\n            {(drag, snap) => {\n                return (\n                    <BookmarkItem\n                        key={id}\n                        drag={drag}\n                        isDragging={snap.isDragging}\n                        disableInteractions={snap.isDragging || disableInteractions}\n                        bookmark={bookmarks[id]}\n                    />\n                );\n            }}\n        </Draggable>\n    );\n};\n\nexport default ChannelBookmarks;\n\nconst Container = styled.div`\n    display: flex;\n    padding: 0 6px;\n    padding-right: 0;\n    min-height: 38px;\n    align-items: center;\n    border-bottom: 1px solid rgba(var(--center-channel-color-rgb), 0.12);\n    overflow-x: auto;\n    max-width: 100vw;\n`;\n"],"names":["noop","BookmarkDeleteModal","_ref","displayName","onExited","onCancel","onConfirm","formatMessage","useIntl","title","id","defaultMessage","confirmButtonText","message","React","FormattedMessage","values","strong","chunk","GenericModal","handleCancel","handleConfirm","modalHeaderText","compassDesign","isDeleteModal","propTypes","_pt","isRequired","BookmarkItemDotMenu","bookmark","open","dispatch","useDispatch","siteURL","getSiteURL","openInNewTab","type","link_url","shouldOpenInNewTab","openIcon","ArrowExpandIcon","size","OpenInNewIcon","BookOutlineIcon","canEdit","useChannelBookmarkPermission","channel_id","canDelete","canGetPublicLink","useCanGetPublicLink","editLabel","openLabel","copyLinkLabel","copyFileLabel","deleteLabel","handleEdit","useCallback","openModal","modalId","ModalIdentifiers","CHANNEL_BOOKMARK_CREATE","dialogType","ChannelBookmarksCreateModal","dialogProps","channelId","async","editBookmark","data","copyLink","copyToClipboard","file_id","getFileDownloadUrl","handleDelete","CHANNEL_BOOKMARK_DELETE","display_name","deleteBookmark","handleGetPublicLink","GET_PUBLIC_LINK_MODAL","GetPublicModal","fileId","Menu","anchorOrigin","vertical","horizontal","transformOrigin","menuButton","concat","class","children","DotsHorizontalIcon","menu","key","onClick","leadingElement","labels","PencilOutlineIcon","LinkVariantIcon","TrashCanOutlineIcon","isDestructive","_excluded","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","i","Symbol","toPrimitive","call","TypeError","String","_toPrimitive","_toPropertyKey","value","configurable","writable","BookmarkItem","drag","disableInteractions","link","linkRef","useRef","fileInfo","useSelector","state","getFile","undefined","icon","BookmarkIcon","emoji","imageUrl","image_url","DynamicLink","href","ref","isFile","Label","preventDefault","FILE_PREVIEW_MODAL","FilePreviewModal","post","user_id","owner_id","fileInfos","startIndex","_linkRef$current","current","click","useBookmarkLink","Chip","assign","innerRef","draggableProps","$disableInteractions","cloneElement","dragHandleProps","role","isDragging","styled","withConfig","_ref2","css","forwardRef","_ref3","otherProps","n","hasOwnProperty","includes","_objectWithoutPropertiesLoose","s","propertyIsEnumerable","_objectWithoutProperties","prefixed","StyledExternalLink","substring","rel","target","location","startsWith","StyledLink","to","slice","StyledAnchor","linkStyles","Link","ExternalLink","ChannelBookmarks","order","bookmarks","reorder","useChannelBookmarks","canReorder","canUploadFiles","useCanUploadFiles","hasBookmarks","Boolean","limitReached","MAX_BOOKMARKS_PER_CHANNEL","DragDropContext","onDragEnd","source","destination","draggableId","index","Droppable","droppableId","direction","drop","snap","Container","droppableProps","map","makeItemRenderer","isDraggingOver","placeholder","BookmarksMenu","disableDrag","Draggable","isDragDisabled"],"sourceRoot":""}

VaKeR 2022