1
0
Fork 0

sticky draft toolbar with tooltips

This commit is contained in:
Enoch Riese 2023-06-21 23:11:14 -05:00
parent d6b037e9ea
commit 609cef854e
4 changed files with 26 additions and 16 deletions

View file

@ -160,8 +160,8 @@ export const WorkbenchHeader = ({ view, setView }) => {
> >
<div <div
className={` className={`
flex flex-col lg:justify-between flex flex-col
items-center w-full sticky lg:top-26`} items-center w-full sticky top-4 lg:top-28`}
> >
<NavIcons {...{ setView, setDense, dense, view }} /> <NavIcons {...{ setView, setDense, dense, view }} />
</div> </div>

View file

@ -3,7 +3,7 @@ import { DraftMenu, ns as menuNs } from './menu.mjs'
import { ViewHeader, ns as headerNs } from 'shared/components/workbench/views/view-header.mjs' import { ViewHeader, ns as headerNs } from 'shared/components/workbench/views/view-header.mjs'
import { PanZoomContextProvider } from 'shared/components/workbench/pattern/pan-zoom-context.mjs' import { PanZoomContextProvider } from 'shared/components/workbench/pattern/pan-zoom-context.mjs'
export const ns = menuNs export const ns = [menuNs, ...headerNs]
export const DraftView = ({ export const DraftView = ({
design, design,

View file

@ -12,7 +12,7 @@ import {
ClearIcon, ClearIcon,
} from 'shared/components/icons.mjs' } from 'shared/components/icons.mjs'
export const ns = ['common'] export const ns = ['common', 'core-settings', 'ui-settings']
const ZoomInIcon = (props) => ( const ZoomInIcon = (props) => (
<IconWrapper {...props}> <IconWrapper {...props}>
@ -27,6 +27,7 @@ const ZoomOutIcon = (props) => (
) )
const IconButton = ({ Icon, onClick, dflt = true, title, hide = false }) => ( const IconButton = ({ Icon, onClick, dflt = true, title, hide = false }) => (
<div className="tooltip tooltip-bottom tooltip-primary flex items-center" data-tip={title}>
<button <button
onClick={onClick} onClick={onClick}
className={`text-${dflt ? 'neutral-content' : 'accent'} hover:text-secondary-focus ${ className={`text-${dflt ? 'neutral-content' : 'accent'} hover:text-secondary-focus ${
@ -36,6 +37,7 @@ const IconButton = ({ Icon, onClick, dflt = true, title, hide = false }) => (
> >
<Icon /> <Icon />
</button> </button>
</div>
) )
const ZoomButtons = ({ t }) => { const ZoomButtons = ({ t }) => {
@ -71,7 +73,7 @@ const Spacer = () => <span className="opacity-50">|</span>
export const ViewHeader = ({ update, settings, ui, control, setSettings }) => { export const ViewHeader = ({ update, settings, ui, control, setSettings }) => {
const { t } = useTranslation(ns) const { t } = useTranslation(ns)
return ( return (
<div className="flex flex-row flex-wrap gap-4 py-4 mt-2 pt-4 w-full bg-neutral text-neutral-content items-center justify-center"> <div className="flex flex-row flex-wrap gap-4 py-4 pt-4 w-full bg-neutral text-neutral-content items-center justify-center lg:sticky top-0 z-20">
<ZoomButtons t={t} /> <ZoomButtons t={t} />
<Spacer /> <Spacer />
<div className="flex flex-row items-center gap-4"> <div className="flex flex-row items-center gap-4">
@ -79,11 +81,13 @@ export const ViewHeader = ({ update, settings, ui, control, setSettings }) => {
Icon={SaIcon} Icon={SaIcon}
dflt={settings.sabool ? false : true} dflt={settings.sabool ? false : true}
onClick={() => update.toggleSa()} onClick={() => update.toggleSa()}
title={t('core-settings:sabool.t')}
/> />
<IconButton <IconButton
Icon={PaperlessIcon} Icon={PaperlessIcon}
dflt={settings.paperless ? false : true} dflt={settings.paperless ? false : true}
onClick={() => update.settings(['paperless'], !settings.paperless)} onClick={() => update.settings(['paperless'], !settings.paperless)}
title={t('core-settings:paperless.t')}
/> />
<IconButton <IconButton
Icon={DetailIcon} Icon={DetailIcon}
@ -94,6 +98,7 @@ export const ViewHeader = ({ update, settings, ui, control, setSettings }) => {
typeof settings.complete === 'undefined' ? 0 : settings.complete ? 0 : 1 typeof settings.complete === 'undefined' ? 0 : settings.complete ? 0 : 1
) )
} }
title={t('core-settings:complete.t')}
/> />
<IconButton <IconButton
Icon={ Icon={
@ -105,10 +110,14 @@ export const ViewHeader = ({ update, settings, ui, control, setSettings }) => {
onClick={() => onClick={() =>
update.settings(['units'], settings.units === 'imperial' ? 'metric' : 'imperial') update.settings(['units'], settings.units === 'imperial' ? 'metric' : 'imperial')
} }
title={t('core-settings:units.t')}
/> />
</div> </div>
<Spacer /> <Spacer />
<div className="flex flex-row items-center"> <div
className="tooltip tooltip-primary tooltip-bottom flex flex-row items-center"
data-tip={t('ui-settings:control.t')}
>
{[1, 2, 3, 4, 5].map((score) => ( {[1, 2, 3, 4, 5].map((score) => (
<button onClick={() => update.setControl(score)} className="text-primary" key={score}> <button onClick={() => update.setControl(score)} className="text-primary" key={score}>
<BulletIcon fill={control >= score ? true : false} /> <BulletIcon fill={control >= score ? true : false} />
@ -121,6 +130,7 @@ export const ViewHeader = ({ update, settings, ui, control, setSettings }) => {
Icon={RocketIcon} Icon={RocketIcon}
dflt={ui.renderer !== 'svg'} dflt={ui.renderer !== 'svg'}
onClick={() => update.ui(['renderer'], ui.renderer === 'react' ? 'svg' : 'react')} onClick={() => update.ui(['renderer'], ui.renderer === 'react' ? 'svg' : 'react')}
title={t('ui-settings:renderer.t')}
/> />
</div> </div>
<Spacer /> <Spacer />

View file

@ -30,4 +30,4 @@ patternLogs: Pattern logs
patternInspector: Pattern Inspector patternInspector: Pattern Inspector
docs: Documentation docs: Documentation
configurePattern: Configure pattern configurePattern: Configure pattern
measies: Measurements measies: Pattern Measurements