diff --git a/packages/otfjs-ui/src/components/font-icon/font-icon.tsx b/packages/otfjs-ui/src/components/font-icon/font-icon.tsx index 0244a13..1ca8a33 100644 --- a/packages/otfjs-ui/src/components/font-icon/font-icon.tsx +++ b/packages/otfjs-ui/src/components/font-icon/font-icon.tsx @@ -15,7 +15,7 @@ export function FontIcon({ name, size }: FontIconProps) { if (complexFonts.has(id)) { return ( any> }) { - /* - const replacer = useMemo(() => { - if (!replacements) return undefined - - return (key: string, value: any): any => { - const r = replacements[key] - if (r) return r(value) - return value + if (replacements) { + data = structuredClone(data) + for (const [key, replace] of Object.entries(replacements)) { + if (key in data) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + ;(data as any)[key] = replace((data as any)[key]) + } } - }, [replacements]) - */ + } return } diff --git a/packages/otfjs-ui/src/components/font-view/font-view.module.css b/packages/otfjs-ui/src/components/font-view/font-view.module.css index b2074b7..290dc0e 100644 --- a/packages/otfjs-ui/src/components/font-view/font-view.module.css +++ b/packages/otfjs-ui/src/components/font-view/font-view.module.css @@ -1,19 +1,30 @@ .root { display: grid; - grid-template-columns: auto 1fr; + gap: 1px; + grid: + 'head view' auto + 'tabs view' 1fr / 240px 1fr; height: 100%; overflow: hidden; + + background: var(--color-border); + + :where(& > *) { + background: var(--color-bg); + } + + @media screen and (max-width: 600px) { + grid: + 'head head' auto + 'tabs view' 1fr / 100px 1fr; + } } -.sidebar { +.tabs { + grid-area: tabs; overflow: scroll; - width: 240px; - box-sizing: content-box; - border-right: 1px solid var(--color-border); background: var(--color-bg-sidebar); -} -.tabs { & ul { list-style: none; padding: 0; @@ -50,6 +61,7 @@ } .tableView { + grid-area: view; position: relative; overflow: scroll; } diff --git a/packages/otfjs-ui/src/components/font-view/font-view.tsx b/packages/otfjs-ui/src/components/font-view/font-view.tsx index 1388874..86fb5e5 100644 --- a/packages/otfjs-ui/src/components/font-view/font-view.tsx +++ b/packages/otfjs-ui/src/components/font-view/font-view.tsx @@ -1,4 +1,4 @@ -import { useRef, useState } from 'react' +import { useCallback, useRef, useState } from 'react' import clsx from 'clsx' import { Font, NameId } from 'otfjs' @@ -19,33 +19,19 @@ export function FontView({ font }: FontViewProps) { return ( - + + ) } -function Sidebar({ - tab, - setTab, -}: { - tab: string - setTab: React.Dispatch> -}) { - return ( - - - - - ) -} - function Tabs({ tab, setTab }: { tab: string; setTab: (tab: string) => void }) { const font = useFont() return ( - + { + if (!el) return + el.focus() + el.setSelectionRange(el.value.length, el.value.length) + }, []) + return ( diff --git a/packages/otfjs-ui/src/routes/index.tsx b/packages/otfjs-ui/src/routes/index.tsx index 1b0af1e..edf8e12 100644 --- a/packages/otfjs-ui/src/routes/index.tsx +++ b/packages/otfjs-ui/src/routes/index.tsx @@ -1,7 +1,7 @@ import { createFileRoute, useRouterState } from '@tanstack/react-router' +import { FontList } from '../components/font-list/font-list' import { FontView } from '../components/font-view/font-view' -import { NoFontView } from '../components/no-font-view/no-font-view' import { getFontById } from '../utils/fetch-font' export const Route = createFileRoute('/')({ @@ -17,5 +17,5 @@ function Index() { if (font) return } - return + return }