import { createEffect, createSignal, untrack, type JSX } from "solid-js"; import type { SearchPanelDom } from "../../eh"; import texts from "../../i18n"; import { DomNode } from "../Widgets/ExternalDom"; import { Icon } from "../Widgets/Icon"; const TOUCH_SEARCH_OPTION_CLASS = "appearance-none inline-flex ui-hit-min-h-sm items-center ui-px-md border-0 ui-rounded-sm bg-transparent ehp-color-site-accent text-left textsize-md font-700 font-inherit leading-[1.2] no-underline cursor-pointer [touch-action:manipulation] active:bg-[var(--color-site-accent-hover)]"; const TOUCH_SEARCH_ACTION_CLASS = "appearance-none inline-flex box-border w-[var(--ui-control-size-xl)] h-[var(--ui-control-size-xl)] items-center justify-center p-0 ui-rounded-sm border-0 bg-transparent cursor-pointer transition-[background-color,transform] duration-120 [touch-action:manipulation] active:(scale-96 bg-[var(--color-site-item-hover)]) [--ehpeek-touch-search-icon-size:var(--ui-icon-size-lg)]"; export function TouchSearchPanel(props: { after?: JSX.Element; source: SearchPanelDom }) { return (
{props.after}
); } export function TouchSearchCategoryToggle(props: { source: SearchPanelDom }) { const [open, setOpen] = createSignal(false); createEffect(() => props.source.handle.updateCategoryVisibility(open())); return setOpen((value) => !value)} />; } export function TouchSearchOptionToggle(props: { option: "advancedOptions" | "fileSearch"; source: SearchPanelDom; }) { const [open, setOpen] = createSignal(false); const toggle = () => { if (props.option === "advancedOptions") { props.source.handle.toggleAdvancedOptions(); } else { props.source.handle.toggleFileSearch(); } setOpen((value) => !value); }; return ; } function ToggleButton(props: { expanded: boolean; label: string; onClick: () => void }) { return ( ); } export function TouchSearchAction(props: { action: "search" | "clear"; source: SearchPanelDom }) { const source = untrack(() => props.source); const search = untrack(() => props.action === "search"); const label = search ? source.data.searchLabel : source.data.clearLabel ?? ""; return ( ); }