diff --git a/package-lock.json b/package-lock.json index 40731789..90f794ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "i18next": "22.4.15", "mailgun.js": "8.2.1", "node-fetch": "3.3.1", + "solid-popper": "0.3.0", "typograf": "7.1.0" }, "devDependencies": { @@ -5541,7 +5542,6 @@ "version": "2.11.7", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -8389,8 +8389,7 @@ "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -18106,7 +18105,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/seroval/-/seroval-0.5.1.tgz", "integrity": "sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==", - "dev": true, "engines": { "node": ">=10" } @@ -18305,12 +18303,23 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.7.5.tgz", "integrity": "sha512-GfJ8na1e9FG1oAF5xC24BM+ATLym0sfH+ZblkbBFpueYdq3fWAoA5Ve+jGeIeLI7jmMGfa0rUaKruszNm2sH8w==", - "dev": true, "dependencies": { "csstype": "^3.1.0", "seroval": "^0.5.0" } }, + "node_modules/solid-popper": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/solid-popper/-/solid-popper-0.3.0.tgz", + "integrity": "sha512-XlfEWAyxGGqFgg/uRpF+BemSfCqjbLA8p6fToDa+6v3paw3eBQj0TU08aBOIj2VeigaEiz8ZTlDx1eBLVRivBg==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@popperjs/core": "^2.11", + "solid-js": "^1.2" + } + }, "node_modules/solid-refresh": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.5.1.tgz", @@ -24661,8 +24670,7 @@ "@popperjs/core": { "version": "2.11.7", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", - "dev": true + "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==" }, "@remirror/core-constants": { "version": "2.0.0", @@ -26768,8 +26776,7 @@ "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "damerau-levenshtein": { "version": "1.0.8", @@ -33967,8 +33974,7 @@ "seroval": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/seroval/-/seroval-0.5.1.tgz", - "integrity": "sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==", - "dev": true + "integrity": "sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==" }, "set-blocking": { "version": "2.0.0", @@ -34107,12 +34113,17 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.7.5.tgz", "integrity": "sha512-GfJ8na1e9FG1oAF5xC24BM+ATLym0sfH+ZblkbBFpueYdq3fWAoA5Ve+jGeIeLI7jmMGfa0rUaKruszNm2sH8w==", - "dev": true, "requires": { "csstype": "^3.1.0", "seroval": "^0.5.0" } }, + "solid-popper": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/solid-popper/-/solid-popper-0.3.0.tgz", + "integrity": "sha512-XlfEWAyxGGqFgg/uRpF+BemSfCqjbLA8p6fToDa+6v3paw3eBQj0TU08aBOIj2VeigaEiz8ZTlDx1eBLVRivBg==", + "requires": {} + }, "solid-refresh": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.5.1.tgz", diff --git a/package.json b/package.json index f5d88894..0bc6985f 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "i18next": "22.4.15", "mailgun.js": "8.2.1", "node-fetch": "3.3.1", + "solid-popper": "0.3.0", "typograf": "7.1.0" }, "devDependencies": { diff --git a/src/components/Nav/HeaderAuth.tsx b/src/components/Nav/HeaderAuth.tsx index 2e0ba124..8ef773d0 100644 --- a/src/components/Nav/HeaderAuth.tsx +++ b/src/components/Nav/HeaderAuth.tsx @@ -1,9 +1,8 @@ import styles from './Header.module.scss' import { clsx } from 'clsx' import { router, useRouter } from '../../stores/router' - import { Icon } from '../_shared/Icon' -import { createMemo, createSignal, Show } from 'solid-js' +import { createEffect, createMemo, createSignal, onCleanup, onMount, Show } from 'solid-js' import Notifications from './Notifications' import { ProfilePopup } from './ProfilePopup' import Userpic from '../Author/Userpic' @@ -14,11 +13,18 @@ import { useLocalize } from '../../context/localize' import { getPagePath } from '@nanostores/router' import { Button } from '../_shared/Button' import { useEditorContext } from '../../context/editor' +import { Popover } from '../_shared/Popover' type HeaderAuthProps = { setIsProfilePopupVisible: (value: boolean) => void } +type IconedButton = { + value: string + icon: string + action: () => void +} +const MD_WIDTH_BREAKPOINT = 992 export const HeaderAuth = (props: HeaderAuthProps) => { const { t } = useLocalize() const { page } = useRouter() @@ -64,6 +70,40 @@ export const HeaderAuth = (props: HeaderAuthProps) => { publishShout() } + const [width, setWidth] = createSignal(0) + const handleResize = () => setWidth(window.innerWidth) + onMount(() => { + handleResize() + window.addEventListener('resize', handleResize) + onCleanup(() => window.removeEventListener('resize', handleResize)) + }) + + const renderIconedButton = (iconedButtonProps: IconedButton) => { + return ( + {iconedButtonProps.value}} + variant={'outline'} + onClick={handleSaveButtonClick} + /> + } + > + + {(ref) => ( +