diff --git a/app/globals.css b/app/globals.css index 46a82ac9..9029e542 100644 --- a/app/globals.css +++ b/app/globals.css @@ -132,6 +132,7 @@ @media (min-width: 640px) { :root { + /*picks between max width and screen width with 64px of padding*/ --page-width-unitless: min( var(--page-max-width-unitless), calc(var(--leaflet-width-unitless) - 128) @@ -143,19 +144,6 @@ } } - @media (min-width: 1280px) { - :root { - --page-width-unitless: min( - var(--page-max-width-unitless), - calc((var(--leaflet-width-unitless) / 2) - 32) - ); - --page-width-units: min( - calc(var(--page-max-width-unitless) * 1px), - calc((100vw / 2) - 32px) - ); - } - } - html, body { @apply h-full; diff --git a/components/ThemeManager/Pickers/PageWidthSetter.tsx b/components/ThemeManager/Pickers/PageWidthSetter.tsx index d69457dd..aad2047a 100644 --- a/components/ThemeManager/Pickers/PageWidthSetter.tsx +++ b/components/ThemeManager/Pickers/PageWidthSetter.tsx @@ -1,8 +1,9 @@ import * as Slider from "@radix-ui/react-slider"; import { Input } from "components/Input"; +import { Radio } from "components/Checkbox"; import { useEntity, useReplicache } from "src/replicache"; import { pickers } from "../ThemeSetter"; -import { useState } from "react"; +import { useState, useEffect } from "react"; export const PageWidthSetter = (props: { entityID: string; @@ -12,14 +13,35 @@ export const PageWidthSetter = (props: { closePicker: () => void; }) => { let { rep } = useReplicache(); - let pageWidth = useEntity(props.entityID, "theme/page-width"); - let currentValue = pageWidth?.data.value || 624; + let pageWidth = useEntity(props.entityID, "theme/page-width")?.data.value; + let currentValue = pageWidth || 624; let [interimValue, setInterimValue] = useState(currentValue); + let [selectedPreset, setSelectedPreset] = useState< + "default" | "wide" | "custom" + >( + currentValue === 624 ? "default" : currentValue === 756 ? "wide" : "custom", + ); let min = 324; let max = 1200; let open = props.openPicker == props.thisPicker; + // Update interim value when current value changes + useEffect(() => { + setInterimValue(currentValue); + }, [currentValue]); + + const setPageWidth = (value: number) => { + rep?.mutate.assertFact({ + entity: props.entityID, + attribute: "theme/page-width", + data: { + type: "number", + value: value, + }, + }); + }; + return (
@@ -37,82 +59,148 @@ export const PageWidthSetter = (props: { Max Page Width
- { - e.preventDefault(); - props.setOpenPicker(props.thisPicker); - }} - onChange={(e) => { - setInterimValue(parseInt(e.currentTarget.value)); - }} - onKeyDown={(e) => { - if (e.key === "Enter" || e.key === "Escape") { - e.preventDefault(); - let clampedValue = interimValue; - if (!isNaN(interimValue)) { - clampedValue = Math.max(min, Math.min(max, interimValue)); - setInterimValue(clampedValue); - } - rep?.mutate.assertFact({ - entity: props.entityID, - attribute: "theme/page-width", - data: { - type: "number", - value: clampedValue, - }, - }); - } - }} - onBlur={() => { - let clampedValue = interimValue; - if (!isNaN(interimValue)) { - clampedValue = Math.max(min, Math.min(max, interimValue)); - setInterimValue(clampedValue); - } - rep?.mutate.assertFact({ - entity: props.entityID, - attribute: "theme/page-width", - data: { - type: "number", - value: clampedValue, - }, - }); - }} - /> - px + {currentValue}px
{open && ( - { - setInterimValue(value[0]); - }} - onPointerUp={() => { - rep?.mutate.assertFact({ - entity: props.entityID, - attribute: "theme/page-width", - data: { type: "number", value: interimValue }, - }); - }} - > - - - +
+ + + +
)}