* fix: Library Header layout shift * Bump Github Actions versions. * Self-Hosting Changes * Fix Minio Environment Variable * Just make pdfs successful, due to lack of PDFHandler * Fix issue where flag was set wrong * Added an NGINX Example file * Add some documentation for self-hosting via Docker Compose * Make some adjustments to Puppeteer due to failing sites. * adjust timings * Add start of Mail Service * Fix Docker Files * More email service stuff * Add Guide to use Zapier for Email-Importing. * Ensure that if no env is provided it uses the old email settings * Add some instructions for self-hosted email * Add SNS Endpoints for Mail Watcher * Add steps and functionality for using SES and SNS for email * Uncomment a few jobs. * Added option for Firefox for parser. Was having issues with Chromium on Docker. * Add missing space. Co-authored-by: Russ Taylor <729694+russtaylor@users.noreply.github.com> * Fix some wording on the Guide * update browser extension to handle self-hosted instances * add slight documentation to options page * Fix MV * Do raw handlers for Medium * Fix images in Medium * Update self-hosting/GUIDE.md Co-authored-by: Mike Baker <1426795+mbaker3@users.noreply.github.com> * Update Guide with other variables * Add The Verge to JS-less handlers * Update regex and image-proxy * Update self-hosting/nginx/nginx.conf Co-authored-by: Mike Baker <1426795+mbaker3@users.noreply.github.com> * Update regex and image-proxy * Update self-hosting/docker-compose/docker-compose.yml Co-authored-by: Mike Baker <1426795+mbaker3@users.noreply.github.com> * Fix Minio for Export * Merge to main * Update GUIDE with newer NGINX * Update nginx config to include api/save route * Enable Native PDF View for PDFS * Enable Native PDF View for PDFS * feat:lover packages test * feat:working build * feat:alpine build * docs:api dockerfile docs * Write a PDF.js wrapper to replace pspdfkit * Revert changes for replication, set settings to have default mode * build folder got removed due to gitignore on pdf * Add Box shadow to pdf pages * Add Toggle for Progress in PDFS, enabled native viewer toggle * Update node version to LTS * Update node version to LTS * Fix Linting issues * Fix Linting issues * Make env variable nullable * Add touchend listener for mobile * Make changes to PDF for mobile * fix(android): change serverUrl to selfhosted first * feat:2 stage alpine content fetch * feat:separated start script * fix:changed to node 22 * Add back youtube functionality and add guide * trigger build * Fix cache issue on YouTube * Allow empty AWS_S3_ENDPOINT * Allow empty AWS_S3_ENDPOINT * Add GCHR for all images * Add GCHR For self hosting. * Add GCHR For self hosting. * Test prebuilt. * Test prebuilt * Test prebuilt... * Fix web image * Remove Web Image (For now) * Move docker-compose to images * Move docker-compose files to correct locations * Remove the need for ARGS * Update packages, and Typescript versions * Fix * Fix issues with build on Web * Correct push * Fix Linting issues * Fix Trace import * Add missing types * Fix Tasks * Add information into guide about self-build * Fix issues with PDF Viewer --------- Co-authored-by: keumky2 <keumky2@woowahan.com> Co-authored-by: William Theaker <wtheaker@nvidia.com> Co-authored-by: Russ Taylor <729694+russtaylor@users.noreply.github.com> Co-authored-by: David Adams <david@dadams2.com> Co-authored-by: Mike Baker <1426795+mbaker3@users.noreply.github.com> Co-authored-by: m1xxos <66390094+m1xxos@users.noreply.github.com> Co-authored-by: Adil <mr.adil777@gmail.com>
242 lines
6.5 KiB
TypeScript
242 lines
6.5 KiB
TypeScript
import * as Switch from '@radix-ui/react-switch'
|
|
import { ReaderSettings } from '../../../lib/hooks/useReaderSettings'
|
|
import { HStack, VStack } from '../../elements/LayoutPrimitives'
|
|
import {
|
|
ModalRoot,
|
|
ModalContent,
|
|
ModalOverlay,
|
|
} from '../../elements/ModalPrimitives'
|
|
import { StyledText } from '../../elements/StyledText'
|
|
import { ReaderSettingsControl } from './ReaderSettingsControl'
|
|
import { styled } from '../../tokens/stitches.config'
|
|
import { usePersistedState } from '../../../lib/hooks/usePersistedState'
|
|
|
|
type PDFDisplaySettingsModalProps = {
|
|
centerX: boolean
|
|
onOpenChange: (open: boolean) => void
|
|
triggerElementRef?: React.RefObject<HTMLElement>
|
|
readerSettings: ReaderSettings
|
|
}
|
|
|
|
export function PDFDisplaySettingsModal(
|
|
props: PDFDisplaySettingsModalProps
|
|
): JSX.Element {
|
|
return (
|
|
<ModalRoot defaultOpen onOpenChange={props.onOpenChange}>
|
|
<ModalOverlay css={{ backgroundColor: 'unset' }} />
|
|
<ModalContent
|
|
css={{
|
|
width: '345px',
|
|
padding: '0px',
|
|
top: '262px',
|
|
left: 'calc(100% - 250px)',
|
|
'@lgDown': {
|
|
top: '300px',
|
|
left: '50%',
|
|
},
|
|
}}
|
|
onPointerDownOutside={(event) => {
|
|
event.preventDefault()
|
|
props.onOpenChange(false)
|
|
}}
|
|
>
|
|
<VStack css={{ width: '100%' }}>
|
|
<PDFSettings readerSettings={props.readerSettings} />
|
|
</VStack>
|
|
</ModalContent>
|
|
</ModalRoot>
|
|
)
|
|
}
|
|
|
|
type SettingsProps = {
|
|
readerSettings: ReaderSettings
|
|
}
|
|
|
|
function PDFSettings(props: SettingsProps): JSX.Element {
|
|
const { readerSettings } = props
|
|
const [showPDFToolBar, setShowPDFToolBar] = usePersistedState({
|
|
key: 'reader-show-pdf-tool-bar',
|
|
initialValue: true,
|
|
isSessionStorage: false,
|
|
})
|
|
const [rememberLatestPage, setLatestPage] = usePersistedState({
|
|
key: 'reader-remember-latest-page',
|
|
initialValue: true,
|
|
isSessionStorage: false,
|
|
})
|
|
|
|
const [useNativeReader, setUseNativeReader] = usePersistedState({
|
|
key: 'reader-use-native-reader',
|
|
initialValue: false,
|
|
isSessionStorage: false,
|
|
})
|
|
|
|
return (
|
|
<VStack
|
|
css={{ width: '100%', minHeight: '320px', p: '10px' }}
|
|
alignment="start"
|
|
distribution="start"
|
|
>
|
|
<HStack
|
|
css={{
|
|
width: '100%',
|
|
pr: '30px',
|
|
alignItems: 'center',
|
|
'&:hover': {
|
|
opacity: 0.8,
|
|
},
|
|
'&[data-state="on"]': {
|
|
bg: '$thBackground',
|
|
},
|
|
}}
|
|
alignment="start"
|
|
distribution="between"
|
|
>
|
|
<Label htmlFor="show-menu-bar" css={{ width: '100%' }}>
|
|
<StyledText style="displaySettingsLabel" css={{ pl: '20px' }}>
|
|
Show Tool Bar
|
|
</StyledText>
|
|
</Label>
|
|
|
|
<SwitchRoot
|
|
id="show-menu-bar"
|
|
checked={showPDFToolBar}
|
|
onCheckedChange={(checked: boolean) => {
|
|
setShowPDFToolBar(checked)
|
|
document.dispatchEvent(new Event('pdfReaderUpdateSettings'))
|
|
}}
|
|
>
|
|
<SwitchThumb />
|
|
</SwitchRoot>
|
|
</HStack>
|
|
|
|
<HStack
|
|
css={{
|
|
width: '100%',
|
|
pr: '30px',
|
|
alignItems: 'center',
|
|
'&:hover': {
|
|
opacity: 0.8,
|
|
},
|
|
'&[data-state="on"]': {
|
|
bg: '$thBackground',
|
|
},
|
|
}}
|
|
alignment="start"
|
|
distribution="between"
|
|
>
|
|
<Label htmlFor="remember-latest-page" css={{ width: '100%' }}>
|
|
<StyledText style="displaySettingsLabel" css={{ pl: '20px' }}>
|
|
Remember last page visited
|
|
</StyledText>
|
|
</Label>
|
|
|
|
<SwitchRoot
|
|
id="remember-latest-page"
|
|
checked={rememberLatestPage}
|
|
onCheckedChange={(checked: boolean) => {
|
|
setLatestPage(checked)
|
|
document.dispatchEvent(new Event('pdfReaderUpdateSettings'))
|
|
}}
|
|
>
|
|
<SwitchThumb />
|
|
</SwitchRoot>
|
|
</HStack>
|
|
|
|
<HStack
|
|
css={{
|
|
width: '100%',
|
|
pr: '30px',
|
|
alignItems: 'center',
|
|
'&:hover': {
|
|
opacity: 0.8,
|
|
},
|
|
'&[data-state="on"]': {
|
|
bg: '$thBackground',
|
|
},
|
|
}}
|
|
alignment="start"
|
|
distribution="between"
|
|
>
|
|
<Label htmlFor="use-native-reader" css={{ width: '100%' }}>
|
|
<StyledText style="displaySettingsLabel" css={{ pl: '20px' }}>
|
|
Use Browsers Native PDF Reader
|
|
</StyledText>
|
|
</Label>
|
|
|
|
<SwitchRoot
|
|
id="use-native-reader"
|
|
checked={useNativeReader}
|
|
onCheckedChange={(checked: boolean) => {
|
|
setUseNativeReader(checked)
|
|
document.dispatchEvent(new Event('pdfReaderUpdateSettings'))
|
|
}}
|
|
>
|
|
<SwitchThumb />
|
|
</SwitchRoot>
|
|
</HStack>
|
|
|
|
{/* <HStack
|
|
css={{
|
|
width: '100%',
|
|
pr: '30px',
|
|
alignItems: 'center',
|
|
'&:hover': {
|
|
opacity: 0.8,
|
|
},
|
|
'&[data-state="on"]': {
|
|
bg: '$thBackground',
|
|
},
|
|
}}
|
|
alignment="start"
|
|
distribution="between"
|
|
>
|
|
<Label htmlFor="high-contrast-text" css={{ width: '100%' }}>
|
|
<StyledText style="displaySettingsLabel" css={{ pl: '20px' }}>
|
|
High Contrast Text
|
|
</StyledText>
|
|
</Label>
|
|
<SwitchRoot
|
|
id="high-contrast-text"
|
|
checked={readerSettings.highContrastText ?? false}
|
|
onCheckedChange={(checked: boolean) => {
|
|
readerSettings.setHighContrastText(checked)
|
|
}}
|
|
>
|
|
<SwitchThumb />
|
|
</SwitchRoot>
|
|
</HStack> */}
|
|
</VStack>
|
|
)
|
|
}
|
|
|
|
const SwitchRoot = styled(Switch.Root, {
|
|
all: 'unset',
|
|
width: 42,
|
|
height: 25,
|
|
backgroundColor: '$thBorderColor',
|
|
borderRadius: '9999px',
|
|
position: 'relative',
|
|
WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)',
|
|
'&:focus': { boxShadow: `0 0 0 2px $thBorderColor` },
|
|
'&[data-state="checked"]': { backgroundColor: '$thBorderColor' },
|
|
})
|
|
|
|
const SwitchThumb = styled(Switch.Thumb, {
|
|
display: 'block',
|
|
width: 21,
|
|
height: 21,
|
|
backgroundColor: '$thTextContrast2',
|
|
borderRadius: '9999px',
|
|
transition: 'transform 100ms',
|
|
transform: 'translateX(2px)',
|
|
willChange: 'transform',
|
|
'&[data-state="checked"]': { transform: 'translateX(19px)' },
|
|
})
|
|
|
|
const Label = styled('label', {
|
|
color: 'white',
|
|
fontSize: 15,
|
|
lineHeight: 1,
|
|
})
|